ATmega168: UART 8 bits de datos, sin paridad, 1 bit de parada

0

Según la hoja de datos, estoy configurando el registro UCSR0C de la siguiente manera:

UCSR0C = 0b00000110

Descripción:

Bit   0:   0: TX rising, RX falling
Bit 2-1:  11: character size 8 bit
Bit   3:   0: 1 stop bit
Bit 5-4:  00: no parity
Bit 7-6:  00: asynchronous USART

( enlace página 193)

Aunque configuré el UART para usar modo de datos de 8 bits tengo que configurar mi terminal de comunicación ( picocom ) para usar modo de datos de 7 bits . De lo contrario no obtengo los datos correctos de mi ATmega168. También intenté usar minicom y miniterm.py .

Mi dispositivo de destino con el que quiero comunicarme es un Raspberry Pi . Estoy usando la biblioteca UART de Peter Fleury ( http://homepage.hispeed.ch/peterfleury/group__pfleury__uart.html ).

¿Alguna idea de lo que estoy haciendo mal? ¿Olvidé algo?

    
pregunta arminb

2 respuestas

-1

Resolví el problema usando un oscilador externo. Parece que el oscilador interno es demasiado impreciso para la comunicación UART.

    
respondido por el arminb
1

¿Podría ser que UCSZ02 bit en UCSR0B esté configurado? Esto le daría un tamaño de carácter de 9 bits ... También podría tratarse de una selección de baudios incorrecta, incluidos los casos en los que su MCU no se ejecuta a la velocidad que espera: la velocidad de baudios establecida es sensible a la velocidad del reloj de MCU.

En general, recomendaría usar los operadores | , & y << para configurar los bits de registro: se ve más limpio y mucho más fácil de entender lo que está sucediendo. Por lo tanto, personalmente, reescribiría su asignación de registro como:

UCSR0C = 0
    | (0<<UMSEL01) | (0<<UMSEL00)   // Asynchronous USART
    | (0<<UPM01) | (0<<UPM00)       // Parity Disabled
    | (0<<USBS0)                    // 1 stop bit
    | (1<<UCSZ01) | (1<<UCSZ00)     // 8-bit character size
    | (0<<UCPOL)                    // Rising TX, falling RX
    ;

Pero esto no es lo que preguntaste, y esto es claramente una cuestión de gusto.

    
respondido por el angelatlarge

Lea otras preguntas en las etiquetas