#include #include #include //uart #define MAX_BUFF 64 // #define PORT_TxD PORTA #define PIN_TxD PA7 #define DDR_TxD DDRA volatile uint8_t buffer[MAX_BUFF]; volatile uint8_t buffer_anfang; volatile uint8_t buffer_ende; volatile uint8_t bit_counter; volatile uint16_t U_measure_in,U_measure_out, I_measure; volatile uint16_t sec; uint8_t put_char(uint8_t c) { if(((buffer_ende+1)==buffer_anfang)||((buffer_anfang==0)&&(buffer_ende==(MAX_BUFF-1)))) return 0; buffer_ende++; if (buffer_ende==(MAX_BUFF)) buffer_ende=0; buffer[buffer_ende]=c; return 1; } ISR(ADC_vect) { static uint8_t bit; static uint16_t c; ADMUX = 0b10000000; // Kanal waehlen U_measure_in = ADC; // ADCW muss einmal gelesen werden, ADMUX = 0b10000001; // Kanal waehlen U_measure_out = ADC; // ADCW muss einmal gelesen werden, ADMUX = 0b10001000; I_measure = ADC; if(bit) PORT_TxD &= ~(1<< PIN_TxD); //TXD else PORT_TxD |= 1<< PIN_TxD; // PORTA^= 1<>1; if(bit_counter<=1) bit=1; } else { if(buffer_anfang!=buffer_ende) { bit_counter=10; bit=0; buffer_anfang++; if (buffer_anfang==(MAX_BUFF)) buffer_anfang=0; } } /* I_measure = ADC; c++; if(c==9600) { c=0; sec++; }*/ } uint8_t uart_ready(void) { return ((buffer_ende==buffer_anfang)&&(!bit_counter)); } void init_uart(void) { cli(); U_measure_in = 0; U_measure_out = 0; I_measure = 0; //ADMUX = (1<