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
Masque de bit pour registre
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
J'aimerais connaitre votre méthode pour effectuer une opération sur un registre de RTC. LA RTC utilise le circuit MCP7951 ( DS en haut du post) .
Ma méthode fonctionne, mais je la trouve longue et tirée par les cheveux. J'entrevois une solution plus propre mais je ne trouve pas. Peut être suis-je trop prés du mur
Je dois incrémenter les jours de la semaine qui vont de 1 à 7 du registre . Ces jours sont dans les bit 0-2 du registre.
Donc pour résumé je dois garder les bit 3,4,5 intact , les bits 6 et 7 ne sont utilisés, et je dois incrémenter la valeur des bits 0,1 et 2 .
Voila ma portion de code pour lire en SPI les valeurs du registre, les modifiées et les ré-injecter dans le registre.
C'est purement par curiosité , pour ne pas passer à coté d'une méthode peut être plus simple !
Merci à vous
J'aimerais connaitre votre méthode pour effectuer une opération sur un registre de RTC. LA RTC utilise le circuit MCP7951 ( DS en haut du post) .
Ma méthode fonctionne, mais je la trouve longue et tirée par les cheveux. J'entrevois une solution plus propre mais je ne trouve pas. Peut être suis-je trop prés du mur
Je dois incrémenter les jours de la semaine qui vont de 1 à 7 du registre . Ces jours sont dans les bit 0-2 du registre.
Donc pour résumé je dois garder les bit 3,4,5 intact , les bits 6 et 7 ne sont utilisés, et je dois incrémenter la valeur des bits 0,1 et 2 .
Voila ma portion de code pour lire en SPI les valeurs du registre, les modifiées et les ré-injecter dans le registre.
Code : Tout sélectionner
unsigned int tempo, tempo2;
SPI_Set_Active(SPI2_Read, SPI2_Write); // J'active le SPI2
delay_us(1);
//----- Je lis le jour de la semaine
CS = 0;
SPI2_Remappable_Write(READ);
SPI2_Remappable_Write(DAY_REGISTER);
tempo = SPI2_Remappable_Read(0) ;// je recupere la valeur du registre
tempo2= (tempo & 0x07); // J'isole les 3 bit des jours a incrementer
tempo = (tempo & 0x38); // J'isole les 3 bit a garder
tempo2++; // je rajoute un jour en hexa car il ne dépasse pas 9
tempo2 = (tempo2 & 0x07);// Je re-filtre pour suprrimer le bit 3 si jamais il est passé à 1
if (tempo2 == 0) tempo2 = 1; // si à 0, je force à 1
tempo = tempo | tempo2; // J'assemble mes 2 valeurs individuelles en une seule
CS = 1;
CS = 0; //Ecriture du jour de la semaine dans le registre
SPI2_Remappable_Write(WRITE);
SPI2_Remappable_Write(DAY_REGISTER);
SPI2_Remappable_Write (tempo);
CS = 1;
delay_us(1);
C'est purement par curiosité , pour ne pas passer à coté d'une méthode peut être plus simple !
Merci à vous
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Masque de bit pour registre
Bonjour à tous,
Ceci, pas forcément plus court après compilation :
Dans ton cas tu peux remplacer :
par :
Ceci, pas forcément plus court après compilation :
Code : Tout sélectionner
if ((tempo & 0x07) != 0x07) tempo++;
else tempo = tempo & 0x39;
Dans ton cas tu peux remplacer :
Code : Tout sélectionner
tempo2 = (tempo2 & 0x07);
if (tempo2 == 0) tempo2 = 1;
Code : Tout sélectionner
if (tempo2 == 0x08) tempo2 = 1;
Masque de bit pour registre
Masque de bit pour registre
Masque de bit pour registre
Jérémy a écrit :J'aimerais connaitre votre méthode pour effectuer une opération sur un registre de RTC. LA RTC utilise le circuit MCP7951 ( DS en haut du post) .
Ma méthode fonctionne, mais je la trouve longue et tirée par les cheveux. J'entrevois une solution plus propre mais je ne trouve pas. Peut être suis-je trop prés du mur
Bonjour,
Voici la procédure que j'utilise pour lire une RTC DS3231M en Mikrobasic:
Code : Tout sélectionner
sub procedure Lecture_Date_Heure()
I2C1_Start() ' Issue start signal
I2C1_wr(0xD0) ' Addresse RTC 0xD0
I2C1_wr(0) ' Start à l'adresse 0
I2C1_Start() ' start
I2C1_wr(0xD1) ' Addresse de lecture 0xD1
seconds = I2C1_Rd(1) ' Read seconde byte
minutes = I2C1_Rd(1) ' Read minute byte
hours = I2C1_Rd(1) ' Read heure byte
'=====================================================================
Njs = I2C1_Rd(1) 'Read N° jour byte (N° du jour de la semaine)
'=====================================================================
_day = I2C1_Rd(1) ' Read jour
_month = I2C1_Rd(1) ' Read N° jour/mois byte}
Yb = I2C1_Rd(0) ' Read dizaine unité an byte
Yh = 32 ' 32 = $20
I2C1_Stop() ' Issue stop signal}
end sub
Masque de bit pour registre
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
Car j'avais un module RTC5 qui trainait dans mes tiroirs. Rien de plus. La DS3231 est effectivement très performantes aussi !
Gérard a écrit :Source du message Petite question : pourquoi ne pas utiliser la DS3231 qui a une base de temps intégrée compensée en température?
C'est plus précis qu'un quartz externe.
Car j'avais un module RTC5 qui trainait dans mes tiroirs. Rien de plus. La DS3231 est effectivement très performantes aussi !
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 38 invités