PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme bei Code für LCD (EADIP204)



Foooob
08.03.2006, 12:47
Hallo

Ich arbeite gerade an einem Code um mein LCD (EADIP204) mit einem KS0073 Chip (von Robotikhardware) anzusteuern.
Meinen Code hab ich mir aus einigen Codeschnippseln (auch hier im Forum) zusammegebastelt, bis jetzt sieht das Programm folgendermaßen aus.



'*****LCD*****
'PB3 - E
'PB4 - RS

'PD2 - PIN11 - D4
'PD3 - PIN12 - D5
'PD4 - PIN13 - D6
'PD5 - PIN14 - D7
'**************

$regfile = "m32def.dat" 'ATmega32
$crystal = 11059200 'Quarz: 11059200 Hz

Declare Sub Lcdwrite

Dim Zeichen As Byte

Ddra = &B00000000
Ddrb = &B00000000
Ddrc = &B00000000
Ddrd = &B00000000

Porta = &B00011111
Portb = &B00000111
Portc = &B11111100
Portd = &B00000000

'Pins des LCD-Modules

Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portb.3 , Rs = Portb.4

Initlcd

Config Lcd = 20 * 4a
'Config Lcdbus = 4

Call Lcdwrite(&B00101100)
Waitms 5

Call Lcdwrite(&B00001001)
Waitms 5

Call Lcdwrite(&B00101000)
Waitms 5

Call Lcdwrite(&B00000110)
Waitms 5

Call Lcdwrite(&B00001100)
Waitms 5

Do

Locate 1 , 1 'Spalte 1 und Zeile 1 des Displays
Lcd "Hallo" 'Displayausgabe
Waitms 50 '50 Millisekunden Warten um Flimmern zu vermeiden
Cls 'Display löschen


Loop

'Schreibt die Initialisierungs - Bits zum LCD
Sub Lcdwrite

' Höherwertiges Nibble setzen
If Zeichen.4 = 1 Then Portd.2 = 1 Else Portd.2 = 0
If Zeichen.5 = 1 Then Portd.3 = 1 Else Portd.3 = 0
If Zeichen.6 = 1 Then Portd.4 = 1 Else Portd.4 = 0
If Zeichen.7 = 1 Then Portd.5 = 1 Else Portd.5 = 0
' Höherwertiges Nibble übertragen
Portb.3 = 1
Waitms 1
Portb.3 = 0
Waitms 1

' Niederwertiges Nibble setzen
If Zeichen.0 = 1 Then Portd.2 = 1 Else Portd.2 = 0
If Zeichen.1 = 1 Then Portd.3 = 1 Else Portd.3 = 0
If Zeichen.2 = 1 Then Portd.4 = 1 Else Portd.4 = 0
If Zeichen.3 = 1 Then Portd.5 = 1 Else Portd.5 = 0
' Niederwertiges Nibble übertragen
Portb.3 = 1
Waitms 1
Portb.3 = 0
Waitms 1

End Sub

End


Wenn ich den Code kompilieren will sagt mir BASCOM jedoch folgendes

"Error 130 Line 56 [u.a.] Incorrect number of parameter....usw."

Line 56,.... bezieht sich auf die Zeilen

Call Lcdwrite(&B00101100)
...
Call Lcdwrite(&B00001001)
....
usw

Nur ich finde den Fehler nicht, was ist daran genau falsch?

x-ryder
08.03.2006, 16:27
du solltest vielleicht mal nen parameter bei der sub reinpacken ^^ du übergibst ja einen, aber die sub hat keinen ^^

Martin

Foooob
08.03.2006, 16:31
Sorry wenn ich nachfragen muss aber was meinst du damit genau, die Sub betreffend?

x-ryder
08.03.2006, 16:41
Declare Sub Lcdwrite(byval zeichen as byte)

...

Sub Lcdwrite(byval zeichen as byte)
...
End Sub

patti16
08.03.2006, 17:50
klappt das Programm bei dir??



