FTDI parece ser un tema popular en los foros, pero parece que no puedo encontrar una respuesta a un problema confuso que tengo. Trataré de dar tantos detalles como pueda, ya que parece que no puedo reducir el problema.
Estoy usando un ATmega328-PU (el niño problemático más económico para los usuarios de ArduinoISP) con una placa de conexión FTDI 232-RL. Pude grabar el cargador de arranque Arduino usando la placa de conexión sin problemas, así como cargar el boceto que estoy usando.
Ahora, estoy tratando de usar el puerto de comunicación serial FTDI de mi PC para interactuar con el 328. Los únicos pines que estoy ejecutando desde la placa de conexión a mi placa son los pines TX, RX y GND. Estoy usando una tasa de baudios de mi puerto serie de 115200.
Síntomas: el indicador RX parpadea de manera constante, por lo que recibe muchos bits felices de la PC. El indicador 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 a +5V. Tengo un reloj externo de 16 MHz 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 provenientes de la placa de conexiones?
2) ¿Todavía 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 boceto ya está cargado?
A ver si alguien puede arrojar algo de luz sobre mi problema. ¡Muy apreciado!
Aquí está el código de configuración (después de declarar 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;
}
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 lo primero que hay que comprobar.
mordedura de tabla
mordedura de tabla
justamente
Jim París
chris stratton
sean watson