IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

programmation en c des microcontroleurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut programmation en c des microcontroleurs
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    /* 
    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 RB5_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 TRISB5_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; 
     
    const unsigned short TEMP_RESOLUTION = 9; 
     
    char *text = "000.0000"; 
     
     
    // 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); 
     
    while(1) // boucle principale 
    { 
    //acquisition de la température sur RA5 (temp) 
    Ow_Reset(&PORTA, 5); // Onewire reset signal 
    Ow_Write(&PORTA, 5, 0xCC); // Issue command SKIP_ROM 
    Ow_Write(&PORTA, 5, 0x44); // Issue command CONVERT_T 
    Delay_us(120); 
     
    Ow_Reset(&PORTA, 5); 
    Delay_us(120); 
    Ow_Write(&PORTA, 5, 0xCC); // Issue command SKIP_ROM 
    Ow_Write(&PORTA, 5, 0xBE); // Issue command READ_SCRATCHPAD 
     
    temp = Ow_Read(&PORTA, 5); 
    temp = (Ow_Read(&PORTA, 5) << 8) + temp; 
     
    Ow_Reset(&PORTA, 5); 
    Delay_us(120); 
    Display_Temperature(temp); 
    Delay_ms(500); 
    // Affichage 
    Lcd_Out(1, 1, "Temperature :"); 
    temp=temp/2; //début du calcul et de l'affichage de la température 
    ct=temp/100 ; 
    Lcd_Chr_Cp(ct+0x30); 
    dt=(temp-100*ct)/10; 
    Lcd_Chr_Cp(dt+0x30); 
    u=temp-(ct*100+dt*10); 
    Lcd_Chr_Cp(u+0x30); 
     
    /*Lcd_Out(1, 1, "Cons: "); 
    Lcd_Chr(2,13,223); 
    Lcd_Chr(2,14,'C'); */ 
     
    if(temp>=30) 
    { 
    portb=1; 
    delay_ms(500); 
    portb=0; 
    delay_ms(500); 
    } 
    else 
    if(temp<=20) 
    { 
    portb=0; 
    delay_ms(500); 
    } 
    } 
    }
    Fichiers attachés Fichiers attachés

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 118
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Des problèmes à la compilation ? C'est très intéressant, mais peut être encore faut il nous indiquer lesquels (en copiant les erreurs, par exemple)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 854
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 854
    Par défaut
    Salut,

    Pour ton IDE, pourquoi n'utilises-tu pas MPLAB ?

    Sur le site de Microchip, tu trouveras plein d'exemple de code : http://www.microchip.com/TechDoc.aspx?type=CodeExamples

    Pour l'utilisation avancée des périphériques, je te conseille d'aller voir ce site : http://www.abcelectronique.com/bigonoff/
    => les codes d'exemples sont écris en assembleur mais le principe reste le même en C

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut pic 16f877 etb ds18s20
    j' ai modifié le programme et je n'obtiens pas d'erreur, juste que lors de simulation dans proteus l'afficheur LCD m'affiche a chaque la valeur 0.
    voici le programme et la pièce jointe ISIS :

    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, 0x28); // Issue command SKIP_ROM
    Ow_Write(&PORTA, 5, 0x37); // Issue command CONVERT_T
    Delay_us(120);

    Ow_Reset(&PORTA, 5);
    Delay_us(120);
    Ow_Write(&PORTA, 5, 0x28); // Issue command SKIP_ROM
    Ow_Write(&PORTA, 5, 0x37); // 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>=37);

    }
    Fichiers attachés Fichiers attachés

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut
    bonjour et merci

    ce matin 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:

    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();
    }
    }

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 118
    Billets dans le blog
    148
    Par défaut
    J'ose croire que votre simulateur est incomplet et ne supporte pas tout. Sinon c'est surement une histoire d'options.
    De plus, les erreurs ne sont pas vraiment important pour votre cas (enfin, sauf si vous utilisez ces fonctionnalités, mais cela ne semble pas le cas).
    Pour l'erreur d'affichage (la valeur fausse) j'ose croire que votre calcul est faux car l'affichage semble fonctionner.
    J'espère que vous avez un débuggueur, cela aide énormément pour trouvé les erreurs.

    Note:
    On a du déjà vous le dire, mais ce forum a été développé avec l'optique d'être compatible à la 4D (3D, sans lunette, avec gestion du temps (ou de la sociabilité, comme dirait certains)). Une des plus magnifique fonctionnalité intégré dans ce forum est la balise CODE™
    (Phrase publicitaire, avec la petite musique) Avec la balise CODE™ vous pouvez rendre tout vos codes colorés et agréable à lire. La balise CODE™ le meilleur outil pour le débugguage de votre programme (se vend avec une Boule de Cristal © pour une très modique somme))
    Le mode d'emploi en rappel le principe:
    Placez votre code entre [ CODE ] et [ / CODE ] (sans espace) afin d'appliqué les merveilleux effets de la balise CODE™. Afin de rendre l'utilisation plus facile, vous pouvez appuyer sur le bouton # lors de l'édition de message, ce qui provoquera l'apparition des balises automatiquement.
    Voilà, comme quoi, la technologie, c'est bien.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Programmation des microcontroleurs pour se connecter à Internet
    Par nightangel75 dans le forum Développement
    Réponses: 1
    Dernier message: 29/04/2008, 15h00
  2. [VB6]Executer un programme en vb6 des le lancement
    Par cedre22 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/02/2006, 10h15
  3. Réponses: 2
    Dernier message: 30/01/2006, 22h19
  4. [LG]programme qui renomme des fichiers
    Par Ne0taku dans le forum Langage
    Réponses: 9
    Dernier message: 16/02/2005, 21h18
  5. Réponses: 3
    Dernier message: 15/03/2004, 00h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo