poste mal bitte deinen bascom-code!
Hallo zusammen,
mal wieder ein Problem mit einem LCD, hängt Euch bestimmt schon zum Hals raus das Thema aber.....wat mut, dat mut
Es handelt sich um ein 2-zeiliges, 8-stelliges Display mit KS0073/HD44780 kompatiblem Chip, das bei mir kein Zeichen zur Anzeige bringt. Das einzige was immer permanent angezeigt wird ist der schwarze Balken in der ersten Zeile, sonst regt sich nichts. Ich hab schon alles mögliche versucht...Verdrahtung 100-fach kontrolliert (ja, Kontrast funktioniert, Standard-Pinbelegung für 4-Bit-Modus: DB4=Portb.4, DB5=Portb.5, DB6=Portb.6, DB7=Portb.7, E=Portb.2, RS=Portb.0)
Ich hab sogar schon manuell eine Initialisierungssequenz für den 4-Bit-Modus nach Datenblatt KS0073 geschrieben und verschiedene Libs getestet, alles ohne Erfolg. Keine Sorge, das Display hab ich auch schon getauscht, die Spannungsversorgung ist o.k. der Debugger vom AVR-Studio zeigt die richtigen Signale auf den Ports.... ich weiß nicht mehr weiter, hat jemand eine grundlegende Idee? Ach ja, ich verwende einen Tiny26, falls das interessiert...
Gruß
Heiner
poste mal bitte deinen bascom-code!
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
na gut, vielleicht kann man das folgende als Diskussionsgrundlage gebrauchen:
Der Simulator läuft übrigens prima. Könnte es vielleicht sein, daß eine Anpassung der Lib für das Modul notwendig ist? Leider kann ich mit der Demo-Version anscheinend keine Änderungen vornehmen.Code:'############################################# '# Compiler Anweisungen '############################################# $crystal = 2000000 '2 MHz, $regfile = "At26def.dat" 'Tiny26 '$sim '$lib "lcd4busy.lib" 'testweise $lib "lcd4.lbx" '############################################# '# Hardware initialisieren '############################################# Ddra = &B10011011 'DDRA 7,4,3,1,0 Ausgang / 6,5,2 Eingang Porta = &B01000000 'Pullup an 6 Ddrb = &B11111111 'DDRB alle Ausgang 'Portb = &B00000000 'testweise 'EA DIPS082, Reichelt 2*8 Zeichen 'bereits in Options/Compiler/LCD eingestellt: 'Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.0 , E = Portb.2 'Config Lcd = 16 * 2 '16*2 als Grundlage 'Config Lcdbus = 4 '4-Bit Bus 'Config Lcdmode = Port 'Data mode: PIN '############################################# '# Konstanten, Variablen '############################################# 'Const _lcdport = Portb 'zum Test mit "lcd4busy.lib" 'Const _lcdddr = Ddrb 'Const _lcdin = Pinb 'Const _lcd_rs = 0 'Const _lcd_e = 2 'Const _lcd_rw = 6 Dim X As Byte '############################################# '# Hauptprogramm '############################################# Do Cls Locate 1 , 1 Waitms 10 Lcd "hello world" 'Schnickschnack, Haupsache es läuft etwas Waitms 10 For X = 1 To 5 Shiftlcd Right Waitms 50 Next X For X = 1 To 5 Shiftlcd Left Waitms 50 Next X Wait 1 Toggle Porta.7 'Zur optischen Kontrolle mit einer LED Loop
Bin gespannt...
Heiner
irgendwie fehlt da die Initialisierung für das Display
"INITLCD"
Und die Config LCD Anweisungen, drin stehen lassen, nicht auskommentieren.
MfG Andreas
Hi Andreas,
wenn Du mal im Handbuch nachliest, heißt es da unter initlcd: "The LCD display is initialized automatic at start up when LCD statements are used by your code. If fore some reason you would like to initialize it again you can use the INITLCD statement" ...wird also automatisch durchgeführt, hab ich aber trotzdem schon getestet....
An der Auskommentierung kannst Du sehen, daß ich "Config LCD" auch schon versucht habe.....
kennt vielleicht jemand ein grundlegendes Problem mit diesem Display?
Gruß
Heiner
Hallo HeinerDE,
In deinem Code hast du das "End" vergessen.
Wie hast du RW beschaltet?
Gruß, Michael
Hi Michael,
!!! Do ... Loop !!!
RW hab ich in verschiedenen Varianten getestet. einmal natürlich auf Masse gelegt, zum anderen und im Zusammenhang mit der lcd4busy.lib auf Portb.6 wie Du im Quelltext sehen kannst.
Hat denn niemand so ein Display getestet?
Gruß
Heiner
Hallo HeinerDE,
ja, klar. Sollte man meinen. Leider klappt das nicht immer. Gerne werden noch Reste eines alten Programmes ausgeführt.!!! Do ... Loop !!!
Aber darauf kommst du sicher auch noch.
Gruß, Michael
Edit:
meinem Verständnis nach kannst du für RW nur Ports zwischen 0 und 3 wählen.im Zusammenhang mit der lcd4busy.lib auf Portb.6 wie Du im Quelltext sehen kannst
Nur für RW oder gilt das für E und RS auch?Zitat von Michael
Hallo Heiner
hier ein einfaches LCD Programm das funktioniert
Du brauchst nur deinen Prozessor und die LCD Verdrahtung anpassen, dann sollte es gehen. (hatte ich schonmal gepostet)
siehe auch https://www.roboternetz.de/phpBB2/viewtopic.php?t=7994Code:'Fehlersuche LCD 'LCD mit HD44780 kompatiblem Controller 'Anschluß 'LCD Pin 1 = 0Volt (GND) 'LCD Pin 2 = +5 Volt (VDD) 'LCD Pin 3 = 0-5 Volt Kontrast (V0): Poti 10k zwischen 0V und 5V Schleifer an LCD3 'LCD Pin 4 = RS an PortA.2 'LCD Pin 5 = R/W an GND 'LCD Pin 6 = E an Porta.3 'LCD Pin 7 = DB0 'frei 'LCD Pin 8 = DB1 'frei 'LCD Pin 9 = DB2 'frei 'LCD Pin 10 = DB3 'frei 'LCD Pin 11 = DB4 an Porta.4 'LCD Pin 12 = DB5 an Porta.5 'LCD Pin 13 = DB6 an Porta.6 'LCD Pin 14 = DB7 an Porta.7 '_____________________________________________________________ $crystal = 16000000 '$regfile = "m8515.dat" 'auskommentiert, denn ich verwende ATMega16 $regfile = "m16def.dat" Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2 Initlcd 'initialisiert das LCD '-------------------------------------------------------------- Do 'Begin Hauptschleife Cls 'löscht LCD Upperline 'setzt Cursor in die obere Zeile Lcd "Erster Test" ' schreibt ins LCD Lowerline 'setzt Cursor in die untere Zeile Lcd "Hallo Welt!!!" 'schreibt ins LCD Wait 1 'wartet 1 sekunde Cls 'löscht LCD Wait 1 'wartet 1s und schreibt erneut Loop 'erneut aufrufen End
Gruß Bernd (Gandalf)
Das zentrale Problem wird leicht übersehn ! Dietrich Drahtlos.
Lesezeichen