From feaf3666be65e241ad8f9783a605d5fbfc87bb4d Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 30 Mar 2019 11:48:05 +0000 Subject: [PATCH] [UART] - fixed baudrate calculation [Bootloader] - set baudrate top 115200 [HendiCtrl] - set baudrate top 115200 - revised and fixed command interpreter - added new commands: SW_VERSION, SW_IDENTIFIER, DEBUG on/on, Remote enter, Remote exit - oven is switched off on entering / exiting remote git-svn-id: http://moon:8086/svn/projects/HendiControl@173 fda53097-d464-4ada-af97-ba876c37ca34 --- Control/firmware/Bootloader/machine.h | 9 +- Control/firmware/Bootloader/main.c | 2 +- Control/firmware/Bootloader/uart.c | 17 +-- Control/firmware/Bootloader/uart.h | 2 +- Control/firmware/HendiCtrl/machine.h | 9 +- Control/firmware/HendiCtrl/main.c | 198 ++++++++++++++++++++------ Control/firmware/HendiCtrl/uart.c | 17 +-- Control/firmware/HendiCtrl/uart.h | 2 +- 8 files changed, 175 insertions(+), 81 deletions(-) diff --git a/Control/firmware/Bootloader/machine.h b/Control/firmware/Bootloader/machine.h index ff8bfa5..c8f4d0a 100644 --- a/Control/firmware/Bootloader/machine.h +++ b/Control/firmware/Bootloader/machine.h @@ -9,13 +9,6 @@ #ifndef MACHINE_H_ #define MACHINE_H_ -#if ARDUINO_NANO -#define F_CPU (16000000UL) // MHz -#else -#define F_CPU (18432000UL) // MHz -#endif - - - +#define F_CPU (18432000UL) // MHz #endif /* MACHINE_H_ */ \ No newline at end of file diff --git a/Control/firmware/Bootloader/main.c b/Control/firmware/Bootloader/main.c index f20ccd4..2111664 100644 --- a/Control/firmware/Bootloader/main.c +++ b/Control/firmware/Bootloader/main.c @@ -96,7 +96,7 @@ int main(void) { bootloader_enter(); led_bsel(1); - uart_init(9600); + uart_init(115200); uart_puts("Hendi-Control Bootloader v1.2\n"); size_t image_size = 0; uint16_t page_addr = 0xFFFF; diff --git a/Control/firmware/Bootloader/uart.c b/Control/firmware/Bootloader/uart.c index 1ea1313..2da2d89 100644 --- a/Control/firmware/Bootloader/uart.c +++ b/Control/firmware/Bootloader/uart.c @@ -12,14 +12,14 @@ void uart_init(uint32_t baudrate) { - uint16_t prescale8 = UART_PRESCALE(baudrate, 8UL); - uint16_t prescale16 = UART_PRESCALE(baudrate, 16UL); + uint32_t prescale8 = UART_PRESCALE(baudrate, 8UL); + uint32_t prescale16 = UART_PRESCALE(baudrate, 16UL); - uint32_t baud8 = ((prescale8+1) * 8); - uint32_t baud16 = ((prescale16+1) * 16); + uint32_t fcpu8 = (prescale8 * baudrate * 8); + uint32_t fcpu16 = (prescale16 * baudrate * 16); - uint32_t err8 = abs(baudrate - baud8); - uint32_t err16 = abs(baudrate - baud16); + uint32_t err8 = abs(fcpu8 - F_CPU); + uint32_t err16 = abs(fcpu16 - F_CPU); uint16_t prescale = prescale16; if (err8 < err16) @@ -31,8 +31,9 @@ void uart_init(uint32_t baudrate) } // Set baud rate - UBRR0L = (uint8_t)prescale; - UBRR0H = (uint8_t)(prescale >> 8); + uint16_t reg = prescale - 1; + UBRR0L = (uint8_t)reg; + UBRR0H = (uint8_t)(reg >> 8); // Enable receiver and transmitter UCSR0B = (1< 1)) + if (((adc_curr - adc_poti) <= -(int16_t)POTI_HSYTERSE) || ((adc_curr - adc_poti) >= (int16_t)POTI_HSYTERSE)) { if (state == StateNormal) { @@ -206,14 +301,22 @@ int main(void) { case TIMER_GENERAL: { + uint16_t interval = 1000; + uint16_t pulse = 50; + if (state == StateRemote) + { + interval = 500; + pulse = 50; + } + hb_state = !hb_state; if (hb_state) { - timer_start(timer_id, TIMER_SW_DELAY_MS(50)); + timer_start(timer_id, TIMER_SW_DELAY_MS(pulse)); } else { - timer_start(timer_id, TIMER_SW_DELAY_MS(950)); + timer_start(timer_id, TIMER_SW_DELAY_MS((interval-pulse))); } portSet(Led_HB, hb_state); } @@ -221,8 +324,11 @@ int main(void) case TIMER_TIMEOUT: { - PRINT("Timeout!\n"); - state_next = StateError; + if (state == StateRemote) + { + PRINT_DEBUG("Remote timeout!\n"); + state_next = StateError; + } } break; @@ -232,7 +338,7 @@ int main(void) int sw_in = adc_swin > 512; if (sw_in != sw_in_last) { - PRINT ("PwrSwitch_in = %d\n", sw_in); + PRINT_DEBUG ("PwrSwitch_in = %d\n", sw_in); if (sw_in == 0) { if (state == StateError || state == StateRemote) @@ -257,7 +363,7 @@ int main(void) } if (state != state_next) { - PRINT("State change \"%s\" => \"%s\"\n", state_str[state], state_str[state_next]); + PRINT_DEBUG("State change \"%s\" => \"%s\"\n", state_str[state], state_str[state_next]); if (state_next == StateError) { setPower(PowerLow); diff --git a/Control/firmware/HendiCtrl/uart.c b/Control/firmware/HendiCtrl/uart.c index b322e45..3a928db 100644 --- a/Control/firmware/HendiCtrl/uart.c +++ b/Control/firmware/HendiCtrl/uart.c @@ -41,14 +41,14 @@ void uart_init(Fifo *pFifo, uint32_t baudrate) { g_pFifo = pFifo; - uint16_t prescale8 = UART_PRESCALE(baudrate, 8UL); - uint16_t prescale16 = UART_PRESCALE(baudrate, 16UL); + uint32_t prescale8 = UART_PRESCALE(baudrate, 8UL); + uint32_t prescale16 = UART_PRESCALE(baudrate, 16UL); - uint32_t baud8 = ((prescale8+1) * 8); - uint32_t baud16 = ((prescale16+1) * 16); + uint32_t fcpu8 = (prescale8 * baudrate * 8); + uint32_t fcpu16 = (prescale16 * baudrate * 16); - uint32_t err8 = abs(baudrate - baud8); - uint32_t err16 = abs(baudrate - baud16); + uint32_t err8 = abs(fcpu8 - F_CPU); + uint32_t err16 = abs(fcpu16 - F_CPU); uint16_t prescale = prescale16; if (err8 < err16) @@ -60,8 +60,9 @@ void uart_init(Fifo *pFifo, uint32_t baudrate) } // Set baud rate - UBRR0L = (uint8_t)prescale; - UBRR0H = (uint8_t)(prescale >> 8); + uint16_t reg = prescale - 1; + UBRR0L = (uint8_t)reg; + UBRR0H = (uint8_t)(reg >> 8); // Enable receiver and transmitter UCSR0B = (1<