Forum: Compiler & IDEs BASCOM AVR YwRobot_Lcd_i2c.lib für 1602 LCD anpassen


von Rolf L. (dj7th)


Lesenswert?

Ich möchte mein funktionierendes BASCOM Programm für den ATMEGA328A und 
der YwRobot_Lcd_i2c.lib mit einem 20x4-LCD an ein 1602-LCD anpassen. 
Leider unterstützt diese Lib nur 20x4-LCDs.
Frage: wer kann die Lib an ein 16x2-LCD anpassen?
Bin für jeden Hinweis dankbar.

von Schlaumaier (Gast)


Lesenswert?

Bist du sicher das du das musst.?

https://bascomforum.de/index.php?thread/661-i2c-ansteuerung-mit-pcf8574-ohne-bibliothek/

BASCOM-Quellcode: Attiny 85
Config Lcd = 16x2   ' die Zeile meine ich
Config Scl = Portb.2
Config Sda = Portb.0
$lib "YwRobot_Lcd_i2c.lib"

So wie ich das sehe reicht es, wenn man den das einfach sagt,

Hier einige Details zu der Lib.
http://www.forum.g-heinrichs.de/viewtopic.php?t=73

von Rolf L. (dj7th)


Lesenswert?

das war natürlich das erste, was ich geändert hatte.
Leider ohne Erfolg. Der Text erscheint an beliebiger Stelle vom LCD nur 
nicht an der angegebenen Position.
Vermutlich ist die Lib fest auf 20x4 LCDs programmiert.
Folgende Zeile in der Lib lässt mich das vermuten:
ldi r16,&hC0       ; this is to make the initialization on both halfs of 
a 4-line LCD
Bin leider kein Assembler-Spezi, sonst könnte ich die Lib selbst 
anpassen.

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

Wieso willst du die überhaupt.

Lt. Anleitung von Bascom (hab mal drüber nachgedacht die zu benutzen) 
aber zu teuer, hat es einen eigenen Treiber für LCD dieses Types.

von Am Waldrand (Gast)


Lesenswert?

Rolf L. schrieb:
> Frage: wer kann die Lib an ein 16x2-LCD anpassen?

Wozu?
Nimm doch die lib die bei Bascom dabei ist.

Der Fehler liegt wohl daran.
In diesem Fall lautet der Name der Library “lcd-i2c.lib”. Wenn man diese 
Library in sein BAS-Programm einbindet, sollen die üblichen LCD-Befehle 
von BASCOM benutzbar sein. Leider funktioniert das bei dem 
YwRobot-Display überhaupt nicht; nach dem Start eines einfachen 
“Hello-World”-Programms wird kein Text angezeigt, lediglich die 
Hintergrundbeleuchtung flackert sehr heftig.

Einige Recherchen ergaben zwei Gründe für dieses Fehlverhalten. Kent 
Andersson geht bei seiner Library von folgender Verbindung zwischen 
PCF-Baustein und Display aus:

P0 -> D4
P1 -> D5
P2 -> D6
P3 -> D7
P4 -> RS
P5 -> RW (not used, set to 0 to ground for write)
P6 -> E2 (on 1 or 2 line display nc)
P7 -> E1(=E)

Die Zusatzplatine von YwRobot benutzt aber folgende Zuordnung:

P0 -> RS
P1 -> RW
P2 -> E
P3 -> BT (Backlight)
P4 -> D4
P5 -> D5
P6 -> D6
P7 -> D7

Im Wesentlichen sind also die beiden Halbbytes (Nibbles) vertauscht.

Entweder die Belegung ändern, oder die BasCom Lib verwenden.

von Holger R. (holgerr)


Lesenswert?

Rolf L. schrieb:
> Der Text erscheint an beliebiger Stelle vom LCD nur
> nicht an der angegebenen Position.

Printest DU mit LCD, wenn ja mußt die die Zeilen-Länge auch anpassen
oder die Ausgabe
z.B. Dim D As String * 20
     Locate 1 , 1 : Lcd D

oder Dim D As String * 15
     Locate 1 , 1 : Lcd "Name "; D

Bei 16 Display natürlich 16 statt 20

von Rolf L. (dj7th)


Lesenswert?

Am Waldrand schrieb:
> In diesem Fall lautet der Name der Library “lcd-i2c.lib”.

sorry, aber diese lib kann ich bzw. der Compiler leider nicht finden.

von Rolf L. (dj7th)


Lesenswert?

Holger R. schrieb:
> Printest DU mit LCD, wenn ja mußt die die Zeilen-Länge auch anpassen

das ist wohl das mindeste, was man wissen sollte :-)

von Schlaumaier (Gast)


Lesenswert?


von Rolf L. (dj7th)


Lesenswert?

Schlaumaier schrieb:
> https://www.mcselec.com/index.php?option=com_content&task=view&id=82&Itemid=57
>
> 4 Zeile beachten

Danke für den Link.
Habs gleich runtergeladen und werde mich dann mal drüber her machen.

von Schlaumaier (Gast)


