Mesure de la température à l'aide du capteur DS1822

Mesure de la température à l'aide du capteur DS1822


Mesure de la température à l'aide du capteur DS1822

 Mesure  de  la  température  est l'une des  tâches  les  plus  courantes effectuées  par  le microcontrôleur.  Un  capteur DS1822 est  utilisé pour  la  mesure.  Il  est  capable  de mesurer  la température  dans  la  plage  de  -55  °  C  à  +125  °  C  avec  la  précision 0,5  ° C.  Pour  le  but  de transférer  des  données vers  le  microcontrôleur .


Programmation en mikroC

[lock]
/* ***************************************************************************
             Mesure de la température à l'aide du capteur DS1822
*************************************************************************** */
// Configuration des connections d'afficheur LCD avec PIC
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// Fin de configuration
/* Configurer TEMP_RESOLUTION à la résolution correspondante du capteur
utilisé DS1822: 12 (réglage par défaut peut être : 9,10,11 ou 12)*/
const unsigned short TEMP_RESOLUTION = 12;
char *text = "000.0000";
unsigned temp ;
void Display_Temperature(unsigned int temp2write )
{
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;
Lcd_Chr(2,4,'+');
if (temp2write & 0x8000)             /* Vérification si la température
est négative?*/
{
Lcd_Chr(2,4,'-');                 // Correction de signe si oui
temp2write = ~temp2write + 1;     // Complémenter à deux
}
// Extraire de la partie entière (temp_whole) de température
temp_whole = temp2write >> RES_SHIFT;
text[0] = '0';
// Conversion temp_whole en caractères
if (temp_whole/100)
text[0] = temp_whole/100  + 48;   // Extrait d'un chiffre des centaines
else
text[0] = '0';
text[1] = (temp_whole/10)%10 + 48;  // Extrait d'un chiffre des dizaines
text[2] =  temp_whole%10     + 48;  // Extrait d'un chiffre des unités
/* Extraire de la partie fractionnaire (temp_fraction) de tempe'ratureand
et convertion en unsigned int*/
temp_fraction  = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x0F;
temp_fraction *= 625;
// Conversion temp_fraction en caractères
text[4] =  temp_fraction/1000    + 48; /* Extrait d'un chiffre des
milliers*/
text[5] = (temp_fraction/100)%10 + 48; /* Extrait d'un chiffre des
centaines*/
text[6] = (temp_fraction/10)%10  + 48; /* Extrait d'un chiffre des
dizaines*/
text[7] =  temp_fraction%10      + 48; /* Extrait d'un chiffre des
unités*/
// Affichage de la température sur l'écran LCD
Lcd_Out(2,5, text);
}
void main()
{
ANSEL  = 0;                         // Configurer E/S en numérique
ANSELH = 0;
Lcd_Init();                         // Initialiser LCD
Lcd_Cmd(_LCD_CLEAR);                // Effacer l'affichage sur LCD
Lcd_Cmd(_LCD_CURSOR_OFF);           // Mettre invisible le curseur
Lcd_Out(1, 1, " Temperature: ");
// Afficher le caractère, 'C' pour degrés Celsius
Lcd_Chr(2,13,223);                  /*si vous voyez la lettre grecque alpha
essayez de taper 178 au lieu de 223*/
Lcd_Chr(2,14,'C');
//--- boucle principale--------
do
{
//--- effectuer la lecture de température-----
Ow_Reset(&PORTA, 5);             /* Signal de remise a` zéro sur
le bus OneWire */
Ow_Write(&PORTA, 5, 0xCC);      // Envoi de commandes SKIP_ROM
Ow_Write(&PORTA, 5, 0x44);      // Envoi de commandes CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA, 5);
Ow_Write(&PORTA, 5, 0xCC);      // Envoi de commandes SKIP_ROM
Ow_Write(&PORTA, 5, 0xBE);      // Envoi de commandes READ_SCRATCHPAD
Delay_ms(400);
temp =  Ow_Read(&PORTA, 5);
temp = (Ow_Read(&PORTA, 5) << 8)+ temp;
//--- Affichage de la température sur l’écran Lcd ----
Display_Temperature(temp);
Delay_ms(500);
} while (1);
}
[/lock]

video : 

Enregistrer un commentaire

[blogger][facebook]

ABDO ECA

{facebook#https://web.facebook.com/PrepaSUP-110163486316965/} {twitter#https://twitter.com/AbdoEca} {google-plus#YOUR_SOCIAL_PROFILE_URL} {instagram#https://plus.google.com/111033268158521816481}

Formulaire de contact

Nom

E-mail *

Message *

Fourni par Blogger.
Javascript DisablePlease Enable Javascript To See All Widget