Microcontrolador UART - actuando bizzarely

0

Estoy usando ATMEGA328P-PU y Pololu PGM03A (programador de hardware USB). Tenía un código muy simple que enviaba un valor de 8 bits a mi computadora:

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 8000000UL
#define BAUD  9600

int main( void ) 
{
    // BAUD RATE (bits per second)
    UBRR0L = ( ( F_CPU / 8 / BAUD ) - 1 ); // 01100111

    // CONFIGURATION REGISTERS
    UCSR0B = 0b00001000; // enable transmitter (TXEN0)
    UCSR0C = 0b00000110; // set data frame size (8-bit)

    while( 1 )
    {
        UDR0 = 0b11110000;
        _delay_ms(20);
    }

    return 0;
}

Puedo leer los datos con el siguiente comando:

xxd -c 2 -b /dev/ttyACM2

De vez en cuando sucede algo muy extraño: sin ningún cambio en el código, de repente aparece ceros:

00019d40: 00000000 00000000  ..
00019d42: 00000000 00000000  ..
00019d44: 00000000 00000000  ..
00019d46: 00000000 00000000  ..
00019d48: 00000000 00000000  ..
00019d4a: 00000000 00000000  ..
00019d4c: 00000000 00000000  ..
00019d4e: 00000000 00000000  ..
00019d50: 00000000 00000000  ..
00019d52: 00000000 00000000  ..
00019d54: 00000000 00000000  ..
00019d56: 00000000 00000000  ..
00019d58: 00000000 00000000  ..
00019d5a: 00000000 00000000  ..
00019d5c: 00000000 00000000  ..
00019d5e: 00000000 00000000  ..
00019d60: 00000000 00000000  ..
00019d62: 00000000 00000000  ..
00019d64: 00000000 00000000  ..
00019d66: 00000000 00000000  ..
00019d68: 00000000 00000000  ..
00019d6a: 00000000 00000000  ..
00019d6c: 00000000 00000000  ..
00019d6e: 00000000 00000000  ..
00019d70: 00000000 00000000  ..
00019d72: 00000000 00000000  ..
00019d74: 00000000 00000000  ..

Pero debería haber 1111000 . Me di cuenta de que:

  • Esto sucede después de reiniciar
  • Los puertos USB de conmutación no tienen efecto
  • La conmutación del microcontrolador produce el mismo problema. Incluso cuando intenté escribir un código simple que simplemente hace que la luz parpadee hacia un microcontrolador en blanco, puedo ver el parpadeo del LED, pero todavía tengo 00000000 en el puerto serie, pero no debería haber comunicación alguna.
  • Normalmente, los datos se envían a una velocidad bastante lenta (cuando se envían los datos correctos), pero ahora la salida es muy rápida (cuando se envía la 00000000)

¿Algún consejo sobre lo que está pasando? Gracias!

    
pregunta K666

1 respuesta

1

El problema no fue con el código, sino con el hecho de que la velocidad BAUD del puerto serie en mi computadora era diferente a la del controlador. Resolví el problema ejecutando el siguiente comando:

sudo stty -F /dev/ttyACM2 9600 raw -echo
    
respondido por el K666

Lea otras preguntas en las etiquetas