Lesenswert?

Das ist übrigens die offizielle Seite soweit ich weiß von Bascom.

Die haben auch ein ziemlich aktives Forum mit DE-Abteilung.

von Schlaumaier (Gast)


Lesenswert?

Ich schreibe lieben in B4r, ist auch Basic und die wichtigsten Libs sind 
schon dabei. ;)


lcd.Initialize(0x27, 16, 2) 'based on the example from the project.
' Adresse // spaltem // Zeilen  = hier 16 x 2

lcd.Backlight = True

pad.Initialize("123A456B789C*0#D", Array As Byte( 12, 11, 10, 9),  Array 
As Byte(8, 7, 6, 5),  "pad_KeyPressed")

lcd.SetCursor(0,1)
lcd.Write("Pad ini")

Fertig. Ink. einen 16er Keypad ;)

von Rolf L. (dj7th)


Lesenswert?

Schlaumaier schrieb:
> Ich schreibe lieben in B4r, ist auch Basic und die wichtigsten Libs sind
> schon dabei. ;)

interessant, trotz meiner 77 Lenze noch nie davon gehört :-)
Haste einen Link dazu?

von Schlaumaier (Gast)


Lesenswert?

www.b4x.com

Zitat:
B4X suite supports more platforms than any other tool
ANDROID | IOS | WINDOWS | MAC | LINUX | ARDUINO | RASPBERRY PI | 
ESP8266/ESP32 |

Außer MAC (da brauchst du ne Runtime von Apple soweit ich weiß) ist 
ALLES Kostenlos.

ALLES grenzt an Visual-Basic.

Was bedeutet : Ähnliche Syntax. Gleiches Sprache, halt nur die 
besonderen Eigenschaften des jeweiligen Gerät berücksichtigen.

Ich als VB Profi habe es in weniger als 3 Std. drauf gehabt. ;) Ist kein 
angeben. Liegt an der sehr hohen Ähnlichkeit.

von Schlaumaier (Gast)


Lesenswert?

Nachtrag. :

Du brauchst für Arduino  ESP  Raspberry  die B4R Variante.

Und eine funktionieren Arduino-IDE.

Die B4R <- R IDE erzeugt den Arduino-Code, ompiliert ihn da,  und 
schiebt ihn dann auf das Gerät.  Geht alles automatisch wenn es KEIN 
Programmer braucht. Ansonsten die erzeugte INO-Datei in die Arduino-IDE 
laden, und dann "Hochladen mit Programmer" anklicken.

Ich schreibe meine Android-Software auch mit den Zeug. Nur nutze ich 
dann die b4A <- A für Android.

von Schlaumaier (Gast)


Lesenswert?

Nsachtrag 2: Und ich spare die ca. 100 Euro die Bascom kostet.

Und mit einen WARPER kann ich fast jede Arduino-Libs von Github nutzen.

Das gibt mir viel mehr Möglichkeiten. Habe ich aber bisher nur 1 x 
gebraucht.

Grund :

https://docs.google.com/spreadsheets/d/1qFvc3Q70RriJS3m_ywBoJvZ47gSTVAuN_X04SI0_XBw/edit#gid=0

Da findst du in Spalte B4R alle Libs die man ohne Warper stressfrei 
einbinden kann.

Ins LIBS Verzeichnis kopieren, Anklicken, Include Befehl und meist 
INI-Befehl (s.o.) Fertig.

Etwas Englisch-Kenntnisse sind aber von Vorteil. Google Translator 
reicht (testet).

von Johannes S. (Gast)


Lesenswert?

Schlaumaier schrieb:
> Etwas Englisch-Kenntnisse sind aber von Vorteil.

Vor allem für die Warper :)

von Rolf L. (dj7th)


Lesenswert?

Schlaumaier schrieb:

> Ich als VB Profi habe es in weniger als 3 Std. drauf gehabt.

vielen Dank für die Infos.
Werde mir umgehend das Tool anschauen.
Bin leider kein Profi-Softwerker, aber VB kenne ich etwas.
English spoken ist für mich kein Thema :-)

von Schlaumaier (Gast)


Lesenswert?

Rolf L. schrieb:
> Schlaumaier schrieb:
>
>> Ich als VB Profi habe es in weniger als 3 Std. drauf gehabt.
>
> vielen Dank für die Infos.
> Werde mir umgehend das Tool anschauen.
> Bin leider kein Profi-Softwerker, aber VB kenne ich etwas.
> English spoken ist für mich kein Thema :-)

Johannes S. schrieb:
> Schlaumaier schrieb:
>> Etwas Englisch-Kenntnisse sind aber von Vorteil.
>
> Vor allem für die Warper :)

es heißt natürlich wrapper . Da war wohl der Hunger der Vater meiner 
Gedanken. ;)

von Rolf L. (dj7th)


Angehängte Dateien:

Lesenswert?

sorry, aber irgendwie stehe ich "auf dem Schlauch".
Ich habe die ...demo.bas aus der AN#118 an die Pinbelegung von meinem 
I2C-Controller (hoffentlich richtig) angepasst, aber ausser einer bei 
Reset kurz aufblinkenden Anzeige und ein paar ab u. zu unregelmässig 
auftauchenden Textteile kann ich damit nichts erreichen.
Ich vermute, dass meine Anpassungen der Pinbelegung in der lcd_i2c.lib 
nicht übernommen werden, sondern dass man die Zuordnung in der lib 
anpassen muss.
Ich kann nicht erkennen, wie die 8 PCF_xx-Werte dorthin gelangen sollen.
Die 8 Werte müssten -denke ich- identisch sein mit P0...P7 im 
Datenblatt.

Anbei das Testprog und die zugehörige lib (version von Ludwig) sowie ein 
Datenblatt vom I2C-Controller.

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

Mal 2 Fragen.

1.) Hat das Display jemals was angezeigt. ??

Wenn Nein

Ist der Controller neu ?

Wen JA, kann es auch sein das, wie bei den Controller üblich, das Poti 
(blauer Würfel) total verstellt ist.

Also anmachen, und solange drehen bis ein Muster erscheint, dann noch 
ein kleines bisschen weiter bis das Muster nur schwach zu sehen ist.

Dann Text-Befehl anzeigen lassen, und die Buchstaben suchen.

Ist der Standard-Fehler Nr. 1 bei Anfänger's.

Sorry und vergiss alles was ich getippt habe, wenn du Frage 1, mit JA 
beantworten kannst.

von Rolf L. (dj7th)


Lesenswert?

Display + Controller funktionieren mit der YwRobot_Lcd_i2c.lib mit der 
Macke, dass der Text meist ein paar Stellen nach rechts verschoben 
erscheint. Diese lib funktioniert mit einem 20x4 Display + controller 
einwandfrei, aber nicht mit dem 1602-Display. Das ist mein eigentliches 
Problem :-)
Habe inzwischen Kent, der Verfasser dieser Libs mit meinem Problem 
konfrontiert. Mal sehen, ob er seine Lib anpassen kann.

: Bearbeitet durch User
von Rolf L. (dj7th)


Lesenswert?

Ist jemand bekannt, unter welcher email-Adresse Kent Andersson, der 
Autor diverser i2c_lcd.lib aktuell zu erreichen ist?
Die in der Lib genannte aus dem Jahr 2002 scheint nicht mehr zu 
existieren.
Inzwischen habe ich festgestellt, dass der Text im 16x2 Display immer um 
8 Stellen nach rechts versetzt angezeigt wird. Ich denke, dass dies in 
der Lib korrigiert werden könnte.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Rolf L. schrieb:
> Ich denke, dass dies in
> der Lib korrigiert werden könnte.

Dann mach das. Wenn das nicht möglich ist, ist jetzt der Zeitpunkt 
gekommen, mal über die Wahl deiner Tools nachzudenken.

Oliver

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

Rolf L. schrieb:
> Inzwischen habe ich festgestellt, dass der Text im 16x2 Display immer um
> 8 Stellen nach rechts versetzt angezeigt wird.

Notfalls musst du tricksen.

Schonmal versucht die angabe der Stelle ins minus zu setzen.


z.b. Locate -8 , 1 'set cursor position

Wobei ich hoffe das ich Zeile und Spalte nicht verwechselt habe. ;)

von Achim H. (pluto25)


Lesenswert?

Der lib ist völlig egal welches Display dran hängt. Die Adressberechnug 
(Locate , Lowerline) macht Bascom intern. Daher das Config Lcd.
Das Display sollte ein Initlcd bekommen, sonst ist es eher Zufall wie es 
reagiert. Die ich kenne haben standartmäßig 8 bit Bus und 14 Punkt 
Zeichensatz nach dem Einschalten. Dann kommt nur Murks wenn sie mit 4 
bit und 8Punkt besprochen werden.
PS Manche brauchen eine "Wachwerd-Zeit" ca 60ms nach dem init

von Rolf L. (dj7th)


Lesenswert?

Schlaumaier schrieb:

> Schonmal versucht die angabe der Stelle ins minus zu setzen.
> z.b. Locate -8 , 1 'set cursor position
>
> Wobei ich hoffe das ich Zeile und Spalte nicht verwechselt habe. ;)

richtig ist: zuerst Zeile, dann Spalte, Minuszeichen hat nix bewirkt.

Ich habe rausgefunden, dass die 1602-Display-Anzeige dann korrekt ist, 
wenn man an den 16 stelligen Text noch weitere 4 Leerzeichen als letzte 
anfügt, so dass der Text dann 20stellig wird. Offensichtlich wirkt sich 
Config=16*2 nicht auf die Textformatierung aus, sondern ist vermutlich 
fix auf 20*4 festgelegt. Die 4 Leerzeichen landen anscheinend im 
Nirvana.

von helfer (Gast)


Angehängte Dateien:

Lesenswert?

Hallo probiere das mal hier.
Getestet auch mit einem UNO-Board

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.