Bascom I2C : LCD ( auch Arduino ) mit PCF8574 OHNE LIB betreiben

Hallo!

Ich sehe und staune, dass Unbrauchbares für BASCOM heraus kommt. :D
Ist der Output des Code etwa Hexadezimal? :hmmmm:
Ich bin der Meinung, dass es damit nicht funktionieren kann.

Du musst also alle Hex-Werte in dezimale Werte umrechnen und eintragen.
Ach so.... und dann müssen noch alle Dollarzeichen entfernt werden..... und wer weiß was noch alles.
Sieht mir also mehr nach Zeckentfremdung aus! :wink:


Allerdings geht es in diesem Thread ja auch um LCD`s an TWI- / I2C Bus und nicht um GLCD-Schriften!


Grüße,
Cassio
 
Hallo Thomas!

Nun ja... du darfst natürlich nicht den Fehler machen und nur die Preise vergleichen!
Überleg doch mal....
Bei deinem Display musst DU dich um die gesamte Ansteuerung kümmern!
Du bist quasi für jeden Pixel verantwortlich!

Bei den intelligenten TTFT`S von Dirk musst du das nicht! ;)
Da sendest du NUR eine Anweisungen zum Display (z.B. grünes Rechteck zeichnen und ein Bild von der SD-Card laden)..... und der Rest wird vom Display selbstständig erledigt.
Tja und das ist ein wahnsins Vorteil! Darum sind es ja auch intelligente Displays. :wink:


Ach so....
Ein Display mit SSD1289 und Touch?
Meinst du SO EINES HIER ?
Ich habe es selber nicht (oder irgend ein anderes SSD1289) und darum kann ich dazu auch nichts sagen.


Das mit den Font-Tool hast du falsch verstanden....
Ich habe das Tool von Dirk, um für die XV-Displays (die dir ja zu teuer sind) jede beliebige Windows-Schrift konvertieren zu können!
Das hat nichts mit BASCOM zu tun! :cool:


So, und nun wäre es schön, wenn wir ggf wieder zum eigentlichen Thema kommen würden und
uns (bei Bedarf) über Fonts & Co in einem anderen Thread unterhalten könnten. :wink:

Grüße,
Cassio
 
Hallo Cassio

Du erinnerst dich sicher an mein Problem mit der Anzeige ab dem 16. Zeichen ....

Heute habe ich das Problem gefunden/gelöst. Ich habe ein Pollin-LCD-I2C-Interface eingesetzt, und
dazu den Code mal neu zusammengestellt, da ich auch ein anderes Arduino-Board, ein Pro mini,
eingesetzt habe. In diesem Zusammenhang habe ich auch die folgenden Werte von deinem Beispiel
verwendet:
$hwstack = 128
$swstack = 128
$framesize = 128

Und siehe da, es wird alles sauber dargestellt, auch ab der 16. Stelle einwandfrei und sogar mit den
"billigen" Chinesen-Dislpays :) ....

Der Framesize war bei mir auf 32, das war scheinbar zu wenig...

Ich muss mir da gelegentlich wieder mal die Berechnungsgrundlagen für diese Werte zu Gemüte
führen .... oder diese 128er-Einstellung fix einbauen, diese reicht ja auch für komplexere Programme.

Deine Pollin-Routinen laufen, wie die andern ja auch :), super!!

Die Zeile mit $lib "i2c_twi.lbx" scheint mir übrigens nicht nötig zu sein...

So, nun kann ich doch ohne "Altlast" an die Ansteuerung von andern Dislpays. Es gibt ja noch sooo
vielen interessante Dislpays, z.B. die Kleinen OLED-Dinger mit SPI und SSD1306-Controller ....


Vielen Dank nochmals und Grüsse
Thomas
 
Hi Thomas,

In diesem Zusammenhang habe ich auch die folgenden Werte von deinem Beispiel
verwendet:
$hwstack = 128
$swstack = 128
$framesize = 128

Und siehe da, es wird alles sauber dargestellt, auch ab der 16. Stelle einwandfrei und sogar mit den
"billigen" Chinesen-Dislpays :) ....

Der Framesize war bei mir auf 32, das war scheinbar zu wenig...
na das ist doch mal ne gute Nachricht :cool:

Diese Zeilen stehen aber normalerweise ganz am Anfang jeden Programmes. Und genau darum wird bei einem Fehler auch immer wieder vorgebetet : Stellt das gesamte Programm rein und nicht nur nen Codeschnipsel :p :rolleyes: Mit allem dranhängenden Kram. Dann kann man es notfalls mal selber kompilieren. ;) Wenn Infos fehlen eiert man nur rum und verbrennt Zeit.

Gruß
Dino
 
Hallo Thomas!

Na, perfekt! :D
Dann hast du den Übeltäter also doch noch gefunden. :wink:

Generell sind die Basis-Einstellungen für die Stacks und den Frame ziemlich niedrig.....
und führen daher oft zu Problemen, obwohl sie seeeehr wichtig sind.
Wenn der Platz zu klein bemessen wird, hat man oft unerklärliche Phänomene oder Probleme. :wink:


