La transmisión (TX) se detiene usando FTDI 232RL con ATmega328-PU

3

FTDI parece ser un tema de foro popular, pero parece que no puedo encontrar una respuesta a un problema de confusión que tengo. Trataré de dar tantos detalles como pueda, ya que parece que no puedo limitar el problema.

Estoy usando un ATmega328-PU (el problema más barato para los usuarios de ArduinoISP) con un FTDI 232-RL Breakout Board. Pude grabar el gestor de arranque Arduino utilizando la tabla de ruptura sin ningún problema, así como cargar el boceto que estoy usando.

Ahora, estoy tratando de usar el puerto de comunicación serie FTDI de mi PC para interactuar con el 328. Los únicos pines que estoy ejecutando desde la placa de ruptura a mi placa son los pines TX, RX y GND. Estoy usando una velocidad en baudios de mi puerto serie de 115200.

Síntomas: el indicador de RX parpadea de forma constante, por lo que recibe muchos bits felices de la PC. El indicador de TX parpadea durante aproximadamente 1 segundo y luego se apaga. No hay bits felices de FTDI a ATmega328.

No tengo un botón de reinicio en mi circuito 328, solo una resistencia de + 5V. Tengo un reloj externo de 16MHz en mi circuito. He adjuntado el código de configuración de mi boceto para referencia adicional.

Ahora, las preguntas:

1) ¿Debo hacer algo con los pines CTS y DTR que vienen de la tabla de ruptura?

2) ¿Hay un reloj interno en el ATmega328 que me está fastidiando (incluso después del cargador de arranque? Si es así, ¿cómo puedo desactivarlo?

3) ¿Es necesario un botón de reinicio en mi circuito si el croquis ya está cargado?

Espero que alguien pueda arrojar algo de luz sobre mi problema. Muy apreciado!

Aquí está el código de configuración (después de declarar los pines en 328):

void setup()   
{               
  DDRB |= (1<<1)  | (1<<2)  | (1<<3) | (1<<5) ; // BLANK, SS, MOSI, SCLK as OUTPUTS
  DDRD |= (1<<3)  | (1<<4) |  (1<<6) | (1<<7) ; // VPRG, XLAT, GSCLK, Debug as OUTPUTS
  DDRC = 255;

  XLAT_Low;
  BLANK_High;
  VPRG_Low;
  Debug_Low;

  //Timer 1 (16bit)
  TCCR1A  = (1<<WGM11) | (0<<WGM10);            // Fast PWM with ICR1 as top
  TCCR1B  = (1<<WGM13) | (1<<WGM12);            // Fast PWM with ICR1 as top
  TCCR1B |= (1<<CS12)  | (1<<CS11) | (1<<CS10); // external clock (T1) on rising egde
  TIMSK1 |= (1<<TOIE1);                         // enable overflow interupt
  ICR1    = Gray_Scale_Depth;                   // Grey scale depth for TLC-PW

  //Timer 0 (8bit)
  TCCR0A  = (1<<WGM01) | (0<<WGM00);            // CTC
  TCCR0A |= (0<<COM0A1) | (1<<COM0A0);          // Toggle on Compare Match
  TCCR0B  = (0<<CS02) | (0<<CS01) | (1<<CS00);  // No Prescaler
  OCR0A   = 0;                                  // f(OCR) = F_CPU/2/Prescaler

  //UART Initialisation
  UCSR0A |= (1<<U2X0);                                 // Double up UART
  UCSR0B |= (1<<RXEN0)  | (1<<TXEN0) | (1<<RXCIE0);    // UART RX, TX und RX Interrupt enable
  UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00)             ;    // Asynchrous 8N1 
  UBRR0H = 0;
  UBRR0L = 1; //Baud Rate 1 MBit   --> 0% Error at 16MHz

  //Enable global interrupts
  sei();

  //Configure SPI  
  SPCR = (1<<SPE)|(1<<MSTR);  
  SPSR = B00000000;   

  ptr=display_buffer;

}
    
pregunta Ryan

1 respuesta

2

En primer lugar,

¿Está seguro de que el pin FTDI TX está conectado al pin RX del Arduino y el pin RX FTDI al pin TX del arduino?

En alrededor del 50% de los prototipos que he visto, hay un problema como ese. Por lo tanto, es la primera cosa para comprobar.

    
respondido por el Blup1980

Lea otras preguntas en las etiquetas