FTDI scheint ein beliebtes Forumsthema zu sein, aber ich kann anscheinend keine Antwort auf ein verwirrendes Problem finden, das ich habe. Ich werde versuchen, so viele Details wie möglich zu geben, da ich das Problem nicht eingrenzen kann.
Ich verwende einen ATmega328-PU (das billigere Problemkind für ArduinoISP-Benutzer) mit einem FTDI 232-RL Breakout Board. Ich konnte den Arduino-Bootloader problemlos mit dem Breakout-Board brennen und die von mir verwendete Skizze laden.
Jetzt versuche ich, den seriellen FTDI-COM-Port von meinem PC als Schnittstelle mit dem 328 zu verwenden. Die einzigen Pins, die ich vom Breakout-Board zu meinem Board verlege, sind die TX-, RX- und GND-Pins. Ich verwende eine Baudrate von meiner seriellen Schnittstelle von 115200.
Symptome: Die RX-Anzeige blinkt ständig, sodass der PC viele glückliche Bits erhält. Die TX-Anzeige blinkt etwa 1 Sekunde lang und erlischt dann. Keine glücklichen Bits von FTDI zu ATmega328.
Ich habe keine Reset-Taste an meiner 328-Schaltung, nur einen Widerstand gegen +5 V. Ich habe einen externen 16-MHz-Takt in meiner Schaltung. Ich habe den Setup-Code meiner Skizze als zusätzliche Referenz beigefügt.
Nun die Fragen:
1) Muss ich irgendetwas mit den CTS- und DTR-Pins machen, die vom Breakout-Board kommen?
2) Gibt es noch eine interne Uhr auf dem ATmega328, die mich vermasselt (auch nach dem Bootloader? Wenn ja, wie würde ich sie deaktivieren?
3) Braucht es eine Reset-Taste in meiner Schaltung, wenn die Skizze bereits geladen ist?
Hoffentlich kann jemand etwas Licht in mein Problem bringen. Sehr geschätzt!
Hier ist der Setup-Code (nach dem Deklarieren von Pins auf 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;
}
Erstens,
Sind Sie sicher, dass der FTDI-TX-Pin mit dem RX-Pin des Arduino und der RX-FTDI-Pin mit dem TX-Pin des Arduino verbunden ist?
Bei etwa 50 % der Prototypen, die ich gesehen habe, gibt es ein solches Problem. Daher ist es das Erste, was zu überprüfen ist.
Brettbiss
Brettbiss
justieren
Jim Paris
Chris Stratton
Sean Watson