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

@ Dino, das klingt logisch - aber der Port A wird da nirgends verwendet und das Programm ist keine 162 Zeilen lang.

@ Cassio, hab schnell noch mal deinen Code von gestern getestet -> keine Fehlermeldung.

Aber nun ist Feierabend :)
 
... konnte noch nicht schlafen ...

Der Fehler liegt wahrscheinlich in meiner : "i2c_twi.lbx"
Sobald ich die Configs für SCL und SDA deaktiviere kommen letzt genannte Fehler.

$lib "i2c_twi.lbx"
Config Twi = 250000 'BUS-Takt
Config Scl = Portc.5 'I2C SCL
Config Sda = Portc.4 'I2C SDA
Mist, wie geht das nur mit dem Codefenster :confused:

@Cassio - ich habe die Configs in deinen Code eingefügt und er funktioniert. Einzig die Beleuchtung macht was sie will. Beim Schreiben der 2. Zeile geht sie aus und bei CLS geht sie mit an.

3. und 4. Zeile konnte ich nicht testen, so ein LCD habe ich nicht. Ich weiß auch garnicht, wo du den E2 schaltest am PCF. Da ist doch nix mehr, oder habe ich wieder mal was übersehen?

MfG
 
Hallo AVR-User!

Die Fehlermeldung ist leider etwas irreführend! :wink:
Das liegt daran, dass die PORT.A in den Grundeinstellungen für BASCOM stehen.

Klick mal auf Optionen/Compiler/I2C
dann öffnet sich dieses Fenster:
Options.gif

Bei I2C steht da bestimmt etwas mit PORTA.X und PORTA.Y !

Stell das mal auf die richtigen Ports des Mega8 ein (so wie auf dem Bild).
Dann sollte die Fehlermeldung weg sein und alles funktionieren! :D

Die anderen Belegungen sind egal.... da sie nicht verwendet werden!



Es gibt Probleme mit der HBL? :hmmmm:
Ich habe es hier inzwischen nachgebaut und ich habe keine Probleme festgestellt.
Kann ich ja noch mal schauen.....
Allerdings habe ich dass Ansteuersignal extra mit einem DSO geprüft, um ein kurzeitiges "Zappeln" oder Flackern des Pins auszuschließen.



3. und 4. Zeile konnte ich nicht testen, so ein LCD habe ich nicht. Ich weiß auch garnicht, wo du den E2 schaltest am PCF.

Für ein Display mit bis zu 4x20 Zeichen benötigst du keinen E2!
Erst wenn es darüber hinaus geht.
Bei Pollin gibt es z.B. DIES LCD
Es hat 4x16 Zeichen und kann problemlos an den I2C-Adapter angeschlossen werden. Dafür gibt es an der I2C-Platine doch extra die Lochreihe von 1 bis 14 (zzgl. 2 Pins für Beleuchtung separat).
Die Passt genau mit der Belegung eines Standard-LCD überein. :wink:

Grüße,
Cassio
 
Recht hat er der Cassio ,

war wohl doch schon etwas spät gestern, dass mir solche Fehler unterlaufen.

Ich habe bisher immer nur mit 2x20 LCD's gewerkelt. Irgendwo hatte ich mal gelesen, dass man bei größeren den E2 braucht.
Aber wenn nicht, dann umso besser. Ich habe mein 2x16 LCD auch über die 1x16 Pinreihe angeschlossen. Wenn ich beim Pollinboard die 2x7 Reihe
benutze, habe ich einen fetten Kurzschluß in der Stromversorgung und das bei allen 4 LCD's die ich in der Bauart da habe.
Ich muss mir das mal in Ruhe ansehen. Die 1.en Messungen haben die selben Werte wie an der 1x16 Reihe.

Nun ist aber erstmal gut. In einer Stunde geht's wieder Malochen.
Nochmal vielen Dank für Eure Bemühungen, bis später dann mal.

MfG
 
Wenn ich beim Pollinboard die 2x7 Reihe
benutze, habe ich einen fetten Kurzschluß in der Stromversorgung...


Hallo AVR-User!

Jepp, das glaube ich dir! :D

Das liegt daran, dass die 2x7 Pinreihe an Pin_1 und Pin_2 genau eine Vertauschung hat.
Tja und das sind Vcc und GND! :cool:

Logisch dass es dann "knallt". :wink:

