From 083b95b61d1a3a49d4d313c3f7729258725210a4 Mon Sep 17 00:00:00 2001 From: jakegoodwin Date: Mon, 16 Jan 2023 21:01:04 -0800 Subject: [PATCH] Updated with info on the crystal and timing issues.w --- README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fbc2d71..ddbdaa8 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ Over time, I'm planning to add support for multiple AVR MCUs, however that may end up requiring more memory, so extensive of use of define macros will likely end up being the end result. + ## Features: - Multiple Baud Rates: 300, 600, 1200, 2400, 9600 ... @@ -18,6 +19,7 @@ likely end up being the end result. - Hardware abstraction API - No Interrupt service routines required. - BSD-3 Licensing, aka you can use this for whatevery you want pretty much. +- Runtime configuration of serial settings. @@ -49,6 +51,10 @@ void echo_char(char* cmd) { } int main() { + usart0_init(); + serial0_enable_parity_bit(2); //odd parity + sei(); //enable interrupts, not needed right now. + while(1) { echo_char(); } @@ -62,5 +68,20 @@ int main() { It's required to set the fuses in the chip for 8Mhz, otherwise a baud rate of 9600 will result in errors at a 7% rate. -Another is that I need to design a standard naming scheme. +### Internal Crystal +The internal crystal oscillator can have up too 10% variation. This doesn't +seem like a lot, but it makes a huge differnce. + +for one of the Atmega 328p MCUs I tested it woul return garbage data to a +a serial terminal at 8-N-1 4800 baud. + +when I set the usb to serial adapter too 7-N-1 I would stop having issues +suddenly. + +going back to 8-N-1 on the usb to serial adapter and then changing it's baud +rate too 4825 totally fixed the issue. This told me that the crystal that +the 328p was clocking off of was faster than it should be. + +TLDR; You should really use a decent external clock for async serial otherwise +you are going to have a bad time.