Nouvelles:

Le Forum est maintenant chiffré (préambule https). Bien sûr, des liens externes insérés dans les sujets vont demeurer inchangés. Mais la composition des pages du Forum est désormais sécurisée. Si des problèmes d'affichage surviennent, veillez à vider votre cache pour ce site.

Menu principal

PIC 12F683

Démarré par Jeanmi, Novembre 24, 2019, 05:33:07 PM

« précédent - suivant »

Jeanmi

Bonjour

J’ai un problème pour comprendre les compteurs sur le PIC 12F683.

Lorsque je le programme à  4 Mhz , pourquoi j’ai une fréquence de 1 Mhz a la pin 3 CKLOUT , pourquoi pas 4 Mhz  ?

Si le PIC divise par 4 la fréquence sur la Pin 3, faut il prendre 1 Mhz pour calculer le module Timer ?

Je suis nouveau .....

Merci pour votre aide

Jean-Michel





Yffig

Bonsoir Jean Michel et bienvenue pour ton premier message.

Avec les PICs 8 bits, il faut très souvent, "se taper" la DataSheet en détail...et c'est vrai que c'est assez prise de tête. D'autant plus que tu ne fournis aucune info sur les positionnement des registres que tu as fait.

Juste pour te guider, (je n'irai pas plus loin dans le détail qu'il t'appartient travailler pour comprendre, peut être quelqu'un aura plus d'expertise sur ce PIC particulier et aura une réponse toute faite)

Sur la DS de 2007 du PIC12F683:
-p19 fig 3.1 L'oscillateur interne est à  8 MHz, donc tu dois programmer le registre OSCCON pour que ta System Clock sorte à  4 MHz du schéma.
Alors, à  priori, si on regarde les Timers:
-TMR0 (p41 fig 5.1) peut recevoir Fosc/4 donc du 1 MHz
-idem TMR1 (p44 fig 6.1)
-idem TMR2 (p49 fig 7.1)
en ayant correctement programmé tous les bits y afférent...
Quand j'ai été perplexe devant tant de bits à  mettre en place sur les PICS, j'ai toujours écrit un bout de code en ASM pour tester et vérifier que j'avais bien compris.
A toi de faire l'exercice.. Bon courage (c'est particulièrement gavant... mais après tu es sûr que tu as compris pour la vie)

Cordialement

Yffig


Curiosus

#2
Bonsoir Jeanmi, et tout le forum,

Selon ton choix tu choisis ta fréquence sur 12F683

Citation

;************************* configuration du registre OSCCON en bank 1 *************************

                                          ; rélage de l'oscillateur interne

                                          ; 01111000 oscillateur 8 Mhz 
      movlw   B'01101000'        ; 01101000 oscillateur 4 Mhz 
      movwf   OSCCON           ; 01011000 oscillateur 2 Mhz
                                          ; 01001000 oscillateur 1 Mhz
                                          ; 00111000 oscillateur 500 Khz
                                          ; 00101000 oscillateur 250 Khz
                                          ; 00011000 oscillateur 125 Khz
                                          ; 00001000 oscillateur 31 kHz     


Nombre de cycle par seconde = Fréquence du quartz, ou, horloge interne (Hertz) / 4

On aura pour un quartz de 4 Mhz (1Mhz = 4Mhz / 4)

Ce qui représente 1 Million d’Instructions à  la seconde pour un quartz à  4 Mhz, donc, la vitesse de ton quartz ou horloge interne va influencé
ton timer0 ou timer1 ou timer2.

Chaque instruction qui son faite représente un comptage sur les timer qui sont en cours de fonctionnement.

De plus il faut savoir qu'il y a aussi des prédiviseurs et des postdiviseur sur les timers, qui permette de rallonger les temps de débordement. 


A+






Yffig

#3
Bonjour,
En complément de ma réponse d'hier soir, le fonctionnement des PIC 8bits que je connais, est basé sur des instructions qui durent 4 cycles d'horloge principale.
C'est vrai du 12F683, cf DS page 101:
"One instruction cycle consists of four oscillator periods; for an oscillator frequency of 4 MHz, this gives a nominal instruction execution time of 1 μs. All instructions are executed within a single instruction cycle, unless a conditional test is true, or the program
counter is changed as a result of an instruction. When this occurs, the execution takes two instruction cycles, with the second cycle executed as a NOP."

L'horloge est fournie soit en interne, soit en externe. Dans le cas interne, ta fréquence System Clock (page 19) va de 8 MHz à  31 KHz (ie par divisions par 2, soit 1/2^n) selon le choix que tu fais. Cette horloge System clock va donc être divisée par 4 pour fournir le CYCLE d'INSTRUCTION et les entrées FOSC/4 de chacun des timers.
Pour chaque timer il existe la possibilité de diviser ou non par une puissance de 2 l'entrée FOSC/4 afin d'allonger la période d'incrément des Compteurs Timers.
Tu as donc la possibilité d'une période de comptage de 0.5 µs (si tu pars de 8 MHz)...jusqu'à  beaucoup plus long selon les valeurs que tu auras chargées dans les prescalers de tes timers (mais valeurs en nombre limité et toujours en 1/2^n). Autrement dit ta période d'incrémentation des compteursTimers ne prend que certaines valeurs. La précision maximale que tu pourras obtenir du Timer0 sera donc, si tu pars de 8 MHz, de 0.5 µs.
Par pré-chargement des timers à  une valeur donnée (à  calculer par tes soins donc) tu pourras alors générer des évènements avec cette précision sur une plage pas très large (TMR 8 bits) ou plus large (TMR 16 bits). Par ex si tu charges TMR0 à  47 (decimal) tu pourras avoir un événement (débordement de TMR0 donc INTerruption) toutes les 47*0.5µs = 23.5 µs (Horloge à  8 MHz). Pour un TMR16 bits, avec 2000 (décimal) tu pourras avoir un évènement chaque 1 ms (Horloge à  8 MHz).
Voilà  le principe, à  toi de jouer !

PS: Si d'aventure tu ne connaissais pas les super tutos de BigOnOff sur les pics 8 bits en français, je viens de vérifier que son site était toujours vivant. Voici l'URL:
https://www.abcelectronique.com/bigonoff/

Cdlt
Yffig

Yffig

#4
Re-bonjour,

Je viens de m'apercevoir que la pin GP4/AN3/T1G/OSC2/CLKOUT que tu visualises est, selon la DS page 6, décrite comme CLKOUT â€" CMOS FOSC/4 output.Donc ce sera toujours la fréquence d'oscillateur que tu auras programmée divisée par 4. Ça répond précisément à  ta 1ère question et ça s'appelle RTFM (Read The F... Manual) !
Cdlt

Jeanmi

Un tout tout grand merci !!!

Vous êtes sympa !