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

programmation des pic sous ccs c



  1. #1
    chachah

    programmation des pic sous ccs c


    ------

    bonjour,
    je cherche à programmer une commande d'un onduleur monophasé donc j'ai trouver ce programme en ligne , et je voudrai comprendre sa signification merci de m'aider

    #include <16f877a.h>
    #device ADC=10
    #include <math.h>
    #fuses HS,NOWDT,NOPROTECT
    #use delay(clock=20000000)
    signed int triangular[20]= {-10,-8,-6,-4,-2,0,2,4,6,8,10,8,6,4,2,0,-2,-4,-6,-8};
    double s,tr;
    int h=0;
    int n=0;
    void main() {
    set_tris_a(0x0F);
    set_tris_b(0x0F);
    set_tris_c(0x00);
    set_tris_d(0x00);
    while(1){
    output_high(PIN_C3);
    s=10.0*sin((double)pi*h/90.0);
    tr= triangular[n];
    if(s>tr)
    {
    output_high(PIN_C1);
    output_low(PIN_C2); // used for generating complement signal
    }
    else {
    output_low(PIN_C1);
    output_high(PIN_C2);
    }
    delay_us(111);
    if(n==19){
    n=1;
    }
    if(h==179){
    h=0;
    }
    n++;
    h++;
    }
    }

    -----

  2. Publicité
  3. #2
    dededu72

    Re : programmation des pic sous ccs c

    #include <16f877a.h> // ajoute le fichier de config du pic
    #device ADC=10 // configuration du convertisseur ~/#
    #include <math.h> Ajoute la lib math
    #fuses HS,NOWDT,NOPROTECT // déclaration des fusibles (HS pour quartz, pas de watchdog, et noprotect je sais plus
    #use delay(clock=20000000) //fréquence quartz 20MHz

    signed int triangular[20]= {-10,-8,-6,-4,-2,0,2,4,6,8,10,8,6,4,2,0,-2,-4,-6,-8}; // déclaration d'un tableau "triangular" qui contien des entiers signés (les valeurs d'un signal triangle a premières vues
    double s,tr;
    int h=0;
    int n=0;

    void main() //déclaration programme principale
    {
    set_tris_a(0x0F); // déclaration des broches qui sont entré ou sortie
    set_tris_b(0x0F);
    set_tris_c(0x00);
    set_tris_d(0x00);
    while(1) //boucle infinie dont on ne sortira jamais sauf au reset du µc
    {
    output_high(PIN_C3); //mise à 1 de la broche C3
    s=10.0*sin((double)pi*h/90.0); //formule mathémathique dont le résultat va dans la variable "s"
    tr= triangular[n]; // on associe à la variable tr la case n du tableau
    if(s>tr) // si s > tr alors on fait le programe si dessous
    {
    output_high(PIN_C1); //mise à 1 de la broche C1
    output_low(PIN_C2); // used for generating complement signal
    }
    else // sinon faire le progr ci-dessous
    {
    output_low(PIN_C1); //mise à 0 de la broche c1
    output_high(PIN_C2); // mise à 1 de c2
    }
    delay_us(111); //attendre 111 µs
    if(n==19) // si n=19 alors faire:
    {
    n=1; // on dis que la variable n vaut 1
    }
    if(h==179) // si h = 179 alors
    {
    h=0; // on met h=0
    }
    n++; // incrémenter la variable n
    h++; // incrémenter la variable h
    }
    }

  4. #3
    chachah

    Re : programmation des pic sous ccs c

    Merci dededu pour ton aide , je me suis documenter ce programme permé de générer une pwm sur une sortie et d'élargir l'impulsion à chaque 100ms d'un duty cycle de 0% à 100% j'ai simulé sur proteus mais j'ai une autre question ,je voudrai modifier le programme afin de controler l'élargissement des impulsions par un bouton poussior à chaque fois que j'appuis sur le bouton j'elargie l'impulsion comme genre d'un variateur de frequence
    merci pour votre aide

  5. #4
    freepicbasic

    Re : programmation des pic sous ccs c

    le PWM Pulse width modulation
    ----------------------------
    consiste a envoyé un signal carré à une fréquence fixe avec un rapport On/Off variable.
    Le signal pourra varier avec un pas qui correspond a la vitesse d'échantillonage / par son pas , ici 20,
    La variation de rapport sera la modulation d'amplitude du signal de sortie
    le principe est d'envoyer une quantité d'énergie dans un récepteur qui aura une inertie supérieur a la fréquence d'échantillionage, généralement un circuit RC, mais pas forcément ça peut être un moteur une LED une résistance chauffante , enfin différente chose ayant une inertie.
    Avec un RC très grand par rapport a la freq d'échantillionage oun aura en sortie une tension constante si le rapport PWM est fixe.
    On pourra synthétiser un signal de frequence max équivalent à celle de Nyquist soit (la freq sample) /2 sans aucune précision d'amplitude dans ce cas limite, plus la fréquence sera basse meilleure sera la modulation d'amplitude.
    Le signal de sortie sera un signal de classe D.

    Ce programme ressemble a un programme genre Universitaire pour appliquer des connaissances électronique a du soft...

    Le programme a été conçu sur le même principe qu'un montage électronique c'est à dire un générateur de sinus et un générateur de triangle , sur ISIS juste 2 signaux , lesquels vont entrer sur un AOP comparateur , les amplitudes max des 2 signaux d'entree étant les mêmes sur les 2 voies.

    Le générateur de sinus
    ----------------------
    s=10.0*sin((double)pi*h/90.0);

    Le générateur de triangle
    _________________________
    en tableau ;
    signed int triangular[20]= {-10,-8,-6,-4,-2,0,2,4,6,8,10,8,6,4,2,0,-2,-4,-6,-8};
    et le lecteur;
    tr= triangular[n];

    Le comparateur AOP
    ------------------
    if(s>tr)


    La formule du générateur
    (double)pi

    Pi = 3.14159 et double signifie double précision , on semande bien pourquoi un double ? (un palmer pour mesurer sa pointure de chaussure...)
    double ne signifie pa multiplier par 2 ! Mais double précision !
    Et l'angle de rotation nécessaire de 180° pour avoir une demi sinus + ou - , va être de 90
    (double)pi*h/90.0
    Alors, il faut 180 pas, pour avoir l'amplitude totale de 1 à -1 !
    (il s'agit en fait de radian dans la formule sin() 1° = Pi/360)

    Le resultat sera toujours inférieur a la valeur absolue de 1.
    Il faudra donc le multiplier par l'amplitude désiré ici 10
    s=10.0*sin((double)pi*h/90.0);

    afin de comparer à la table qui varie de -10 à 10 ,
    signed int triangular[20]= {-10,-8,-6,-4,-2,0,2,4,6,8,10,8,6,4,2,0,-2,-4,-6,-8};
    On se demande bien pourquoi on utilise des int et on fait des calculs en float ?
    Oui c'est plus simpla à écrire...
    l'utilisation de type identique compliquerait la prog !

    Donc pour avoir une sinus en sortie il faudra donc 180 pas, lesquel seront découpés par 20 niveaux du triangle soit
    180/20 = 9 impulsions PWM pour synthétiser la sinus.
    if(h==179){
    le 0 comptant pour 1 on a 180.

    A mon avis cela fonctionne, mais n'est pas très performant.
    Des float pour faire des calculs qui vont prendre beaucoup de place et de temps.
    au final une précision de seulement 9 niveaux.

    Il semble que cela a été écrit assez vite ou bien en appliquant les connaissances mathématiques , mais sans connaitre l'assembleur.
    Quant à CCS attention a la taille des programmes et la tailles de la RAM utilisée.
    Pas de pile data sur les petits pics et des Rams minuscules.
    Quant à la pile prog , 8 niveaux sur le 877 alors attention aux appels de fonctions complexes !
    Avec le pics les progs rentrent généralement avec un chausse pied, alors , j'aimerais connaitre la taille de celui ci ?


    Pour les modifications il faut donc comprendre ce fonctionnement décrit ci dessus pour faire une modif ou déterminer si cette application fait bien ce qu'on veut faire, dans ce cas, peut être, faudrait il alors le re penser entièrement.
    A+, pat

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

    Re : programmation des pic sous ccs c

    merci freep pour cette explication bien détaillée pour ce programme donc selon ce que j'ai n'est pas une pwm pour ce signal c'est juste un signal qq conque, moi je cherche un programme qui me donne pwm que je peut modifier sa fréquence en incrémentant par un bouton poussoir extérieur,donc je vais chercher encore en espérant qu'il aurai une aide merci infiniment

  8. #6
    freepicbasic

    Re : programmation des pic sous ccs c

    Citation Envoyé par chachah Voir le message
    merci freep pour cette explication bien détaillée pour ce programme donc selon ce que j'ai n'est pas une pwm pour ce signal c'est juste un signal qq conque, moi je cherche un programme qui me donne pwm que je peut modifier sa fréquence en incrémentant par un bouton poussoir extérieur,donc je vais chercher encore en espérant qu'il aurai une aide merci infiniment
    C'est un générateur PWM de sinusoide.
    pour changer la frequence de la sinusoide modifier le delay...
    A+, pat

  9. Publicité
  10. #7
    alainav1

    Re : programmation des pic sous ccs c

    bnjour,
    j'ai un programme en basic (mais je pense facilement adaptable dans un autre langage)
    si cela peut t'aider ?
    debut:
    Adcin 0, duty 'lecture de la valeur analogique entre 0 et 1024

    If duty > 1000 Then 'pour lajuster la durée haute
    duty = 1023
    Endif

    If duty < 10 Then'pour ajuster la durée basse
    duty = 0
    Endif

    PWMduty 1, duty 'mise a jour de la sortie de pwm
    '1 donne la gamme frequence de la pwm
    ' duty donne le pourcentage
    'il faut adapter cette fonction suivant ton langage que je ne connais pas
    Goto debut
    End
    cordialement
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  11. #8
    dededu72

    Re : programmation des pic sous ccs c

    ccs-c intègre par defaut un driver de pwm, va voir dans l'aide (bien fournis)

    je vais voir et te redis ça


    edit: recherche avec ce terme ==> set_pwm1_duty( )

  12. #9
    dededu72

    Re : programmation des pic sous ccs c

    pwm que tu doit activer à partir ce cette fonction là ==> setup_ccp1( )

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2011, 20h53
  2. programmation des pic sous ccs c
    Par chachah dans le forum Électronique
    Réponses: 1
    Dernier message: 11/01/2011, 19h47
  3. programmation de pic 16F sous MPLAB
    Par mido1987 dans le forum Électronique
    Réponses: 6
    Dernier message: 05/05/2010, 18h30
  4. programmation du pic CCS compiler
    Par issamty dans le forum Électronique
    Réponses: 3
    Dernier message: 08/03/2009, 13h34
  5. programmation pic par usb sous linux
    Par pierrick&mehdi dans le forum Électronique
    Réponses: 8
    Dernier message: 27/08/2008, 23h03
Découvrez nos comparatifs produits sur l'informatique et les technologies.