Hier nochmal das Programm
Hallo,
Ich habe die angefügte Schaltung aufgebaut und das 16*2 LCD angeschlossen (das zumindest richtig die oberen 4 pins und e,rs,gnd,vcc). Dann habe ich das Beispielprogramm von der http://www.mcselec.com/an_118.htm Seite angepasst (an den Mega16) spirch die Ports verändert (C0 und C1) und alle keyboard Befehle herausgenommen. Das LCD zeigt einen schwarzen Balken. Das ganze ist an das rn-controlboard angeschlossen und zwei lcd´s blinken auf. Nur auf dem Display verändert sich nichts. Ist die Schaltung falsch?
Danke Gruß Stefan
Hier nochmal das Programm
HI
Die Schaltung sieht gut aus.
Allerdings das Programm...
Kannst du die "Lcd_i2c.lib" posten?
Ohne die können wir keine genauen Aussagen treffen...
Allerdings wird das wohl in ASM sein.
Sonst musst du das LCD eben über normalen I²C steuern.
Das ist kein großes Problem, funzt bei mir auch.
Grüße,
Tobi
http://www.tobias-schlegel.de
"An AVR can solve (almost) every problem" - ts
Hallo,
danke für deine Antwort. Die lib ist auf der oben genannten HP zu finden http://www.mcselec.com/an_118.htm und sollte es eigentlich tun...
hallo,
kannst du mir mal dein I2C programm zur ansteuerung des lcd´s schicken?
vielleicht kann ich dan ja den fehler eingrenzen!
gruß
Stefan
@ tobi wie hast du es denn genau gemacht ?Zitat von tobimc
@Stefan hast du es jetzt schon zum laufen gebracht?
gruß Werner...
@ edgar: ja weitgehend, scheint mir ein Wackelkontakt oder ein ein anderer doofer Fehler gewesen zu sein. Allerdings leuchtet nur eine Hälfte des LCD´s auf!? Ich muss das Ganze noch einmal nachbearbeiten und ein anderes LCD ausprobieren...
Hi ihr!
Ich habe diesen Thread in der letzten Zeit irgendwie vernachlässigt, sorry.
Hier mein Quelltext:
Function Clearlcd() As Byte
I2csend Lcddataaddr , 1 'Clear
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 1 'Enable...
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 0 'Enable...
Waitms Default_i2c_delay_time
End Function
Function Startlcd() As Byte
I2csend Lcddataaddr , 56 'Mit 2 Zeilen initialisieren...
Waitms 5
I2csend Lcdcntrladdr , 1 'Enable...
Waitms 5
I2csend Lcdcntrladdr , 0 'Enable...
Waitms 5
I2csend Lcddataaddr , 12 'Einschalten, kein Cursor, kein blinken, siehe Datenblatt LCD für Werte...
Waitms 5
I2csend Lcdcntrladdr , 1 'Enable...
Waitms 5
I2csend Lcdcntrladdr , 0 'Enable...
Waitms 5
I2csend Lcddataaddr , 2 'Cursor HOME
Waitms 5
I2csend Lcdcntrladdr , 1 'Enable...
Waitms 5
I2csend Lcdcntrladdr , 0 'Enable...
Waitms 5
End Function
Function Lcdprint() As Byte
Dim Sign As String * 1 'Variablendeklaration
Dim Prnt As Byte
Dim Schlvar3 As Byte 'Schleifenvariablen...
Dim Schlvar4 As Byte
For Schlvar3 = 1 To 20 'Schleife für die ersten 20 Zeichen...
Sign = Mid(lcdupline , Schlvar3 , 1) '1 zeichen auslesen, mittels mid
Prnt = Asc(sign) 'Zeichen in ASCII-Wert umwandeln...
I2csend Lcddataaddr , Prnt 'Per I²C an den Datenchip legen (PCF8574)
Waitms Default_i2c_delay_time 'Besteimmte Zeit warten...
I2csend Lcdcntrladdr , 4 'Enable...
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 5
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 4
Waitms Default_i2c_delay_time
Next
I2csend Lcddataaddr , 192 'Steuerzeichen 192 für Zeilenwechsel...
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 0
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 1 'Enable...
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 0
Waitms Default_i2c_delay_time
For Schlvar4 = 1 To 20 '2te Schleife für die 2ten 20 Zeichen, untere Linie...
Sign = Mid(lcdlowline , Schlvar4 , 1) 'Zeichen holen...
Prnt = Asc(sign) 'Wie oben umwandeln...
I2csend Lcddataaddr , Prnt 'Siehe oben...
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 4
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 5
Waitms Default_i2c_delay_time
I2csend Lcdcntrladdr , 4
Waitms Default_i2c_delay_time
Next
End Function
Lcddataaddr it ein define, das die Addresse des 8574ers angibt, an dem von 0-7 DB0-DB7 hängen;
lcdcntrladdr ist das gleiche für den Baustein mit RS/RW und E.
Und i2cdelay ist die wartezeit.
Ich glaube aber kaum, dass ihr daraus schlau werdet...
Liebe Grüße und viel Glück!
http://www.tobias-schlegel.de
"An AVR can solve (almost) every problem" - ts
hi,
ich misch mich ja nicht gern in anderer beiträge ein aber könnte man die i2c-lib wohl so umschreiben, das man damit nicht mit nem I2C portexpander sondern mit nem serial in/parallel-out shiftregister das display betreibt?
muss ich da nicht nur statt dem i2cwrite nen shiftout... schreiben?
Martin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
HI
Jao rein theoretisch... Wenn du asm kannst...
Ich meine irgendwo gelesen zu haben, dass man als lib nur asm-code einbinden kann.
Aber würde ich nicht drauf schwören.
Warum willst du das in ne Lib packen? Ich habe dass im 'Anhang' vom Hauptprogramm, wo auch die restlichen Funktionen sind. Das vereinfacht die Fehlersuche ein bisschen...
Grüße, Tobi
http://www.tobias-schlegel.de
"An AVR can solve (almost) every problem" - ts
Lesezeichen