Guten Abend, ich versuche grade mir das Programmieren von AVRs beizubringen und bin grade beim Kapitel UART angekommen. Nach dem die Kommunikatiion mit dem Computer per Hyperterminal - wie im Tutorial erklärt - soweit geklappt hat, wollte ich mal zwei Controller kommunizieren lassen. Im Anhan ein Foto vom Versuchaufbau und die beiden Codes. Auf einem STK 500 ist ein Mega8515, auf dem anderen ein 90S8515 daher zwei Programme, sollten aber gleich sein. Programmbeschreibung Die Werte, welche ich an den PINs D2 - D7 einlese sollen per UART auf den anderen Controller übertagen werden, welcher die Werte dann auf dem PortB ausgeben soll. Auf dem anderen Controller das gleiche Spiel. Problembeschreibung Kurz und knackig : entweder flimmern die LEDs nur wild rum oder es pasiert garnichts ! Meine Überlegung ist, dass entweder was mit der Baudrate nicht stimmt, oder ich mal wieder etwas grundliegendes falsch gemacht habe, wie z.B. dass sich die Register ständig gegenseitig überschreiben oder der gleichen. Oder muss ich das ganz nur etwas verzögern, um die Eingabe sichtbar zu machen ? Ich würd mich freuen, wenn ein schlauer Kopf mir da weiterhelfen könnte. Schonmal vielen Dank im Voraus und nen schönen Abend
Sehe ich das richtig, daß du nur RxD mit TxD des jeweils anderen Controllers verbunden hast? Und keine Masseleitung? Gruß Jadeclaw.
Ja, das siehst du richtig, habs aber auch schon mit Masseleitung probiert, leider kein Erfolg. Denke es liegt am Programm ! Danke und Gruß Stefan
@ Stefan (Gast) >Dateianhang: 100_0795.jpg (707,1 KB, 5 Downloads) Das geht auch kleiner, siehe Bildformate. Dein Programm hat ein Problem. Was passiert, wenn zufällig beide Seiten gerade auf Daten warten? Du musst das so programmieren, dass WENN ein Zeichen empfangen wurde, dies gelesen und verarbeitet wird. Wenn nicht, dann darfst du nicht endlos warten, sondern sendest das nächste zeichen, natürlich vorher mit Warten auf den freine Sendepuffer. Siehe Multitasking. Etwa so.
1 | reci: ;**Empfangsprogramm** |
2 | sbis USR, RXC |
3 | ret |
4 | in rcve, UDR |
5 | ret |
Ausserdem solltest du sie internen Pull-Ups für PortD einschalten, ich weis nicht ob das STK500 externe hat.
1 | ldi akku,$FF |
2 | out DDRD, akku |
Und lass den Namen akku stecken, das ist was für steinalte CPUs wie die 8051er ;-) MFG Falk
...falsche Datei, ich sollte mich einloggen !
Und dann vielleicht nur übertragen, falls sich was geändert hat? Stichwort: Exor
@ Stefan (Gast) >Ja, das siehst du richtig, habs aber auch schon mit Masseleitung >probiert, leider kein Erfolg. Denke es liegt am Programm ! AUA! Du braucht DRINGEND die Masseverbindung, denn deine STK500 werden wie es scheint auf zwei (galvanisch) getrennten Netzteilen gespeist. Grundlagen, Grundlagen, Grundlagen. Und immer an den Herrn Ohm denken. ;-) MFG Falk
Falk: Ground wird heutzutage per SW (Mittelwertbildung) gemacht. :-) Hast Du schon mal Leute bei einer 1-Wire-Schnittstelle nach dem Fehler suchen sehen?
@Stefan: Nur weil es mit Masseverbindung nicht geht, heißt noch lange nicht, daß man die Masseleitung nicht braucht. Also, Masse verbinden!
Ja, hab ich gemacht, die beiden Zuleitungen entspringen jedoch aus ein und dem selben Netzteil. Trozdem vielen Dank!
hab ein Problem entdeckt, in dem aus dem Tutorial kopierten Code für die Baudratenberechnung hatte ich vergessen die Frequenz von 4 MHz auf 3,69 MHz zu ändern. Jetzt funktioniert es zumindest manchmal. ;-)
Na prima: Jetzt noch die Tips von Falk (und mir) beachten und es wird noch besser.
Ja danke Euch, mit dem EOR muss ich wohl noch etwas rätseln. Meinst Du, dass ich im Prinzip noch ein Register hinzufüge mit dem ich dann den alten Wert mit dem neuen Wert vergleiche und entsprechend weiterverfahre ? Grüße
Bevor ich jetzt nen neuen Threat öffne, mir ist aufgefallen, dass wenn ein Board abgeschaltet ist, die Power LED ganz schwach leuchtet, ist das normal ? Kann es nicht sein, dass der dort fließende Strom zu hoch für den Port ist ? Grüße
@ Stefan T. (_distance_07) >Bevor ich jetzt nen neuen Threat öffne, Thread. Threats gibt nur an Halloween, und das ist schon vorbei ;-) > mir ist aufgefallen, dass wenn >ein Board abgeschaltet ist, die Power LED ganz schwach leuchtet, ist das >normal ? Jain. Da wird das Board über die UART-Verbindung parasitär mit Energei versorgt, die Scutzdioden machen es möglich. Siehe Pegelwandler. >Kann es nicht sein, dass der dort fließende Strom zu hoch für den Port >ist ? Kann sein. MFG Falk
Okay, danke Dir ! Hab leider nich annähernd genaue Messapparaturen um mal den Strom zu messen. Werd einfach immer die Boards gleichzeitig ein- und ausschalten. Schönen Abend
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.