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 @@ ...@@ -29,6 +29,7 @@
#define pin_test(pins,pin) (pins & pin) // test for port pin #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_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 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 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 half_bit_delay() _delay_us(bit_delay_time/2) // RS232 half bit delay
#define char_delay() _delay_ms(10) // char delay #define char_delay() _delay_ms(10) // char delay
...@@ -40,20 +41,16 @@ ...@@ -40,20 +41,16 @@
#define serial_pin_out (1 << PA1) #define serial_pin_out (1 << PA1)
#define led_pin (1 << PB2) #define led_pin (1 << PB2)
#define input_pin (1 << PA5)
void put_char(volatile unsigned char *port, unsigned char pin, char txchar) { void put_char(volatile unsigned char *port, unsigned char pin, char txchar) {
//
// send character in txchar on port pin // send character in txchar on port pin
// assumes line driver (inverts bits) // assumes line driver (inverts bits)
// //
// start bit // start bit
//
clear(*port,pin); clear(*port,pin);
bit_delay(); bit_delay();
//
// unrolled loop to write data bits // unrolled loop to write data bits
//
if bit_test(txchar,0) if bit_test(txchar,0)
set(*port,pin); set(*port,pin);
else else
...@@ -94,30 +91,15 @@ void put_char(volatile unsigned char *port, unsigned char pin, char txchar) { ...@@ -94,30 +91,15 @@ void put_char(volatile unsigned char *port, unsigned char pin, char txchar) {
else else
clear(*port,pin); clear(*port,pin);
bit_delay(); bit_delay();
//
// stop bit // stop bit
//
set(*port,pin); set(*port,pin);
bit_delay(); bit_delay();
//
// char delay // char delay
//
bit_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)
int main(void) { int main(void) {
// Set the clock prescaler to 1. // Set the clock prescaler to 1.
...@@ -141,7 +123,7 @@ int main(void) { ...@@ -141,7 +123,7 @@ int main(void) {
// If it's been 10ms, reset the timer and increment count. // If it's been 10ms, reset the timer and increment count.
if (TCNT0 >= 200) { if (TCNT0 >= 200) {
TCNT0 = 0; TCNT0 = 0;
++count ++count;
// When count reaches 100, turn the LED on and send a note on command. // When count reaches 100, turn the LED on and send a note on command.
if (count == 100) { if (count == 100) {
...@@ -152,9 +134,11 @@ int main(void) { ...@@ -152,9 +134,11 @@ int main(void) {
} }
// When count reaches 200, turn the LED off and send a note off command. // 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; 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; count = 0;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment