Apres avoir terminé la gestion d'un LCD en i2c, comme promis je me suis attaqué au RTC (ds3231)
Le controle et la gestion du protocole par pic en maitre, ne me pose aucun probleme...en revanche, j'ai bcp de mal avec la lecture des registres secondaire du RTC.
Sur la DS, on nous dit que les secondes par exemple sont codées en BCD sous format decimal 8 bit
b7 à b4---> concerne les dizaines
b0 à b3---> concerne les unités
exemple:
24 secondes de tps reel serait codé en bcd dans le registre h00 (seconde) de la façon suivante 0010|0100 soit 0xh24 en hexa ou d'36 en decimal
si je mets cette valeur en hexa dans ma fonction putch(0x24)...mon afficheur m'indique que je suis millionnaire!!!! avec $
normal vous me direz, la valeur hexa correspondante à la bcd affiche le caractere $ associé issu de la table ASCII
Mon compilateur HI-TECH ne comprend pas cette fonction que vs mentionnez touts (et moi d'ailleur, non en fait...)
Code : Tout sélectionner
secondes = Bcd2Dec(secondes); // Conversion de BCD en décimal pour l'afficheur pour ma par, j'aurai plutot fais une conversion de type bcd to hexa sur chaque quartet reçus à l'issue de la lecture du registre avant affichage
soit 24 secondes--->bcd du RTC =>0010|0100
1/Je m'attaque au dizaine du registre seconde avec
RTC>>4--->0000|0010
j'ai bien 0x02 en hexa auquel je rajoute 0x30
ainsi ma variable concernant les dizaines= 0x32 qui correspond bien au caratere 2 de ma table ASCII
2/Je m'attaque aux unités avec un masque de 0x0f
RTC&0x0f=>0010|0100 & 0000|1111= 0000|0100
j'ai bien 0x04 en hexa auquel je rajoute 0x30
ainsi ma variable concernant les unités= 0x34 qui correspond bien au caratere 4 de ma table ASCII
....je putch( variable) chaque variable à leur position d'affichage sur lcd
est ce correcte????
par avance merci

Merçi Frank pour ta remarque