Comunicación serie utilizando ATMega128L

0

Hice una comunicación simple usando atmega128. ¿Es diferente la sintaxis para UART0 entre atmega128 y atmega8535? Porque cuando usé el comando "printf" y "putchar" en atmega128, no funcionó, pero en atmega8535 funcionó

    
pregunta pras

2 respuestas

2

Suponiendo que ha cargado el registro UBRR0L y UBRR0H con el valor adecuado, ha utilizado el mismo compilador para compilar atmega128 y atmega8535, y no hay ningún problema con el hardware que se utiliza, intente verificar la comunicación en serie con registro directo operación de escritura. Intenta transmitir un solo personaje con éxito. como abajo

while(!(UCSR1A & (1 << UDRE1)));
UDR1 = 'A'; // it could be any character 

si el código anterior funciona bien, verifique los códigos printf y putchar en su biblioteca del compilador, ¡y descubra cómo se modifican esos códigos para escribir caracteres en el puerto serie! Si es necesario, modifique el código printf y putchar para que se ajuste a atmega128. ¡Asegúrese de que mientras lo modifica mantiene el código original más seguro!

    
respondido por el Basavaraju B V
1

Como señaló Basavaraju, intente que sea sencillo para las pruebas iniciales.

Algunos problemas potenciales generales que vienen a la mente:

  • La frecuencia del reloj y el cálculo de UBRR no coinciden con la velocidad en baudios deseada
    • Verifique los fusibles (fuente del reloj)
    • comprobar cristal
    • Comprobar la inicialización de UART
  • La salida estándar no se ha asociado con su función "putchar"
    • static FILE mystdout = FDEV_SETUP_STREAM( uart_putchar, NULL, _FDEV_SETUP_WRITE );
      donde uart_putchar coincide con int uart_putchar(char c, FILE *stream); , que es su implementación para enviar un carácter.
  • ATMEGA128 tiene un fusible de compatibilidad que deshabilita UART1 si está configurado (predeterminado).
    • No debería ser un problema ya que dices que estás usando UART0, de lo contrario, desactiva el fusible.
  • El problema podría estar en el lado del receptor
    • ¿Coinciden las configuraciones de UART?
  • El problema podría estar relacionado con el hardware
    • Verifique el cableado, PCB, etc.
respondido por el Rev1.0

Lea otras preguntas en las etiquetas