erstellt 20.06.2012
Datenausgabe
Um Daten auszugeben gibt es eine viel Zahl von Möglichkeiten,wir können Daten auf ein Display ausgegeben oder an Hand von Leuchtdioden  ausgeben.
Dazu erweitern wir unsere Testplatine um zwei Leuchtdioden und zwei Widerstände an den Anschlüssen 12 und 13 des Atmega 8.
Die Widerstände sind so zu bemessen das je nach Led nicht mehr als 20 mA fließen.
Also angenommen es wird eine Rote Standard Leuchtdiode benutzt benutzt, die laut Datenblatt so an die 2,2 Volt benötigt bei 20 mA Stromverbrauch,
so  berechnen wir folgendermaßen den Vorwiderstand:

Gesamte Betriebsspannung ( 5V) minus Led Spannung (2,2 V) bleiben  2,8 Volt übrig .
Bei einen Stromverbrauch der Leuchtdiode von 20 mA rechnen wir  2,8 Volt geteilt durch 20mA   = 140 Ohm
Da es keinen 140 Ohm Widerstand in den Standardausführungen gibt, nehmen wir den nächst höheren z.B. 220 Ohm.
Damit können wir sicher sein das der höchste Strom der dem Atmega entnommen wird auf jeden Fall unter 20mA liegt ,
und sind so sicher das der Atmega nicht überlastet wird.

In der vorliegenden Schaltung wurden allerdings eine Blaue und eine Gelbe Leuchtdiode verwendet,  und da sich die Spannungen der Leuchtdioden je nach  Farbe
ändert ,sollte man das Datenblatt der jeweiligen Leuchtdiode zu Grunde legen.
Wenn man keine Lust zum rechnen hat , nimmt man sich bei einer Betriebsspannung von 5 Volt einfach einen Standard Widerstand von 220 Ohm,
der funktioniert in der Regel bei den meisten  Led's.

Nun sind wir soweit unser erstes Programm zu schreiben, dazu probieren wir als erstes einen Ausgang An und Aus zu schalten .
Also unsere angeschlossene gelbe Led wollen wir zum blinken bekommen.
Dazu öffnen wir die Bascom Oberfläche klicken auf das Symbol oben links in der Menüleiste und erstellen damit eine neue Datei.

Wenn wir in den "Optionen" alle Einstellungen richtig gemacht haben , sollte jetzt eine leere Textdatei erscheinen  mit vorangestellten Zeilen Nummern.

Anschließend klicken wir das Symbol oben rechts an ( Bild unten) und öffnen damit eine PDF Datei in einem kleinen Fenster die uns das Layout des Atmega 8 anzeigt.
Wenn wir nun innerhalb dieses Layout den  Mauszeiger auf einen  Anschluss positionieren bekommen wir die dazugehörige Anschlussbezeichnung angezeigt ,
halten wir also den Mauszeiger z.B über den Anschluss an dem unsere gelbe Led angeschlossen ist, so wird die Anschlussbezeichnung angezeigt im vorliegenden Fall 
Pd.7
das bedeutet das es sich um Port d.7 handelt.
Beim Atmega Mikroprozessor handelt es sich um ein 8 Bit System was soviel heißt das ein Port immer aus 8 Bit's besteht, demnach gibt es den Port d.0 bis Port d.7 also insgesamt 8 Stück.


Nun können wir also anfangen die ersten Programmzeilen einzugeben, dabei ist zu beachten das wenn ein " , " Zeichen ( also ein Komma) vor der Texteingabe
als erstes Zeichen der Zeile steht wird diese Zeile nicht als Programmzeile erkannt sondern dient nur der Eingabe von Kommentare ( hier in grün dargestellt),
und wird beim eigentlichen Programmablauf vollkommen ignoriert.
Es ist auch nicht notwendig an Zeile 1 anzufangen , es kann bedenkenlos an jeder X beliebigen Zeilennummer anfangen werden, ausschlaggebend ist nur die richtige
Reihenfolge der einzelnen Befehlszeilen.
Also tippen wir folgende Zeilen ab , und erstellen unser erstes Programm, die Kommentarzeilen können dabei weg gelassen werden,
man sollte sich in Zukunft aber daran gewöhnen möglichst viele aussagekräftige Kommentare mit einzugeben weil mit der Zeit die Anzahl der Programmzeilen
immer mehr zunehmen und dabei schnell die Übersicht verloren geht,insbesondere wenn ein Programm mal nicht läuft kann es bei der Fehlersuche wichtig sein ,
noch zu wissen warum man welche Zeile geschrieben hat.


