PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten seriell tauschen zwischen 2 Atmels



schmidtkoe
11.05.2009, 13:56
Hallo zusammen,

ich habe ein kleines Verständnissproblem. Ich habe 2 Einheiten, ein Atmega 128 Einheit welche als Alarmzentral fungiert und eine Display Einheit mit einem Atmega 128 welche neu dazukommen soll. Nun möchte ich von meiner Zentrale Zustände an meine Displayeinheit senden, am Liebsten über die Hardware UART des Atmega. Hat einer ein kleines Beispielprogarmm wie ein simpler Datenaustausch funktioniert ? Ich möchte z.B. übertragen wenn ein Fenster geöffnet wurde "variable fenster_wohn_eg=1" damit die Displayeinheit das sicher auslesen kann und anzeigen. Kann man sicherstellen das heir keine Daten verloren gehen oder kann man das prüfen ? Besten Dank für Euer Feedback

PicNick
11.05.2009, 19:38
Du kannst RX<->TX und TX <->RX einfach direkt verbinden, für kürzere Strecken, und über MAX232 Pegelwandler, wenn es weiter geht.
Jeder der beiden muss IMMER empfangsbereit sein, am besten mit Buffer (CONFIG SERIALIN = buffered)
Dann geht normalerweise auch nix verloren.
Darüberhinaus kann man diversen Prüfsummen die Übertragung kontrollieren.

Ceos
11.05.2009, 23:42
du meinst doch bestimmt nen MAX485 wenns weiter gehen soll ??? MAX232 iss ja eigentlich nur für PC gedacht udn so extrem weit geht das auch nicht unbedingt

schmidtkoe
12.05.2009, 01:05
Ich wollte ohne Pegelwandler auskommen, suche aber einen Beispielcode. Kann wer helfen ?

PicNick
12.05.2009, 08:26
Mit PC hat das nix zu tun, RS232 is RS232

Sauerbruch
12.05.2009, 13:12
Ich kann nur über meine Erfahrungen mit einem Mega8 bzw. Mega88 berichten - nehme aber mal an, dass die UART-Geschichte beim 128er ähnlich ist. Beide Controller müssen natürlich die gleiche Baudrate haben ($Baud = xxxx)

Senden:


Dim X as Byte
X = ....
UDR = X

und schon wird die Variable X über den TX-Pin gesendet.


Empfangen:
Sobald ein komplettes Datenpaket empfangen wurde, löst die Schnittstelle einen Interrupt aus. In dieser ISR kannst Du dann die empfangene Variable abholen. Ganz grob etwa so:


Dim X As Byte

On Urxc Empfangen
Enable Urxc
Enable Interrupts

Do
Loop

Empfangen:
X = Udr1
Return


Wie gesagt - ohne Gewähr hinsichtlich Syntax-Feinheiten beim Mega128. Aber eigentlich ist das ganz simpel - probier´s einfach mal aus!