Ich habe diese ATMega328PB- Schaltung gebaut. Es läuft mit 3,3 V von einer 1,5-V-Batterie mit Booster und 8 MHz von einem externen Resonator ( CSTCE8M00G52A-R0 ).
Mit USBTinyISP habe ich Sicherungen gesetzt: Low-FF (für 8MHz), High-D8 (Boot Reset Vector Enabled), Ext-FD.
Mit VisualStudio und dem vMicro Plug-In habe ich ein Programm für UNO kompiliert. vMicro hat eine HEX-Datei meines Programms MIT einem Bootloader erstellt, den ich über ISP hochgeladen habe, und es läuft gut (LED blinken).
Mein Endziel ist es, einen angepassten 8-MHz-Bootloader zu erstellen, aber als Zwischenschritte versuche ich, mit FT231X FTDI ein Lebenszeichen über die serielle Schnittstelle zu erhalten und dann eine Skizze darüber hochzuladen.
Ich habe den 5-V-Jumper am FT231X durchtrennt und stattdessen den 3,3-V-Jumper angeschlossen. Dann verbunden (ohne Batterie):
ATmega328 FT321X
--------- ------
Vcc Vcc
GND GND
GND CTS
RST DTR (over 0.1uF)
RxD TX
TxD RX
Da das Standard-UBRR-Register des UNO-Bootloaders auf 16 MHz eingestellt ist, initialisiere ich es manuell und versuche, Daten über die serielle Schnittstelle zu übertragen.
#define myubbr (8000000/16/9600-1)
void setup()
{
pinMode(6, OUTPUT);
// Init serial
UBRR0H = (unsigned char)(myubbr >> 8);
UBRR0L = (unsigned char)myubbr;
UCSR0A = 0;//Disable U2X mode
UCSR0B = (1 << TXEN0);//Enable transmitter
UCSR0C = (3 << UCSZ00);//N81
}
void loop()
{
digitalWrite(6, HIGH);
delay(100);
digitalWrite(6, LOW);
delay(100);
char * str = "Hello World";
while (*str) {
while (!(UCSR0A & (1 << UDRE0)));
UDR0 = *str++; //send the data
}
}
Auf dem PC führe ich aus: avrdude -v -p m328p -c arduino -PCOM8 -b 9600 Avrdude erkennt den richtigen COM-Port, gibt aber Folgendes aus:
avrdude: stk500_getsync(): nicht synchron: resp=0x00
Die RX- und TX-LEDs am FT231X blinken nie.
Ich weiß nicht einmal, ob das Problem HW oder SW ist. Was mache ich falsch. Was kann ich noch versuchen?
Beginnen Sie in einem solchen Fall mit einem funktionierenden Setup und arbeiten Sie sich dann Schritt für Schritt zu Ihrem endgültigen Setup vor. Wie:
Wenn der Schritt, der Dinge zum Schnabel bringt, immer noch zu groß ist, teilen Sie ihn in kleinere Schritte auf. Teile und herrsche! Dies ist die gleiche Technik, die ich verwende, um herauszufinden, warum ein Compiler bei einer Anwendung mit 30.000 Zeilen abstürzt. Dauert etwas, aber am Ende wird man es schaffen.
Es funktioniert. Es war letztlich eine Kombination aus Umschalten zwischen TX und RX und Nutzung der halben Baudrate des Bootloaders auf dem PC. Also habe ich zuerst geladen: setup {Serial.begin(9600); aufrechtzuerhalten. Schleife {Serial.write ("Hallo"); }. hfuse=D9, Arduino Serial Monitor mit Baudrate 4800 geöffnet und endlich Ausdrucke bekommen. Dann habe ich 115200 Baud mit 57600 auf dem Monitor sowohl in TX als auch in RX mit einer Lese- / Schreibschleife überprüft. Dann habe ich einen UNO-Bootloader gebrannt (Standard-Baudrate 115200) und uno.upload.speed=57600 in boards.txt gesetzt, hfuse=D8 gesetzt, um den Bootloader auszuführen, und jetzt kann ich Programme über die serielle Schnittstelle hochladen.
Chris Stratton