Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

pic 16F877 et capteur DS18S20



  1. #1
    aurelienkam

    pic 16F877 et capteur DS18S20

    Bonjour à tous je suis nouveau dans le site et je m'appelle aurelien Kameni. J’étudie cette année en licence le microcontrôleur PIC 16F877.
    J’ai un Travail Pratique dans lequel j'ai beaucoup de d'incompréhensions et de difficultés à le résoudre.
    En effet, c'est de concevoir sur ISIS et de programmer en C pour PIC 16F877 un système de détection de deux seuils de température équipé du détecteur de température DS18S20.
    La sortie du détecteur de température doit être raccordée sur RA5. La température ambiante doit être affichée en continue sur un écran LCD 2x16 raccordé sur les bits RB0 à RB3.
    Une LED placé sur RB5 s'allume si la température est >= 35°c puis s'éteint si elle descend en dessous de 20°c.
    Merci d'avance

    J’ai écrit un programme dans MikroC selon le problème que j'ai posé dernièrement et je rencontre beaucoup de difficulté lors de la compilation.
    J’ai aussi des problèmes pour câbler dans ISIS.
    SVP je voudrais un soutien par rapport a cela.
    Voici mon programme et mon câblage :
    Après compilation j'obtien toujours une temperature de 0°c sur l'afficheur

    <code type="c">



    /*
    Titre : détection de deux seuils de température
    Fichier : temperature.c
    Auteur : Aurelien Kameni
    But : détecter deux seuils de température grâce à un capteur DS18S20 et l'afficher sur un écran LCD 2x16.
    Date de creation : 26 Mars 2011
    dernière modification : 28 Mars 2011
    Configuration :
    - µc : PIC 16F877A
    - Carte de developpement : EasyPIC6
    - Quartz : 8 MHz (HS)
    - Modules externes : Capteur DS18S20
    LCD 2x16
    -Software : MikroC v4.15.0.0
    */

    sbit LCD_RS at RB4_bit;
    sbit LCD_EN at RB6_bit;
    sbit LCD_D7 at RB3_bit;
    sbit LCD_D6 at RB2_bit;
    sbit LCD_D5 at RB1_bit;
    sbit LCD_D4 at RB0_bit;

    // Pin direction
    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB6_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D4_Direction at TRISB0_bit;

    int adc_temp;
    char txt[15];
    float res;

    // Set TEMP_RESOLUTION to the corresponding resolution of your DS18x20 sensor:
    unsigned temp,ct,dt,u; //ct pour centaine, dt pour dizaine et u pour unité
    unsigned short j;


    void main()
    {
    ADCON1 = 0x82; // Configure RA5 pin as digital I/O
    trisb = 0xdf;
    portb = 0;
    // Initialize LCD on PORTB and prepare for output
    Lcd_Init();
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Cmd(_LCD_CURSOR_OFF);
    ADC_Init();


    do
    {
    portb=1;
    delay_ms(400);
    portb=0;
    delay_ms(400);

    //acquisition de la température sur RA5 (temp)
    Ow_Reset(&PORTA, 5); // Onewire reset signal
    Ow_Write(&PORTA, 5, 0x20); // Issue command SKIP_ROM
    Ow_Write(&PORTA, 5, 0x30); // Issue command CONVERT_T
    Delay_us(120);

    Ow_Reset(&PORTA, 5);
    Delay_us(120);
    Ow_Write(&PORTA, 5, 0x20); // Issue command SKIP_ROM
    Ow_Write(&PORTA, 5, 0xBE); // Issue command READ_SCRATCHPAD

    adc_temp=ADC_GET_sample(2);
    temp = Ow_Read(&PORTA, 5);
    Ow_Reset(&PORTA, 5);
    Delay_us(120);
    res=adc_temp*temp;
    floatToStr(res,txt);
    Lcd_Out(1,1,txt);
    delay_ms(100);
    Lcd_Cmd(_LCD_CLEAR);

    }while(res<=20);

    }


    </code>

    -----


  2. Publicité
  3. #2
    aurelienkam

    Post Re : pic 16F877 et capteur DS18S20

    voici le schema ISIS
    Fichiers attachés Fichiers attachés

  4. #3
    JPL

    Re : pic 16F877 et capteur DS18S20

    Si nécessaire je peux déplacer le sujet vers Électronique, peut-être mieux adapté.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  5. #4
    Forhorse

    Re : pic 16F877 et capteur DS18S20

    Je ne connais pas particulièrement le 18S20 (moi j'ai encore des vieux 18B20) mais sur le 18B20 il faut lui envoyer une commande pour le configurer (resolution) avant de commencer à s'en servir.

    EDIT : que viens faire l'ADC dans l'histoire ? si je comprend bien (j'ai pas l'habitude du C) tu affiche la valeur d'un convertisseur analogique/numerique et pas du tout la valeur lue par le DS18S20

  6. #5
    aurelienkam

    Re : pic 16F877 et capteur DS18S20

    bonjour et merci
    M. JPL vous pouvez transferer le code dans la section électronique.

    j'ai reécrit le code et je n'obtiens pas d'erreur. le problème qui se pose est au niveau de la simution dans ISIS.j'ai à l'affichage degre 32766.74 et j'ai les erreurs suivants
    - simulation is not running in real time to excessive
    -CFGWORD2 not implemented
    -[DS18S20] RAM COMMAND UNSUPPORTED

    voici le nouveau code:

    Code:
    sbit LCD_RS at RB4_bit;
    sbit LCD_EN at RB6_bit;
    sbit LCD_D4 at RB0_bit;
    sbit LCD_D5 at RB1_bit;
    sbit LCD_D6 at RB2_bit;
    sbit LCD_D7 at RB3_bit;
    
    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB6_bit;
    sbit LCD_D4_Direction at TRISB0_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
    
    //////////////////////////////////////////////////
    //Read temperature
    //////////////////////////////////////////////////
    void Read_Temperature(void)
    {
     float valeurtemp[2];
    char get[10];//variable dans laquelle on va charger la memoire scratchpad
    char temp_lsb,temp_msb;
    char k;
    float temp;
       ow_reset(&portA,5);
       ow_write(&portA,5,0XCC);
       ow_write(&portA,5,0X44);
       delay_ms(120);
       ow_reset(&portA,5);
       ow_write(&portA,5,0XCC);
       ow_write(&portA,5,0XBE);
       delay_ms(120);
    
      for (k=0;k<9;k++)
       {get[k]=ow_read(&portA,5);}// lecture de la mémoire scratchpad
    temp_msb = get[1]; // octet de signe
    temp_lsb = get[0]; // donnée température avec avec demi degré si nécessaire
       //temp=ow_read(&portA,5);
    if (temp_msb <= 0x28)
      {temp_lsb = (temp_lsb/2.0);} //récupération valeur entière
      temp_msb = temp_msb & 0x28; //récupération du signe
      portb=1;
       delay_ms(300);
    if (temp_msb >= 0x37)
     {temp_lsb = (~temp_lsb)+1; // calcul complément à deux pour valeur négatives
      temp_lsb = (temp_lsb/2.0);}// récupération partie entière
      temp=temp_lsb-0.25+((get[7]-get[6])/get[7]);//application de la formule
      portb=0;
       delay_ms(300);
    if (temp_msb >= 0x37) {temp=((-1)*temp);} // on ajoute le signe
    
     lcd_out(2,1,"DEGRE");
                lcd_chr(2,14,223);
                //lcd_Chr(2,15,67);
                floatToStr(temp,valeurtemp);
                lcd_out(2,7,valeurtemp);
               //return temp;
    }
    
    void main()
    {
         //ADCON0=0b00000000;
         ADCON1=0b10000000;
         trisa=0b11011111;
         trisb=0b11011111; // bit RB5 en sortie
         PORTA=0;
         PORTB=0;
    
         Lcd_Init();
         Lcd_cmd(_LCD_CLEAR);
         Lcd_Cmd(_LCD_CURSOR_OFF);
    
         while(1)
         {
          //if(!ow_reset())
            Read_Temperature();
         }
    }
    C'est quand même plus lisible avec des balises code, non?
    Dernière modification par Jack ; 31/03/2011 à 14h34.

  7. A voir en vidéo sur Futura
  8. #6
    JPL

    Re : pic 16F877 et capteur DS18S20

    C'est dans Électronique depuis hier suite à un petit cafouillage de ma part. Mais finalement ça tombe bien.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  9. Publicité
  10. #7
    aurelienkam

    Re : pic 16F877 et capteur DS18S20

    bonjour, je voudrais savoir quelles les instructions pour une balise.de plus mon programme ne fonctionne toujours pas.
    merci

Sur le même thème :

Discussions similaires

  1. Capteur + pic 16F877
    Par azizinovitch dans le forum Électronique
    Réponses: 5
    Dernier message: 03/04/2010, 00h08
  2. capteur DS18S20
    Par momo50 dans le forum Électronique
    Réponses: 11
    Dernier message: 24/11/2009, 16h26
  3. Capteur de type lm335 associé a un pic 16f877
    Par bwlm76 dans le forum Électronique
    Réponses: 2
    Dernier message: 21/01/2008, 21h02
  4. Réponses: 0
    Dernier message: 18/03/2007, 15h43
  5. PIC et DS18S20
    Par Gérard dans le forum Électronique
    Réponses: 10
    Dernier message: 03/12/2006, 12h13