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

programmation C du 12f629



  1. #61
    marc2009

    Re : programmation C du 12f629


    ------

    3- Je me demandais quelle était la précision ( l'erreur ) des quartz 4MHz et 3.2768 MHz, est-elle la même ? ( ou ça peut différer d'un quartz ( externe ) à un autre ? )
    Et quelle est la précision de l'oscillateur interne ? ( je sais que l'erreur est plus grande que celle des quartz externe )

    Merci encore.

    ++

    -----

  2. #62
    marc2009

    Re : programmation C du 12f629

    Eurekkkaaa cher Gérard !

    Mon ami a trouvé le chiffre rond

    donc on met TMR1 = 25536; il restera alors 65536 - 25536 = 40 000 impulsions soit 1 000 000 / 40 000 = 25 IRQ / secondes avec l'oscillateur interne de 4 MHz, et prédiviseur de TMR1 à 1:1 !

    C'est bon Chef ?

    Si oui, on pourra passer juste à l'explication pour que je fasse le programme, car je sais toujours pas m'y prendre pour l'écrire.

    ++
    Dernière modification par marc2009 ; 07/03/2009 à 13h42.

  3. #63
    marc2009

    Re : programmation C du 12f629

    Ah non, je ne peux pas utiliser TMR1 ( pas comme TMR0 )

    On a pas le choix que d'acheter un quartz de 3.2768 MHz

  4. #64
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    Eurekkkaaa cher Gérard !

    Mon ami a trouvé le chiffre rond

    donc on met TMR1 = 25536; il restera alors 65536 - 25536 = 40 000 impulsions soit 1 000 000 / 40 000 = 25 IRQ / secondes avec l'oscillateur interne de 4 MHz, et prédiviseur de TMR1 à 1:1 !

    C'est bon Chef ?

    Si oui, on pourra passer juste à l'explication pour que je fasse le programme, car je sais toujours pas m'y prendre pour l'écrire.

    ++
    Le problème avec ce chiffre (25535), c'est que tu écriras une partie dans TMR1H et une autre dans TMR1L.
    25535 = 63C0h.

    Il existe un bug pour TMR1, voir sur le site de Microchip.

  5. #65
    Gérard

    Re : programmation C du 12f629

    Pour calibrer OSCCAL :
    bsf STATUS, RP0 ;bank1
    call 3FFh
    movwf OSCCAL

    C'est dans le §9.2.5.1 de la datasheet.

  6. #66
    marc2009

    Re : programmation C du 12f629

    mais de toute façon, je ne peux pas, il n'existe pas de variable tmr1

    Sinon, autre idée : comme TMR1L compte de 0 à 255, soit 256 fois, ne pourrait on pas baisser cette valeur, en chargeant déjà une valeur dans TMR1L au début du programme, par exemple 28, il ne devra plus compter que 228 fois, et donc si on charge dans TMR1H la valeur 112, il se sera "écoulé" 112 * 228 = 25536 incrémentations, donc il restera 65 536 - 25 536 = 40 000 impulsions ( incrémentations ) restantes, soit 1 000 000 / 40 000 = 25 IRQ / secondes.

    Es tu déjà d'accord avec moi, ou c'est pas possible, ou je m'y suis mal pris ?!

    Merci
    @++

  7. #67
    marc2009

    Re : programmation C du 12f629

    ah mon avis je m'y suis mal pris, car avec ça, je n'aurais plus 65 536 incrémentations au total, mais 228 * 256 = 58368 !

  8. #68
    marc2009

    Re : programmation C du 12f629

    ahh ça devrait être bon maintenant :

    Alors, mettons dans TMR1L=6; et TMR1H=6; donc déjà, le timer1 débordera non pas après 65536 incrémentations, mais après 250 "( 256 - 6 )" * 256 = 64 000 incrémentations, donc le timer1 débordera après 64 000 incrémentations.

    Alors avec 6 dans TMR1H, on a déjà 6 * 250 = 1500 incrémentations, donc il reste 64 000 - 1500 = 62 500 incrémentations restantes ! et 1 000 000 / 62 500 = 16 IRQ / secondes

    C'est juste Chef ? J'espère, je viens de passer 5 heures sur ce problème.

  9. #69
    Gérard

    Re : programmation C du 12f629

    Je t'ai dit en #64, qu'il y a des soucis en écrivant (lisant) TMR1L --> voir Microchip.

  10. #70
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Je t'ai dit en #64, qu'il y a des soucis en écrivant (lisant) TMR1L --> voir Microchip.
    ah bon ? Ben j'ai cherché sur google, mais j'ai rien trouvé, ni sur microchip. Que dois je chercher au fait exactement ?

    edit : ah si, sur leur forum ? reste à bien comprendre l'anglais.

    Mais sinon, est ce que j'ai juste ? Outre ce problème ?

  11. #71
    Gérard

    Re : programmation C du 12f629

    Regarde dans les cours de Bigonoff, il en parle.

  12. #72
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Regarde dans les cours de Bigonoff, il en parle.
    Mais ne pourrais tu pas déjà me dire si j'ai juste stp ?

    Pour le cours de bigonoff, c'est bien celui là ?http://www.abcelectronique.com/bigon....php?par=dbbcc sur l'oscillateur ? Je vais voir sur l'autre ordi, j'arrive pas à télécharger sur mon ordi

    Merci
    ++

  13. #73
    marc2009

    Re : programmation C du 12f629

    dans ce cours et dans celui du cours 1, il n'y a aucune référence à TMR1

    Je regarde les autres...

  14. #74
    marc2009

    Re : programmation C du 12f629

    J'ai vu tous les cours, aucune référence à timer1, sauf si j'ai mal regardé ! ( au passage, c'est intéressant ! )

    Sinon, je vois sur les forums des problèmes avec un oscillateur externe, c'est de ce problème dont tu parlais ? Car j'ai beau chercher, j'ai rien trouvé sur un problème de TMR1L.

    Sinon, d'après le cours de bigonoff, si on utilise le timer0 et un prédiviseur à 1, il faut enlever 2 cycles d'horloges ... ça s'applique aussi au timer1 ? ( si oui, ta méthode ne serait pas exact, enfin je crois ) Si non, pourrais tu stp vérifier que ce que j'ai écrit dans #68 est juste ou pas ?

    Merci

  15. #75
    marc2009

    Re : programmation C du 12f629

    alors juste pour en revenir à ce que j'ai marqué comme calculs, l'avantage avec 62500 c'est qu'on peut le diviser avec toutes les fréquences de sortie du prédiviseur, je veux dire que si on prend un prédiviseur à 1:2, on aura 500 000 Hz soit 8 IRQ/s ; si on prend 1:4, on aura 250 000 Hz soit 4 IRQ/s et si on prend 1:8, on aura 125 000 Hz soit 2 IRQ/s ce qui est quand même bien.

    Sinon, vu que tu ne dis rien sur ça, j'en conclus que j'ai juste mais à cause d'un problème avec tmr1l, je ne peux pas le faire ? Pourrais tu me dire dans quelles circonstances ce problème survient ? Quels paramètres ? Ou même le site en question si tu l'as .... ( je l'ai pas trouvé désolé )

    Merci encore

  16. #76
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    ahh ça devrait être bon maintenant :

    Alors, mettons dans TMR1L=6; et TMR1H=6; donc déjà, le timer1 débordera non pas après 65536 incrémentations, mais après 250 "( 256 - 6 )" * 256 = 64 000 incrémentations, donc le timer1 débordera après 64 000 incrémentations.

    Alors avec 6 dans TMR1H, on a déjà 6 * 250 = 1500 incrémentations, donc il reste 64 000 - 1500 = 62 500 incrémentations restantes ! et 1 000 000 / 62 500 = 16 IRQ / secondes

    C'est juste Chef ? J'espère, je viens de passer 5 heures sur ce problème.
    Je réponds au #68 :

    Avec TMR1H = 6, soit TMR1 = 600h (1536), pour déborder il faut 65536 - 1536 = 64000 impulsions.
    Sachant que ce qui entre dans TMR1 (avec prédivisuer = 1) est f / 4,
    la fréquence d'entrée donc du Qz est de 64000 * 4 = 256000Hz.

  17. #77
    Gérard

    Re : programmation C du 12f629

    Peux-tu dire l'utilité de départ de ce montage ?
    Ce µC ne possède que 6 I/O, si tu en utilises 2 pour le Qz, il en reste 4.

    Je ne me souviens plus où j'ai lu le pb de TMR1.

  18. #78
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Je réponds au #68 :

    Avec TMR1H = 6, soit TMR1 = 600h (1536), pour déborder il faut 65536 - 1536 = 64000 impulsions.
    Sachant que ce qui entre dans TMR1 (avec prédivisuer = 1) est f / 4,
    ...
    Je suis d'accord, si on reste avec un TMR1L qui compte 256 fois.

    Citation Envoyé par Gérard Voir le message
    Je réponds au #68 :
    ...
    la fréquence d'entrée donc du Qz est de 64000 * 4 = 256000Hz.
    J'ai pas compris là, on a en entrée f/4 donc 1 000 000 Hz

    ( donc j'ai pas juste ?! )

    Peux-tu dire l'utilité de départ de ce montage ?
    c'est pour un pied de parasol. Démarrage moteur pendant 1 seconde toutes les 20 minutes. Si la patte GP3 passe à l'état bas, alors faire clignoter une led et/ou un buzzer ( dans la mesure du possible ) et arrêter le système.

    Sinon, on utilisera l'oscillateur du pic, sauf si mon ami change d'avis et décide d'en mettre un externe.

  19. #79
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    Je suis d'accord, si on reste avec un TMR1L qui compte 256 fois.



    J'ai pas compris là, on a en entrée f/4 donc 1 000 000 Hz

    ( donc j'ai pas juste ?! )
    Maintenant, c'est moi qui ne comprend plus.
    Tu parlais de 64 000 implulsions avnec débordement.
    Ce qui entre dans TMR1 est f/4 --> f = 4*64 000 pour avoir 1 débordement /seconde
    On ne tombe pas juste 64 000*4 = 256 000

    c'est pour un pied de parasol. Démarrage moteur pendant 1 seconde toutes les 20 minutes. Si la patte GP3 passe à l'état bas, alors faire clignoter une led et/ou un buzzer ( dans la mesure du possible ) et arrêter le système.

    Sinon, on utilisera l'oscillateur du pic, sauf si mon ami change d'avis et décide d'en mettre un externe.
    Qu'est ce qui fait passer GP3 à 0 ?
    Quelles sont les autres I/O nécessaire ?
    Le précosion de l'oscillateur interne devrait suffire.

  20. #80
    marc2009

    Re : programmation C du 12f629

    Maintenant, c'est moi qui ne comprend plus.
    Tu parlais de 64 000 implulsions avnec débordement.
    Ce qui entre dans TMR1 est f/4 --> f = 4*64 000 pour avoir 1 débordement /seconde
    On ne tombe pas juste 64 000*4 = 256 000
    Ben si tu mets TMR1L=6; au début, on aura TMR1 qui débordera au bout de 256 ( max de TMR1H ) * 250 ( TMR1L : 256 - 6 ) = 64 000 incrémentations, car TMR1 déborde au bout de 65 536 incrémentations avec TMR1L=0;

    jusque là tu es d'accord ?

    ( Je ne fais que suivre ce que tu m'as expliqué )
    Donc si on charge TMR1H=6;, on aura déjà 250 * 6 = 1500 incrémentations, donc il reste 64 000 - 1500 = 62 500 incrémentations restantes, tu es d'accord ?

    Donc si on prend un prédiviseur à 1:8, on aura 1 000 000 Hz ( Fosc / 4 ) / 8 = 125 000 Hz. Et donc 125 000 / 62 500 = 2 IRQ / secondes

    C'est pas juste ?

    Qu'est ce qui fait passer GP3 à 0 ?
    Quelles sont les autres I/O nécessaire ?
    Le précosion de l'oscillateur interne devrait suffire.
    Je mettrais le schéma lorsque je l'aurais. La batterie est de 12V. On va mettre en place un pont diviseur composé de 2 résistances ( je n'ai pas les valeurs ici désolé ) et nous relierons le point "entre les 2 résistances" au port GP3. Or l'état haut dans un pic est situé entre 2 et 5V et l'état bas entre 0 et 2V. Or lorsque la batterie sera sur le point de se décharger ( de ne plus être capable de fournir assez de courant, puissance au circuit ) elle va par exemple passer à 10.5V. Et lorsqu'elle passera à 10.5V, la différence de potentiel entre ce "point" et GP3 sera inférieur à 2V et donc on arrête le système et il y a clignotement d'une led. ( c'est dans le programme, enfin je dois le mettre )

    Donc, pour l'instant, on a GP2 : voyant de décharge, GP1 : voyant de fonctionnement, GP0 : Moteur, GP4-GP5 : oscillateur externe ( si on en utilise un ) et GP3.
    Pour la précision, j'espère que ça suffira et qu'elle ne sera pas très grande.

    Merci

  21. #81
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    Ben si tu mets TMR1L=6; au début, on aura TMR1 qui débordera au bout de 256 ( max de TMR1H ) * 250 ( TMR1L : 256 - 6 ) = 64 000 incrémentations, car TMR1 déborde au bout de 65 536 incrémentations avec TMR1L=0;

    jusque là tu es d'accord ?
    Pas tout à fait.
    Si tu mets 6 dans TMR1L, tu devras compter 65529 pour déborder.
    Pour compter 64 000, tu dois mettre 6 dans TMR1H.

    ( Je ne fais que suivre ce que tu m'as expliqué )
    Pas si sûr !

    Donc si on charge TMR1H=6;, on aura déjà 250 * 6 = 1500 incrémentations, donc il reste 64 000 - 1500 = 62 500 incrémentations restantes, tu es d'accord ?
    Ben non.
    Avec TMR1H = 6, TMR1 = 600h soit 1536, pour déborder, il faut 64 000 impulsions.

    Donc si on prend un prédiviseur à 1:8, on aura 1 000 000 Hz ( Fosc / 4 ) / 8 = 125 000 Hz. Et donc 125 000 / 62 500 = 2 IRQ / secondes

    C'est pas juste ?
    Non, pas juste.

  22. #82
    marc2009

    Re : programmation C du 12f629

    Je m'exprime peut etre mal, je réexplique :

    Par défaut, on a TMR1H=0; et TMR1L=0; et donc timer1 compte au maximum 65 536 incrémentations ( de 0 à 65 535 ), là tu es d'accord ?

  23. #83
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    Je m'exprime peut etre mal,
    Ya pire.

    je réexplique :

    Par défaut, on a TMR1H=0; et TMR1L=0; et donc timer1 compte au maximum 65 536 incrémentations ( de 0 à 65 535 ), là tu es d'accord ?
    Oui, là je suis d'accord.

    Si TMR1L = 6, alors TMR1 ne peut compter que 65530
    Si TMR1H = 6, alors TMR1 ne peut compter que 64000

    Es-tu d'accord ?

  24. #84
    marc2009

    Re : programmation C du 12f629

    Ya pire.



    Si TMR1L = 6, alors TMR1 ne peut compter que 65530
    Si TMR1H = 6, alors TMR1 ne peut compter que 64000

    Es-tu d'accord ?
    ça dépend ce que tu entends par "compter que"

    TMR1H et TMR1L = 0; TMR1 ne peut compter que 65 536 incrémentations au maximum, c'est le fonctionnement "normal".

    Or si tu mets TMR1H=6 mais que tu laisses TMR1L=0;, comme tu m'as dit, tu mets dans TMR1 6 * 256 = 1536 incrémentations ( donc au début, au lieu que TMR1 soit vide, il est déjà rempli à 1536 incrémentations ) donc il reste le total d'incrémentations que TMR1 peut compter ( dans ce cas, soit 65 536 ) - 1536 soit 64 000 incrémentations restantes.

    Mais, si tu mets TMR1L=6; avec TMR1H=0;, TMR1 ne comptera plus au total 65 536 incrémentations, mais 256 ( TMR1H ) * ( 256 - 6 ) = 256 * 250 = 64 000 incrémentations au total, donc dans ce cas, TMR1 ne peut compter que 64 000 incrémentations au total, contrairement à avant où il pouvait compter 65 536 incrémentations car on avait TMR1L=0;.
    N'oublies pas ( d'après ce que tu m'as dit ) que c'est TMR1L qui incrémente TMR1H
    Donc gardons ce cas, soit TMR1L=6;, donc le timer1 ne peut compter que 64 000 incrémentations. Donc on va mettre TMR1H=6; donc on aura déjà "rempli" notre timer à 6 * 250 ( TMR1L ) = 1500 incrémentations donc il reste : le total d'incrémentations que TMR1 peut compter soit 64 000 - 1536 soit 62 500 incrémentations restantes !

    Voilà. J'attends avec impatience tes avis.

  25. #85
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message


    .....

    TMR1H et TMR1L = 0; TMR1 ne peut compter que 65 536 incrémentations au maximum, c'est le fonctionnement "normal".
    Oui.

    Or si tu mets TMR1H=6 mais que tu laisses TMR1L=0;, comme tu m'as dit, tu mets dans TMR1 6 * 256 = 1536 incrémentations ( donc au début, au lieu que TMR1 soit vide, il est déjà rempli à 1536 incrémentations ) donc il reste le total d'incrémentations que TMR1 peut compter ( dans ce cas, soit 65 536 ) - 1536 soit 64 000 incrémentations restantes.

    Mais, si tu mets TMR1L=6; avec TMR1H=0;, TMR1 ne comptera plus au total 65 536 incrémentations, mais 256 ( TMR1H ) * ( 256 - 6 ) = 256 * 250 = 64 000 incrémentations au total, donc dans ce cas, TMR1 ne peut compter que 64 000 incrémentations au total, contrairement à avant où il pouvait compter 65 536 incrémentations car on avait TMR1L=0;.
    N'oublies pas ( d'après ce que tu m'as dit ) que c'est TMR1L qui incrémente TMR1H
    Donc gardons ce cas, soit TMR1L=6;, donc le timer1 ne peut compter que 64 000 incrémentations. Donc on va mettre TMR1H=6; donc on aura déjà "rempli" notre timer à 6 * 250 ( TMR1L ) = 1500 incrémentations donc il reste : le total d'incrémentations que TMR1 peut compter soit 64 000 - 1536 soit 62 500 incrémentations restantes !

    Voilà. J'attends avec impatience tes avis.
    Je ne suis toujours pas d'accord avec toi, tu confonds.

    TMR1H = 6, TMR1L = 0
    en binaire ça donne : 0000 0110 0000 0000
    il restera 64 000 incrémentations jusqu'au débordement

    TMR1H = 0, TMR1L = 6
    en binaire ça donne : 0000 0000 0000 0110
    il restera 65 530 incrémentations jusqu'au débordement

    Fais des essais avec la calculatrice Windows en affichage scientifique.
    Dernière modification par Gérard ; 08/03/2009 à 18h58.

  26. #86
    marc2009

    Re : programmation C du 12f629

    Bon, ben puisque tu fais le malin ( ), pourrais tu stp me donner ce que toi tu trouves ? Quartz de 4MHz donc, et horloge interne, soit 1MHz, avec un prédiviseur à 1:8 pour timer1 ( je comprendrais mieux comme ça )

    Merci

  27. #87
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    Bon, ben puisque tu fais le malin
    Pas apprécié !

    pourrais tu stp me donner ce que toi tu trouves ? Quartz de 4MHz donc, et horloge interne, soit 1MHz, avec un prédiviseur à 1:8 pour timer1 ( je comprendrais mieux comme ça )

    Merci
    Quand il y a un Qz, il n'y a pas d'horloge interne, c'est l'un OU l'autre.

    Qz : 4MHz
    entrée prédivieur : 1MHz
    sortie prédiviseur : 1 / 8 = 125 000 Hz
    si TMR1 = 0, débordement toutes les 1,9... Hz

  28. #88
    marc2009

    Re : programmation C du 12f629

    Pas apprécié !
    Je plaisantais

    Quand il y a un Qz, il n'y a pas d'horloge interne, c'est l'un OU l'autre.
    Il me semble que le 16f627 ne possède pas d'oscillateur interne, non ?

    Donc dans OPTION et T1CON, je ne choisis pas "internal clock" mais "transition..." c'est ça ? ( pour le 16f627 ) mais ta méthode s'applique aussi au 12f629 et oscillateur interne, n'est ce pas ?

    Mais c'est bizarre, même en adaptant les variables, je n'arrive pas à faire marcher mon programme sur le 16f627 ! Alors que sur mon 12f629, il marche. J'ai beau chercher l'erreur, essayer autre chose, mais rien.

  29. #89
    invite3a1051d7

    Re : programmation C du 12f629

    bonjour,
    le 16F627 possede une horloge interne .
    Il me parait souhaitable (pour ne pas dire indispensable ) de regarder la datasheet pour connaitre les caractéristique qu'un pic inconnu.(par exemple on apprend que certaines sorties sont en collecteur ouvert RA4 par exemple cela est bon a connaitre pour connecter en sortie )
    ensuite je programme un truc simple
    je l'écris en basic (mais que 'on peux le traduire en C si l'on pratique ce langage)
    Define CONF_WORD = 0x3f47
    TRISA = %000100000 'ra5 reservé au reset
    TRISB = %000100000
    PORTA = %00000000

    debut:
    PORTA= %00000000
    PORTB = %00000000 '
    WaitMs 1000 'attendre 1 seconde
    PORTA = %11111111
    PORTB= %11111111
    WaitMs 1000
    Goto debut

    toutes les sorties clignotent evec une frequence de 1Seconde
    si ça ça marche pas c'est pas la peine de chercher à programmer les timer .
    cordialement
    Alain

  30. #90
    invite3a1051d7

    Re : programmation C du 12f629

    bonjour,
    un petit rectificatif ,
    dans le programme du post precedant une entrée est configurée sur chaque port
    pour utiliser des entrés en numerique sur le port A ne pas oublier de configuter le port CMCOM
    CMCON = %00000111
    apres le programme precedant il est bon de faire un petit programme pour verfier la bonne config des entrées
    (allumer une LED par un poussoir par exemple ).
    aprés on passe au interruption
    cordialement
    Alain

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

Discussions similaires

  1. Probleme de programmation (PIC 12F629 )la seconde fois
    Par invite3a1051d7 dans le forum Électronique
    Réponses: 7
    Dernier message: 26/03/2009, 17h06
  2. lire un pic 12f629
    Par invite6ce15d51 dans le forum Électronique
    Réponses: 1
    Dernier message: 06/06/2008, 11h48
  3. Micro- programmes PIC 12f629
    Par invite12ff0607 dans le forum Électronique
    Réponses: 7
    Dernier message: 11/02/2008, 01h46
  4. Quel programateur pour le pic 12f629
    Par jojo86 dans le forum Électronique
    Réponses: 4
    Dernier message: 21/08/2006, 23h04
  5. Programmation 3D
    Par invite769675d7 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 01/11/2005, 07h07
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...