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