Diese Pinbelegung (dass an Pin_1 = Vcc ist ) ist etwas unüblich und passt wohl auch nur zu den Displays von Pollin. :p

Bei der 1x14 Pinreihe haben sie dann aber wieder die Standardbelegung genommen....
Pin_1 = GND
Pin_2 = Vcc


Grüße,
Cassio


PS: Generell spielt es keine Rolle, welche Pins/Ports in dem Optionsfenster stehen.
Kann daran liegen, dass du die Software neu installiert hast.
Irgendwie kommt mir das bekannt vor. :wink:
 
Einzig die Beleuchtung macht was sie will. Beim Schreiben der 2. Zeile geht sie aus und bei CLS geht sie mit an.


Hallo!

Ich habe mir das mit der HBL noch mal genau angesehen....
Also ich kann da keine Unregelmäßigkeiten entdecken! :hmmmm:

Habe extra dafür mal den LA angeworfen und alle Pins aufzeichnen lassen.
Hier die Arbeitsschleife, die ich mehrere Male hintereinander aufgezeichnet habe:
(Sind extra noch einmal INIT und CLS mit drin!)
Code:
Lcd_init                                                    'LCD initialisieren
Waitms 50
Lcd_cls                                                     'Clear Screen
Waitms 200
' ################################################
' #                                              #
' #---------------Arbeitsschleife----------------#
' #                                              #
' ################################################
Do                                                          'Hauptschleife-Beginn

Hbl = Ein                                                   'Beleuchtung ein

Lcd_ 1 , 1 , "CassioAVR-Praxis"
Waitms 100


Text = "Port.D= " + Bin(pind)
Lcd_ 2 , 1 , Text
Waitms 100


Lcd_ 3 , 1 , "1234567890123456"
Lcd_ 4 , 9 , "12345678"
Waitms 100


Hbl = Aus                                                   'Beleuchtung aus
Waitms 100

Lcd_init
Waitms 50
Lcd_cls                                                     'Clear Screen
Waitms 200



Loop                                                        'Hauptschleife-Ende



Die Aufzeichnung vom LA habe ich zum einfachen Verständnis mal beschriftet!
Hier das Ergebnis:
Pollin_I2C_Test-Programm.png

Da kannst du nun auch sehr schön sehen, dass die HBL feste Zustände hat.
Egal welche Daten über den I2C/TWI Bus gesendet werden, der Pinzustand für die HBL ändert sich nicht ungewollt. :cool:


Vielleicht lag es ja bei dir daran, dass es zu dem Zeitpunkt noch eine Differenz der I2C-Pins gegeben hat.
Einmal in BASCOM an PORTA
und einmal per Config im Programm an PORTC.


Der LA-Aufzeichnung nach zu urteilen, laufen die Routinen aber zufriedenstellend.
Vielleicht ändere ich die Routinen für die anderen "LCD`s" ja auch noch um, so dass man nur noch zwei Dateien hat. :hmmmm:
Mal sehen, wann ich Zeit und Lust dazu habe. :wink:


Grüße und viel Spaß weiterhin,
Cassio
 
Moin Cassio,

danke für deine Bemühungen. 2 von den LCD's die mit 2x7 nicht gehen sind ja von Pollin. Ist schon "lustig" manchmal.
Aber wie gesagt, muss ich dann später mal schauen. Mir steht mitte Juli ein Umzug bevor. Da kann ich im Moment nur sporatisch mal was machen wie die Tage gerade.

Schaut man mal weiter. Hab mir heute mal u.a. die 4x16 LCD bei Pollin bestellt. Mal schauen wenn wieder Zeit ist zum "Spielen" :-D

MfG
 
Hallo !

Ja, mit den kleinen Displays und dem 2x7 Anschluss ist das bei Pollin so eine Sache....
Ich bin der Meinung, dass nur ein einziges Display die passende Belegung hat.
Das benötigt man auch bei der RFID-Eva-Platine von Pollin..... und scheinbar nun auch bei dem I2C-Adapter.

Unterbrich doch einfach die Leterbahnen an Pin 1 & 2 und verbinde sie mit Fädeldraht neu.
Schon kannst du deine Displays verwenden. :wink:

