PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD ansteuern



Murus
17.09.2005, 10:49
Hallo zusammen,

Ich suche ein Beispielprogramm, wie mit Bascom ein ganz normales LCD angesteuert wird (4 Bit).
Hab einen ATmega 8 und ein 2*20er.
Hats irgendwo im Netz ein Beispielprogramm?

Herzliche Grüsse
Mario

Bratwurst
17.09.2005, 11:20
Guten Morgen,

guckst du hier: http://www.rowalt.de/mc/avr/avrboard/01/avrb01.htm
in der Zip Datei mit den Listings findest du für fast alles Beispiele.
Das Listing mit dem LCD Beispiel musst du dir raussuchen, dort ist aber dann auch die richtige Kontaktbelegung in den Kommentaren mitgeschrieben.

Ansonsten auch immer mal bei den Bascom Beispiellistings (LCD.BAS) vorbeischauen oder in der Hilfe.

Viel Erfolg
Paul

Murus
17.09.2005, 11:42
Ah, habs gefunden, in den Samples von Bascom!

Nur: Wo sag ich dem Ding, an welchem Port was hängt? Unter Optionen?

17.09.2005, 11:57
UNter Optionen oder du schreibst einfach das noch in dein Programm rein:

Config Lcd = 20 * 2 ' größe des LCDs
Config Lcdpin = Pin , E = Portc.4 , Rs = Portc.5 , Db7 = Portc.3 , Db6 = Portc.2 , Db5 = Portc.1 , Db4 = Portc.0 'pinbelegung

du musst nur noch die Lcdpins an deine eigenen anpassen.

Gruß Javik

Murus
17.09.2005, 12:22
Dank dir vielmals!!!!
Muss ich die Ports, an denen das LCD häng als Output oder Input definieren oder garnix?

Herzlichen Gruss
Mario

Murus
17.09.2005, 13:10
Hmm, irgendwo hats noch nen Wurm drin.
Hier ist mal mein Code:

$regfile="m8def.dat"
$crystal=1000000

$lib "lcd4.lbx"
Config LCD=20*2
Config Lcdpin= Pin, E=Portd.6, Rs= Portd.4, db7=Portd.3 , db6= Portd.2, Db5=Portd.1, db4=Portd.0

Cls
Lcd "test"

End


Könnt ihr den mal schnell angucken? Stimmt der so? Sollte es so gehen oder habe ich etwas vergessen?

Denn: Wenn ich Saft auf diese Schaltung gebe, dann Leuchtet das LCD und die obere Zeile erscheint als schwarzer Balken. Wenn ich den Kontrast hochdrehe, verschwindet der Balken.

Was ist los?

Herzliche Grüsse
Mario

Marco78
17.09.2005, 15:20
Warum auch mal die Suche befragen oder auf das hören, was ein andere schon vorher gesagt haben???

Der schwarze Blaken ist der Poweron Selftest. as muss so. Wenn du den Kontrast hochdrehst, wird der Balken dunkler und die zweite Zeile auchetwas dunkel. Wenn du den Kontrast runter drehst, geht der Balken weg.

Der Code ist soweit richtig. Die LIB kannst du mal auskommentieren. Vielleicht geht es dann.
Alles weitere kann man nur sagen, wenn man die Schaltung sieht. Ob wirklich ein 1MHz Quarz dran ist, (sofern der Takt nicht von intern kommt) ob die Pins richtig angeschlossen sind.
Ich denke mal die anderen Tipps, R/W und D0-D3 auf Masse legen hast du beherzigt.

Murus
17.09.2005, 15:56
Ok, hab die Hardware nochmals neu verkabelt, war aber vorher schon richtig dran.
Vor Cls hab ich noch 10ms Pause eingelegt und die Lib draussen.
Jetzt gehts.

Gruss
Mario

oe9vfj
17.09.2005, 16:18
Wenn die LCD-Pins entweder mit dem entsprechenden Config Befehl oder in den Options definiert sind, darf

$lib "lcd4.lbx"
nicht verwendet.
BASCOM bietet mit dem Config Befehl bzw. den Options die Möglichkeit, jeden beliebigen Pin für das LCD verwenden.

Hat man die 4 Datenpins (db4-db7) auf den Pins 4-7 und die anderen Steuerleitungen E, RS im selben Port kann man anstattdessen die oben erwähnte Lib lcd4.lbx verwenden.
Diese LIB ist geschrieben für:


;Rs = PortB.0
; E = PortB.2
;Db4 = PortB.4 the data bits must be in a nibble to save code
;Db5 = PortB.5
;Db6 = PortB.6
;Db7 = PortB.7

Wenn andere Ports benützt werden, bzw die RS oder E Leitung nicht übereinstimmt, muss diese LIB entsprechend geändert werden.
Ein entsprechende Erläuterung befindet sich im Kopf der Datei LCD4.LIB. Das Verwenden dieser Lib generiert einen optimierten Code für diesen Fall.

Für einen Neuling wird die Verwendung des Config-Befehls bzw. die Option Eintellung der einfachere und sichere Weg sein.

Murus
18.09.2005, 13:46
Hmm, wie kann man eine bestimmte Stelle im LCD löschen?
Wie heisst der Befehl?

Greets
Mario

Marco78
18.09.2005, 13:54
HALLO
Sei doch nicht immer so ungeduldig und warte mal die Antworten ab. Und verteil deine Fragen nicht immer auf x Beiträge. Von mir aus in x Foren, aber es ist unnötig hier zu fragen wie man eine Stelle löscht, wenn das Problem in deiner ADC-Abfrage gebraucht wird!

https://www.roboternetz.de/phpBB2/search.php
Diesen Link kannst du auch für fast alle deine Fragen benutzen.

Oder einfach mal selbst etwas überlegen. Du willst an der Stelle 2,4 auf dem LCD was gelöscht haben. Also an der Stelle ein Leerzeichen schreiben.
Locate 2,4
LCD " "

Xaver
12.11.2005, 18:02
Ich wollt das mit dem LCD Display auch mal ausprobiern.

Ich habe ein 27x4 Display, also mit zwei Kontrollern und E1 sowie E2

Dann habe ich mir mit etwas mühe die Initialisierung geschrieben und vier Zeichen. freu \:D/ nun möchte ich diese LCD.lib verwenden (oder ähnliches) um mir das arbeiten etwas zu erleichtern.

hier mein Bisheriger Code . jaja etwas lang, dafür aber übersichtlich


$regfile = "m8def.dat"
$crystal = 8000000

Ddrd = &HFF

Rs Alias Portd.0
Rw Alias Portd.1
E1 Alias Portd.2
E2 Alias Portd.3
D4 Alias Portd.4
D5 Alias Portd.5
D6 Alias Portd.6
D7 Alias Portd.7


Dim A As Byte


'--Hauptprogram-----------------


Waitms 150

Rs = 0 'Interface auf 8-Bit setzen
Rw = 0
D7 = 0
D6 = 0
D5 = 1
D4 = 1
E1 = 1
nop
E1 = 0
Waitms 5

Rs = 0 'Interface auf 8-Bit setzen
Rw = 0
D7 = 0
D6 = 0
D5 = 1
D4 = 1
E1 = 1
nop
E1 = 0
Waitus 40

Rs = 0 'Interface auf 8-Bit setzen
Rw = 0
D7 = 0
D6 = 0
D5 = 1
D4 = 1
E1 = 1
nop
E1 = 0
Waitus 40

Rs = 0 'Interface auf 4-Bit setzen
Rw = 0
D7 = 0
D6 = 0
D5 = 1
D4 = 0
E1 = 1
nop
E1 = 0
Waitus 40

Rs = 0 'Interface auf 2 Zeilen setzen
Rw = 0
D7 = 0
D6 = 0
D5 = 1
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 0
Rw = 0
D7 = 1
D6 = 0
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0
Waitus 40

Rs = 0 'Display aus
Rw = 0
D7 = 0
D6 = 0
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 0
Rw = 0
D7 = 1
D6 = 0
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0
Wait 2

Rs = 0 'Display löschen
Rw = 0
D7 = 0
D6 = 0
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 0
Rw = 0
D7 = 0
D6 = 0
D5 = 0
D4 = 1
E1 = 1
nop
E1 = 0
Waitms 2

Rs = 0 'Kursor nach rechts wandern
Rw = 0
D7 = 0
D6 = 0
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 0
Rw = 0
D7 = 0
D6 = 0
D5 = 1
D4 = 0
E1 = 1
nop
E1 = 0
Waitms 2

Rs = 0 'Display ein
Rw = 0
D7 = 0
D6 = 0
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 0
Rw = 0
D7 = 1
D6 = 1
D5 = 1
D4 = 0
E1 = 1
nop
E1 = 0
Waitus 40

Rs = 1 'Ein zeichen H in den Speicher Schreiben
Rw = 0
D7 = 0
D6 = 1
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 1
Rw = 0
D7 = 1
D6 = 0
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0
Waitus 40

Rs = 1 'Ein zeichen e in den Speicher Schreiben
Rw = 0
D7 = 0
D6 = 1
D5 = 1
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 1
Rw = 0
D7 = 0
D6 = 1
D5 = 0
D4 = 1
E1 = 1
nop
E1 = 0
Waitus 40

Rs = 1 'Ein zeichen l in den Speicher Schreiben
Rw = 0
D7 = 0
D6 = 1
D5 = 1
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 1
Rw = 0
D7 = 1
D6 = 1
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0
Waitus 40

Rs = 1 'Ein zeichen l in den Speicher Schreiben
Rw = 0
D7 = 0
D6 = 1
D5 = 1
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 1
Rw = 0
D7 = 1
D6 = 1
D5 = 0
D4 = 0
E1 = 1
nop
E1 = 0
Waitus 40
Rs = 1 'Ein zeichen o in den Speicher Schreiben
Rw = 0
D7 = 0
D6 = 1
D5 = 1
D4 = 0
E1 = 1
nop
E1 = 0

Rs = 1
Rw = 0
D7 = 1
D6 = 1
D5 = 1
D4 = 1
E1 = 1
nop
E1 = 0
waitus 40

End


dann abe ich folgendes geschrieben, doch ich habe dann immer nur zwei schwarze Balken.


$regfile="m8def.dat"
$crystal = 8000000


Config Lcd = 20 * 2
Config Lcdpin = Pin , E = Portd.2 , Rs = Portd.0 , Db7 = Portd.7 , Db6 = Portd.6 , Db5 = Portd.5 , Db4 = Portd.4

Cls
Lcd "test"

End


Gruß olaf

linux_80
13.11.2005, 12:04
Hallo Xaver,
da hast Du dir ja ein haufen Arbeit gemacht jedes Bit einzeln anzusteuern ;-)

Wenn man die Hilfe vom Bascom anschaut, sieht man das das RW Bit nicht verwendet wird, entweder fest auf GND, oder vorher auf 0 setzen und noch mal den InitLCD aufrufen.

PS:
Das ist alles die letzten Tage in diversen Threads schon mal beantwortet worden.

Xaver
13.11.2005, 16:47
jo hab das nun entlich auch mit dem 27x4 Display hinbekommen.

dank dem Besipielcode bei dem RN-Mega 8 board