serielle Kommunikation mit dem Atmega8

Teil I




Um über den RS232 Anschluss mit dem PC kommunizieren zu können , benötigen wir erst einmal einen sogenannten Pegelwandler .
Die Spannungen am PC an der RS232 sind zwischen  +12V und -12V !
Der Atmega8 arbeitet aber im TTL - Bereich , das heißt bis max. 5V !

Darum benötigen wir eben einen Pegelwandler , der diese Spannungsdifferenzen ausgleicht.
Ein typischer und gebräuchlicher Pegelwandler ist das IC  : MAX232

Der MAX232 ist einfach aufgebaut.
Es werden lediglich zusätzlich noch 4 Elkos 1µF / 25V benötigt.



Wer so etwas selber löten möchte hier der Schaltplan :

 

Zu beachten ist , 2 der beiden Elkos werden in umgekehrter Richtung eingelötet !!  Pin 2 und Pin 6 !!

Wer sich nicht die Arbeit machen möchte , einen MAX232 selber zu löten , findet bei Ebay fertige Bausätze.






Für die Kommunikation sind beim Atmega8 die beiden Pins  D.0 + D.1 fest vorgsehen.
D.0 = Rx ( Empfang )
D.1 = Tx  ( Senden )

Der "Kopf " des Codes ist wieder der gleiche  :

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32


Jetzt kommt aber noch eine weitere Zeile dazu , durch die automatisch die beiden Pins D.0 + D.1
als Kommunikationspins eingestellt werden.

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
$baud = 9600


Ist diese zusätzliche Zeile : $baud = 9600   nicht vorhanden , werden die beiden Pins D.0 + D.1 als
einfache Ein- oder Ausgangspins behandelt.

Möchte man nun etwas an den PC senden , wird dies lediglich mit dem Befehl  :  PRINT  gemacht.

Es gibt 2 Möglichkeiten etwas an den PC zu senden :

1.  einen Textstring
2.  einen Wert

Einen Textstring sendet man wie folgt  :  Print " Hallo Welt "
Einen Wert sendet man mit  : Print chr ( 'Wert' )

Der Atmega8 sendet automatisch nach jedem Print - Befehl ein:  chr (13) , chr (10)  = Cr Lf ( Carrier return + Line feed )
Möchte man das nicht  , dann muß am Ende der Print - Zeile ein Semikolon gesetzt werden !


Beispiel :

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
$baud = 9600


Print "Hallo Welt"
Print "Dies ist automatisch eine neue Zeile"

Print chr(49)," ",chr(50)," ",chr(51)
waitms 2000

Print "Hallo Welt ";
Print " Diesmal keine neue Zeile ";
Print chr(49)," ",chr(50)," ",chr(51)

end


Wenn man sich das Ganze jetzt einmal an einem Terminalprogramm ( z.B. HTerm ) an den PC senden läßt,
erscheint als erstes :

Hallo Welt
Dies ist automatisch eine neue Zeile
1 2 3


Dann erfolgt eine Wartezeit von 2000 Millisekunden = 2 Sekunde und es erscheint der 2. Teil :

Hallo Welt Diesmal keine neue Zeile 1 2 3

Hier kann man jetzt wunderbar den Unterschied erkennen zwischen dem Setzen eines Semikolon am Ende oder nicht.


Werte kann man auf 2 Arten zum PC senden.
Zum einen wie im Beispiel nutze ich für die Zahlen : 1 2 3 die ASCII-Zeichen : 49  50  51
Oder man setzt den Wert in "  "  und sendet die Zahl so als Textstring : Print "1 2 3"






zurück zur Beispiel-Übersicht