erstellt 06.02.2012
|
Ein Programm zum Test der Display Ausgabe
|
Nun
werden wir die ersten Programmzeilen schreiben die es uns ermöglichen
eine Textausgabe aufs Display zu bringen, vorausgesetzt bis zu diesem
Punkt ist alles korrekt gelaufen und die Schaltung funktioniert.
|
Also
zuerst öffnen wir das Programm "Bascom" gehen dann auf das erste Symbol
oben links , und öffnen damit eine neue Programmdatei.
Dann sollte eine leere Textdatei mit vorangestellten Zeilen Nummern erscheinen.
Anschließend geben wir die Prgrammzeilen wie in der folgende Tabelle gezeigt ein.
Aber Achtung ! Nur die
Programmzeilen ohne Zeilen Nummern ,die Beschreibung muss natürlich
nicht eingegeben werden kann aber zum besseren Verständnis mit
eingegeben werden , aber nur unter einer Bedingung, nämlich das jeweils
vor der Beschreibung ein ( ' ) eingeben wird das ist das Zeichen das
auf der gleichen Taste liegt wie das folgende Zeichen (#) allerdings
muss die Shift Taste festgehalten werden wenn das ( ' ) Zeichen benutzt
wird.
Das Zeichen ist sehr
wichtig weil sonst die Beschreibung als Programmzeile interpretiert
wird , und auf Grund diesen Hintergrunds mit Sicherheit eine
Fehlermeldung erscheint wenn anschließend das Programm Compiliert
wird.Also wenn die Programmzeichen in eine für den Mikrocontroller
eigene Sprache übersetzt wird.
|
Zeile
|
Programmzeile
|
Beschreibung
|
1
|
$regfile "m8def.dat"
|
Definiert den Atmega als Atmega8
|
2
|
$crystal = 1000000
|
Gibt die Quarzfrequenz an in Herz
|
3
|
$hwstack = 32
|
Defaultwert 32 Hardware reservierte Speicher
|
4
|
$swstack = 10
|
Defaultwert für Software reservierter Speicher
|
5
|
Config Lcd = 16 * 4
|
Deklariert das Display als ein von 2 mal 16 Zeichen
|
6
|
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 am Mikrocontroller die für das Display benutzt werden,
diese muss im Programm innerhalb einer Zeile stehen.
|
7
|
Do |
Anfang der Programmschleife
|
8
|
Lcd "Testanzeige" |
Ausgabe des Textes "Testanzeige"auf das Display
|
9
|
Waitms 100 |
Pause von 100 Millisekunden
|
10
|
Loop |
Schleifenrücksprung
|
|
Erläuterung zur Zeile 1:
In dieser Zeile wird ein Dateiname ( m8def.dat ) einer Datei angegeben
die sich im Verzeichnis vom Bascom befindet , beim Compilieren
wird durch Eingabe dieser Zeile diese jeweilige Datei
abgefragt in
welcher sich diverse Informationen befinden über den zur Zeit
verwendeten Mikrocontroller.
Unter anderem sind in dieser Datei Informationen über die Anzahl
der Ein Ausgabe Anschlüsse, über die Schnittstellen, über die
Größe des internen Speicher usw. enthalten.
Die Datei "m8def.dat" enthält nur die Informationen für den Atmega 8
Mikroprozessor, bei Verwendung beispielsweise eines Atmega 32 würde die
Datei "m32def.dat" heißen.
|
Erläuterung zur Zeile 2:
Hier steht die Information über die Interne Taktgeschwindigkeit des
Mikrocontroller, wird benötigt wenn zeitliche Berechnungen angestellt
werden müssen z.B. bei der Berechnung
von Warteschleifen und
dergleichen, aber darauf kommen wir bei gegebenen Anlass drauf zurück
weil es im Moment nur vom Eigentliche Thema ablenken würde
und es zu
Umfangreich für eine "nur kurze" Erklärung wäre.
|
Erläuterung zur Zeile 3:
Kommen wir später noch drauf zurück
|
Erläuterung zur Zeile 4:
Kommen wir später noch drauf zurück
|
Erläuterung zur Zeile 5:
Hier wird dem Mikroprozessor mitgeteilt was für ein Display
angeschlossen ist, in unseren Fall eine LCD Anzeige mit 2mal 16
Zeichen.
|
Erläuterung zur Zeile 6:
Hier wird dem Mikroprozessor mitgeteilt an welchen Anschlüssen das
Diplay angeschlossen ist, z.B Pin DB4 am Display ist verbunden mit
Portb.5 am Mikroprozessor.
|
Nachdem
diese Programm in den Mikrocontroller übertragen wurde, stellen wir
fest das die Anzeige auf dem Display
ähnlich einer Laufschrift
nicht still zu stehen
scheint,das liegt daran das nach dem Schreiben
des Textes in der nächsten
Programmschleife wieder der Text geschrieben
wird und dadurch an den vorigen Text angefügt wird, dies können wir
erfolgreich verhindern indem wir noch einen Befehl einsetzten ,
der das Display immer erst löscht , bevor der Text neu
ausgegeben wird.
Setzen wir also den befehl "CLS" noch in unser Programm ein .
Mit diesem Befehl wird Display vor jedem neuen Beschreiben erst gelöscht.
|
Zeile
|
Programmzeile
|
Beschreibung
|
1
|
$regfile "m8def.dat"
|
Definiert den Atmega als Atmega8
|
2
|
$crystal = 1000000
|
Gibt die Quarzfrequenz an in Herz
|
3
|
$hwstack = 32
|
Defaultwert 32 Hardware reservierte Speicher
|
4
|
$swstack = 10
|
Defaultwert für Software reservierter Speicher
|
5
|
Config Lcd = 16 * 4
|
Deklariert das Display als ein von 2 mal 16 Zeichen
|
6
|
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 am Mikrocontroller die für das Display benutzt werden,
diese muss im Programm innerhalb einer Zeile stehen.
|
7
|
Do |
Anfang der Programmschleife
|
8
|
CLS
|
Löscht das Display
|
9
|
Lcd "Testanzeige" |
Ausgabe des Textes "Testanzeige"auf das Display
|
10
|
Waitms 100 |
Pause von 100 Millisekunden
|
11
|
Loop |
Schleifenrücksprung
|
|
Nach einsetzen des Befehles zum Löschen "CLS" sollte die Anzeige auf dem Display wie folgt aussehen !
Es ist auch möglich den Text gezielt an einer bestimmten Position im Display zu setzen, dazu verwenden wir
den Befehl
"Locate".
Mit dem Befehl Locate den man in der Programmzeile einsetzen sollte
bevor der Befehl "LCD" für die Textausgabe
kommt können wir die
Koordinaten für das erste Zeichen des Ausgabetext setzen.
z.B.
Locate 1,2
Setzte den darauf folgenden Text in der 1. Zeile auf die 2. Spalte.
|
Zeile
|
Programmzeile
|
Beschreibung
|
1
|
$regfile "m8def.dat" '
|
Definiert den Atmega als Atmega8
|
2
|
$crystal = 1000000 '
|
Gibt die Quarzfrequenz an in Herz
|
3
|
$hwstack = 32 '
|
Defaultwert 32 Hardware reservierte Speicher
|
4
|
$swstack = 10 '
|
Defaultwert für Software reservierter Speicher
|
5
|
Config Lcd = 16 * 4
|
Deklariert das Display als ein von 2 mal 16 Zeichen
|
6
|
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 am Mikrocontroller die für das Display benutzt werden,
diese muss im Programm innerhalb einer Zeile stehen.
|
7
|
Do |
Anfang der Programmschleife
|
8
|
cls
|
Löscht das Display
|
|
Locate 1,4
|
Textausgabe in Zeile 1 ab Spalte 4
|
9
|
Lcd "Testanzeige" |
Ausgabe des Textes "Testanzeige"auf das Display
|
10
|
Waitms 100 |
Pause von 100 Millisekunden
|
11
|
Loop |
Schleifenrücksprung
|
|
Das Ergebnis solle jetzt so aussehen !
 |
Zeile
|
Programmzeile
|
Beschreibung
|
1
|
$regfile "m8def.dat" '
|
Definiert den Atmega als Atmega8
|
2
|
$crystal = 1000000 '
|
Gibt die Quarzfrequenz an in Herz
|
3
|
$hwstack = 32 '
|
Defaultwert 32 Hardware reservierte Speicher
|
4
|
$swstack = 10 '
|
Defaultwert für Software reservierter Speicher
|
5
|
Config Lcd = 16 * 4
|
Deklariert das Display als ein von 2 mal 16 Zeiechen
|
6
|
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 am Mikrocontroller die für das Display benutzt werden,
diese muss im Programm innerhalb einer Zeile stehen.
|
7
|
Do |
Anfang der Programmschleife
|
8
|
cls
|
Löscht das Display
|
9
|
Lcd "Testanzeige" |
Ausgabe des Textes "Testanzeige"auf das Display
|
10
|
Waitms 100 |
Pause von 100 Millisekunden
|
11
|
Loop |
Schleifenrücksprung
|
|
|
|
|
Genauso ist es auch möglich die Textzeile in der unteren Hälfte der Anzeige auszugeben
|
Oft gemachte Fehler
|
- Sollten
keine Anzeige erscheinen, so ist einer der häufigsten Gründe ein falsch
angeschlossenes Display - Dann sollte man zuerst die Display
Spannungsversorgung prüfen, also Plus 5 Volt und Masse.
-
Eine weiterer möglicher Fehler ist eine falsch eingestellte oder gar
fehlende Kontrastspannung die an den meisten Anzeigen an Pin 3
vorhanden sein muss.Es erscheinen dann meist nur Quadratische Kästchen.
-
Sollte zwar eine Anzeige vorhanden sein, aber es werden irgend welche
Hieroglyphen angezeigt, so liegt es meist an vertauschte Datenleitungen.
- Gibt die
Anzeige gar kein Zeichen aus, sollte überprüft werden ob das richtige
Display angeschlossen ist, es gibt Displays die eine fast identische
Bezeichnung haben, bei denen aber die Anschlüsse für Plus (Pin 2) und Gnd (Pin 1) vertauscht sind.
-
Und wenn die Anzeige läuft ( Laufschrift) liegt es meist an fehlender Reset Leitung.
- Erscheint in
der ersten Zeile Spalte 1 ein unkontrolliertes Zeichen könnte die JDTAG
Schnittstelle noch aktiv sein und so verhindern das die Schnittstelle
für das Display frei ist.
- Zuerst erscheint gar nichts auf dem Display, hab dann
erkannt das die JTAG Schnittstelle bei einem neuen Atmega Baustein
standardmäßig aktiviert ist. damit sind dann die Pin C5. C4-C3 -C3-C2
beim Atmega 32 als DTAG definiert und nicht als normale Pins verfügbar, also auch
nicht für das Display.
|
- Häufig
wird auch der Fehler begangen das der Befehl "$Sim" der bisweilen für
die Simulation gebraucht wird, anschließend vergessen wird wieder aus
dem Programm zu entfernen, das bewirkt dann meist das im Display nur
eine Reihe mit Quadrate angezeigt wird ,der Befehl " $SIM "
bewirkt das der Bascom eigene Simulator alle Pausen bzw. "Wait"
Instruktionen ignoriert, sonst würde die Simulation mitunter sehr sehr
lange laufen.
|
Aktualisiert 22.12.2019
|
Copyright by Ms 2009
|