Bonjour,
J'ai fait un petit programme de démo pour utiliser les LCD I2C avec expandeur PCF8574.
J'écris deux lignes identiques, avec un code identique. Mais dans la dernière ligne écrite, le dernier caractère (le r) n'est pas écrit.
Il faut écrire "for cpt = 0 to 7" pour que ce caractère soit lu.
Si on inverse l'écriture des lignes (inversion de 128 et 192) le problème apparait sur la première ligne du LCD.
Si, sur un 2004, on ajoute une ligne identique, le problème apparait sur la troisième ligne écrite.
Je ne sais pas pourquoi....
Pour info, l'idée m'est venue d'activer les pullup sur les sorties I2C, ça fonctionne, on supprime deux résistances.
MM
J'ai fait un petit programme de démo pour utiliser les LCD I2C avec expandeur PCF8574.
J'écris deux lignes identiques, avec un code identique. Mais dans la dernière ligne écrite, le dernier caractère (le r) n'est pas écrit.
Il faut écrire "for cpt = 0 to 7" pour que ce caractère soit lu.
Si on inverse l'écriture des lignes (inversion de 128 et 192) le problème apparait sur la première ligne du LCD.
Si, sur un 2004, on ajoute une ligne identique, le problème apparait sur la troisième ligne écrite.
Je ne sais pas pourquoi....
Pour info, l'idée m'est venue d'activer les pullup sur les sorties I2C, ça fonctionne, on supprime deux résistances.
MM
Code:
;Utilisation expandeur PCF8574 sur LCD MM 26 10 2015
#picaxe 20M2
#no_data
dirsB =%10100000
pullup %10100000
symbol rsbit=bit0
symbol cpt=b1
symbol car=b2
symbol dat=b3
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
; 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 6 ;ici, il faut 0 to 7 pour écrire le dernier r
lookup cpt,("Bonjour"),car
GOSUB EnvoiByteData
next
stop
; 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)
dat=dat | %1100
hi2cout (dat) ;pulse sur E cad P2
pause 2
dat=dat | %1000 ;fin pulse
hi2cout (dat)
;2ème moitié
dat=car & $0F * 16 | %1000 | rsbit
hi2cout (dat)
dat=dat | %1100
hi2cout (dat)
pause 2
dat=dat | %1000
hi2cout (dat)
rsbit=1
return
Last edited: