bonjour à tous
pourquoi l'horloge fournie au PIC est pré divisée par 4??
merci d'avance
-----
bonjour à tous
pourquoi l'horloge fournie au PIC est pré divisée par 4??
merci d'avance
Si je me souvient bien c'est une question de fonctionnement interne. C'est 4 cycles pour une instructions de base, je crois bien.
merci pour votre réponse
Mais si on prend le 16F84, chaque instruction est exécutée en un seul cycle d'horloge, et pourtant il y a division par 4 de la fréquence???
Oui un cycle interne mais il faut 4 cycles de l'oscillateur pour un cycle interne. Ca tu peux pas faire autrement. C'est qqch comme ça je peux pas exactement te dire pourquoi mais ça tourne dans cette idée. Peut-etre qqun a l'explication exacte. Au pire tu trouvera l'info dans la datascheet, mais faut prendre le temps de chercher, elle est pas petite![]()
Bonjour
Cela tient à l'architecture du pic.
De memoire, dans le premier cycle, le "program counter" est incrementé, dans le second cycle l'instruction (le code) est lu dans la memoire flash, au cycle 3, l'instruction est executée et au cycle 4 le resultat est copié dans le/les registres concernés.
Si au cycle 3, l'instruction est un saut, on doit modifier le "program counter" et donc cela prend 4 cycles de l'oscillateur.
Gilles
merci pour vos réponses![]()
s'il vous plait,une autre quesion.
dans n'importe quel programme dans MPLAB, au début (avant la main)il faut écrire un code .je voudrais savoir son signification :
merci d'avanceCode:ORG 0x000 clrf PCLATH goto main ORG 0x004 movwf w_temp movf STATUS,w movwf status_temp movf status_temp,w movwf STATUS swapf w_temp,f swapf w_temp,w retfie
Bonjour
En premier le ORG 00 corespond au debut du programme dans le pic, c'est a dire que la premiere instruction qui suit ici: clrf PCLATH est la premiere instruction executé par le pic. Dans ton exemple on efface le registre PCLATH qui est le complement d'adresse pour le program counter en regle general cela ne sert à rien car PCLATH vaut 0 au demarrage ou sur un reset, mais comme des petits malins font des goto 00, une manoeuvre risquée si on ne la maitrise pas, on efface PCLATH par securité.
Ensuite il y a le goto main pour aller au debut du programme ou de l'initialisation des registres.
Ensuite on a ORG 4, c'est à cette adresse, que vient le programme en cas d'interruption. Dans les interruptions il faut sauvegarder w et STATUS pour récuperer ces deux registres à l'identique à la sortie de l'interruption. Pour plus d'informations sur les instructions de sauvegarde et de restitution des registres w et STATUS lire le cours part1 de Bigonoff.
Gilles
Je confirme les dires de gedonet, pour super résumé tu as :
- 3 premières lignes : Initialisation ultra sommaire du PIC; puis il se rends a "main".
- 4 suivantes : L'arrivée d'un interrupt (tu sauves le travail en cours).
- L'espace blanc te permet de gérer les interrupt (ton propre code).
- 5 dernières lignes : Sortie de l'interrupt (tu restitues le travail précédemment sauvé)
Le blanc entre les sections permet surtout une bonne aeration du programme pour mieux arriver a le lire... Mais n'a aucune action sur le fonctionnement su soft ni du pic...
Pour toutes les questions sur le fonctionnement, ne pas hesiter d'aller consulter wiki sur les architectures des µC et micropro... Et la datasheet devrait etre apprise "presque" par coeur pour debuter les grandes lignes des µC.
Les PIC ont besoin de 4 cycles d'horloge pour effectuer une instruction. Evidemment, Microchip entretient le flou entre fréquence de l'horloge et fréquence réelle. Quand ils te présentent fièrement un PIC à 20MHz, c'est l'équivalent chez la plupart des concurrents modernes d'un micro à 5MHz.
Oui, bon ca j'imagine que les gens qui font de la programmation le savent, si non... oulalala ! C'était une image pour dire que c'est a cet endroit que tu appelles ta sous routine de gestion d'interrupt
Si non les PIC sont pratique, peu chère, versatile mais c'est de loin pas de bêtes de calculesMoi je les apprécient, ils sont très bien pour la gestion de systèmes simples (BMS, commande moteurs, électronique de puissance, affichage simple,...). Si on veux du plus puissante faut se tourner vers les STM32 par exemple.
non c'est pas sur les espacements que tu appelle ta routine d'interruption. La routine s'invite des qu'il y a interruption, et a toi de gerer l'interruption pour ne pas mettre le waï dans le programme...
Bonjour,
Vrai
Ce serait vrai s'il n'y avait pas d'overlapping.
Ce que dit Fto est vrai, a vitesse d'oscillateur egale, les PIC sont 4 fois moins rapides en terme de vitesse d'execution que d'autres familles de µC. Et les PLL sont là pour essayer de corriger ce probleme autant que faire se peut...
Je ne veux pas trop m'engager dans ce type de discussion quand on sait comment cela dégénère habituellement et je précise d'ailleurs que je ne suis pas plus (ni moins) attaché aux PICs qu'à d'autres familles de microprocesseurs.
Néanmoins, et sans aucun esprit de polémique, j'aimerai savoir ce que vous entendez par "vitesse d'exécution". S'agit-il de la vitesse d'execution d'une instruction et dans ce cas ce que vous dites est exact, ou bien s'agit-il du débit du flot d'instructions et dans ce cas l'overlapping change la donne ?
Juste pour éviter de généraliser, certains PIC ne font que diviser la clock par deux (PIC24 par exemple).
Après, le flou, il est la pour ceux qui ne veulent pas regarder, ou pour ceux qui ne se fient qu'à la fréquence...
Aurélien
Avec des chiffres, seuls ceux qui veulent polémiquer le veulent. Perso je me contente de faits.Je ne veux pas trop m'engager dans ce type de discussion quand on sait comment cela dégénère habituellement et je précise d'ailleurs que je ne suis pas plus (ni moins) attaché aux PICs qu'à d'autres familles de microprocesseurs.
Néanmoins, et sans aucun esprit de polémique, j'aimerai savoir ce que vous entendez par "vitesse d'exécution". S'agit-il de la vitesse d'execution d'une instruction et dans ce cas ce que vous dites est exact, ou bien s'agit-il du débit du flot d'instructions et dans ce cas l'overlapping change la donne ?
En gros, la valeur du quartz ne donne quasiment jamais la vitesse d'exécution du code (sauf peut-être sur AVR).
L'overlapping ne change pas la donne puisque les voisins sont aussi équipés d'une pipeline.
@aurelien j'allais faire la remarque donc:
PIC <18: 4 cycles par instruction
PIC18: 4 cycles par instruction aussi, avec une PLL pour multiplier la fréquence d'horloge
PIC24: 2 cycles par instruction
AVR: 1 cycle par instruction
8051: 10-12 cycles par instruction, mais on en trouve des modernes à 1 cycle par instruction
68hc08: 3-4 cycles par instruction en moyenne
Mais il faut aussi prendre en compte la pertinence de l'assembleur (combien d'instructions prend finalement une opération simple) ou les besoins d'opérations internes (changements de banks mémoire, etc) qui ralentissent encore les performances globales....
Un avertissement à tous les participants à cette discussion: au moindre dérapage, elle sera fermée.
Pas de complexes: je suis comme toi. Juste mieux.
pour rester simple, un PIC a 4MHz pourra avoir 1 milions d'instructions par secondes, contre 4 milions pour d'autres types de µC qui n'ont pas le probleme des PICS.
Je n'aborde pas volontairement le cas des instructions necessitant 2 cycles machine...
Et je pense avoir ete clair sur le pourquoi du comment, et je redis que chacun utilise le type de µC qu'il veut, tant qu'il en maitrise un mieux que les autres... ou si une famille de µC est specialisee dans un usage specifique
Pourquoi l'overlapping des PICs est-il différent de celui des AVR ? Est-ce que le signal d'horloge des AVR est divisé par 4 et que le Fetch de la seconde instruction intervient 1/4 de signal d'horloge après le Fetch de l'instruction précédente ?
Merci de bien vouloir éclairer ma lanterne.
Je ne connais pas les archis en détail (ça fait certainement partie de leurs secrets industriels), mais les faits sont là. Il ne faut pas oublier que la structure interne des PIC jusqu'à la série 18 commence à dater sérieusement (fin des années 80 si je ne m'abuse) et 4 temps de cycle par instruction n'était pas si mal à l'époque.Pourquoi l'overlapping des PICs est-il différent de celui des AVR ? Est-ce que le signal d'horloge des AVR est divisé par 4 et que le Fetch de la seconde instruction intervient 1/4 de signal d'horloge après le Fetch de l'instruction précédente ?
Merci de bien vouloir éclairer ma lanterne.
Mais pendant que Microchip restait bloquée à ces timings, la concurrence s'est développée et les micros à 1 temps de cycle sont apparus.