A moins de gérer, par programme, les entrées/sorties (bit banging), le 08M n'a pas de port I2C, contrairement au 08M2. Manquait le 2?...les bornes I2C du 08M
Le code d'essai:
;Utilisation expandeur PCF8574 sur LCD MM 19082017
;Teste minimum LCD1602
; SCL sur C.1
; SDA sur C.2
#picaxe 08M2
dirsC =%000111
symbol rsbit=bit0
symbol cpt=b1
symbol car=b2
symbol dat=b3
symbol vari= w13
setfreq M32
; Initialisation I2C 4 bits , etc ********
hi2csetup i2cmaster,%01001110, i2cslow_32, i2cbyte
; Initialisation LCD *********
for cpt=0 to 5
lookup cpt,($33,$32,$28,$c,$6,$01),car
gosub EnvoiByteCommInit
next
pause 100 ;temps init du LCD
; Affichage texte ***********************
car= 128 'curseur début ligne1
gosub EnvoiByteComm
for cpt=0 to 6
lookup cpt,("Bonjour"),car
GOSUB EnvoiByteData
next
car= 192 'curseur ligne2
gosub EnvoiByteComm
for cpt=0 to 7
lookup cpt,("Enfin !!"),car
GOSUB EnvoiByteData
next
do loop ;boucle d'arret programme
; Sub envoi vers LCD via I2C *************
EnvoiByteCommInit:
pause 15
EnvoiByteComm:
rsbit=0
EnvoiByteData:
;1ère moitié
dat=car & $F0 | %1000 | rsbit ;%1000 pour l'?clairage
hi2cout (dat)
pause 2
dat=dat | %1100
hi2cout (dat) ;pulse sur E cad P2
pause 2 ;pause 2 pour 32 MHz
dat=dat | %1000 ;fin pulse
hi2cout (dat)
pause 2
;2ème moitié
dat=car & $0F * 16 | %1000 | rsbit
hi2cout (dat)
pause 2
dat=dat | %1100
hi2cout (dat)
pause 2
dat=dat | %1000 & %1011
hi2cout (dat)
rsbit=1
return
Bonjour,Voici le schéma, (pris chez Mag1), le potar n'est pas cablé. j'avais fait avec et c'est pareil.
J'ai bien mis les resistances de 4.7K entre scl et le +, et sda et le +
Voici le code
View attachment 22516Code:Le code d'essai: ;Utilisation expandeur PCF8574 sur LCD MM 19082017 ;Teste minimum LCD1602 ; SCL sur C.1 ; SDA sur C.2 #picaxe 08M2 dirsC =%000111 symbol rsbit=bit0 symbol cpt=b1 symbol car=b2 symbol dat=b3 symbol vari= w13 setfreq M32 ; Initialisation I2C 4 bits , etc ******** hi2csetup i2cmaster,%01001110, i2cslow_32, i2cbyte ; Initialisation LCD ********* for cpt=0 to 5 lookup cpt,($33,$32,$28,$c,$6,$01),car gosub EnvoiByteCommInit next pause 100 ;temps init du LCD ; Affichage texte *********************** car= 128 'curseur début ligne1 gosub EnvoiByteComm for cpt=0 to 6 lookup cpt,("Bonjour"),car GOSUB EnvoiByteData next car= 192 'curseur ligne2 gosub EnvoiByteComm for cpt=0 to 7 lookup cpt,("Enfin !!"),car GOSUB EnvoiByteData next do loop ;boucle d'arret programme ; Sub envoi vers LCD via I2C ************* EnvoiByteCommInit: pause 15 EnvoiByteComm: rsbit=0 EnvoiByteData: ;1ère moitié dat=car & $F0 | %1000 | rsbit ;%1000 pour l'?clairage hi2cout (dat) pause 2 dat=dat | %1100 hi2cout (dat) ;pulse sur E cad P2 pause 2 ;pause 2 pour 32 MHz dat=dat | %1000 ;fin pulse hi2cout (dat) pause 2 ;2ème moitié dat=car & $0F * 16 | %1000 | rsbit hi2cout (dat) pause 2 dat=dat | %1100 hi2cout (dat) pause 2 dat=dat | %1000 & %1011 hi2cout (dat) rsbit=1 return
Oui, tout fonctionne en adaptant les valeurs de début de ligne du curseur (148,192, etc, voir tableau)En fait j'ai acheté 2 afficheurs 1602 et le module I2C séparément, (en chine bien sur).
L'autre 1602 fonctionne déjà avec un frm010.
Comme il me faut un 2004 pour une autre appli, j'en ai acheté un, déjà équipé du module I2C.
et je voulais faire des essais sur le 1602 restant que j'ai équipé d'un module I2C.
Merci de me confirmer que le prog de MGU, qui fonctionne sur le 2004, va aussi pour le 1602.
Bonjour,les valeurs sont 128 et 192, donc c'est bon pour un 1602, je pense?
.
Hello,
Un petit module sympa pour convertir les afficheurs LCD avec une interface simple et sans problème de vitesse apparemment (pas encore reçu pour tester)
https://www.digole.com/index.php?productID=551
On le trouve aux environs de 5€
https://www.ebay.fr/sch/i.html?_odkw=lcd+serial+uart+i2c+2004&LH_PrefLoc=2&_sop=15&_osacat=0&_from=R40&_trksid=m570.l1313&_nkw=lcd+serial+uart+i2c+spi+2004&_sacat=0