PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-LCD-Adapter und lcd_i2c.lib "Lcdpower Alias="



Kugel5
22.09.2009, 23:46
Hallo Fangemeinde,

ich habe wieder einmal ein Problem, doch auch google war nicht hilfreich.

Ich habe ein 16*2 LCD-Display, welches ich über einen RN-LCD-Adapter angeschlossen habe. Wenn ich es über den Mega8 direkt ansteuere funktioniert es tadellos. Jetzt wurden meine Ports etwas knapp und ich habe ein Adapterstecker und ein I2C (TWI) PCF8574 genommen um es per I2C über o.g. lib anzusteuern. Das funktioniert jetzt endlich auch.

Jetzt mein Problem,
über den RN-LCD-Adapter und Direkt-Verbindung zum AVR kann ich ja den Alias "LCDPOWER=(Stecker PIN-5 EN2) ansprechen. Also Licht ein/aus.

Gibt es eine relativ einfache Möglichkeit (für Anfänger) über eine Anweisung dies über die I2C-Lib zu realisieren?

Danke

P.S.: Verkabelt ist alles nach RN-Norm und genauso wie es in der lcd_i2c.lib (mcs_AN#118_I2C-Display ) angeben ist.

linux_80
23.09.2009, 22:17
Hallo,

wie Du schon geschrieben hast, ist die Beleuchtung an EN2 angeschlossen.
Dieses Bit kann man in dieser Lib vorgeben mit der Variablen _lcd_e

siehe Beispielprog zu dieser Lib:


Dim _lcd_e As Byte
'_lcd_e = 128 select E1, 64 select E2, 192 select both (for CLS or DefLCDChar etc.)
_lcd_e = 128

Musst nur die Werte durchprobiern, je nachdem wie Du es angeschlossen hast.
Ich geh mal davon aus, das mit 192 das LCD und die Beleuchtung ausgewählt sind, musst nur den Wert ausprobieren, wenn die Beleuchtung aus ist, aber das LCD trotzdem geht.

Kugel5
24.09.2009, 00:08
Hallo Linux_80,

leider funktioniert das nicht. Das habe ich schon versucht.

Ich habe trotz alledem noch mal ein Versuch gestartet und folgendes "Fehlerbild" erhalten.

Die LED (Hintergrundbeleuchtung) blinkt kurz auf, wenn der Displayinhalt aktualisiert wird. Also jedes mal bei LCD "xxx".

Hier mal der Code.


$regfile "m8def.dat"
$crystal = 16000000
$baud = 9600

$lib "i2c_twi.lbx" 'Für Hardware TWI
$lib "lcd_i2c.lib" 'ersetzt die Standard LCD Library

' ---------------- I2C Bus ----------------------
Config Scl = Portc.5 'I2C SCL Pin
Config Sda = Portc.4 'I2C SDA Pin
Config Twi = 400000 ' Init TWBR und TWSR
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
Twcr = &B00000100 ' nur TWEN setzen
Waitms 300

' --------------- I2C Display -------------------
Const Pcf8574_lcd = &H40 'I2C Adresse
Dim _lcd_e As Byte
'_lcd_e = 128 'LCD im 4-Bit Mode betreiben
_lcd_e = 192

Waitms 300 'wichtig! Ggf. Erhöhen
Config Lcd = 16 * 2
Wait 1
Initlcd
Wait 1

----- Haupt ----
Do
Cls 'loesche das LCD Display
' Display On 'schaltet das Display (Text) ein
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Hello world."
Wait 1
Locate 2 , 1
Lcd "************" 'String auf Display anzeigen
Wait 5
'Display Off 'schaltet das Display (Text) aus
'Wait 2
Loop

End

linux_80
24.09.2009, 19:19
Hi,

das Problem ist, dass beim letzten Byte ans LCD die beiden Enables gelöscht werden, damit das LCD nicht angewählt ist, aber auch die Beleuchtung aus ist.

Also entweder die Lib anpassen, und E2 immer setzen,
oder als Workaround, dem LCD immer ein Byte senden in dem nur das E2 gesetzt ist. Könnt aber etwas geblinke rauskommen.

PS:
Du kannst mal versuchen in der Lib eine Zeile einzufügen,
nach dieser:

_send_3_times:
sbr _temp1,&h40 ; hier nur das gewünschte Bit setzen

Kugel5
25.09.2009, 00:07
Hi,

Danke für Deine Hilfe mit der lib.
Ich habe die Zeile eingefügt und das Display ist "Dauerbeleuchtet".
(&H40 = 64 = E2 enable)

Das mit den immer "An" ist aber nicht wirklich das, was ich wollte, da ich dies ja auch über einen Jumper oder mit "direkt anschließen" machen könnte.

Ich wollte bei "Nichtgebrauch" der Schaltung, unnötige Verbraucher abschalten um die Stromversorgung zu entlasten.

Zum Bsp. bei einer Gewächshaussteuerung braucht ja das Display nicht Tag und Nacht "Dauerbeleuchtet" zu werden.

Das mit den Byte mitsenden, weiß ich leider noch nicht wie ich das bewerkstelligen soll. Die absolute Notlösung wäre halt ein Pin vom AVR zu opfern (ist halt am einfachsten) aber ich wollte eigentlich das Display als "eigenständiges Modul" per I2C steuern und nicht noch neben den Bus eine weitere Leitung, welche "nur" die LED Beleuchtung einschaltet.

Hättest Du evtl. noch ein Tip für mich?

Danke erstmal für Deine Hilfe.

P.S.: Ich dachte eigentlich das ich nicht der einzige/erster bin, der dieses Problem hat und ihr sagt "alter Hut" geht doch ganz einfach, mach dieses oder jenes und es geht.

linux_80
25.09.2009, 21:15
Hola,

ja dann schau ma mal :-)

aber ich garantier für nix, wenns was zerreist, o.ä., ich wars ned ;-)
Wenns klappt aber überall verkünden :mrgreen:

Bascom Teil:

Dim _lcd_e2 As Byte

_lcd_e2 = &H40 ' nur 0 oder &H40

lib, an die Stelle wie letztens auch:

_send_3_times:
* lds r27,{_lcd_e2} ' Wert aus Basic-Variablen
andi _temp1, &hbf ' sicherstellen, dass das Bit 0 ist,
or _temp1, R27 ' um hier evtl. gesetzt zu werden

Kugel5
25.09.2009, 22:20
=D> suuupi =D>

ich verkünde nun feierlich, dass die Lösung von "linux_80" funktioniert \:D/

Im "Kurztest" sind mir keine Auffaelligkeiten aufgefallen.
(getestet mit einen Displaytech 162 / 16*2 LCD Display mit Hintergrundbeleuchtung)

Ich danke Dir fuer deine Hilfe.

Nun ist es moeglich, sein Projekt mit den RN-Standart-LCD Adapter aufzubauen und bei Bedarf (wenn die Anschluesse vom AVR benoetigt werden) einfach ueber eine I2C "Adapterplatine" zu betreiben ohne grosse Programmaenderung durchfuehren oder auf die zuschaltbare Displaybeleuchtung verzichten zu muessen.

Grossen Dank an die jenigen, welche uns dies ermoeglichten "Linux_80" und "Kent Andersson" (Ersteller der Lib) =D>

linux_80
26.09.2009, 00:00
Dann kann ich ja beruhigt schlafen :)

Die Beleuchtung ändert sich halt nur, wenn man was ans LCD sendet.