Zeile
Programmzeile
Kommentar
9
$regfile "m8def.dat"
Bevor diese Programmzeilen Compiliert werden, (Compiliert bedeutet das sie, bevor sie in den Mikrocontroller übertragen werden in einer für den Mikrocontroller  verständlichen Sprache übersetzt werden müssen )  muss sozusagen der Compiler ( Übersetzer)  wissen mit welchen Mikrocontroller er es zu tuen hat, diese Informationen holt er sich aus der Datei " m8def.dat" die sich im Verzeichnis des Bascom Programm befindet. Es ist also eine Grundvoraussetzung für die Richtige Übersetzung zum passenden Mikrocontroller, deswegen sollte diese Anweisung stehts am Anfang eines jeden Programms stehen.
10
$crystal=1000000
Mit dieser Anweisung wird der Mikrocontroller angewiesen seinen Standardmäßigen Takt von 1 MHz zu benutzen diese Frequenz ist der  Standardwert bei einen Fabrikfrischen Atmega 8. Diese Frequenz kann auch geändert werden, dazu kommen wir aber später noch.Auf jeden Fall ist diese Angabe  im Programm wichtig , da sonst das Programm zwar läuft aber es bei für viele Zeitkritischen Schritte zu Problem kommt, z.b bei der Angabe von Pausenzeiten bei der Übertragung über Schnittstellen usw.
11
$hwstack=32
Hier wird Speicherbereich angegeben der für bestimmte Zwecke reserviert wird. Wird später noch erläutert.
12
§Swstack=10
Auch hier wird Speicherbereich reserviert , auch dazu später mehr.
15
Config Lcd=16X2
Definiert das angeschlossenen Display als ein Display mit 2 mal 16 Zeichen
16
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , Rs = Portc.1 , E = Portc.0
Konfiguriert die Anschlüsse des Displays an den Atmega, damit werden evtl. Displayeinstellungen im Menü, unter Optionen  hinfällig
18

Ddrd = &B10000000

DDRD ist die Abkürzung für "DatenRichtungRegister D "  und die Ziffern &B bedeuten das die kommenden Zahlen im Binärformat vorliegen, man könnte auch die Zahlen im Hex-Format oder im Dezimal Format angeben, dann würde es dementsprechend &H oder &D heißen.
Im hier vorliegenden Fall wird mit dieser Anweisung bestimmt , ob ein Anschluss am Mikrocontroller als Eingang oder Ausgang definiert wird..
Die 8 Nullen stehen jeweils für einen Anschluss am Port d , eine Null bedeutet das der Anschluss als  Eingang (Pin) und eine Eins bedeutet das der Anschluss als  Ausgang (Port) benutzt wird.
10000000 bedeutet das alle Portd.0 bis Portd.6 als Eingänge und Portd.7 als Ausgang benutzt wird. Es wird immer von der rechten Seite ausgehend gezählt , also die ganz rechte Null steht für Portd.0, die zweite von rechts ist Pord.1 usw.

19
Port.d=&B00000000
Definiert Portd.0 bis Portd.7 als Eingang, diese Zeile kann weg gelassen werden, weil Standardmäßig alle Port als Eingänge aktiviert sind
22
Do Ab hier läuft das eigentliche Programm ab , von hier werden in der Regel alle Zeilen nacheinander abgearbeitet bis zu der Programmzeile "Loop"dann wird wieder hierhin zurück gesprungen und wieder alle Zeilen abgearbeitet. usw....
23
Portd.7 = 1
Hier wird der zuvor als Ausgang definierte Anschluss ( Zeile 5 ) Portd.7 auf eins gesetzt , 1 bedeutet soviel wie das hier die nahezu volle Betriebsspannung anliegt, also ca 5 Volt. Gelb Led ist jetzt an.
24
Wait 1
Dieser Befehl sorgt für eine Pause von 1 Sekunde
25
Portd.7 = 0
Hier wird der zuvor gesetzte Portd.7 von 1 auf Null gesetzt , damit liegt der Anschluss auf GND (Masse).Gelbe Led wird damit ausgeschaltet
26
Wait 1
Hier wird wieder für eine Pause von 1 Sekunde gesorgt
28
Loop
Von hier wird wieder zurück gesprungen Zur Anweisung "Do" in Zeile 6

Nachdem wir soweit gekommen sind, wird das Programm Compiliert und anschließend in den Atmega übertragen
Wenn wird uns dann die Led (Gelb) ansehen, sollte diese blinken und zwar sollte sie 1 Sekunde an sein, anschließend für 1 Sekunde aus, dann wieder an usw..Damit hätten wir unseren ersten Blinker erzeugt.
Anschließend wollen wir eine Led zum Leuchten bringen solange Taster S1 gedrückt ist und beim loslassen soll sie  wieder erlischen.



Dazu ändern wir das Programm nach oben gezeigten Beispiel ab.In Zeile 20 wird der interne PullUp Widerstand im Atmega für Pin C.2 zugeschaltet, und in Zeile 25 wird abgefragt ob der am PINC.2 angeschlossene Taster geschlossen ist , wenn "Ja "dann soll der Ausgang Portd.7 (Gelbe Led) eingeschaltet werden , wenn irgend eine andere Konstellation vorliegt soll Led Gelb aus bleiben.
Wenn man am Ausgang des Controllers nicht mit den bereitgestelltn 20 mA auskommt, sollte man einen Transistor nachschalten,somit kann man bei Standard Transistoren bis zu 200 mA ansteuern.

aktualisiert 07.06.2020
Copyright by Ms 2009