Allerdings.....
Mit den 4x16 LCD`s gibt es keine Probleme und du hast dann obendrein mehr Anzeige-Charakter.
Ist also die bessere Wahl. :cool:

Dann mal viel Spaß damit,
Cassio
 
Hallo Cassio,

hab jetzt schnell noch nach der Spätschicht bissel probiert. Die HBL funzt bei mir genau verkehrt rum. Ist aber nicht weiter tragisch.

Da ich immer noch nicht weiß, wie man hier Code reinsetzt, mache ich das mal wieder so :) :

Code:
Code:
 ' Polin I2C Platine für LCDs
'
$regfile = "m88def.dat"
$crystal = 14745600                                         'ext. Quarz       '8000000 =intern

$hwstack = 128
$swstack = 128
$framesize = 128


'                   +---v---+
'       (RESET) PC6 |1    28| PC5 (ADC5/SCL)
'         (RXD) PD0 |2    27| PC4 (ADC4/SDA)
'         (TXD) PD1 |3    26| PC3 (ADC3)
'        (INT0) PD2 |4    25| PC2 (ADC2)
'        (INT1) PD3 |5    24| PC1 (ADC1)
'      (XCK/T0) PD4 |6    23| PC0 (ADC0)
'               VCC |7    22| GND
'               GND |8    21| AREF
' (XTAL1/TOSC1) PB6 |9    20| AVCC
' (XTAL2/TOSC2) PB7 |10   19| PB5 (SCK)
'          (T1) PD5 |11   18| PB4 (MISO)
'        (AIN0) PD6 |12   17| PB3 (MOSI/OC2)
'        (AIN1) PD7 |13   16| PB2 (SS/OC1 B)
'        (ICP1) PB0 |14   15| PB1 (OC1A)
'                   +-------+

Ddrd = &B_0000_0000                                         '1 ist Ausgang 0 ist Eingang
Portd = &B1111_1111                                         'auf Hi oder Low setzen

Ddrc = &B_11_0000                                           '1 ist Ausgang 0 ist Eingang
Portc = &B00_1111                                           'auf Hi oder Low setzen

Ddrb = &B_0000_0000                                         '1 ist Ausgang 0 ist Eingang
Portb = &B1111_1111                                         'auf Hi oder Low setzen


'Angaben zum Display einstellen=================================================
$include "_pollin_I2C_declare.bas"
'LCD-Funktionen sind:
'Lcd_          = zum Ausgeben von Zeichen/Text (nur String)
'Lcd_cls       = Clear Screen
'Lcd_init      = LCD initialisieren
'Hbl (Ein/Aus) = HintergrundBeLeuchtung Ein/Aus schalten
Lcd_zeilen = 2                                              '4 'Anzahl der LCD-Zeilen eintragen!
Lcd_spalten = 16                                            'Anzahl der LCD-Charakter angeben
Const Pcx_pollin = &H40                                     'I2C-Adresse des PCx8574(A)

'          PCF8574A
'            +--v--+
'      A0  -o|1  16|o-  Vdd
'      A1  -o|2  15|o-  SDA
'      A2  -o|3  14|o-  SCL
'   D4------o|4  13|o-  n.c. (INT)
'   D5------o|5  12|o------HBL (HintergrundBeLeuchtung)
'   D6------o|6  11|o------E1
'   D7------o|7  10|o------RW
'     GND  -o|8___9|o------RS


' I2C-Hardware-Config===========================================================

$lib "i2c_twi.lbx"
Config Twi = 250000                                         'BUS-Takt,
Config Scl = Portc.5                                        'I2C SCL
Config Sda = Portc.4                                        'I2C SDA
'Config I2cdelay = 1
I2cinit

' Inits=========================================================================


Lcd_init                                                    'LCD initialisieren
Lcd_cls                                                     'Clear Screen

' PROGRAMMSCHLEIFE##############################################################

Do                                                          'Hauptschleife-Beginn

Hbl = Aus                                                   'Beleuchtung ein

Lcd_ 1 , 1 , "CassioAVR-Praxis"
Waitms 500

Text = "Port.D= " + Bin(pind)
Lcd_ 2 , 1 , Text
Waitms 500

'Lcd_ 3 , 1 , "1234567890123456"
'Lcd_ 4 , 9 , "12345678"
'Waitms 500

Hbl = Ein                                                   'Beleuchtung aus
Lcd_cls                                                     'Clear Screen
Waitms 500

Loop                                                        'Hauptschleife-Ende


End                                                         'end program


'SUB's##########################################################################

$include "_pollin_I2C_subs.bas"
Code Ende ................

Ansonsten alles top!

Mal noch ne Frage. Wie hängt das mit : Config Twi = 250000 zusammen? Was soll mir diese Zahl sagen?

MfG
 
Hallo AVR-User!

Wenn die HBL genau verkehrt herum schaltet, dann ändere ich das gleich mal in der "Declare-Datei".
Ich war mir nicht mehr sicher, ob Pollin ein PNP oder NPN Transistor genommen hatten. :hmmmm:
Dann war es wohl ein PNP. :wink:

Die Vorgabe:
Config TWI = 250000
stellt den TWI-Bus auf 250k ein.
Der "normale" (alte) Bus arbeitet mit 100k und viele neue Bausteine können bis 400k arbeiten.

Ich habe hier aber auch schon knapp 500k per Hardware-TWI gehabt und es funktionierte auch noch.
Generell sollte man aber in Datenblatt schauen, welche Geschwindigkeit der Slave-Baustein verkraftet.
Meine alten Temperatursensoren (DS1624) reagieren ab 125k nicht mehr ordnungsgemäß.
Du musst also ein wenig schauen, welche Slave`s du an den Bus hängst..... wenn es einmal auf die Geschwindigkeit ankommen sollte. :wink:


Ach so....
Der Button um ein Code-Fenster zu erzeugen ist leider erst sichtbar, wenn du unter dem aktiven Schreibfenster auf "Erweitert" klickst.
Dann bekommst du den großen Editor, der dann auch den Button mit dem Doppelkreuz --> # als Symbol hat.
Wenn dir das zu umständlich ist, kannst du es auch von Hand schreiben:
[ code ]

[ /code ]
Allerdings OHNE die Leerschritte vor und nach der eckigen Klammer! :wink:


Oder auch....
Versuch deinen letzten Beitrag jetzt mal zu editieren, dann hast du auch den Button mit dem # wieder. :cool:


Grüße,
Cassio
 
Code:
antwortest Du "direkt", oder "erweitert"?
Bei erweitert kannst Du einfach den geschriebenen/eingefügten Text markieren, und dann auf das "#"-Symbol klicken. Dann werden die Code-Tags automatisch eingefügt. Ohne Markierung erzeugt der Klick dann die Tags, und setzt den Cursor dazwischen - dann kannste auch gleich coden.
Beim direkt-antworten ist das Symbol nicht da - aber Du kannst es ja auch per Hand schreiben:
Am Anfang halt CODE in eckige Klamern eingeschlossen, am Ende /CODE ebenso.
Resultat:
Code:
blablub
Hmm... konnte man da nicht früher mal'n Parameter mit angeben für Syntax-Highlightning verschiedener Sprachen oder so *grübel*
 
Die HBL funzt bei mir genau verkehrt rum.

Hallo!

Ich habe es eben in der Declare-Datei mal geändert und die Datei auch gleich neu hochgeladen! :D
Sollte jetzt also richtig herum funktionieren.


Ach so....
Wenn du die I2C-Pin`s jetzt einmal im BASCOM-Fenster eingstellt hast,
dann entferne doch bitte das:
Config SDA und Config SCL
wieder aus deinem Programmcode.... wenn du die Hardwarevariante verwenden möchtest.


Grüße,
Cassio
 
Code:
Hallo Cassio,

funktioniert jetzt blendend - danke. Klar das SCL-SDA nehm ich noch raus.

Und wenn ich das mit dem Code begriffen habe, sollte die Antwort jetzt als Code dastehen :D .

Danke Euch beiden und VG.
 
Hallo Cassio,

wie kann man aber nun Variablen auf dem LCD ausgeben wie zb. "Test" von : Test Alias Pinc.3 .
Ich stell mich aber auch wieder dumm an, gelle :D

MfG
 
Hallo!

Alles was du auf dem LCD ausgeben möchtest, muss als String übergeben werden!

Wenn du also eine Variable hast die kein String ist (z.B. Dim I As Byte) und du möchtest den Inhalt dieser Variable auf dem LCD sehen, dann musst du den aktuellen Inhalt erst in einen String konvertieren!
Hierfür gibt es mehrere Möglichkeiten.

Die Bekannteste ist STR() ! :wink:

Wenn ich jetzt das Beispiel von eben nehme (I As Byte) dann könntest du das so machen:
Code:
Dim I As Byte

For I = 0 to 255
   Text = str(i) : Text = Format(text , "000")
   Lcd_ 1 , 1 , Text
   Waitms 50
Next I

Manche BASCOM-Befehle konvertieren aber schon automatisch einen Wert zum String.
Wie zum Beispiel BIN() !

Wenn du eine Variable in binärer Schreibweise darstellen möchtest, benötigst du nur BIN():
Code:
Dim I As Byte

For I = 0 to 255
   Text = bin(i)
   Lcd_ 1 , 1 , Text
   Waitms 50
Next I

Den Befehel BIN() kannst du zum Beispiel aber auch verwenden, um den Pinzustand eines ganzen Ports anzuzeigen:
Code:
Text = Bin(PORTD)
Lcd_ 1 , 1 , Text

Es ist auch möglich, Strings zu "addieren":
Code:
Text = "PORTD=" + Bin(PORTD) + "OK"
Lcd_ 1 , 1 , Text
Dies ist ganz hilfreich, wenn man Variablenausgaben zusammen setzen möchte.


Es gibt aber auch Variablen die sowieso ein String sind. Zum Beispiel die Uhrzeit $TIME und das Datum $DATE !
Diese kannst du dann also direkt übergeben.


Ich hoffe, es war soweit verständlich.

Gruß,
Cassio
 
Hallo AVR-User!

Ich habe in Beitrag #44 (HIER klicken) das Testprogramm und (ganz wichtig) die beiden Dateien (Declare und Subs) aktualisiert!

Der Grund dafür war, dass die HBL immer nur dann ihren Zustand ändern konnte, wenn auch etwas neues angezeigt werden sollte.
Das ist nun mit der Version von heute aber Vergangenheit. :D

Ab dieser Version kannst du die HBL des Display`s auch als "Warnsignal" einsetzen.... also z.B. blinkend! :wink:

Beispiel:
Code:
HBl Ein
Waitms 500
Hbl Aus
Waitms 500
HBl Ein
Waitms 500
Hbl Aus
Waitms 500

Lade dir also die neuen Versionen mal runter und probiere sie aus.
Das Testprogramm in dem Beitrag habe ich auch entsprechend angepasst.

Grüße,
Cassio
 
Hallo Cassio,

ja es funktioniert und danke für die ausführlichen Erläuterungen.

Mit dem Grundprinzip deiner LCD-Steuerung müßte es doch rein theorerisch auch möglich sein Erweiterungsbausteine auf Grundlage des PCF anzusprechen für zusätzliche digitale IO's z.B. für Tasten oder LED's.
Oder liege ich da wieder falsch?

MfG
 
...für zusätzliche digitale IO's z.B. für Tasten oder LED's.
Oder liege ich da wieder falsch?

Hallo !

Nein, liegst du nicht. :wink:

Da dies der falsche Thread dafür ist..... schau doch mal HIER rein !
Da sind verschiedene Beispiele zur I/O-Erweiterung per I2C drin.

Grüße,
Cassio
 
Hallo Cassio,

haut leider doch mit der HBL nicht so hin.
Ich hatte vorhin Bascom nach kopieren der Dateien nicht neu gestartet. Deshalb wahrscheinlich kein Fehler.
Mit den alten 2 Dateien funktioniert es. Mit den 2 Neuen kommen folgende Fehler :

Unbenannt.jpg

MfG
 
Hallo!

Also bei mir funkioniert es! :wink:

Hast du auch das neue Test-Programm genommen? :hmmmm:

Auf Grund der Fehlermeldung kommt mir das aber nicht so vor!
Im neuen Test-Programm ist HBL nämlich keine Variable mehr, der man einen Wert von 128 zuweisen kann.
Darum bekommst du auch die Fehlermeldung! :cool:

Also noch mal....
Das NEUE Test-Programm und die NEUEN Dateien (_pollin_I2C_declare.bas UND _pollin_I2C_subs.bas) gehören zusammen!

Lösch die alten Versionen (Programm & Dateien) am Besten immer sofort! So kommst du nicht durcheinander!
Das ist auch der Grund, warum ich momentan den Dateien immer noch den selben Namen gegeben habe.


Grüße,
Cassio
 

Ü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)