gruß
patrick

Foooob
08.03.2006, 19:24
Es klappt leider nicht, ich weis nicht warum. Irgendwas muss an der Initialisierung noch nicht stimmen. Es wird kein einziges Zeichen auf dem LCD angezeigt, nur die Kontrastbeleuchtung ist zu sehen.

Das ist mein momentaner Code, er wurde leicht modifiziert - Ich habe vorhin auch noch vergessen die Pins des LCDs als Ausgänge zu setzen. Trotz dieser Änderung tut sich aber nichts. Auch habe ich dem LCD 100ms Sekunden zum initialisieren gegeben - Auch das änderte nichts.



'*****LCD*****
'PB3 - E
'PB4 - RS

'PD2 - PIN11 - D4
'PD3 - PIN12 - D5
'PD4 - PIN13 - D6
'PD5 - PIN14 - D7
'**************

$regfile = "m32def.dat" 'ATmega32
$crystal = 11059200 'Quarz: 11059200 Hz

Declare Sub Lcdwrite(byval Zeichen As Byte)



Ddrb = &B00011000
Ddrd = &B00111100


'Pins des LCD-Modules

Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portb.3 , Rs = Portb.4
Waitms 100 'Zeit damit das LCD initialisieren kann
Initlcd
Cls 'LCD löschen

Config Lcd = 20 * 4a
'Config Lcdbus = 4


Call Lcdwrite(&B00101100)
Waitms 5

Call Lcdwrite(&B00001001)
Waitms 5

Call Lcdwrite(&B00101000)
Waitms 5

Call Lcdwrite(&B00000110)
Waitms 5

Call Lcdwrite(&B00001100)
Waitms 5


Do


Locate 1 , 1 'Spalte 1 und Zeile 1 des Displays
Waitms 50
Lcd "Hallo" 'Displayausgabe



Loop

'Schreibt die Initialisierungs - Bits zum LCD
Sub Lcdwrite(byval Zeichen As Byte)

' Höherwertiges Nibble setzen
If Zeichen.4 = 1 Then Portd.2 = 1 Else Portd.2 = 0
If Zeichen.5 = 1 Then Portd.3 = 1 Else Portd.3 = 0
If Zeichen.6 = 1 Then Portd.4 = 1 Else Portd.4 = 0
If Zeichen.7 = 1 Then Portd.5 = 1 Else Portd.5 = 0
' Höherwertiges Nibble übertragen
Portb.3 = 1
Waitms 1
Portb.3 = 0
Waitms 1

' Niederwertiges Nibble setzen
If Zeichen.0 = 1 Then Portd.2 = 1 Else Portd.2 = 0
If Zeichen.1 = 1 Then Portd.3 = 1 Else Portd.3 = 0
If Zeichen.2 = 1 Then Portd.4 = 1 Else Portd.4 = 0
If Zeichen.3 = 1 Then Portd.5 = 1 Else Portd.5 = 0
' Niederwertiges Nibble übertragen
Portb.3 = 1
Waitms 1
Portb.3 = 0
Waitms 1

End Sub

End

molleonair
09.03.2006, 18:42
hier mein code für 20*4 EADIP204 mit KS0073
wo du oben einfach die pins änderst
schaus dir an ist total simpel
einfach compilen und ab in den chip

gruß daniel





Dim Zeichen As Byte
Declare Sub Zumdisplay(byval Zeichen As Byte) 'funktion zum senden an das display

Db4dis Alias Portc.5 'hier einfach die belegung einstellen das wars
Db5dis Alias Portc.4
Db6dis Alias Portc.3
Db7dis Alias Portc.2
Rsdis Alias Portc.1
Enabledis Alias Portc.0

Config Lcdpin = Pin , Db4 = Db4dis , Db5 = Db5dis , Db6 = Db6dis , Db7 = Db7dis , E = Enabledis , Rs = Rsdis

