Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Gestion d'un RTC ds3231 en I2C (prg de lecture pour affichage sur LCD)
Bonsoir à tous,
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...)
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
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
Gestion d'un RTC ds3231 en I2C (prg de lecture pour affichage sur LCD)
Gestion d'un RTC ds3231 en I2C (prg de lecture pour affichage sur LCD)
merci paul pour ta réponse
ainsi je ne vois l'interet de devoir faire ceci
à devoir "s'ennuyer à multipier par 10 puis faire un ajout de la valeur masquée
voilà pourquoi je ne récupère jamais une fonction toute faite tombant du nid...meme si parfois j'ai une envie irresistible de me telecharger le compilateur mikroC comme la plupart d'entre-vous sur le site ( j'aime bien et j'ai besoin de comprendre ce qui est fait...)
me reste plus qu'à creer une une fct Bcd_to_Hexa...
du genre:
ou qqc comme ça
ainsi je ne vois l'interet de devoir faire ceci
valeurDec=((valeurRTC>>4)*10)+(valeurRTC&0x0f);
à devoir "s'ennuyer à multipier par 10 puis faire un ajout de la valeur masquée
voilà pourquoi je ne récupère jamais une fonction toute faite tombant du nid...meme si parfois j'ai une envie irresistible de me telecharger le compilateur mikroC comme la plupart d'entre-vous sur le site ( j'aime bien et j'ai besoin de comprendre ce qui est fait...)
me reste plus qu'à creer une une fct Bcd_to_Hexa...
du genre:
unsigned char valeurHex_Digit2;
unsigned char valeurHex_Digit1;
valeurHex_Digit2=((valeurBCD>>4)) + 0x30//----> position et fct putch
valeurhexa_Digit1=(valeurBCD&0x0f) + 0x30//----> position et fct putch
ou qqc comme ça
Gestion d'un RTC ds3231 en I2C (prg de lecture pour affichage sur LCD)
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour à tous,
modif pour preparation Affichage time et Date ( en MikroC)
ce qui donne un code plus concis ...
Merçi Frank pour ta remarque
Re-Lecture RTC
05-11-17 14:37:24
Nota : le bit 6 de l'Heure n'est pas génant en mode 24H00, car à Zero
modif pour preparation Affichage time et Date ( en MikroC)
Code : Tout sélectionner
extern char time[]="00:00:00";
extern char date[]="00/00/00";
void BCD_To_Ascii(unsigned char cc,unsigned char * px)
{
*(px)=(cc>>4) + 48;
*(px+1)=(cc & 0x0F) +48;
*(px+2)=0;
}
void Refresh_display_date_Time(void)
{
second=read_ds1307(0);
minute=read_ds1307(1);
heure =read_ds1307(2);
jS=read_ds1307(3);
jour=read_ds1307(4);
mois=read_ds1307(5);
Annee=read_ds1307(6)
/* version initiale utilisée :
time[0]=((heure >> 4) & Dec2Bcd(03)) + 48; // LCD Display 10 HOUR
time[1]=(heure & 0x0f)+48; // LCD Display HOUR
time[3]=((minute >> 4) & Dec2Bcd(07)) + 48; // LCD Display 10 MINUTE
time[4]=(minute & 0x0f)+48; // LCD Display MINUTE
time[6]= ((second >> 4) & Dec2Bcd(07)) +48; // LCD Display 10 SECOUND
time[7]= (second & 0x0f)+48; // LCD Display SECOUND
date[0]=((jour >> 4) & Dec2Bcd(07)) + 48; // LCD Display DAY
date[1]=(jour & 0x0f)+48; // LCD Display 10 DAY
date[3]=((mois >> 4) & Dec2Bcd(07)) + 48; // LCD Display MONTH
date[4]=(mois & 0x0f)+48; // LCD Display 10 MONTH
date[6]=((Annee>> 4) & Dec2Bcd(07)) + 48; // LCD Display YEAR
date[7]=(Annee & 0x0f)+48; // LCD Display 10 YEAR
*/
// new version
BCD_To_Ascii(heure,time) ; time[2]=':';
BCD_To_Ascii(minute,time+3 ); time[5]=':';
BCD_To_Ascii(second,time+6); time[8]=0;
BCD_To_Ascii(jour,date); date[2]='-';
BCD_To_Ascii(mois,date+3); date[5]='-';
BCD_To_Ascii(Annee,date+6); date[8]=0;
}
ce qui donne un code plus concis ...
Merçi Frank pour ta remarque
Re-Lecture RTC
05-11-17 14:37:24
Nota : le bit 6 de l'Heure n'est pas génant en mode 24H00, car à Zero
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 46 invités