Hallo,
ich beschäftige mich gerade mit der Kommunikation zwischen ATmega8 und
dem PC. Ich verwende das Starterkit aus dem Microcontroller.net Shop
sowie den obersten Code aus dem UART-Kapitel im AVR-Tutorial
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART) Die einzige
Anpassung habe ich beim Einstellen der Taktfrequenz des externen Takts
vorgenommen, der bei 8Mhz liegt.
Mein Problem ist, dass die Übertragung zum PC nur sporadisch
funktioniert und äußerst fehleranfällig ist, wie z.B. auf dem
angehängten Screenshot zu sehen ist.
Die korrekte Übertragung müsste Test! in jeder Zeile liefern.
Hat jemand von den Experten eine Idee, was hier das Problem sein könnte?
Vielen Dank für Eure Hilfe!
Stephan
Sieht mir entweder nach einem Wackelkontakt oder einem nicht stabilen
Takt aus. Die Verwendung des internen 8Mhz RC-Schwingkreises könnte zb
sowas erzeugen.
Solche Zeichenwildwüchse deuten oft auf einen Stringüberlauf hin.
Aber da müsstest du schon deinen ganzen Quelltext zeigen.
Ansonsten: Woher hast du den Wert für das UBRR Register? Selbst
ausgerechnet?
Im Datenblatt des Atmels sind sämtliche Werte für die gängigsten Quarze
zu finden (+ Angabe zum prozentualen Fehler).
Das sieht nach Störungen aus, die nicht von der Software kommen.
Ich würde an deiner Stelle die Hardware näher untersuchen, also den
Aufbau des µC Boards und die Verbindung zwischen PC und µC. Bei COM14
vermute ich, dass zusätzlich ein USB-RS232 Wandler im Spiel ist.
> Starterkit aus dem Microcontroller.net Shop
Dieses?
AVR Starterkit (inkl. USB Programmer)
http://shop.embedded-projects.net/index.php?module=artikel&action=artikel&id=108
Dort kannst du den AVR aus der IC-Fassung entfernen und RXD-TXD an der
Fassung brücken. Alle vom PC aus gesendeten Zeichen müssen dann
fehlerfrei an den PC zurück kommen, wenn der Rest der Hardware OK ist
(Loopback-Test).
Auch mal an allen Kabeln und Steckern wackeln.
Ich hab zb einen USB Stick, den ich beim Einstecken etwas in eine
Richtung 'verkanten' muss, sonst wird der Stick nicht korrekt erkannt.
Nachweislich auf 5 Rechnern ausprobiert. Es liegt am Stick und dessen
mechanischem Steckeraufbau.
@ Karl Heinz Buchegger (kbuchegg) (Moderator)
>Ich hab zb einen USB Stick, den ich beim Einstecken etwas in eine>Richtung 'verkanten' muss, sonst wird der Stick nicht korrekt erkannt.>Nachweislich auf 5 Rechnern ausprobiert. Es liegt am Stick und dessen>mechanischem Steckeraufbau.
Klingt nach Wackelkontakt oder kalter Lötstelle. Würde ich umgehend
entsorgen.
Vielen Dank für die weiteren Tipps!
Krapao schrieb:>> Starterkit aus dem Microcontroller.net Shop>> Dieses?>> AVR Starterkit (inkl. USB Programmer)> http://shop.embedded-projects.net/index.php?module...>> Dort kannst du den AVR aus der IC-Fassung entfernen und RXD-TXD an der> Fassung brücken. Alle vom PC aus gesendeten Zeichen müssen dann> fehlerfrei an den PC zurück kommen, wenn der Rest der Hardware OK ist> (Loopback-Test).
Ja genau dieses Starterkit verwende ich! Den Loopback-Test habe ich
durchgeführt -> Funktioniert! Wenn ich RXD und TXD brücke, dann kommen
genau die eingegebenen Zeichen zurück (ohne Störungen)! (Ach ja, ein
USB-RS232 ist auch im Spiel, aber an dem dürfte es ja dann auch nicht
liegen,oder?)
Die richtige Folgerung wäre doch eigentlich, dass irgendwas an der
Ausgabe des Controllers nicht stimmt!?! Um Verbindungsfehler
auszuschließen habe ich auch die entscheidenden Pins zwischen MAX232 und
µC direkt verbunden... erfolglos...
Oder der externe Quarz auf dem Board ist zu ungenau? Würde mich aber
wundern, wenn das noch keinem zuvor aufgefallen wäre...
Hi
>Oder der externe Quarz auf dem Board ist zu ungenau? Würde mich aber>wundern, wenn das noch keinem zuvor aufgefallen wäre...
Unwahrscheinlich. Bist du Sicher, das der Quarzoszillator wirklich (per
Fuse) aktiviert ist?
MfG Spess
spess53 schrieb:> Unwahrscheinlich. Bist du Sicher, das der Quarzoszillator wirklich (per> Fuse) aktiviert ist?
Ich sag mal zu 99% ja.
Ich setz die Fuses übers AVR-Studio. Bei der Option SUT_CKSEL habe ich
"Ext. Crystal/Resonator high Freq; Start-up time: 16 CK + 64ms"
eingestellt. An den andren Fuses habe ich nichts verändert.
Dies führt dann zu folgender Bitkombination:
HIGH: 0xD9
LOW: 0x3F
Diese wiederum entspricht den Empfehlungen im Tutorial...
Weiß jetzt irgendwie nicht mehr weiter...
Mit dem Oszi mal angeschaut, was am Ende des Kabels ankommt? Stimmt das
Timing für 9600 Baud? Ist da ein Wackler im Kabel? Gehts mit einem
anderen Kabel?
Miss mal von Anschluß 2 und Anschluß 6 des MAX232 gegen Masse, ob da
ca +10 Volt bzw. -10 Volt anstehen.
Ich hatte auch mal so ein Fehlerbild wie Du und da lag es an dem MAX232.
Von 10 Stück hatte einer eine Macke.
MfG Paul
Also ich hab jetzt nochmal etwas rumgespielt und verschiedenste Sachen
ausprobiert (auch Kabel z.T. erneuert etc.) und jetzt funktioniert es
tatsächlich.
Vielen Dank nochmal für eure Hilfe!
>Also ich hab jetzt nochmal etwas rumgespielt und verschiedenste Sachen>ausprobiert (auch Kabel z.T. erneuert etc.) und jetzt funktioniert es>tatsächlich.>>Vielen Dank nochmal für eure Hilfe!
Und woran lag es jetzt?