Initlcd
Call Zumdisplay(&B00101100) 'aufruf zum initialisieren
Waitms 5 'des display controllers
Call Zumdisplay(&B00001001)
Waitms 5
Call Zumdisplay(&B00101000)
Waitms 5
Call Zumdisplay(&B00000110)
Waitms 5
Call Zumdisplay(&B00001100)
Waitms 5
Config Lcd = 20 * 4a 'display als 20 zeichen mal 4 zeilen


Cls

Locate 1 , 1
Lcd "Hello"
Locate 2 , 1
Lcd "world"

End


Sub Zumdisplay(byval Zeichen As Byte)

' Höherwertiges Nibble setzen
If Zeichen.4 = 1 Then Set Db4dis Else Reset Db4dis
If Zeichen.5 = 1 Then Set Db5dis Else Reset Db5dis
If Zeichen.6 = 1 Then Set Db6dis Else Reset Db6dis
If Zeichen.7 = 1 Then Set Db7dis Else Reset Db7dis

' höherwertiges nibble übertragen
Set Enabledis
Waitms 5
Reset Enabledis
Waitms 5

' Niederwertiges Nibble setzen
If Zeichen.0 = 1 Then Set Db4dis Else Reset Db4dis
If Zeichen.1 = 1 Then Set Db5dis Else Reset Db5dis
If Zeichen.2 = 1 Then Set Db6dis Else Reset Db6dis
If Zeichen.3 = 1 Then Set Db7dis Else Reset Db7dis

' Niederwertiges Nibble übertragen
Set Enabledis
Waitms 5
Reset Enabledis
Waitms 5

End Sub

Foooob
10.03.2006, 13:22
Ich hab das mal ausprobiert und es ging nicht. Langsam glaube ich, dass das LCD ´ne Macke hat, das kann doch nicht sein oder? Auch habe ich mal die Datenpins von D2/D3/D4.... auf A0/A1/A2 verlegt. Habe schon von einigen gelesen dass ihnen das half - Mir jedoch nicht. Ich weis nun nicht mehr was machen, das Ding will einfach nicht laufen!

molleonair
10.03.2006, 16:35
lad dir mal n lcd testprogramm für parallelport runter
und häng dein display dran
so hab ich meins auch zum starten gekriegt
hatte auch probleme das es anfangs nicht wollt
beschaltung am parallelport ist total simpel kann ich dir durchgeben bei bedarf

hab mir das CFAH_wintest von crystalfontz gezogen und dann liefs

Vitis
10.03.2006, 18:01
also ich betreib das
ea-dip204 immer im 4-bit-modus,
dafür hänge ich dann aber d0 bis d3 an gnd.

es gab hier im forum aber auch mal ne lib für die
initialisierung des lcd unter bascom

Foooob
10.03.2006, 19:59
So langsam könte ich dem auf die Schliche kommen. Ich habe nämlich D0-D3 nicht auf GND gesetzt. Das habe ich zwar nun nachgeholt aber gehen tut es immer noch nicht.

EDIT:
Wie ist das denn mit dem Reset Pin? Den kann ich doch auch einfach unangeschlossen lassen oder? Und die Ports für die LCD Ansteuerung muss ich schon auch auf Ausgang setzen?

Vitis
11.03.2006, 16:10
also ich hab den Reset offen gelassen und das hat bisher
auch so funktioniert.

Die Pins brauchste nicht explizit als Ausgänge zu setzten ,das wird
durch die Config LCD schon gemacht.

ich hab dir mal die lib fürs ea-dip 204 angehängt.

D4=PortA0
D5=PortA1
D6=PortA2
D7=PortA3
E=PortD5
RS=PortD4

patti16
11.03.2006, 18:40
wo hasten die lib versteckt?;)

Vitis
12.03.2006, 13:12
seltsam, die hatte ich an den Beitrag mit hoch geladen ...

hier noch mal:

patti16
12.03.2006, 14:08
danke.


gruß
patrick