Error al enviar datos a un tablero con pantalla LED desde un microcontrolador

2

Tengo una Pantalla LED que tiene un conector RS232 para que podamos conectarlo nuestro sistema. El panel de visualización acepta los datos que escribimos en el hiperminal y los muestra. Por ejemplo, si escribo Hello en el terminal, mostrará Hello .

Ahora tengo un AVR Devlopment Board . He programado la MCU para transmitir Hello con un retraso de 2 seg. He conectado el cable RS232 de la placa de pantalla a la placa de desarrollo AVR. Debería mostrar el mensaje Hello pero no muestra nada. He intentado incluir también <cr><lf> porque cuando presionamos Intro en el hiperminal, solo entonces acepta los datos. Pero todavía no se puede mostrar. ¿Alguna sugerencia donde me falta el punto?

CODE

void serial_Init()
{
UCSRB = (1<<TXEN) | (1<<RXEN);
UCSRC = (1<<UCSZ1)|(1<<UCSZ0)|(1<<URSEL);
UBRRL = 51;

}
void serial_Tx(char *str)
{
for (unsigned int i=0;str[i]!=0;i++)
{
    UDR=str[i];
    while(!(UCSRA&(1<<UDRE)));

}
}

int main()
{
serial_Init();
while(1)
{   

    {

        serial_Tx("HELLO");
        serial_Tx("0x0D");
        serial_Tx("0x0A");
    }

    }

}
    
pregunta Aircraft

2 respuestas

2

Lo primero que se debe verificar es la velocidad en baudios.

Si cree que la velocidad en baudios es correcta, mire la línea serial con un alcance. La PC le proporciona el caso de trabajo conocido, que usted compara con el caso que no funciona.

Esto es solo depuración básica.

    
respondido por el Olin Lathrop
0

Si el código que has publicado es correcto, aquí están los errores:

1) La función void serial_Tx(char *str) acepta char * y la llamas 3 veces con:

    serial_Tx("HELLO");
    serial_Tx("0x0D");
    serial_Tx("0x0A");

en este caso mcu envía estos bytes a través de la línea serie con los números de secuencia (1ra línea):

                            1                   2
seq:      1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
first:    H E L L O 0 x 0 D 0 x 0 A
second:   H E L L O 0d0a

cuando vea el tamaño de (solo mensaje) 13 bytes y no haya ningún cr lf en él. Si la pantalla muestra un mensaje al recibir cr + lf, es normal que no se muestre nada.

En la segunda línea, coloco el mensaje con cr + lf, por lo tanto, el tamaño del mensaje es de 7 bytes.

El código debería ser: serial_Tx("HELLO\r\n");

2) El código de transmisión está en un bucle infinito. Así que mcu nunca deja de enviar datos! Si con este código, conecta su mcu a su PC y abre HYPERTERM observará que su HYPERTERM y uart se bloquearán debido a una inundación.

Entonces el código debería ser:

int main() {
    serial_Init();

    serial_Tx("HELLO\r\n");

    while(1) {  }    
}
    
respondido por el Mert Gülsoy

Lea otras preguntas en las etiquetas