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 :

PIC16f877 avec mikroC et acquisition de mesures


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Par défaut PIC16f877 avec mikroC et acquisition de mesures
    Bonsoir ,
    je programme sur mikroc pro v4.6, c'est la première fois que j'utilise ce logiciel.
    je souhaiterais réaliser un système d'acquisition de température de 12 sondes et qui les affiche sur une interface graphique développée en C#.

    je travaille avec PROTEUS PRO V7.7 sp2, j'ai donc utiliser un PIC 16F877 et j'ai produit le code ci-dessous, mais il n'a pas bien fonctionné avec mon interface en C# parce qu'il me transmet les 12 valeurs des sondes à l'instant où j'envoie la lettre 'c'.

    ma demande et de m'aider à modifier ce programme afin d'avoir la possibilité de recevoir ces valeurs l'une après l'autre à chaque fois que j’envoie la lettre 'c' au PIC.

    Merci d'avance pour vos réponses.


    voici le code :

    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
    float rtdv, rtdr, temp, y;
    int msd, isd, i;
    char temperature[6];
    char uart_rd;
     
    calcule()                      
    {
    rtdv=rtdv *5/1024;
    rtdv=rtdv/5;
    rtdr=rtdv*1000.0/(5.0-rtdv);
    y=0.15274-(rtdr-100.065)*0.0002310; 
    if (y>=0)y = sqrt(y);
    temp = (y-0.39083)/(-0.0001155);
    bytetostr(temp,temperature);
    delay_ms(1);
    }
     
    affichage()                                        
    {
    UART1_Write_Text(temperature);
    strcpy(temperature,"");
    UART1_Write(13);                   
    }
     
     
    void main()
    {
     
    TRISA = 0xFF;                              
    TRISE = 0xFF;
    TRISB = 0x00;                                
     
    PORTB = 1;                            
     
     
    UART1_Init(9600);
     
    for(;;)                                    
    {       portb.f1=1;
            if (UART1_data_ready())
             {
                      uart_rd = UART1_read();
                      if(uart_rd=='c')                 // envoie de la lettre c
                      {
                            PORTB.f0=1;                // port RB0 est à 1
                            for (i=0;i<6;i++)
                            {
                             delay_ms(5);            
                             rtdv=adc_read(i);
                             UART1_Write(13);        
                             calcule();             
                             affichage();     
                             }
     
                            PORTB.f0=~portb.f0;        // port RB0 prend le complément de l'état avant
                            for (i=0;i<6;i++)
                            {
                             delay_ms(5);
                             rtdv=adc_read(i);
                             UART1_Write(13);    
                             calcule();          
                             affichage();      
                             }
                     }
             }
    }
    }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 62
    Par défaut
    Bonjour,
    Je ne vois pas vraiment où est ton problème, tu as déjà fait le gros du travail.
    Si tu utilise une variable que tu incrémentes à chaque réception de la lettre 'c' tu pourras sélectionner la bonne sonde.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Par défaut
    Bonjour schonai,
    Je ne vous cache pas, vu que je suis débutant en ce sujet, je suis bloqué à ce niveau.. c'est après plusieurs recherches sur internet que j'ai pu écrire ce code, mais honnêtement j'ai pas trouvé un exemple ou une méthode qui m'aide à modifier le programme selon mon besoin.. c'est pour cet intérêt que je sollicite votre aide..

    le code fonctionne actuellement comme suit :

    - au début, la pine RB0 = 1, quand j'envoie la lettre 'c', le PIC m'envoie 6 valeurs successive ensuite il rend RB0 = 0 et il m'envoie de suite 6 autres valeurs dans le même ordre, dont la totalité est 12 valeurs tel que :
    c
    RA0
    RA1
    RA2
    RA3
    RA5
    RE0
    RA0
    RA1
    RA2
    RA3
    RA5
    RE0

    - mon besoin est que je veux, à chaque fois que j'envoie la lettre 'c', je reçois les donnée somme suit :
    c
    RA0
    c
    RA1
    c
    RA2
    c
    RA3
    c
    RA5
    c
    RE0
    c
    RA0
    c
    RA1
    c
    RA2
    c
    RA3
    c
    RA5
    c
    RE0

    pouviez vous m'indiquez exactement où j’interviens sur le code pour le modifier selon mon besoin?
    merci

  4. #4
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 62
    Par défaut
    Pour l'instant le code à pour schéma

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    attente événement
    boucle 1
        affichage
    fin boucle 1
    boucle 2
        afficahge
    fin boucle 2
    Le but est d'obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    boucle 1
        attente événement
        affichage
    fin boucle 1
    boucle 2
        attente événement
        afficahge
    fin boucle 2
    Il y a donc une première solution très simple. Elle n'est pas élégante mais peut être un commencement.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Par défaut
    si j'ai bien compris, le schéma du code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    boucle 1
        attente événement
        affichage
    fin boucle 1
    boucle 2
        attente événement
        affichage
    fin boucle 2
    donne :

    c
    RA0
    RA1
    RA2
    RA3
    RA5
    RE0
    c
    RA0
    RA1
    RA2
    RA3
    RA5
    RE0

    si c'est le cas, alors ce n'est pas exactement le but souhaité.. parce que à chaque envoi de la lettre 'c' au PIC, on doit recevoir la valeur du pin dont l'ordre est cité ci-dessus..
    sinon, pouviez vous modifier mon code afin que je puisse le tester?
    merci

  6. #6
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 62
    Par défaut
    Citation Envoyé par x saber x Voir le message
    si j'ai bien compris, le schéma du code suivant :
    donne :

    c
    RA0
    RA1
    RA2
    RA3
    RA5
    RE0
    c
    RA0
    RA1
    RA2
    RA3
    RA5
    RE0
    Non, cette trace est obtenue par un algo de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    attente événement
    boucle 1
        affichage
    fin boucle 1
    attente événement
    boucle 2
        affichage
    fin boucle 2
    Avec le code que je te propose tu dois attendre un caractère à chaque tour de boucle et donc entre chaque lecture.
    Il ne reste plus qu'à définir la méthode pour "l'attente de l'événement" et tu l'as déjà fait au niveau global. Il ne te reste plus qu'à le faire de manière isolée. Je ne peux que te conseiller d'écrire une fonction waitC().
    Une fois cette première version réalisée on pourra voir comment factoriser certaine partie du code.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/05/2010, 19h36
  2. temporisation dans un grafcet avec mikroc
    Par space-cowboy dans le forum C
    Réponses: 0
    Dernier message: 01/06/2009, 20h13
  3. Tracer Temps Réel avec la Data Acquisition Toolbox
    Par Dizayeure dans le forum MATLAB
    Réponses: 0
    Dernier message: 26/04/2008, 14h50
  4. Réponses: 4
    Dernier message: 08/04/2008, 11h42

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