Si tiene suficiente espacio entre caracteres (~ 3 bits de parada adicionales), puede usar el puerto UART de MCU, ya que realmente no hay una diferencia entre un carácter de 8 bits (0x00 a 0x1F) en un UART y un 5 carácter de bits con 4 bits de parada.
De lo contrario, lo mejor sería usar una interrupción de nivel (cambio de pin, etc.) para detectar el borde inicial del bit de inicio, luego configurar un temporizador para interrumpirlo una vez por bit o posiblemente un par de veces para que Puede hacer alguna verificación extra. 45 baudios es realmente lento, por lo tanto, a menos que esté usando más del 95% del tiempo de MCU (o todos sus periféricos), esto no debería causar ningún problema.
El módulo ATART AVR USART admite modos de 5 a 9 bits, por lo que cualquier ATtiny (por ejemplo, ATtiny2313) o ATmega (por ejemplo, ATmega328P) le permitirá hacer esto en hardware, simplificando enormemente su software, ahorrando tiempo.
El divisor de reloj máximo que puede aplicar al UART en un AVR es 2 16 , por lo que si tiene un reloj de 16 MHz, la velocidad más baja a la que se puede ejecutar es de 244 bps sin sistema divisor de reloj Si usa un ATmega, como en un Arduino, el registro de preescala de reloj ( CLKPR
, §8.12.2 en la hoja de datos de Atmega48 / 88/168/328) se puede usar para ralentizar el reloj del sistema hasta 256x en tiempo de ejecución , o simplemente programe el fusible CKDIV8 para establecer el valor predeterminado del registro de preescala en 8.
El verdadero factor determinante de lo que debe usar es qué otra cosa está haciendo además de hablar con el TTY. Si va a conectar esto a una computadora, querrá reservar un UART (o, si solo hay 1) para comunicarse con el PC y hacer un software UART si es necesario (como lo mencionó todo el mundo, esto es casi trivial en 45 bps). Si desea presionar un botón y hacer que el TTY haga algo, usar el único UART para eso estaría bien.