Probleme bei Code für LCD (EADIP204)
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.
Code:
'*****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?
Hier nochmal ein übersichtlicher code für ks0073 controller
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
Code:
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