// IR_BT Bluetooth - Infrarot Interface // UART Signale per Infrarot senden und Funksteckdosen steuern // UART Baud: 19200 // ATmega8, 8MHz // AVR Studio, Optimierungsgrad: O2 // erstellt am 7.04.2011 // www.alex-handfest.de #include #include #include #include "uart.h" //UART empfangen extern volatile char uart_cr; extern volatile char uart_recv_buf[20]; unsigned char i = 0; //IR senden unsigned int puls_a = 0; unsigned int puls_b = 0; unsigned int pause_0bit = 0; unsigned int pause_1bit = 0; unsigned int pause_start = 0; unsigned int pause_ende = 0; unsigned int pause_sync = 0; unsigned char senden = 0; unsigned char b = 0; unsigned int send_count = 0; char send_buf[50] = {'\0'}; //Funkstecksdosen //unsigned char funk = 0; unsigned char timer2_count = 0; int main(void) { // IR Senden // Timer0 init //TCCR0 = (0< 0,000032s = 32us // 38kHz Träger Frequenz // Timer1 init TCCR1A = (1< 0,032768s = 33ms // Ausgänge für Funksteckdosen DDRC = 0xff; // PortC: 6 Ausgänge PORTC = 0xff; // alle Pins auf high DDRD |= (1 << DDD2) | (1 << DDD3); // PortD: 2 Ausgänge PORTD |= (1 << PD2) | (1 << PD3); // Pin 2 & 3 auf high // Initialisierung des UART uart_init(); // Globale Interrupts einschalten sei(); uart_print("an"); while(1){ //UART empfangen und auswerten: if (uart_cr == 1){ //test //if (uart_recv_buf[0] == 'x'){ // uart_print("da"); //} //Denon AVR Receiver if (uart_recv_buf[0] == '1' && uart_recv_buf[1] == '9'){ uart_print("Denon"); puls_a = 10; //Puls 310us / 32µs = 9,7 puls_b = 10; //Puls 310us / 32µs = 9,7 pause_0bit = 33; //Pause ( 745+310) / 32µs = 32,9 pause_1bit = 65; //Pause (1780+310) / 32µs = 65,3 pause_sync = 2000; //Pause (65ms+310) / 32µs = 2040,9 pause_ende = 2000; //Pause (65ms+310) / 32µs = 2040,9 send_buf[0] = '0'; send_buf[1] = '1'; send_buf[2] = '0'; send_buf[3] = '0'; send_buf[4] = '0'; send_buf[5] = uart_recv_buf[2]; send_buf[6] = uart_recv_buf[3]; send_buf[7] = uart_recv_buf[4]; send_buf[8] = uart_recv_buf[5]; send_buf[9] = uart_recv_buf[6]; send_buf[10] = uart_recv_buf[7]; send_buf[11] = uart_recv_buf[8]; send_buf[12] = uart_recv_buf[9]; send_buf[13] = '0'; send_buf[14] = '0'; send_buf[15] = 'p'; send_buf[16] = '0'; send_buf[17] = '1'; send_buf[18] = '0'; send_buf[19] = '0'; send_buf[20] = '0'; send_buf[21] = uart_recv_buf[10]; send_buf[22] = uart_recv_buf[11]; send_buf[23] = uart_recv_buf[12]; send_buf[24] = uart_recv_buf[13]; send_buf[25] = uart_recv_buf[14]; send_buf[26] = uart_recv_buf[15]; send_buf[27] = uart_recv_buf[16]; send_buf[28] = uart_recv_buf[17]; send_buf[29] = '1'; send_buf[30] = '1'; send_buf[31] = 'p'; send_buf[32] = '0'; send_buf[33] = '1'; send_buf[34] = '0'; send_buf[35] = '0'; send_buf[36] = '0'; send_buf[37] = uart_recv_buf[2]; send_buf[38] = uart_recv_buf[3]; send_buf[39] = uart_recv_buf[4]; send_buf[40] = uart_recv_buf[5]; send_buf[41] = uart_recv_buf[6]; send_buf[42] = uart_recv_buf[7]; send_buf[43] = uart_recv_buf[8]; send_buf[44] = uart_recv_buf[9]; send_buf[45] = '0'; send_buf[46] = '0'; send_buf[47] = 'e'; send_buf[48] = '\0'; for(i = 0; i<=20; i++) uart_recv_buf[i]='\0'; uart_cr = 0; senden = 1; TCCR0 = (1<= 1){ send_count++; if (send_buf[b] == 's'){ if (send_count <= puls_a) DDRB |= (1 << PB1); if (send_count > puls_a) DDRB &= ~(1 << PB1); if (send_count == pause_start){ send_count = 0; b++; } } else if (send_count <= puls_b){ DDRB |= (1 << PB1); //Einschalten der 38 kHz - Frequenz } else if (send_count > puls_b){ DDRB &= ~(1 << PB1); //Ausschalten der 38 kHz - Frequenz if (send_buf[b] == '0'){ if (send_count == pause_0bit){ send_count = 0; b++; } } if (send_buf[b] == '1'){ if (send_count == pause_1bit){ send_count = 0; b++; } } if (send_buf[b] == 'p'){ if (send_count == pause_sync){ send_count = 0; b++; } } if (send_buf[b] == 'e'){ //e = Ende if (send_count == pause_ende){ send_count = 0; b = 0; //uart_cr = 0; senden--; } } } else if (send_count == 10000){ send_count = 0; b++; } } if (senden == 0){ DDRB &= ~(1<