Skip to content
Snippets Groups Projects
Commit 7b56a163 authored by Erik Strand's avatar Erik Strand
Browse files

Make the midi test work

parent fa9bc9b1
No related branches found
No related tags found
No related merge requests found
......@@ -29,6 +29,7 @@
#define pin_test(pins,pin) (pins & pin) // test for port pin
#define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set
#define bit_delay_time 8.5 // bit delay for 115200 with overhead
//#define bit_delay_time 31.82 // bit delay for 31250 with overhead
#define bit_delay() _delay_us(bit_delay_time) // RS232 bit delay
#define half_bit_delay() _delay_us(bit_delay_time/2) // RS232 half bit delay
#define char_delay() _delay_ms(10) // char delay
......@@ -40,84 +41,65 @@
#define serial_pin_out (1 << PA1)
#define led_pin (1 << PB2)
#define input_pin (1 << PA5)
void put_char(volatile unsigned char *port, unsigned char pin, char txchar) {
//
// send character in txchar on port pin
// assumes line driver (inverts bits)
//
// start bit
//
clear(*port,pin);
bit_delay();
//
// unrolled loop to write data bits
//
if bit_test(txchar,0)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,1)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,2)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,3)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,4)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,5)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,6)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,7)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
//
// stop bit
//
set(*port,pin);
bit_delay();
//
// char delay
//
bit_delay();
}
void put_string(volatile unsigned char *port, unsigned char pin, char *str) {
//
// print a null-terminated string
//
static int index;
index = 0;
do {
put_char(port, pin, str[index]);
++index;
} while (str[index] != 0);
}
#define input_pin (1 << PA5)
// send character in txchar on port pin
// assumes line driver (inverts bits)
//
// start bit
clear(*port,pin);
bit_delay();
// unrolled loop to write data bits
if bit_test(txchar,0)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,1)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,2)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,3)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,4)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,5)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,6)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
if bit_test(txchar,7)
set(*port,pin);
else
clear(*port,pin);
bit_delay();
// stop bit
set(*port,pin);
bit_delay();
// char delay
bit_delay();
}
int main(void) {
// Set the clock prescaler to 1.
......@@ -141,7 +123,7 @@ int main(void) {
// If it's been 10ms, reset the timer and increment count.
if (TCNT0 >= 200) {
TCNT0 = 0;
++count
++count;
// When count reaches 100, turn the LED on and send a note on command.
if (count == 100) {
......@@ -152,9 +134,11 @@ int main(void) {
}
// When count reaches 200, turn the LED off and send a note off command.
else if (++count == 200) {
else if (count == 200) {
PORTB &= ~led_pin;
put_char(&serial_port, serial_pin_out, 144); // note off
put_char(&serial_port, serial_pin_out, 128); // note off
put_char(&serial_port, serial_pin_out, 70); // note (A4)
put_char(&serial_port, serial_pin_out, 100); // velocity
count = 0;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment