J'aimerais comprendre

MGU

Senior Member
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

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:

GM39

Senior Member
Apparemment c'est toujours le dernier qui pose problème. Ce doit être la même chose lorsqu’il n'y a qu'une seule ligne.
Quand il y en a plusieurs c'est le début de la deuxième qui termine la première, etc et la dernière est incomplète.
Il manque quelque chose pour terminer l'affichage du dernier caractère, sans doute un front, mais j'ai pas la doc du machin...
 

GM39

Senior Member
Si c'est E qui commande l'affichage il faut un & avec le masque pour le remettre à 0 à la place du |

& %1011
 
Last edited:

MGU

Senior Member
Si c'est E qui commande l'affichage il faut un & avec le masque pour le remettre à 0 à la place du |

& %1011
Merci GM39 pour la réponse, c'est effectivement E qui valide le registre. Et oui, effectivement, un "ou" ne peut pas le remettre à 0.

Je vais faire un essai, mais je pense que tu as mis le doigt dessus.

Merci
MM
 

MGU

Senior Member
Ben oui, en ajoutant &%1011, ça fonctionne beaucoup mieux. Il faut laisser le |%1000 pour le rétroéclairage sur cet afficheur.

MM
 
Top