Die Zeile mit $lib "i2c_twi.lbx" scheint mir übrigens nicht nötig zu sein...

Es kommt halt darauf an, was du machen möchtest. :wink:

Sobald du die LIB "I2c_twi.lbx " einsetzt, wird das hardwareseitige TWI verwendet..... also die im AVR integrierte!
Das ist natürlich die besser Wahl, sofern der AVR dies hardwareseitig kann.

Lässt du die LIB weg, wird TWI von BASCOM aus softwareseitig eingesetzt.
Logisch, dass dies zu Lasten des AVR`s und auch der Geschwindigkeit geht.
Du solltest den Software-TWI also nur verwenden, wenn du absolut keine andere Möglichkeit hast!

Generell sollte man also immer die Hardware-Variente bevorzugen!


Grüße,
Cassio
 
Hallo Cassio

Hast du dich eventuell auch schon mal mit der Realisation des DEFLCDCHAR-Befehls in deinen Routinen
beschäftigt?

Zur Zeit versuche ich ein LCD mit ST7920 (ähnlich HD44780 aber auch mit Grafik) in den Griff zu kriegen.
Klappt schon ganz gut im 4-Bit Mode. Das Teil würde sich dann auch eignen, um es mit deinen Routinen
anzusteuern. Aber erst muss es mit direkter Ansteuerung sauber klappten. Eine DEFLCDCHAR-Funktion
wäre dann auch hier interessant, da die Umlaute im eingebauten Character-Set fehlen ....

Sonnige Grüsse
Thomas
 
Hallo Thomas!

Ach ja... da wollte ich mich ja auch mal drum kümmern. :cool:

Mal sehen, wann ich etwas Zeit dafür finde und das DEFLCDCHAR mal ausprobiere.
Momentan hätte ich aber noch nicht mal einen Testaufbau zum Ausprobieren. :wink:

In der Zwischenzeit kannst du deinen Testausbau mit Testprogramm für das ST7920 ja mal in den FAQ-Thread für verschiedene GLCD`s und LCD`s einstellen.
Oder du eröffnest dafür einen eigenen Thread, solange du noch in der Entwicklung bist.


Grüße,
Cassio
 
Hallo Cassio

Hast du ev. eine Art "Umrechnungstabelle" für die I2C-Codes wenn die Belegung am PCF8574 anders ist?
Oder hast du die Codes einfach "von Hand" berechnet?

Dankende Grüsse
Thomas
 
Hallo Thomas!

Eine "Umrechnungstabelle" habe ich nicht!

Das Ganze existiert immer nur in meinem Kopf. :wink:
So wie es mir dann in den Sinn kommt schreibe ich es auf....
probiere es dann aus......
und bessere ggf. noch mal nach.

Fertig! :D


Da der Ablauf mit den Anweisungen über den I2C-Bus aber immer wieder gleich ist, sollte es nicht so tragisch sein dies zu ändern.
Was möchtest du denn nun noch ändern?
Wir haben hier doch inzwischen schon drei verschiedene Varianten. :hmmmm:
Passt denn keine von Dreien?


Grüße,
Cassio


EDIT:
Ach so...
Die Angelegenheit mit den benutzerdefinierten Zeichen via I2C habe ich inzwischen auch fertig.
Allerdings hatte ich noch keine Gelegenheit dieses in die Routinen zu integrieren.
 
Hallo Cassio

Ja, im Kopf ist doch immer noch die beste Lösung, flexibel und meist schnell ....

Die Belegung ist:
' PCF8574A
' __
' A0 -o|1 |o- Vdd
' A1 -o| |o- SDA
' A2 -o| |o- SCL
' D4------o|1 |o- n.c. (INT)
' D5------o|2 |o------HBL
' D6------o|4 |o------RS
' D7------o|8 |o------RW
' GND -o|_9|o------E

Werde da mal versuchen mit Kopfrechnen ....

Du bist ja mittlerweile ein echter I2C-Freak (lieb gemeint), auf das mit den
Benutzer definierten Zeichen bin ich ja mal gespannt.

Meine GLCD Sache mit dem ST7920 kommt leider nicht voran, zu viele Ideen kommen
mir da immer wieder in die Quere. Das ist der Vorteil vom Hobby im Gegensatz
zum Job, ich kann sprunghaft an dem Arbeiten, was mit grad Spass macht ....

Grüsse aus der Schweiz
Thomas
 
Hallo Thomas!

Das sieht jetzt aber irgendwie nach einer sehr "eigenwilligen" Lösung aus. :hmmmm:

Zumindest ist mir so eine Beschaltung nun noch gar nicht unter gekommen.
Kannst aber meine Routinen als Basis nehmen und sie mal umbauen.

Das Prinzip ist ja immer wieder das Selbe. :wink:


Grüße,
Cassio
 
Hallo!

Nun ja..... also...... eine richtige Doku habe ich nicht verwendet und besitze diese auch überhaupt nicht. :wink:

Ich habe mir das Ganze aus meinem persönlichen Wissen, einem kurzen "Datenblattabriss" zum Initialisieren eines LCD`s und einigen Test selbst zusammengestellt.

Effektiv sollte dir also ein Datenblatt, für einen HD44780 Controller, völlig reichen. :cool:


Grüße,
Cassio
 
Effektiv sollte dir also ein Datenblatt, für einen HD44780 Controller, völlig reichen. :cool:
Du mußt eine phantastische Kristallkugel haben, denn im Datenblatt zu dem Display wird nirgendwo vermerkt, welcher Controller da am Werk ist.

Welchen 'Datenblattabriss' meinst Du? Den von Pollin? Da steht doch nichts zum Initialisieren?
 
Du mußt eine phantastische Kristallkugel haben,

Hallo !

Hm, ich habe zwar den Anfängerschein in Glaskugellesen gemacht, damit ich hier manchmal die Gedanken einiger User verstehe, aber für dieses Vorhaben habe ich die nicht benötigt!

Diesmal ist alles streng logisch!


denn im Datenblatt zu dem Display wird nirgendwo vermerkt, welcher Controller da am Werk ist.

Wenn es ein HD44780 (oder kompatibler) Controller ist, dann nimmst du einfach das Datenblatt und fertig.
Dort steht drin, wie die Signale am Display ankommen müssen.
HD44780_Pins.gif


Welchen 'Datenblattabriss' meinst Du? Den von Pollin? Da steht doch nichts zum Initialisieren?

Also in meinem Datenblatt vom 27x4LCD steht der Vorgang zum Initialisieren (8Bit und 4Bit Mode) drin. :hmmmm:
Ich müsste aber nun erst mal wieder meine Glaskugel rausholen um zu erfahren, welches Display du nun überhaupt meinst. :cool:
27x4_INIT_1.gif
27x4_INIT_2.gif


Grüße,
Cassio
 
Hallo Wer!

Nun ja, in der Beschreibung zum Display steht bei Pollin:

Produktbeschreibung

2-zeiliges STN-Display mit integriertem Controller und gelber LED-Hintergrundbeleuchtung. Es können pro Zeile 16 Zeichen dargestellt werden. Geeignet zum Betrieb am PC-Druckerport (LPT). Download verfügbar.
Technische Daten:
- 2 Zeilen x 16 Zeichen Text
- integrierter Controller (Industriestandard)
- gelb/grünes Display mit gelber LED-Hintergrundbeleuchtung
- Betriebsspannung +5 V-
- Zeichengröße 4,35x2,95 mm
- Anzeigefläche 62,5x16 mm
Maße (BxHxT): 85x29,5x12 mm.


Von daher hast du doch alle Angaben, die du benötigst!
Der Industriestandardcontroller ist nämlich der HD44780 ! :wink:

Außerdem hast du schon fertige Ansteuerungen zum Pollin-I2C-Adapter von mir hier im Forum.
Du musst dies jetzt nur noch in ASM übersetzen und schon sollte es funktionieren. :D


Grüße,
Cassio
 
Hallo Cassio
Hallo LCD-Fan's

Eigentlich wollte ich nur den tollen Code von Cassio um die Funktion deflcdchar erweitern und eine
freie Defintiion der Anschlüsse des LCD's am PCF8475 ermöglichen. Dabei ist ein komplett neuer
Code entstanden.

Die declare.bas enthält schon mal die Definitionen für Arduono, Pollin und ein Interface in der Art
http://www.ebay.com/itm/TWI-SPI-IIC...517?pt=LH_DefaultDomain_0&hash=item564ee2fe35
Da beim Pollin Interface die Hintergrundbeleuchtung gerade anders herum funktioniert (Ein = 0),
ist dies, zusammen mit I2C-Adresse, auch in dem Bereich definiert.

Insgesamt ist der Code noch etwas schlanker geworden. Das LCD wird generell für zwei Zeilen
initialisiert. Die getesteten LCD's mit 2x8, 1x16, 2x16, 2,20 und 4x40 zeigen keine Probleme.

Ein Problem besteht aber mit dem selbstdefinierten Zeichen chr(0). Es scheint, dass chr(0)
nicht in Strings verwendet werden kann, respektive wohl als Null ignoriert wird. Als Workaround
kann man das Zeichen chr(0) zwar definieren, aber dann halt nicht verwenden (wie in meinem
Beispiel-Code, das Grad-Zeichen ist dann nochmals als chr(7) definiert), oder mit der Funktion
"lcd4_data 0" direkt schreiben. Mit lcda y,x,"" den Cursor vorher setzen.

Ich werde gelegentlich noch einen neuen Thread für diesen Code eröffnen, da ich denke, dass
er noch einiges Potential für weitere Verwendungen hat, und doch sehr einfach zu verstehen
ist.

Nun wünsche ich viel Vergnügen und freue mich auf Feedback ....

Viele Grüsse
Thomas
 

Anhänge

  • LCD_Arduino_Mini168_I2C_universal.bas
    2,7 KB · Aufrufe: 67
  • I2C_LCD_universal.bas
    3,9 KB · Aufrufe: 79
  • I2C_LCD_universal_declare.bas
    2,2 KB · Aufrufe: 57

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)