/************************************************************************************** * Input: PB0 - Data_out vom Thermometer * Output: UART - 115.200 bps * *------------------------------------------------------------------------------------- * Beschreibung: * * * *------------------------------------------------------------------------------------- * * Datum: 10/03/2011 **************************************************************************************/ #define F_CPU 18432000UL //Takt in Hertz #include //Beinhaltet die Register #include //Beinhaltet Verzögerungsroutinen #include unsigned int counter,i,a,flanken_index,bit[200]; char toggle,value,pre_value,overflow; unsigned char buffer[10]; //für Umrechnung itoa #define myBRR0 9 //115200 bps @ 18.432MHz void initT1(void) //Timer1 Initialisierung { TCCR1B = (1<clk/8 -> 434ns TIMSK1 = (1<> 8); UBRR0L = (unsigned char)myBRR0; UCSR0B = (1< 2200) ) { pre_value=0; //Reset für nächstes Bit=0. Nur relevant falls ein kurzer Pegel vereinzelt eintrifft - kann evtl. weg weil dann sowieso Fehler bit[a]=1; //überschreibt die timer-Werte a++; //Bitzähler++ } else if ( (bit[i] < 1500) && (bit[i] > 1000) ) { if (pre_value==1) //wenn letzer Pegel auch kurz war, dann ist Bit=0 { pre_value=0; //Reset für nächstes Bit=0 bit[a]=0; //überschreibt die timer-Werte a++; //Bitzähler++ } else //dies ist der erste kurze Pegel von Bit=0, der nächste muss auch kurz sein { pre_value=1; } }//end else if }//end for } int main() { sei(); //Interrupt generell zulassen initT1(); //Timer initialisieren uart_init(); //UART initialisieren enter(); //CR & LF while(1) //Endlosschleife { reset_values(); while(flanken_index<200) uart_send_string(""); //warten bis 200 Flanken abgefragt. Anders bleibt der Controller hier hängen.. ??? decrypt(); //Biphase-Mark-Code entschlüsseln for (int i=0;i<90;i++) //Ausgabe der Bits, zusammengefasst für Lesbarkeit { uart_send_string(itoa(bit[i],buffer,10)); // Lücken setzen für Lesbarkeit if (((i==3)|(i==7)|(i==8)|(i==12)|(i==16)|(i==17)|(i==21)|(i==25)|(i==26)|(i==30)|(i==31)|(i==34)|(i==35)|(i==39)|(i==43)|(i==44)|(i==48)|(i==51)|(i==52)|(i==53)|(i==57)|(i==61)|(i==62)|(i==66)|(i==70)|(i==71)|(i==75)|(i==79)|(i==83)|(i==87)|(i==88))) { uart_send_string(" "); //kleine Lücke } if (((a==8)|(a==17)|(a==26)|(a==35)|(a==44)|(a==53)|(a==61)|(a==71)) ) //große Lücke { uart_send_string(" "); } } enter(); //CR & LF _delay_ms(2000); //warten, bis andere beiden Pakete gesendet, es soll nur das erste Paket gelesen werden } // end while(1) } //end main