#include #include #include /***** M A K R O S *******************************************************/ #define CLOCK 8000000L //Makro #define BAUD 9600L //Makro #define UBRR_VAL ((CLOCK+BAUD * 8)/(BAUD*16)-1) //Runden #define BAUD_REAL (CLOCK/(16*(UBRR_VAL+1))) //Reale Baudrate #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) //Fehler in Promille #if ((BAUD_ERROR>10)||(BAUD_ERROR<-10)) #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! #endif /***** I N I T S *************************************/ void uart_init(void) { UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF; UCSRB |= (1< Dezimalsystem, itoa (Integer to ASCII) //uart_puts( s ); // da itoa einen Zeiger auf den Beginn von s zurueckgibt verkuerzt auch: uart_puts( itoa( i, s, 10 ) ); } void uart_send_double() { char s[8]; // Pufferspeicher ausreichend groß, evtl. Vorzeichen + width + Endezeichen: float f = -12.345; dtostrf( f, 6, 3, s ); uart_puts( s ); // verkürzt: uart_puts( dtostrf( f, 7, 3, s ) ); } uint16_t adc_read( uint16_t channel ) { uint16_t x; ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); ADCSRA |= (1<