ds18b20 programation en cc5x
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

ds18b20 programation en cc5x



  1. #1
    sinatra

    ds18b20 programation en cc5x


    ------

    Salut,

    Avec l'aide de tous le monde je veux réaliser l'affichage de la température sur l'afficheur 7 segment de 4 digit sous une précision de 1° seulement
    j'ai lu le cours de bigonoff et je veux suivre ces conseils et le datasheet du ds18b20.

    donc la 1ere chose c'est d'initialiser le DS18b20 selon Mr bigonoff:
    I – ETAPE1 – INITIALISATION

    Toutes les transactions sur le BUS One Wire commencent par une séquence d’initialisation. Elle consiste en un RESET PULSE initié par le maître (le microcontrôleur) suivi d’un PRESENCE PULSE transmis par l’esclave (le DS18B20). Le ’PRESENCE PULSE’ informe le maître que le ou les esclaves sont prêts sur le BUS.

    Timing de la séquence d’initialisation

    Durant la séquence d’initialisation le maître envoie le RESET PULSE en forçant le BUS au niveau bas pendant au moins 480µs, puis il relâche le BUS et passe en mode réception. Quand le BUS est relâché, la résistance de pull-up de 5k ramène le BUS au niveau haut. Quand l’esclave a détecté ce front montant, il attend entre 15µs et 60µs et transmet le PRESENCE PULSE en forçant à nouveau le BUS au niveau bas pendant 60 à 240 µs

    IMPORTANT : la séquence complète d’initialisation DOIT DURER au moins 480+480=960µs.

    Code:
    void reset_DS18b20(void)
    {
    
    TRISA.2 = 0;  //envoie le RESET PULSE en forçant le BUS au niveau bas pendant au moins 480µs
    DQ = 0;
    delay_ms(1);
    
    TRISA.2 = 1;
    delay_us(60); 
    while(DQ == 0);// il attend entre 15µs et 60µs et transmet le PRESENCE PULSE en forçant à nouveau le BUS au niveau bas pendant 60 à 240 µs
    }
    en principe j'ai respecter le cours et je vai attaquer la deuxième etape.

    -----

  2. #2
    sinatra

    Re : ds18b20 programation en cc5x

    DQ est une variable globale defeni au debut de programme sur PORTA2

    Code:
    #pragma bit DQ @ PORTA.2

  3. #3
    sinatra

    Re : ds18b20 programation en cc5x

    Code:
    void ecrire_ds18b20_command(uns8 cmd)//pour envoyer les commandes 0xCC, 0x44 et 0xBE
    {
    uns8 i;
    for(i = 0 ; i < 8 ; i++)
    {
    TRISA.2 = 0; //Output 0
    DQ = 0;
    delay_us(5); 
    if(cmd.0 == 0) TRISA.2 = 0; //Continu 0 output
    if(cmd.0 == 1) TRISA.2 = 1; //relacher
    delay_us(60); 
    TRISA.2 = 1; //relacher avant le suivant slot
    delay_us(5); 
    cmd = cmd >> 1; //rotation du suivant bit
    }
    }
    c'est la deuxième étape la procédure qui envoi les commandes pour interrogation du ds18b20.

  4. #4
    sinatra

    Re : ds18b20 programation en cc5x

    la 3ieme etape c'est la fonction lire pour recuperer les données du ds18b20 la voici :

    Code:
    uns8 lire_ds18b20(void)
    {
    uns8 i, data_in;
    for(i = 0 ; i < 8 ; i++)
    {
    TRISA.2 = 0; 
    DQ = 0;
    //delay_us(3); 
    nop2(); nop2();
    TRISA.2 = 1; 
    delay_us(5); 
    data_in = data_in >> 1;
    data_in.7 = DQ; 
    delay_us(55); 
    }
    return(data_in);
    }

  5. A voir en vidéo sur Futura
  6. #5
    sinatra

    Re : ds18b20 programation en cc5x

    4 étape c'est la fonction qui appel reset et envoi les commandes et lire la température :

    Code:
    void calcul_temperature(void)
    {
    uns8 i, temp,temp2,temp3;
    uns8 temperature_array[10];
    reset_DS18b20(); //Reset bus
    
    ecrire_ds18b20_command(0xCC); //envoi Skip ROM commande
    
    ecrire_ds18b20_command(0x44); //demande au ds18b20 pour lire temperature
    
    //ca va prendre  750ms 
    //jusqu'à la 1ere réponse 
    
    while(lire_ds18b20() == 0);
    
    reset_DS18b20(); //Reset bus
    
    ecrire_ds18b20_command(0xCC); //envoi Skip ROM commande
    
    ecrire_ds18b20_command(0xBE); //lire scratch pad 
    
    for(i = 0 ; i < 9 ; i++)
    {
    temp = lire_ds18b20();
    
    temperature_array[i] = temp;
    }
    
    temp2 = temperature_array[0];// récupérer LSB dans une variable 
    temp2 >>= 4; // décaler de 4 a droite bit pour enlever les chiffres après la virgule j'en ai pas besoin
    temp3 = temperature_array[1]; // récupérer le MSB dans une autre variable
    temp3 <<=4; // décaler de 4 bit a gauche pour enlever les 4 bit du signe et laisser un seul bit pour le signe et 3 bit la suite du LSB
    temperature_C = temp2 + temp3;
    
    }
    la variable temperature_C est variable global déclarer au début comme int8 emperature_C; je veux l'utiliser dans mon main lorsque j'appel la procédure calcul_temperature();


    SVP que pensez vous jusqu'à cette étape???????

  7. #6
    sinatra

    Re : ds18b20 programation en cc5x

    apparemment il faut configurer le ds18b20 en mode 9bit que je ne sais comment pour l'instant je cherche encore
    Fichiers attachés Fichiers attachés

  8. #7
    JPL
    Responsable des forums

    Re : ds18b20 programation en cc5x

    Le zip semble corrompu. Je ne l'ai donc pas validé. Peux-tu poster à nouveau le fichier soit en texte dans la balise Code soit en lui donnant l'extension txt ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  9. #8
    sinatra

    Re : ds18b20 programation en cc5x

    Citation Envoyé par JPL Voir le message
    Le zip semble corrompu. Je ne l'ai donc pas validé. Peux-tu poster à nouveau le fichier soit en texte dans la balise Code soit en lui donnant l'extension txt ?
    change l'extension a .rar et extract le.

  10. #9
    JPL
    Responsable des forums

    Re : ds18b20 programation en cc5x

    Désolé mais je ne peux pas changer l'extension d'une pièce jointe en attente. C'est à toi à le poster avec l'extension correcte.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  11. #10
    sinatra

    Re : ds18b20 programation en cc5x

    je peux pas ajouter un fichier excel ou un fichier rar c seleument le zip donc telecharge ce fichier et tu le renomme a .rar

  12. #11
    sinatra

    Re : ds18b20 programation en cc5x

    j"ai réaliser le main mais toujours je vois 00°C!
    ca peut être de la variable temperature_C puisqu'elle contient une infos binaire ???
    Code:
    void main ()
    {
    TRISA=0b00000000;
    TRISB=0b00000000;
    TRICB=0b00000000;
    PORTA=0;
    PORTB=0;
    PORTC=0;
    OPTION_REG=0x80;
    OPTION.7=0;
    
    calcul_temperature();// appel de cette procédure pour le calcul de la température 
    
    while(1)
    {
       digits[0]=temperature_C/10;
       digits[1]=temperature_C%10;
    
    }
    }
    je veux que le tableau digits contient l'information de la température avec une résolution de 1°C en nobre entier, comment faire s'il vous plais????

    NB: le tableau digits et la variable temperature_C sont des variable globale

  13. #12
    sinatra

    Re : ds18b20 programation en cc5x

    s'il vous plais je suis dans une impasse j'arrive pas a resoudre le problem

Discussions similaires

  1. ds18b20 toujours 0°c
    Par sinatra dans le forum Électronique
    Réponses: 7
    Dernier message: 29/01/2010, 10h27
  2. DS18B20 : ordre d'identification
    Par Paintitblack dans le forum Électronique
    Réponses: 14
    Dernier message: 05/11/2009, 21h00
  3. par quoi remplacer un DS18B20
    Par invite2faad6dd dans le forum Électronique
    Réponses: 11
    Dernier message: 30/10/2009, 11h08
  4. adresser des composant ds18b20
    Par invite74119562 dans le forum Électronique
    Réponses: 3
    Dernier message: 13/07/2008, 14h13
  5. ds18b20
    Par invite74119562 dans le forum Électronique
    Réponses: 7
    Dernier message: 06/06/2008, 14h54
Découvrez nos comparatifs produits sur l'informatique et les technologies.