/* * uart_echo.c * * Created: 16.08.2018 17:39:49 * Author : jens */ #include #include #include #define ARDUINO_NANO #ifdef ARDUINO_NANO #define F_CPU (16000000UL) // MHz #else #define F_CPU (18432000UL) // MHz #endif #define USART_BAUDRATE 9600UL #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) #define TIMER_RELOAD (0xFFFF-(F_CPU/1024/4-1)) static uint8_t rx_data; static uint8_t count = 0; volatile uint8_t msgCode = 0; static uint8_t msgData = 0; static uint8_t ledState = 0; static int16_t adc_value[16]; static size_t adc_ch = 0; enum MessageCode { NOP=0, Command, Timer, AdcComplete, Error = 0xFF }; ISR(ADC_vect) { int16_t value_low = (int16_t)ADCL; int16_t value_high = (int16_t)ADCH; ADCSRA |= (1< 1)) { msgCode = AdcComplete; msgData = adc_ch; } adc_value[adc_ch] = value; adc_ch++; if (adc_ch == 16) { adc_ch = 0; } adc_start_conversion(adc_ch); } ISR(USART_RX_vect) { rx_data = UDR0; msgCode = NOP; if (rx_data == ' ') { msgCode = Error; } else if (rx_data >= '0' && rx_data <= '9') { msgCode = Command; msgData = rx_data; } count++; } ISR (TIMER1_OVF_vect) // Timer1 ISR { msgCode = Timer; TCNT1 = TIMER_RELOAD; ledState++; if (ledState == 4) { ledState = 0; } } void uart_init() { // Set baud rate UBRR0L = (uint8_t)BAUD_PRESCALE; UBRR0H = (uint8_t)(BAUD_PRESCALE >> 8); // Enable receiver and transmitter UCSR0B = (1<