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"