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 ---
DS3231 et température
- Gérard

Expert- Messages : 1937
- Âge : 67
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Bonjour à tous,
Je viens de rouvrir un ancien programme où j'utilise cette RTC où la température est disponible.
En page 15 de la doc, il est dit que le registre de température est codée en complément à 2.
J'ai un creux et Wikipédia ne m'a pas aidé.
Merci de rafraichir ma mémoire.
HS : bravo les courageux de CNC.
Je viens de rouvrir un ancien programme où j'utilise cette RTC où la température est disponible.
En page 15 de la doc, il est dit que le registre de température est codée en complément à 2.
J'ai un creux et Wikipédia ne m'a pas aidé.
Merci de rafraichir ma mémoire.
HS : bravo les courageux de CNC.
DS3231 et température
- paulfjujo

Maître- Messages : 3257
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour Gerard,
c'est la valeur qu'il faut rajouter pour obtenir 0xFF
exemple pour un byte =0x63 complement à 2 = 0x9C
0x63 + 0x9C=0xFF
usage de la fonction XOR
msb = msb ^ 0xFF;
msb=0x63;
msb=msb xor 0xFF; - > 0x9C
si on refait
msb=msb xor 0xFF ; -> 0x63
on s'en sert beaucoup pour inverser la video sur un LCD grafique
par contre la lecture temperature de la RTC est un peu capilotractée ....
je l'utilise dans mon appli Chaudiere .. juste pour info
même si c'est en C !
nota : l'argument passé dans la fonction, depend sur quoi on affiche le resultat
0 => pour affichage caractere degré sur terminal
1 => pour usage caractere special LCD
usage dans le main
resulta sur terminal
c'est la valeur qu'il faut rajouter pour obtenir 0xFF
exemple pour un byte =0x63 complement à 2 = 0x9C
0x63 + 0x9C=0xFF
usage de la fonction XOR
msb = msb ^ 0xFF;
msb=0x63;
msb=msb xor 0xFF; - > 0x9C
si on refait
msb=msb xor 0xFF ; -> 0x63
on s'en sert beaucoup pour inverser la video sur un LCD grafique
par contre la lecture temperature de la RTC est un peu capilotractée ....
je l'utilise dans mon appli Chaudiere .. juste pour info
nota : l'argument passé dans la fonction, depend sur quoi on affiche le resultat
0 => pour affichage caractere degré sur terminal
1 => pour usage caractere special LCD
Code : Tout sélectionner
void Ds3231_Temp_CP(char mode) ;
void Ds3231_Temp_CP(char mode)
{
// " range: -99 to +127 degree
unsigned char msb, lsb, tmp1;
// read the two temperature registers:
msb=Lecture_Affichage_Registre_DS3231(0x11,0);
lsb=Lecture_Affichage_Registre_DS3231(0x12,0);
tmp1 = ' ';
if (msb & 0x80)
{ // SIGN_bit = 1: negative
tmp1 = '-';
// two's complement conversion:
msb = msb ^ 0xFF;
if (!lsb)
++msb; // required if the fractional portion is zero
else
lsb=lsb | 0x01 ; // negative fract. sign, normally it is 0
}
else
{
if (msb > 99)
{
msb -= 100;
tmp1 = '1';
}
}
// the first char is a space, '-' or '1':
DS_Temp[0]=tmp1;
//Lcd_Chr_CP(tmp);
// convert msb (binary value) to 2 ASCII digits
for ( tmp1 = '0' ; msb > 9 ; ++tmp1, msb -= 10 );
// display integer portion:
DS_Temp[1]=tmp1;
DS_Temp[2]=msb+'0';
// decimal point:
DS_Temp[3]= '.';
// compute fract. part:
msb = '0';
tmp1 = '0';
if (lsb)
{
// positive 7,6 bits: 01(25), 10(50), 11(75)
// negative 7,6 bits: 01(75), 10(50), 11(25)
// if (!lsb.B6)
if (( lsb & 64)==0)
msb = '5'; // 50
else
{
msb = '2';
tmp1 = '5';
// if (lsb.B0) // negative fract. (see above): 25 <> 75
// lsb.B7 = !lsb.B7;
// if (lsb.B7)
// msb = '7';
if (lsb & 0x01) // negative fract. (see above): 25 <> 75
lsb=lsb & 0x7F;
if (lsb & 0x80)
msb = '7';
}
} // fract. part
DS_Temp[4]= msb;
DS_Temp[5]= tmp1;
if (mode==0) DS_Temp[6]=176; else DS_Temp[6]= 0; // for LCD
DS_Temp[7]= 'C';
DS_Temp[8]=0;
} // end of Ds3231_Temp_CP()
usage dans le main
CPrint(" Temperature DS3231 => ");
Ds3231_Temp_CP(0);
Print(DS_Temp);
CRLF1();
resulta sur terminal
Re-Lecture et affichage des 8 registres RTC DS3231
Mardi 28/05/24 18H07M52S
Temperature DS3231 => 25.7°C
DS3231 et température
DS3231 et température
- paulfjujo

Maître- Messages : 3257
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour Gerard et à tous,
oui, tout a fée .. pas de BCD
ça ressemble d'ailleurs à du codage de DS18B20 (capteur de temperature OWS signal numerique) !
Meme si cette mesure de temperature est entachée par l'auto echauffement
interne de la DS3231, ça peut donner une bonne idée de la temperature ambiante
autour du circuit .
celle ci sert aussi à compenser les derives internes ( quartz,etc...)
ce qui est absent dans la DS1307 ..et amène ici
beaucoup de discussions. à mon avis ,inutiles !
mieux vaut remplacer une DS1307 par un DS3231 et basta..
oui, tout a fée .. pas de BCD
ça ressemble d'ailleurs à du codage de DS18B20 (capteur de temperature OWS signal numerique) !
Meme si cette mesure de temperature est entachée par l'auto echauffement
interne de la DS3231, ça peut donner une bonne idée de la temperature ambiante
autour du circuit .
celle ci sert aussi à compenser les derives internes ( quartz,etc...)
ce qui est absent dans la DS1307 ..et amène ici
beaucoup de discussions. à mon avis ,inutiles !
mieux vaut remplacer une DS1307 par un DS3231 et basta..
DS3231 et température
- Gérard

Expert- Messages : 1937
- Âge : 67
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Bonjour Paul et à tous,
Tant qu'on reste dans des températures positives, pas de souci de complément à 2.
J'ai effectivement remarqué que la température affichée est de 2 degrés supérieure à la température effective. Une petite correction soft suffit pour solutionner ce petit souci.
Depuis que je connais la DS3231, je n'utilise plus de DS1307.
J'ai survolé la discussion que tu cites et je suis de ton avis, elle n'est pas très utile.
Ce n'est pas la DS qui dérive mais le quartz associé.
Tant qu'on reste dans des températures positives, pas de souci de complément à 2.
J'ai effectivement remarqué que la température affichée est de 2 degrés supérieure à la température effective. Une petite correction soft suffit pour solutionner ce petit souci.
Depuis que je connais la DS3231, je n'utilise plus de DS1307.
J'ai survolé la discussion que tu cites et je suis de ton avis, elle n'est pas très utile.
Ce n'est pas la DS qui dérive mais le quartz associé.
DS3231 et température
- Gérard

Expert- Messages : 1937
- Âge : 67
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Bonjour à tous,
Il me vient une autre question : comment choisir l'adresse de l'EEPROM?
Il y a bien 3 soudures masquées A0, A1 et A2. Peut-on choisir VCC ou GND?
Encore une question : comment mettre des données dans cette mémoire?
Perso, je programme les EEPROM avec mon PICKit2.
Merci pour vos retours.
Il me vient une autre question : comment choisir l'adresse de l'EEPROM?
Il y a bien 3 soudures masquées A0, A1 et A2. Peut-on choisir VCC ou GND?
Encore une question : comment mettre des données dans cette mémoire?
Perso, je programme les EEPROM avec mon PICKit2.
Merci pour vos retours.
DS3231 et température
- paulfjujo

Maître- Messages : 3257
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
Oui,
un bout de code en C
Gérard a écrit :Bonjour à tous,
Il me vient une autre question : comment choisir l'adresse de l'EEPROM?
Il y a bien 3 soudures masquées A0, A1 et A2. Peut-on choisir VCC ou GND?
Oui,
Gérard a écrit :Encore une question : comment mettre des données dans cette mémoire?
Perso, je programme les EEPROM avec mon PICKit2.
Merci pour vos retours.
un bout de code en C
Code : Tout sélectionner
adresse de base par defut de 24C32 : 0xA0
#define EEPROM_4K_ADR 0xA0
// *************** 24C32 4K bytes **********************
void Write_To_24C32(unsigned int Adr, unsigned char cx)
{
I2C1_Is_Idle();
I2C1_Start();
err=I2C1_Wr(EEPROM_4K_ADR ); // write
err=I2C1_Wr(hi(Adr)); // send data (data to be written)
err=I2C1_Wr(lo(Adr));
err=I2C1_Wr(cx); // send data (data to be written)
I2C1_Stop();
I2C1_Is_Idle();
Delay_ms(5);
}
unsigned char Read_From_24C32(unsigned int Adr)
{
unsigned char c3;
I2C1_Is_Idle();
Delay_ms(1);
I2C1_Start();
err=I2C1_Wr(EEPROM_4K_ADR ); // write
err=I2C1_Wr(hi(Adr)); // send adress to be read)
err=I2C1_Wr(lo(Adr));
I2C1_Is_Idle();
I2C1_Repeated_Start();
err=I2C1_Wr(EEPROM_4K_ADR+1 ); // Read
c3=I2C1_Rd(0u); // data to be read)
I2C1_Stop();
I2C1_Is_Idle();
return c3;
}
DS3231 et température
DS3231 et température
DS3231 et température
Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités
