Guten Abend,
Ich programmiere mich zurzeit in denn USART des ATMega328P ein. Und habe
ein Problem. Und zwar wie man unten im Code sehen kann wir über UDR0 =
'H'; ein "H" gesendet. Nur dieses kommt als . im Arduino Serial Monitor
wieder und in HTerm kommt es als kleiner Kasten wieder.
Um die Daten zu Empfangen nutze ich ein USB zu TTL Konverter(PL2303HX).
Baudraten sind richtig eingestellt. Auch in vielen Youtube Videos wie
fast denn gleichen Code haben, also auch über UDR0 = 'XXX'; senden kommt
in dem Terminal das richtige an.
Was mache ich denn falsch?
Jan N. schrieb:> Baudraten sind richtig eingestellt.
Und sendet der ATMega328P auch mit der eingestellten Baudrate?
Mit welchem CPU-Takt läuft dein ATMega328P?
Wie stehen die Fuses von deinem ATMega328P?
Hast du den Diodenblinktest gemacht?
Versuch mal auf dem PC mit 1200Bd zu empfangen.
Lass mal in der Hauptschleife eine LED an mit blinken und prüfe ihre
Frequenz.
1
DDRB=1; // Led an PB0 und GND
2
3
while (1)
4
{
5
UDR0 = '8';
6
_delay_ms(2400);
7
PORTB |= 1;
8
_delay_ms(100);
9
PORTB &= ~1;
10
}
Die LED muss alle 2,5 Sekunden regelmäßig blitzen.
Wenn nicht, dann stimmt F_CPU nicht, oder die Fuse CLK/8 ist falsch
gesetzt oder der Quarz schwingt nicht richtig (falsche Kondensatoren?)
oder die Fuses für die Taktquelle sind falsch eingestellt.
Nachtrag: Manno, Wolfgang war schneller :-)
Hallo,
ich würde eine der vielen Uart Libs mit Fifo verwenden.
U.a. von Peter Dannegger (peda) geschrieben.
Bevor man etwas in das Register UDR0 schreibt, sollte man testen, dass
man das auch darf !
D.h. ober der vorherige Sendevorgang schon beendet ist.
Wie steht im Datenblatt und Infos findet man bei den Register zum Uart0.
Wolfgang schrieb:> Und sendet der ATMega328P auch mit der eingestellten Baudrate?> Mit welchem CPU-Takt läuft dein ATMega328P?> Wie stehen die Fuses von deinem ATMega328P?> Hast du den Diodenblinktest gemacht?>> Versuch mal auf dem PC mit 1200Bd zu empfangen.
Zu Frage 1) Wie kann ich denn sowas überprüfen
Zu Frage 2) Er läuft mit 16 Mhz Quarz.
Zu Frage 3) Fuses?? Ich programmiere ja mein Atmega328p über das Arduino
UNO und dann auf ein Breadboard(RESET an RESET, +5 Volt an + Linie, 0
Volt an - Linie, und RX und TX an die Pins des Atmega328ps.
Zu Frage 4) Wie genau, soll ich diesen Test machen? Mit _delay_ms(500);
und dann Led an und dann wieder aus und dazwischen halt _delay_ms???
Also falls du das so meinst blinkt die LED jede Sekunde 1 mal
5) Ich habe alle durchprobiert es kommen andere Zeichen an hauptsächlich
dieses kleine Rechteck
Stefan U. schrieb:> Die LED muss alle 2,5 Sekunden regelmäßig blitzen.>> Wenn nicht, dann stimmt F_CPU nicht, oder die Fuse CLK/8 ist falsch> gesetzt oder der Quarz schwingt nicht richtig (falsche Kondensatoren?)> oder die Fuses für die Taktquelle sind falsch eingestellt.>> Nachtrag: Manno, Wolfgang war schneller :-)
Diese blink alle 2,5 Sekunden. Kann nicht genau sagen. Da ich das
versucht habe mir der Stuppuhr zu machen. Aber sie blink immer
regelmäsßig.
Er wollte wissen, welche Hardware (Bauteile) du verwendest.
Du nimmst eine Stoppuhr (dein Smartphone) und misst die Zeit für 10
Blinker. Das müssen dann zusammen 25 Sekunden ergeben.
Jedenfalls, wenn die LED wirklich alle 2,5 Sekunden blinkt, dann stimmt
die Taktfrequenz. Was meinst du damit, dass du es nicht genau messen
kannst?
> Bevor man etwas in das Register UDR0 schreibt, sollte man testen,> dass man das auch darf !
Er wartet 2,5 Sekunden nach jeden Zeichen! Das ist wie mehr als
ausreichend. Dieser Test ist in diesem einfachen Programm nicht nötig.
Lass uns mal lieber die Problemursache finden.
Na welche Hardware Du benutzt.
Ist es ein Eigenbau? Dann könnte ein Schaltbild helfen. Du wärst nicht
der Erste, der sich da vertan hat.
Ist ein fertiges Teil, so könntest Du den Namen verraten. Das hilft
beim: "Mach doch folgendes" oder so.
Muss aber nicht sein...
Sebastian S. schrieb:> Na welche Hardware Du benutzt.> Ist es ein Eigenbau? Dann könnte ein Schaltbild helfen. Du wärst nicht> der Erste, der sich da vertan hat.> Ist ein fertiges Teil, so könntest Du den Namen verraten. Das hilft> beim: "Mach doch folgendes" oder so.> Muss aber nicht sein...
Selbst gebaut. Es ist zurzeit nix angeschlossen aus folgende Bauteile:
- Atmega328p(logisch)
- Vcc und GND
- Avcc, AGND, und 100nf an AREF(Ich habe die anderen Bauteile nur von
ein anderen Projekt entfernt)
- Quarz 16 mz an Pin 9 und 10 und dazu noch 22 PF Kondensator(Gegen auf
minus)
Und dann nur noch der Umwandler auf 9Volt Batterie auf 5 Volt(Also
Festspannungsregler, Diode, 100 uf und 10uF Elkos) Werden aber nicht
beansprucht ist nur für die Externe Spannungsversorgung da.
Ich programmiere mein CHip über AVRdude(Arduino UNO board) dann RX, TX,
RESET, 5 Volt und GND an mein Breadboard zur Übertragung.
Du könntest das Kabel zum PC mal vom AVR trennen und dort einfach RxD
mit TxD verbinden. Dann schau nach, ob die Zeichen, die du ins
Terminalprogramm eintippst, als echo zurück kommen.
Wenn das nicht klappt, ist dein serieller Port (bzw USB Adapter) defekt.
Male mal bitte deine seriellen Verbindungen auf oder mache ein Foto.
Ich ahne, dass du deine seriellen Leitungen doppelt belegt hast (durch
den µC des Arduino Uno und deinen einzelnen Chip).
Hallo,
ich habe Deinen Code mal in die IDE kopiert.
#define UDR_Value = ((F_CPU 16 BAUD) - 1)
hier wird zu Recht das = bemeckert.
Nach entfernen compiliert es und sendet brav alle 2,5s eine 8.
PS: ein 'H' konnte es nicht werden, Du sendest ja eine '8'...
Gruß aus Berlin
Michael
Stefan U. schrieb:> Ich ahne, dass du deine seriellen Leitungen doppelt belegt hast (durch> den µC des Arduino Uno und deinen einzelnen Chip).
Also ich programmeire mit dem Arduino Board. Dann schließe ich das Ab
und dann schließe ich denn Apdater an und empfange das Singal damit.
Das UNO board wird nur fürs Programmieren genutzt.
Stefan U. schrieb:> Du könntest das Kabel zum PC mal vom AVR trennen und dort einfach RxD> mit TxD verbinden. Dann schau nach, ob die Zeichen, die du ins> Terminalprogramm eintippst, als echo zurück kommen.>> Wenn das nicht klappt, ist dein serieller Port (bzw USB Adapter) defekt.
Nope. Wenn ich RX und TX nicht "kurzschließe" also die Kontakte
zusammenhalte und dann ins Terminal eine acht eingebe erscheint nur die
ich eingegeben habe. Wenn ich die aber zusammen halte also das die
Kontakte sich berühren. Dann kommt die acht noch mal wieder also so 88
die erste acht habe ich eingeben und die zeit kommt durch Echo zurück
Michael U. schrieb:> #define UDR_Value = ((F_CPU 16 BAUD) - 1)>> hier wird zu Recht das = bemeckert.>> Nach entfernen compiliert es und sendet brav alle 2,5s eine 8.>> PS: ein 'H' konnte es nicht werden, Du sendest ja eine '8'...
"=" das hatte ich danach auch noch verbessert. Aber die acht kommt bei
mir nicht an. Oder gibt es irgendwie was mit Treiber oder so?? Muss man
dafür irgendwas installieren?
Jan N. schrieb:> Nope. Wenn ich RX und TX nicht "kurzschließe" also die Kontakte> zusammenhalte und dann ins Terminal eine acht eingebe erscheint nur die> ich eingegeben habe. Wenn ich die aber zusammen halte also das die> Kontakte sich berühren. Dann kommt die acht noch mal wieder also so 88> die erste acht habe ich eingeben und die zeit kommt durch Echo zurück
deine Ausführungen sind etwas wirr,
aber die erste 8 wird von deinem Terminlaprogramm ausgegeben,
die zweite 8 ist die Antwort die über die kurzgeschlossenen RX/TX zurück
kommt.
Mess mal die Leerlaufspannung am TxD Anschluss deines USB/seriell
Kabels.
Der µC sollte ungefähr mit der gleichen Spannung versorgt werden. Oder
du kümmerst dich um einen geeigneten Pegelwandler.
Stefan U. schrieb:> Mess mal die Leerlaufspannung am TxD Anschluss deines USB/seriell> Kabels.>> Der µC sollte ungefähr mit der gleichen Spannung versorgt werden. Oder> du kümmerst dich um einen geeigneten Pegelwandler.
3,33 Volt wenn ich mein Multimeter an GND des Apdaters und an TXD
anschließe.
Hallo,
Jan N. schrieb:> "=" das hatte ich danach auch noch verbessert. Aber die acht kommt bei> mir nicht an. Oder gibt es irgendwie was mit Treiber oder so?? Muss man> dafür irgendwas installieren?
kann ich jetzt nur mit "keine Ahnung" antworten. Bin zwar kein Freund
der Profilic-USB-Chips, aber da der Echo-Test ja geht sollten die
Treiber ok sein.
TX/RX und GND auch wirklich sauber zum AVR verbunden?
Ich habe Deinen Source direkt in der ArduinoIDE compiliert und auf einem
Arduino Nano (der hat einen CH340 als USB-Chip drauf) geflasht und mit
dem Serial-Monitor der IDE nachgeschaut.
Deine 8-ten kommen aber in TeraTerm auch gut an.
Gruß aus Berlin
Michael
Hallo,
ist ok so.
Logisch, daß zwei verbundene TX keinen Sinn machen, da prügeln sich
höchstens die Ausgangstreiber miteinander.
Mir ging es auch eher um die GND-Verbindung.
Gruß aus Berlin
Michael
Michael U. schrieb:> Mir ging es auch eher um die GND-Verbindung.
Verstehe ich nicht. Gemessen habe ich Schwarze Messnadel an Schwarzes
Kabel und Rote Messspitze an Grünes Kabel.
Walter S. schrieb:> http://www.amazon.de/gp/product/B00R76SCJ6/ref=s9_simh_gw_p147_d0_i1?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=desktop-1&pf_rd_r=10XGF6CKFR5K79JK02AN&pf_rd_t=36701&pf_rd_p=585296347&pf_rd_i=desktop>> der hat 5V, aber komisch dass du 3V misst>> Jan N. schrieb:>> Und wenn ich RX an RX am Atmega328p anschließe und TX an TX dann kommt>> nix>> das ist auch falsch, denn> der Sendeausgang TX muss an einen Empfangseingang RX> und umgekehrt
Ich messe 5 Volt an dem Roten Kabel(Vcc) und 3,33 Volt an dem Grünen
Kabel(TXD)
Das ich denn RX(Weiß) anschluß an denn TX Pin des Atmega anschließen
muss, wahr mir spätenes klar wo ich selber mal im Kopf die schaltung
durchgangen bin. Transmitter an Transmitter Pin ergibt kein Sinn
Transmitter PIn an Empfänger ergab schon mehr sinn.
Hallo,
die 3V am TX des Profilic sind nicht ungewöhnlich, die CP2102 mache auch
nur 3,3V TX-Pegel und laufen an 3,3V und 5V Sytemen ohne Probleme.
Ich habe gerade mal ins Datenblatt des PL2303HX geschaut: RXD scheint
NICHT 5V-tolerant zu sein. Bau mal einen Spannungsteiler an TX des
Mega328.
1:2 sollte passen, also 1k längs und 2,2k gegen GND und den TXD des
Profilic an die Verbindung der Widerstände.
Wäre zumindest eine Erklärung.
Gruß aus Berlin
Michael
Michael U. schrieb:> Bau mal einen Spannungsteiler an TX des> Mega328.> 1:2 sollte passen, also 1k längs und 2,2k gegen GND und den TXD des> Profilic an die Verbindung der Widerstände.
Öhhh, sowas habe ich noch nie genau... Wie geht denn sowas?
Hallo,
oh man, ein paar Grundlagen sollte man sich schon aneignen und
Spannungsteiler gehören wie das Ohmsche Gesetz sicher dazu...
Wenn Du 2 Widerstände in Deinen Vorräten findest, die ca. im Verhältnis
1:2 sind, also 1k/2,2k oder 2,2k/4,7k oder... (maximal 10/20k, wird
sonst zu hochohmig): beide in Reihe schalten. Den mit dem kleineren Wert
an den TX-Pin des AVR, den anderen an GND. RX vom USB-Adapter an die
Verbindung der beiden Widrstände und mal testen, ob es hilft.
Gruß aus Berlin
Michael
Jan N. schrieb:> Walter S. schrieb:>> da fehlen 100nF an Vcc und Avcc>> hatte ich bis jetzt noch nie dort dran. Sind diese notwendig?
Und ob die notwendig sind.
Michael U. schrieb:> oh man, ein paar Grundlagen sollte man sich schon aneignen und> Spannungsteiler gehören wie das Ohmsche Gesetz sicher dazu...>> Wenn Du 2 Widerstände in Deinen Vorräten findest, die ca. im Verhältnis> 1:2 sind, also 1k/2,2k oder 2,2k/4,7k oder... (maximal 10/20k, wird> sonst zu hochohmig): beide in Reihe schalten. Den mit dem kleineren Wert> an den TX-Pin des AVR, den anderen an GND. RX vom USB-Adapter an die> Verbindung der beiden Widrstände und mal testen, ob es hilft.>> Gruß aus Berlin> Michael
Wäre das so richtig wie in der Zeichung?
Falls ja werde ich es mal morgen ausprobieren.
Tom schrieb:> Und ob die notwendig sind.
Werde mal morgen welche dran hängen
Jan N. schrieb:> Tom schrieb:>> Und ob die notwendig sind.> Werde mal morgen welche dran hängen
Tom meint übrigens von Vcc zum nächsten GND Pin und vom AVcc auf
kürzestem Weg zum AGND. Dein Stichwort für die Google-Suche ist
"Blockkondensator".
Und sieh dir auch den Spannungsteiler nochmal an. Der stimmt noch nicht.
Du hast da jetzt einen Kurzschluss zwischen RX und GND...
Lothar M. schrieb:> Du hast da jetzt einen Kurzschluss zwischen RX und GND
Da das sehe ich auch grade.
"Den mit dem kleineren Wert
an den TX-Pin des AVR, den anderen an GND. RX vom USB-Adapter an die
Verbindung der beiden Widrstände und mal testen, ob es hilft."
Also mit dem 1K Ohm widerstand an denn TX Pin des Atmegas und der 2,2 k
Ohm geht an GND. Aber wo muss jetzt der RX Anschluss ran? Zwischen die
beiden Widerstände?
Jan N. schrieb:> Aber wo muss jetzt der RX Anschluss ran? Zwischen die beiden> Widerstände?
Ja.
Siehe Spannungsteiler: Ue ist am USB Konverter, Ua ist am RX.
Jan N. schrieb:> Walter S. schrieb:>> da fehlen 100nF an Vcc und Avcc>> hatte ich bis jetzt noch nie dort dran. Sind diese notwendig?
JA, sonst spinnt der Controller gerne mal und man sucht sich tot nach
myseriösen Fehlern.
Michael U. schrieb:> Ich habe gerade mal ins Datenblatt des PL2303HX geschaut: RXD scheint> NICHT 5V-tolerant zu sein. Bau mal einen Spannungsteiler an TX des> Mega328.
Machs einfach so:
Michael U. schrieb:> Ich habe gerade mal ins Datenblatt des PL2303HX geschaut: RXD scheint> NICHT 5V-tolerant zu sein.
aber der verwendete Adapter ist als TTL kompatibel angegeben
Hallo,
Walter S. schrieb:> Michael U. schrieb:>> Ich habe gerade mal ins Datenblatt des PL2303HX geschaut: RXD scheint>> NICHT 5V-tolerant zu sein.>> aber der verwendete Adapter ist als TTL kompatibel angegeben
Ich traue ja nur dem Frieden nicht und habe nicht geahnt, daß der Wunsch
mit dem Spannungsteiler solche Probleme aufwirft.
Man hätte eben in 5 Minuten diesen Punkt ausschliessen können, wenn es
sich mit genauso verhält.
Ich habe zwar irgendwo noch einen Profilic-Adapter, der hat aber einen
älteren Chip und keine Win7 Treiber.
Gruß aus Berlin
Michael
Ich sag mal so:
Du hast einen Adapter, der nur 3,3V veträgt mit einem µC verbunden, der
5V hat. Es liegt also an Dir.
Dass der USB/seriell Adapter noch funktioniert, hast du bereits
festgestellt.
Nächster Schritt ist, ihn mit Pegelwandler korrekt einzusetzen oder
durch einen anderen zu ersetzen, der für 5V vorgesehen ist.
Und dann wird deine Anwendung warscheinlich auch funktionieren.
Stefan U. schrieb:> Ich sag mal so:>> Du hast einen Adapter, der nur 3,3V veträgt mit einem µC verbunden, der> 5V hat. Es liegt also an Dir.>> Dass der USB/seriell Adapter noch funktioniert, hast du bereits> festgestellt.>> Nächster Schritt ist, ihn mit Pegelwandler korrekt einzusetzen oder> durch einen anderen zu ersetzen, der für 5V vorgesehen ist.>> Und dann wird deine Anwendung warscheinlich auch funktionieren.
Jo danke dir. Werde heute mal im Elektronik Shop mit einen anderen
Kaufen der auch 5 Volt Kompatibel ist. Und nicht nochmal so ein scheiß
aus dem Internet. Sorry für das Wort. Aber wenn dort steht "5 Volt" dann
gehe ich auch davon das er 5 Volt hat. Ich werde dieses Produkt
zurückschicken. Und mir wie gesagt im Elektro Shop ein anderes Kaufen
Mfg jan.
Ich benutze seit Jahren so ein Kabel an 5V Mikrocontroller, indem ich
einfach Widerstände in Reihe schalte. So habe ich vollen Schutz gegen
Verpolung.
[code]
Prolific Kabel AVR
2,2k
RxD o-------------[===]-------------o TxD
2,2k
TxD o-------------[===]-------------o Rxd
100 Ohm
GND o-------------[===]-------------o GND
[code]
Die Widerstände dienen zugleich als Stecker für das Steckbrett:
http://stefanfrings.de/avr_hello_world/DSCF0440.JPG
Stefan U. schrieb:> code]>> Prolific Kabel AVR> 2,2k> RxD o-------------[===]-------------o TxD>> 2,2k> TxD o-------------[===]-------------o Rxd>> 100 Ohm> GND o-------------[===]-------------o GND> [code]>> Die Widerstände dienen zugleich als Stecker für das Steckbrett:> http://stefanfrings.de/avr_hello_world/DSCF0440.JPG
Wenn ich das so mache an RXD 2,2 k und dann an TX Pin des Avr
controllers und 100 Ohm an GND mache. Also 2,2 k Ohm in die Buchse des
RXD Kabel und dann mit dem Widerstand an TX Pin und 100 Ohm in die GND
Buchse des Apdaters und dann in die - Leitung dann passiert garnix mehr
die LED blinkt zwar. Aber in HTerm kommen keine Daten mehr an. Wenn ich
die 100 Ohm weg machen dann kommen wieder diese komischen Zeichen an
Könnte es auch was mit dem Avrdude Programmer zutun haben?
Denn ich nutze ja ein 16 Mhz Quarz. Wenn ich im Code 8 mhz einstelle und
auch ein 8 mhz quarz dran hänge kommt nur "avrdude: avrdude
stk500_getsync() not in sync resp=0x00". So bald wieder ein 16 mhz quarz
dran kommt, kommt dieser fehler nicht mehr.
Ich habe auch keine Ahnung wie ich diese Fuses beim Avrdude Programmer
ändern kann.
Diese Command wird ausgeführt:
-u -v -patmega328p -carduino -PCOM6 -b115200
-Uflash:w:"$(ProjectDir)Debug\$(TargetName).hex":i -C"C:\Program Files
(x86)\Arduino\hardware\tools\avr\etc\avrdude.conf"
Hallo,
was ich im Moment nicht verstehe: Du scheinst doch die Arduion-Umgebung
zu benutzen. Du hast also den Arduino-Bootloader auf Deinem Mega328?
Du flashst mit dem Profilic-USB-Adapter?
Ich hatte bisher noch keinen Grund, mir die Aufrufe des AVRdude genauer
anzusehen, darum kümmert sich die IDE doch recht gut alleine, wenn man
von dort flasht.
Gruß aus Berlin
Michael
Michael U. schrieb:> Hallo,>> was ich im Moment nicht verstehe: Du scheinst doch die Arduion-Umgebung> zu benutzen. Du hast also den Arduino-Bootloader auf Deinem Mega328?> Du flashst mit dem Profilic-USB-Adapter?>> Ich hatte bisher noch keinen Grund, mir die Aufrufe des AVRdude genauer> anzusehen, darum kümmert sich die IDE doch recht gut alleine, wenn man> von dort flasht.>> Gruß aus Berlin> Michael
Ich erkläre es mal:
- Ich habe mir damals ein Arduino UNO gekauft mit Atmega328P drauf.
- Dann bin ich ca. nach 2 Monaten von der Arduino IDE weg und zum Atmel
Studio gegangen da ich schon ein paar C Vorkenntnisse hatte.
- Programmieren tute ich über das Arduino UNO board.
- Zum Empfangen des TX Signal nutze ich ein Apdater.
Kann es sein das es am Bootloader oder so liegt?
Die Apdater funktioniert definiert!
Ich habe grade in der Arduino IDE ein Serial Programm geschrieben und
zwar mit: Serial.begin(9600);
und dann mit Serial.println("8"); die acht gesendet diese kommt ohne
Probleme an.
Aber warum nicht in Atmel Studio. Liegt das vllt. an dem Arduino
Bootloader? Oder doch an denn Fuses?
mfg jan
Stefan U. schrieb:>> aber der verwendete Adapter ist als TTL kompatibel angegeben> Das ist falsch.
kennst Du den Adapter, entspricht er nicht der Beschreibung?
Hallo,
kopiere doch einfach mal Deinen C-Code von oben in die Arduino-IDE in
einen leeren Sketch. Natürlich alles löschen, was die IDE da
reinschreibt (setup() und loop() usw.).
Dann einfach compilieren und testen.
Die IDE macht dann auch nichts anderes als das Atmel-Studio. Sie
compiliert es mit dem GGC und flasht es.
Ich nehme an, Du hast einen UNO mit gesockeltem Mega. Dann steck den
eben auf Deinen Aufbau und teste.
Ich habe im Moment keine Ahnung, wer da quer schießt.
Gruß aus Berlin
Michael
Michael U. schrieb:> kopiere doch einfach mal Deinen C-Code von oben in die Arduino-IDE in> einen leeren Sketch. Natürlich alles löschen, was die IDE da> reinschreibt (setup() und loop() usw.).>> Dann einfach compilieren und testen.> Die IDE macht dann auch nichts anderes als das Atmel-Studio. Sie> compiliert es mit dem GGC und flasht es.>> Ich nehme an, Du hast einen UNO mit gesockeltem Mega. Dann steck den> eben auf Deinen Aufbau und teste.>> Ich habe im Moment keine Ahnung, wer da quer schießt.>> Gruß aus Berlin> Michael
Danke für denn Tipp.
Langsam wird es komisch.
Also der Fehler muss im Code liegen. Da wenn ich diesen Code in die
Arduino IDE eingebe. Kommt genau das gleiche raus wenn ich es in Atmel
Studio programmiere.(Der Mega steht im Sockel des Arduino ohne
Breadboard)
Wenn ich aber mit Serial.begin(9600);
und Serial.println("H"); mache kommt dieses problemlos an.
ES funktioniert!!!!!!!!
Ich habe mir nochmal das Tutorial "Der UART" durchgelessen und habe denn
"Double Transmission Speed" aktiviert mit
1
if(USE_2X) {
2
UCSR0A |= (1<<U2X0);
3
}else{
4
UCSR0A &= ~(1<<U2X0);
5
}
Und noch die util/setbaud.h Datei includieren
Und nun funktioniert es endlich sogar mit dem Apdater ohne Problem. 4
Gott verdammt Tage damit verbraucht und dabei wahr der Fehler scheinbar
so einfach.
Naja wieder was neues gelernt.
Ich danke euch für die Tatkräftige Unterstützung!!!
Mfg jan.
Hallo,
erstmal schön, daß es geht.
Eigentlich müßte man dieses Rätsel jetzt lösen...
Ich habe definitiv Deinen Code in die IDE kopiert (nur das '='
entfernt), compiliert und geflasht.
Es kann mit dem Bootloader zusämmenhängen, normalerweise ist U2X0 nach
Reset
auf 0, also kein X2, ist bei 9600Baud eigentlich auch nicht nötig.
Er kann also eigentlich nur aus dem Bootloader mit gesetztem X2
gestartet haben. Das ergünde ich aber nicht...
Eigentlich hättest Du die Daten dann mit 19200 richtig empfangen müssen.
Warum das bei Dir passiert ist und bei mir nicht, ist etwas unklar. Mein
Bootloader ist der vom Auslieferzustand des Arduino Nano aus China, ich
hatte bisher keinen Grund, da was zu ändern. Es läuft für mich ja.
Gruß aus Berlin
Michael
Michael U. schrieb:> Hallo,>> erstmal schön, daß es geht.> Eigentlich müßte man dieses Rätsel jetzt lösen...> Ich habe definitiv Deinen Code in die IDE kopiert (nur das '='> entfernt), compiliert und geflasht.>> Es kann mit dem Bootloader zusämmenhängen, normalerweise ist U2X0 nach> Reset> auf 0, also kein X2, ist bei 9600Baud eigentlich auch nicht nötig.> Er kann also eigentlich nur aus dem Bootloader mit gesetztem X2> gestartet haben. Das ergünde ich aber nicht...> Eigentlich hättest Du die Daten dann mit 19200 richtig empfangen müssen.>> Warum das bei Dir passiert ist und bei mir nicht, ist etwas unklar. Mein> Bootloader ist der vom Auslieferzustand des Arduino Nano aus China, ich> hatte bisher keinen Grund, da was zu ändern. Es läuft für mich ja.>> Gruß aus Berlin> Michael
Am Bootloader habe ich selber auch nix verändert. Das ist der Chip der
beim UNO dabei kommt der hat ja bereits ein bootloader.
Du hast recht. Auf 19200 empfange ich auch die richtigen Daten ohne
U2X0.
Keine Ahnung warum. Aber ob auf 19200 oder mit U2X0 und dann auf 9600 es
funktioniert und darüber bin ich froh. :)