PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Displays mit einem Atmel Mega 8 ansteuern



mirco99
07.12.2006, 18:55
Hallo,

habe gerade ein Problem mit der Ansteuerung von 4 LCD Displays über 4 bit. Alle Datenleitungen sind Parallel und die Enable einzeln auf Ports geschaltet.

Wenn ich die displays mit Config lcdpin initialisieren will,kann ich ja nur mit E= einen Port angeben, ich benötige aber 4 um alle Displays zu initialisieren.
Schalte ich alle Enableports vor der init auf 1 geht keines der displays
Bitte um schnelle Hilfe.

Danke euch

Gento
07.12.2006, 19:17
Das geht ganz sicher nur wenn Du jedes Bit selbst bewegst ohne Bascom LCD -Code.Und mit Bit meine ich jedes Zeichen selbst zu Fuß übertragen.

Gento

mirco99
07.12.2006, 19:34
hast du da einen quellcode für mich ?

coCo
07.12.2006, 19:35
Hi,
wenn ich das richtig verstehe sind die Datenleitungen die selben?
Also das Wintek von Pollin hat ja auch 2 Controller und wird auch wie 2 LCDs angesteuert. Ich schick dir mal den Code wie ich das Display ansteuere:

Config Lcdpin = Pin , E = Portc.1 , E2 = Portc.2 , Rs = Portc.0 , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.2 , Db7 = Portd.4
Config Lcd = 40 * 4

___lcdno = 0
Initlcd
Cls
Cursor Off

___lcdno = 1
Initlcd
Cls
Cursor Off

Das wäre die Initialisierung. Wenn du nun was ausgeben willst, musst du ___lcdno die Nummer des Displays übergeben. Also um auf dem Display welches an E2 hängt (Enable Leitung) auszugeben, musst du folgendes schreiben:



___lcdno = 1
Locate 1 , 1
Lcd "Hallo"


Hoffe du hast es verstanden.

MfG

mirco99
07.12.2006, 19:41
an der Geschichte sind wir auch gerade dran.
leider haben wir ja 4 Displays

und mit 2en wills nicht funktionieren, da wir eine andere Initialisation benötigen. es sind DOG-M Displays

hat jemand sonst noch eine idee?

Gento
08.12.2006, 06:54
Wo liegt Dein Problem @mirco99 ?

Kannst Du kein Datenblatt vom LCD lesen und das selbst umsetzen oder läßt Du lieber andere Deine Arbeit machen aus Kostengründen ?

Gento

mirco99
08.12.2006, 08:42
Hi Gento,

ich dachte das ist hier ein Forum, wo man gerne hilft!
Ich bin Anfänger in der Programmierung. Wenn ein erfahrener Programmierer das hier liest und die Augen verdreht, da er es aus dem ff beherscht, dann soll er sich entweder die Zeit nehmen und es erklären oder gleich weiterklicken.
Ich habe nun mal Privat ein größeres Projekt vor. Ob ich damit jemals was verdienen könnte, ist weit entfernt. Ich versuche es so zu entwickeln, als wäre es bereits ein kommerzielles Produkt. Und träumen darf doch noch jeder oder? Ich könnte mich über solche sprüche nur aufregen, aber est ist noch zu früh, da ich gestern sehr lange an diesem Problem gesessen habe und gefrustet für diesen Tag aufgegeben habe.


Wenn ich nur ein Display mit der richtigen initialisierung anspreche mit

Config Lcdpin = Pin , E = Portc.1 , Rs = Portc.0 , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.2 , Db7 = Portd.4

dann funktioniert es.

An dem Beispiel was mir coco geschickt hat, kann ich 2 Displays betreiben, diese bleiben bei mir dann aber ohne funktion.

jetzt bin ich gerade an der bit für bit programmierung,da ich 4 Displays ansprechen muss, leider noch ohne Erfolg.


Die initialisierung habe ich aus einem anderen Beitrag umgeschrieben.

$regfile = "m168def.dat"
'ATmega168
$crystal = 1000000 'Quarz: 1
MHz
Config Portc = Output
'DOG 162, 4bit, 5 Volt
'Portc.0 = D4
'Portc.1 = D5
'Portc.2 = D6
'Portc.3 = D7
'Portc.4 = E
'Portc.5 = RS

' ---------------------- LCD DOG162 Init ---------------------
Dog:
Portc = &B00000011 : Gosub Enbl : Waitms 2 ' dummy Funktion Set
Portc = &B00000011 : Gosub Enbl : Waitms 2 ' dummy Funktion Set
Portc = &B00000011 : Gosub Enbl : Waitms 2 ' dummy Funktion Set
Portc = &B00000010 : Gosub Enbl : Waitms 1 ' dummy Funktion Set
Portc = &B00000010 : Gosub Enbl : Waitms 1 ' Funktion Set 1
Portc = &B00001001 : Gosub Enbl : Waitms 1 ' Funktion Set 2
Portc = &B00000001 : Gosub Enbl : Waitms 1 ' Bias 1
Portc = &B00001100 : Gosub Enbl : Waitms 1 ' Bias 2
Portc = &H5 : Gosub Enbl : Waitms 1 'Power/Icon/Contrast 1
Portc = &H2 : Gosub Enbl : Waitms 1 'Power/Icon/Contrast 2
Portc = &H6 : Gosub Enbl : Waitms 1 ' Follower control 1
Portc = &H9 : Gosub Enbl : Waitms 1 ' Follower control 2
Portc = &H7 : Gosub Enbl : Waitms 1 ' Contrast Set 1
Portc = &H4 : Gosub Enbl : Waitms 1 ' Contrast Set 2
Portc = &B00000000 : Gosub Enbl : Waitms 1 ' Display On 1
Portc = &B00001111 : Gosub Enbl : Waitms 1 ' Display On 2
Portc = &B00000000 : Gosub Enbl : Waitms 1 ' Clear Display 1
Portc = &B00000001 : Gosub Enbl : Waitms 2 ' Clear Display 2
Portc = &B00000000 : Gosub Enbl : Waitms 1 ' Entry Mode Set 1
Portc = &B00000110 : Gosub Enbl : Waitms 1 ' Entry Mode Set 2
Portc = &B00000000
Return
Enbl: ' Enable ein
Set Portc.4
Waitus 400 ' Enable aus
Reset Portc.4
Return

Nach datenblatt wollte ich testweise ein Zeichen ausgeben.
Bin gerade in der Firma und da habe ich den Quellcode nicht.
Ich beachte RS , E , und R/W
Aber irgendwas mache ich da noch falsch.

Benutze diese allgemeine Anleitung:

http://sprut.de/electronic/lcd/index.htm

chr-mt
09.12.2006, 14:19
Hi,
ich hatte mal 10 8*2 LCD Displays an einem Mega 32 betrieben.
Allerdings mit 8 Bit Ansteuerung. Code finde ich bestimmt nicht mehr.
Hilft dir also erstmal nicht viel weiter ;)
Aber wenigstens kann ich dir sagen, daß es grundsätzlich geht, also probier' mal weiter, klappt bestimmt noch.
Die LCD Befehle von Bascom bringen dir aber gar nix, wie schon gesagt wurde.
Mußt das eben "zu Fuß" machen.
Die DOG Displays übernehmen, soweit ich mich erinnere, ihre Einstellungen für Kontrast etc. nur nach einem Reset des Displays.
Wenn du also nur ein neues Programm in den µC schickst, ohne das Display zu resetten, tut sich nix...

Gruß
Christopher

jojo3
09.12.2006, 17:28
Hallo ich hab mal 2 displays angesteuert indem ich das Enable
über 2 externe und-Gatter geschaltet habe und dann
vor dem LCD-Befehl über 2 Controller-Ausgänge das jeweilige
Display ausgewählt habe. Hat einwandfrei funktioniert.

mirco99
10.12.2006, 09:13
Hi,

Die DOG Displays übernehmen, soweit ich mich erinnere, ihre Einstellungen für Kontrast etc. nur nach einem Reset des Displays.
Wenn du also nur ein neues Programm in den µC schickst, ohne das Display zu resetten, tut sich nix...

Gruß
Christopher

Ja am timig des Res und E liegt es auf jeden Fall.
Ich berichte euch, wenn es fortschritte gibt.