programmation C du 12f629 - Page 6
Répondre à la discussion
Page 6 sur 14 PremièrePremière 6 DernièreDernière
Affichage des résultats 151 à 180 sur 412

programmation C du 12f629



  1. #151
    Gérard

    Re : programmation C du 12f629


    ------

    Citation Envoyé par marc2009 Voir le message
    Mais mettre une fourchette dans le programme, je ne sais pas trop, il n'est pas mieux de mettre directement < 531 ?

    Sinon, tu penses que c'est déjà bien comme ça ?
    Oui c'est bon.

    Maintenant va falloir s'attaquer au programme.

    Comme je fais du Basic, je ne te serai pas d'un grand secours en C.

    -----

  2. #152
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Oui c'est bon.

    Maintenant va falloir s'attaquer au programme.

    Comme je fais du Basic, je ne te serai pas d'un grand secours en C.
    Oh tu sais, même si tu ne t'y connais pas en C, tu pourras quand même comprendre une partie

    Sinon, on est en train de faire la liste des composants, pour le quartz ( standard donc ) il n'y a pas de différence à mettre une valeur dans tmr1h n'est ce pas ? Je veux dire si tu précharges une valeur dans tmr1h au début et à chaque interruption, cela influe t il sur la précision, rapidité ... ?

    Merci

  3. #153
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    Oh tu sais, même si tu ne t'y connais pas en C, tu pourras quand même comprendre une partie

    Sinon, on est en train de faire la liste des composants, pour le quartz ( standard donc ) il n'y a pas de différence à mettre une valeur dans tmr1h n'est ce pas ? Je veux dire si tu précharges une valeur dans tmr1h au début et à chaque interruption, cela influe t il sur la précision, rapidité ... ?

    Merci
    Ce qui change quelque chose à TMR1H est la fréquence du Qz.
    Tu en as cité 3 différents, il faudra recalculer la valeur à recharger si tu mets un autre Qz qu'un qui fait 3,2768MHz.
    La précision sera toujours celle du Qz.
    On trouvera une solution.

  4. #154
    marc2009

    Re : programmation C du 12f629

    Bon, seul le 2.0480 MHz est dispo chez gotronic, 2.097152 MHz n'étant chez aucun des 2 fournisseurs ( gotronic/selectronic )

    Donc Fosc/4 = 512 000 Hz prescaler 1:1 tmr1h=6 tmr1l=0 ==> 8 IRQ/s

    c'est juste ?

    ++

  5. #155
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    Bon, seul le 2.0480 MHz est dispo chez gotronic, 2.097152 MHz n'étant chez aucun des 2 fournisseurs ( gotronic/selectronic )

    Donc Fosc/4 = 512 000 Hz prescaler 1:1 tmr1h=6 tmr1l=0 ==> 8 IRQ/s

    c'est juste ?

    ++
    Non !

    Avec 512 000 en entrée de TMR1, pour avoir un nb entier d'IRQ, tu dois diviser par 4096.

    Tu dois charger TMR1H avec 1111 0000b (F0h)pour avoir 125 IRQ/s, c'est le 1er nb entier d'IRQ.

  6. #156
    marc2009

    Re : programmation C du 12f629



    je n'ai fait qu'appliquer ta méthode en plus

    car si je prend ta méthode : en changeant tmr1h=6;, on a 6*256 = 1536 incrémentations donc il reste 65 536 - 1536 = 64 000 incrémentations restantes. Donc 512 000 / 64 000 = 8 IRQ/s

    C'est pas juste ? ( on a donné la liste des composants au prof avec ce quartz, tu vas pas me faire ça bon je vais tout de suite voir si on peut pas modifier la liste aujourd'hui ... )

    Merci

  7. #157
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message


    je n'ai fait qu'appliquer ta méthode en plus

    car si je prend ta méthode : en changeant tmr1h=6;, on a 6*256 = 1536 incrémentations donc il reste 65 536 - 1536 = 64 000 incrémentations restantes. Donc 512 000 / 64 000 = 8 IRQ/s

    C'est pas juste ? ( on a donné la liste des composants au prof avec ce quartz, tu vas pas me faire ça bon je vais tout de suite voir si on peut pas modifier la liste aujourd'hui ... )

    Merci
    P----N, j'avais les neurones en compote !
    Que la honte soit sur moi !

    C'est toi qui a raison.

  8. #158
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    P----N, j'avais les neurones en compote !
    Que la honte soit sur moi !

    C'est toi qui a raison.
    j'ai juste alors ? ( donc va falloir que je renvoie un mail au prof )

  9. #159
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    j'ai juste alors ? ( donc va falloir que je renvoie un mail au prof )
    Oui, tu as juste.

  10. #160
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Oui, tu as juste.
    Merci Gérard. J'ai pu corriger l'erreur avec mon prof. Mille Merci pour ton aide jusqu'à présent.

    Je vais commencer dans ces prochains jours a rédiger le programme, par contre, faudrait que j'en apprenne un peu plus sur le CAN, notamment comme lire la valeur ... je devine que c'est avec ADRESH et ADRESL

    Merci

  11. #161
    marc2009

    Re : programmation C du 12f629

    J'ai pu corriger l'erreur
    je reformule : j'ai pu annuler la modification de la valeur du quartz, donc nous restons sur un quartz de 2.0480 MHz

  12. #162
    Gérard

    Re : programmation C du 12f629

    Pour la lecture de la valeur acquise, en C, il doit y avoir une fonction qui fait le travail.
    Il faudra définir une variable (de 16 bit) pour stocker la valeur.
    Nous verrons le moment venu.

  13. #163
    marc2009

    Re : programmation C du 12f629

    Salut,

    ahh ces derniers temps, je suis débordé, d'où mon absence

    alors, voilà déjà un premier jet, sans le CAN, et j'ai une (2) question déjà :

    Code:
    #pragma chip PIC12F675 // déclaration du pic
    #pragma library 1
    #pragma config |= 0x31E1
    #define sortie GPIO
    int irq;
    char sec;
    
    #include "int16CXX.h" // fichier interruptions
    //------------------interruption-----------------------
    
    #pragma origin 4
    
    interrupt timer1( void)
    {
    	int_save_registers    // W, STATUS (and PCLATH if required)
    
           //char sv_FSR = FSR;  // save FSR if required
    
           // handle the interrupt (insert application code here)
    		if (TMR1IF) {++irq;TMR1IF=0;TMR1H=6;TMR1L=0;}
    
           //FSR = sv_FSR;       // restore FSR if saved
    
           int_restore_registers // W, STATUS (and PCLATH if required)
    
           /* IMPORTANT : GIE should normally NOT be set or cleared in
              the interrupt routine. GIE is AUTOMATICALLY cleared on
              interrupt entry by the CPU and set to 1 on exit (by
              RETFIE). Setting GIE to 1 inside the interrupt service
              routine will cause nested interrupts if an interrupt is
              pending. Too deep nesting may crash the program ! */
       }
    void main(void)
    
    {
    	TRISIO = 0b00111100;
    	sortie = 0b00000010;
    	T1CON = 0b00000001;
    	CMCON =  0b00000111; //comparateur désactivé
    	TMR1H=6;
    	TMR1L=0;
    	TMR1IF=0;
    	INTCON = 0b11000000;
    	PIE1 = 0b00000001;
    for (;;) {
    			if (irq==8) {++sec;irq=0;}
    }
    }
    Alors, est ce que déjà, c''est bien ? ( ou si quelqu'un de bon en C peut venir jeter un coup d'oeil sinon, tu devrais avoir quelques notions en C mon cher Gérard :P )

    Que me conseilles-tu ? De mettre le "if (irq==8) {++sec;irq=0;}" dans l'interruption, ou le laisser dans le programme ( for (; ) ? Je ne sais pas ce qui est le mieux ? Mais je me dis que si je met ca dans l'interruption, il va prendre plus de temps pour sortir de l'interruption, or il me semble que pendant l'interruption, il n'incrémente pas le timer1, dites moi si je me trompe alors que si je le met dans le programme ( donc for (; ), il continuera à incrémenter le timer1 tout en vérifiant que irq==8, j'espère m'être bien exprimé

    2ème question : la variable irq aura comme valeur max 8 ( car 8 irq/s ) donc dois je mettre char ou int ? ( le meilleur ? )

    Merci

  14. #164
    Gérard

    Re : programmation C du 12f629

    Tu mets la condition dans l'IRQ.
    TMR1 est incrémenté par l'oscillateur de façon indépendante par rapport au programme. Ce sera fait (l'incrémentation), que tu sois en IRQ ou dans la boucle principale.

    Je pense que : "if (irq==8) {++sec;irq=0;}"

    fait la même chose que :

    inc irq
    if irq = 8 then
    inc sec
    irq = 0
    endif

    Si oui, tu as bon.

    Pour la question 2, voir ton compilateur, les déclarations.

    Désolé, j'ai toujours mon allergie au C. Les antibiotiques ne m'aident pas.

  15. #165
    marc2009

    Re : programmation C du 12f629

    ok, donc je mets cette ligne dans l'interruption et non dans la boucle principale. C'est juste que je croyais qu'il mettrait plus de temps à gérer l'interruption, et que donc il n'ait pas le temps de faire l'interruption suivante ( si tu vois ce que je veux dire )

    Pour la 2, je croyais que c'était général Je vais voir alors dans le fichier du CC5X

    Merci

  16. #166
    marc2009

    Re : programmation C du 12f629

    bon, passons au CAN

    Je sais que le CAN est déclaré sur 10 bits, par ADRESH et ADRESL. Par contre, comment mettre en place ? ( si tu veux, en basic est possible aussi )

    Merci encore.

    ++

  17. #167
    marc2009

    Re : programmation C du 12f629

    ah bah faut encore que je configure le CAN déjà avant de le metre en place

    alors, ADCON0 :
    bit 7 : importance ?
    bit 6 : 0 ( Vdd )
    bit 5-4 : 00
    bit 3-2 : 10 ( je crois )

    bon par contre, les bit 1 et 0 j'hésite

    Pour ANSEL :
    bit 7 : 0
    bit 6-4 : ca va etre a déterminer par un calcul ( demain )
    bit 3-0 : alors là je suis pas sur de ce que je mets ( la patte qui va être comparée à Vdd, donc GP2, doit etre mis en digital input ? )

    Merci

  18. #168
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    ah bah faut encore que je configure le CAN déjà avant de le metre en place

    alors, ADCON0 :
    bit 7 : importance ?
    C'est la justification du résultat de conversion. Voir page 40.

    Citation Envoyé par marc2009 Voir le message
    bit 6 : 0 ( Vdd )
    bit 5-4 : 00
    bit 3-2 : 10 ( je crois )

    bon par contre, les bit 1 et 0 j'hésite
    Si tu mesures sur AN2 --> 10 pour les bit 2 et 3

    Bit 0 : mise sous tension du CAN
    Bit 1 : lancement de la conversion

    Citation Envoyé par marc2009 Voir le message
    Pour ANSEL :
    bit 7 : 0
    bit 6-4 : ca va etre a déterminer par un calcul ( demain )
    Je mets x11, jamais de soucis.

    Citation Envoyé par marc2009 Voir le message
    bit 3-0 : alors là je suis pas sur de ce que je mets ( la patte qui va être comparée à Vdd, donc GP2, doit etre mis en digital input ? )

    Merci
    Tu mets toutes les broches qui doivent convertir une tension en ana (1), les autres tu mets 0.

  19. #169
    marc2009

    Re : programmation C du 12f629

    C'est la justification du résultat de conversion. Voir page 40.
    Je devine que ça va nous servir pour la suite ...

    Si tu mesures sur AN2 --> 10 pour les bit 2 et 3

    Bit 0 : mise sous tension du CAN
    Bit 1 : lancement de la conversion
    Oui, c'est la pin GP2 qui est raccordée au pont diviseur, Vdd étant la référence ...

    Par contre, dans le datasheet, j'ai
    Note: The GO/DONE bit should not be set in same instruction that turns on the A/D.
    Donc, l'un des 2 bits doit être mis à 0, non ?

    Je mets x11, jamais de soucis.
    J'ai remarqué qu'il y avait proportionnalité, donc quand tu divises les fréquence, tu trouves un coefficient de proportionnalité, et tu multiplies par la valeur correspondante et tu trouves l'autre valeur ( si tu vois ce que je veux dire mais je le détaillerai demain )

    Tu mets toutes les broches qui doivent convertir une tension en ana (1), les autres tu mets 0.
    Vdd est la référence, et GP2 est la pin reliée au pont diviseur ( avec 2 résistances au 12V, donc la batterie )
    Donc je mets AN2 en digital input, et les 2 autres en analog input, c'est ça ? ( bien sur, GP1 et GP0 sont en sortie, donc ils seront ignorés ?! ... )

    Merci

  20. #170
    marc2009

    Re : programmation C du 12f629

    A la suite : Je fais ce calcul dont je t'ai parlé :

    alors, datasheet p44 tu as donc ce fameux tableau "TABLE 7-1:TAD vs. DEVICE OPERATING FREQUENCIES"

    Quand tu regardes par exemple les colonnes 5MHz et 4MHz :

    5 / 4 = 1.25

    avec un Fosc / 8, on a pour 5MHz un temps d'acquisition de 1.6us. 1.6 * 1.25 = 2us et c'est bien 2us qu'on trouve dans 4MHz ...

    je sais pas si c'est le hasard, mais c'est ça pour toutes les valeurs du tableau, sauf la ligne correspondant aux RC ( qui doit etre spéciale )

    Donc on a f=2.0480 MHz

    prenons Fosc/8 ( comme c'est la ligne avec le moins de case grisé enfin je sais pas si je pourrai faire mieux ... )

    Par rapport à 4MHz : 4 / 2.0480 = 1,953125
    Pour Fosc/8, f=4 MHz on a un temps d'acquisition de 2us donc pour f=2.0480 MHz, on aura 2 * 1,953125 = 3,90625us

    Bon, je sais pas si ma méthode est juste, mais ça a l'air juste.

    Par contre, je sais pas si je peux faire ça avec Fosc / 4 pour éviter d'être "en dehors des valeurs recommandées". On obtiendrait 1us * 1,953125 = 1,953125us pour Fosc/4 ( avec f=2.0480 MHz bien sur )

    Donc sauf si je peux prendre Fosc/4 ( ton avis ? ), je prend pour l'instant ADCS = 001

  21. #171
    Gérard

    Re : programmation C du 12f629

    Note: The GO/DONE bit should not be set in same instruction that turns on the A/D.

    Donc, l'un des 2 bits doit être mis à 0, non ?

    Non, le CAN doit être alimenté AVANT de lancer une conversion.

  22. #172
    Gérard

    Re : programmation C du 12f629

    Vdd est la référence, et GP2 est la pin reliée au pont diviseur ( avec 2 résistances au 12V, donc la batterie )
    Donc je mets AN2 en digital input, et les 2 autres en analog input, c'est ça ? ( bien sur, GP1 et GP0 sont en sortie, donc ils seront ignorés ?! ... )


    GGGRRRR !!!!

    Si GP2 est relié au pont diviseur, c'est cette entrée qui doit être une entrée ana !

  23. #173
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Vdd est la référence, et GP2 est la pin reliée au pont diviseur ( avec 2 résistances au 12V, donc la batterie )
    Donc je mets AN2 en digital input, et les 2 autres en analog input, c'est ça ? ( bien sur, GP1 et GP0 sont en sortie, donc ils seront ignorés ?! ... )


    GGGRRRR !!!!

    Si GP2 est relié au pont diviseur, c'est cette entrée qui doit être une entrée ana !
    donc AN2 en ana et les 3 autres en digital input, de toute façon, les 3 AN restants seront utilisés en sorties ( à part GP4 pour le quartz ) donc ils seront ignorés nan ?

  24. #174
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Note: The GO/DONE bit should not be set in same instruction that turns on the A/D.

    Donc, l'un des 2 bits doit être mis à 0, non ?

    Non, le CAN doit être alimenté AVANT de lancer une conversion.
    donc le bit ADON je le mets à 1, et le bit de GO/ /DONE à 0 ?

  25. #175
    marc2009

    Re : programmation C du 12f629

    au fait, si je prends un quartz de 32.768 KHz, tu crois que c'est mieux ? ( j'aurais 1 IRQ / s ) Je sais plus pourquoi je l'ai oublié celui là ...

  26. #176
    marc2009

    Re : programmation C du 12f629

    ah bah non, pour le calcul, le minimum étant Fosc/2, j'obtiendrais 61us :S

    bon après, je sais pas si ça va influer sur le timer1 ou/et interruptions etc ...

  27. #177
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    donc le bit ADON je le mets à 1, et le bit de GO/DONE à 0 ?
    GO/DONE et ADON sont à 0 à la mise sous tension.
    Tu veux utiliser le CAN :
    1 tu mets ADON à 1
    2 quand tu veux lancer une conversion, tu mets GO/DONE à 1

    Il faut le faire dans cet ordre. Pour comparer :
    1 tu démarres le moteur
    2 tu parts avec la voiture

  28. #178
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    au fait, si je prends un quartz de 32.768 KHz, tu crois que c'est mieux ? ( j'aurais 1 IRQ / s ) Je sais plus pourquoi je l'ai oublié celui là ...
    Je ne sais pas si c'est meiux, ça dépend pour quoi.
    Pour la consommation, c'est mieux, pour la vitesse d'exécution, c'est moins bien.

    Le 1 IRQ/s dépend du rechargement de TMR1H lors de l'IRQ.

  29. #179
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    ah bah non, pour le calcul, le minimum étant Fosc/2, j'obtiendrais 61us :S

    bon après, je sais pas si ça va influer sur le timer1 ou/et interruptions etc ...
    Mets x11, ne te casses pas la tête.

    Si tu utilises TMR1 en interruption et le CAN pas en interruption, TMR1 ne sera pas inffluencé par le CAN.

  30. #180
    marc2009

    Re : programmation C du 12f629

    J'ai pas compris, donc la valeur du quartz est importante ?
    Le 1 IRQ/s dépend du rechargement de TMR1H lors de l'IRQ.
    Ben tmr1h sera toujours rechargé avec 128

    Enfin, je vois pas ce que tu veux dire ... ( on reste sinon sur le 2.0480 MHz )

Page 6 sur 14 PremièrePremière 6 DernièreDernière

Discussions similaires

  1. Probleme de programmation (PIC 12F629 )la seconde fois
    Par alainav1 dans le forum Électronique
    Réponses: 7
    Dernier message: 26/03/2009, 16h06
  2. lire un pic 12f629
    Par invite6ce15d51 dans le forum Électronique
    Réponses: 1
    Dernier message: 06/06/2008, 10h48
  3. Micro- programmes PIC 12f629
    Par pickipic dans le forum Électronique
    Réponses: 7
    Dernier message: 11/02/2008, 00h46
  4. Quel programateur pour le pic 12f629
    Par jojo86 dans le forum Électronique
    Réponses: 4
    Dernier message: 21/08/2006, 22h04
  5. Programmation 3D
    Par invite769675d7 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 01/11/2005, 06h07
Découvrez nos comparatifs produits sur l'informatique et les technologies.