Forum: Mikrocontroller und Digitale Elektronik Zwei Controller per UART kommunizieren/Einsteigerproblem


von Stefan (Gast)


Lesenswert?

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

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Anhang 2

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Versuchsaufbau

von Jadeclaw D. (jadeclaw)


Lesenswert?

Sehe ich das richtig, daß du nur RxD mit TxD des jeweils anderen 
Controllers verbunden hast? Und keine Masseleitung?

Gruß
Jadeclaw.

von Stefan (Gast)


Lesenswert?

Ja, das siehst du richtig, habs aber auch schon mit Masseleitung 
probiert, leider kein Erfolg. Denke es liegt am Programm !

Danke und Gruß

Stefan

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Der erste Anhang fehlte !

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Oh man, bzw. der zweite !

;-)

von Falk B. (falk)


Lesenswert?

@ 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

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

...falsche Datei, ich sollte mich einloggen !

von Klugscheisser (Gast)


Lesenswert?

Und dann vielleicht nur übertragen, falls sich was geändert hat?
Stichwort: Exor

von Falk B. (falk)


Lesenswert?

@ 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

von Klugscheisser (Gast)


Lesenswert?

Falk: Ground wird heutzutage per SW (Mittelwertbildung) gemacht. :-)

Hast Du schon mal Leute bei einer 1-Wire-Schnittstelle nach dem Fehler 
suchen sehen?

von Jadeclaw D. (jadeclaw)


Lesenswert?

@Stefan: Nur weil es mit Masseverbindung nicht geht, heißt noch lange 
nicht, daß man die Masseleitung nicht braucht. Also, Masse verbinden!

von Stefan T. (_distance_07)


Lesenswert?

Ja, hab ich gemacht, die beiden Zuleitungen entspringen jedoch aus ein 
und dem selben Netzteil.

Trozdem vielen Dank!

von Stefan T. (_distance_07)


Lesenswert?

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. ;-)

von Klugscheisser (Gast)


Lesenswert?

Na prima: Jetzt noch die Tips von Falk (und mir) beachten und es wird 
noch besser.

von Stefan T. (_distance_07)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

Ja

von Stefan T. (_distance_07)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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

von Stefan T. (_distance_07)


Lesenswert?

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
Noch kein Account? Hier anmelden.