problema de comunicación UART

1

Estoy tratando de enviar algo desde una atmega a mi PC.

La configuración es: Ubuntu 14.04, atmega644P-20PU, USBASP v2, TTL a USB pl2303

Primero intenté escribir el código en C y usé este código y luego este one y obtuve el mismo resultado: ' ' o caracteres aleatorios (en minicom o pantalla )

Luego abandoné la C y cargué un sencillo programa Arduino:

void setup()
{
   Serial.begin(9600);
}
void loop()
{
   delay(500);
   Serial.write('t');
}

(cuando ejecuto arduino, puse un cristal de 16 MHz. En otros casos, utilicé uno de 20 MHz. También configuré F_CPU de manera acorde en el código).

En todos los casos, el LED R (recibir) del pl2303 está parpadeando en los momentos correctos (según la demora establecida en el código).

También usé CuteCom para ver lo que obtengo del puerto serie y en lugar de ' ', dependiendo del código utilizado obtengo ""%code%x80%code%x00%code%x80"x00%code%x80%code%x80" (para el código Arduino) o en otros casos %code% .

Yo uso RX0 y TX0 (pin 14 y 15). RX0 conectado a TX de pl2303 y RX de pl2303 a TX0 de mcu.

También acorté RX y TX de pl2303 e intenté enviar datos a través de él y recibí lo que envié.

La velocidad de transmisión de pl2303 es 9600

  

$ stty -F / dev / ttyUSB1

     

velocidad 9600 baudios; línea = 0;

     

min = 60; tiempo = 1;

     

ignbrk -brkint -icrnl -imaxbel

     

-opost -onlcr

     

-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

En todos los casos usé 8N1.

Espero haber sido lo suficientemente específico y coherente.

(normalmente intento encontrarme respuestas y soluciones, pero ahora estoy perdido)

    
pregunta Virgil Litan

2 respuestas

3

't' se ve como 000101110 en la línea 0x80 como 000000001 y 0x00 como 000000000 (incluido el bit de inicio y el ignorar el bit de parada)  es casi seguro que la velocidad en baudios es demasiado rápida en el extremo receptor.

dado que estás viendo 0 ceros y un 1, es probable que se haya configurado 8 veces demasiado rápido, así que prueba 1200 baudios en cutecom y busca una posible causa para que el divisor de velocidad en baudios en el arduino se configure 8 veces demasiado alto.

    
respondido por el Jasen
1

Como se mencionó anteriormente, tiene un fusible CKDIV8 aún programado en fusibles.

Puede deshacerse de él temporalmente configurando 1x prascaler en software

CLKPR = (1 << CLKPCE); // Enable change of CLKPS bits
CLKPR = 0x00; // Set prescaler to 1

O simplemente configure los fusibles correctos, con la configuración de CKDIV8 y full swing crystal oscillator CKSEL desactivados.

Esta es mi configuración para mega 328p:

    
respondido por el jnk0le

Lea otras preguntas en las etiquetas