du solltest vielleicht mal nen parameter bei der sub reinpacken ^^ du übergibst ja einen, aber die sub hat keinen ^^
Martin
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.
Wenn ich den Code kompilieren will sagt mir Bascom jedoch folgendesCode:'*****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
"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?
du solltest vielleicht mal nen parameter bei der sub reinpacken ^^ du übergibst ja einen, aber die sub hat keinen ^^
Martin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Sorry wenn ich nachfragen muss aber was meinst du damit genau, die Sub betreffend?
Declare Sub Lcdwrite(byval zeichen as byte)
...
Sub Lcdwrite(byval zeichen as byte)
...
End Sub
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
klappt das Programm bei dir??
gruß
patrick
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.
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(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
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
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!
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
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
Vor den Erfolg haben die Götter den Schweiß gesetzt
Lesezeichen