bonjour
je n'arrive pas à trouver l'instruction en asm sur pic 16f84 pour declencher un reset volontaire. la pin reset(MCLR) est bien la broche 4 , mais je ne sais pas comment faire (BSF ou BCF mais quel port?)
merci de votre aide
-----
bonjour
je n'arrive pas à trouver l'instruction en asm sur pic 16f84 pour declencher un reset volontaire. la pin reset(MCLR) est bien la broche 4 , mais je ne sais pas comment faire (BSF ou BCF mais quel port?)
merci de votre aide
Hum... Pourquoi vouloir faire un reset volontaire?
Un simple interrupteur avec résistance de pull-up sur la pin MCLR te donnera ce reset volontaire.
Il n'y a pas d'instruction pour faire cela.
Par contre tu peux utiliser le watchdog et le laisser reseter ton programme une fois le temps écoulé.
Aurélien
ou tu utilises une patte du port A ou B pour tirer a Zero la patte 4 mais c'est bancale comme procede
Bonjour
L'instruction que je te donne (mon conseil), c'est de faire un programme ecrit dans les regles de l'art et qui n'a pas besoin de reset.
Gilles
Bonjour
Un programme même écrit dans les règles de l'art peut avoir besoin d'un reset. C'est le cas par exemple de certains bootloaders !!
Pour quel besoin faut il un reset ?
Les regles de l'art, les regles de l'art...Meme Windows a besoin qu'on le reboot pour ses mises à jour ! Dans certains cas je t'assure que c'est la meilleure solution !
Apres, la solution de piloter le MCLR avec une pinoche, je ne la conseillerai pas du tout.
Aurélien
Faut pas confondre les torchons et les serviettes ! Un PC execute un programme en RAM qui est chargé à partir d'un fichier sur le disque dur. Si tu changes le fichier en DD, il faut rebooter pour que le programme en RAM soit le nouveau. Sur un µC, le programme s'exécute en ROMDans 99,99% des cas, le Reset du µC est une programmation de magouilleurs !Dans certains cas je t'assure que c'est la meilleure solution !
L'utilisation d'un WatchDog :Si le WatchDog intervient , il y a toujours un flag qui est positionné et qui permet de ne pas repartir automatiquement sur l'initialisation normale (comme pour une mise sous tension)
- Si il y a un bug dans le soft (un serpent qui se mord la queue), le WatchDog intervient et permet de voir qu'il y a un bug quelque part
- Si un périphérique ne répond pas, le WatchDog intervient et permet de prendre des décisions de sauvegarde
A vrai dire je ne l'ai utilisé qu'une seule fois. Mais c'était utile : gestion de licence dont le decryptage ne se fait que dans le bootloader (Secret oblige...). Apres avoir entré la clé de licence, il faut rebooter la carte pour que la licence soit accepté.
C'est un cas 'extrême', que pas beaucoup de personnes n'auront à traiter!
En tout cas, sans précision de l'auteur, la réponse récurrente sera de ne pas utiliser le reset dans sa programmation.
bonjour
merci de m'avoir repondu
je m'excuse mais j'avais mal défini mon prob
disons que j'ai un 16f84 qui travail en maitre , et ce n'ai pas lui que je veux resetter , mais les 16f84 qui travaillent en slave, donc je vais faire avec une patte du master qui commande le rst sur le ou les slaves
j'ai trouve une doc sur le reset , mais comme je sais pas la joindre(fichier htm), je la met sous fichier txt
----------------------------
PIC 16F84A
Reset
Il y a plusieurs types de Reset :
* Reset à la mise sous tension (POR : Power-on Reset)
* Reset externe en mode de fonctionnement normal (niveau bas sur la broche /MCLR)
* Reset externe pendant le mode SLEEP (niveau bas sur la broche /MCLR)
* Reset dû au Watchdog (en mode de fonctionnement normal)
* Réveil dû au Watchdog (en mode SLEEP)
1- Reset à la mise sous tension (POR : Power-on Reset)
Un Reset interne a lieu à la mise sous tension, ou après une coupure de courant.
Le programme est initialisé (adresse H'0000' de la mémoire de programme).
* Le bit /TO (du registre STATUS) est mis à 1
* Le bit /PD (du registre STATUS) est mis à 1
2- Reset externe (en mode de fonctionnement normal)
Quand on appuie sur le bouton poussoir, la broche /MCLR passe au niveau bas, ce qui génère un Reset "externe" :
Le programme est réinitialisé (adresse H'0000' de la mémoire de programme).
* Le bit /TO (du registre STATUS) est mis à 1
* Le bit /PD (du registre STATUS) est mis à 1
3- Reset externe pendant le mode SLEEP
On se place dans le cas où le µC est placé en mode SLEEP (suite à l'instruction SLEEP).
Quand on appuie sur le bouton poussoir, la broche /MCLR passe au niveau bas, ce qui génère un Reset "externe" :
Le µC se réveille, le programme est réinitialisé (adresse H'0000' de la mémoire de programme).
* Le bit /TO (du registre STATUS) est mis à 1
* Le bit /PD (du registre STATUS) est mis à 0
4- Reset dû au Watchdog (en mode de fonctionnement normal)
Quand le timer Watchdog déborde, un Reset interne est réalisé :
Le programme est réinitialisé (adresse H'0000' de la mémoire de programme).
* Le bit /TO (du registre STATUS) est mis à 0
* Le bit /PD (du registre STATUS) est mis à 1
5- Réveil dû au Watchdog (en mode SLEEP)
En mode SLEEP, le µC se réveille si le timer watchdog déborde (si le watchdog est actif).
Mais il n'y a pas RESET : le programme reprend à l'instruction qui suit l'instruction SLEEP.
* Le bit /TO (du registre STATUS) est mis à 0
* Le bit /PD (du registre STATUS) est mis à 0
6 - Bits /TO et /PD du registre STATUS
Ces bits sont en lecture seule.
/TO
/PD
Condition
1
1
Reset à la mise sous tension (Power-on Reset POR)
1
1
Reset externe (en mode de fonctionnement normal)
0
1
Reset dû au Watchdog (en mode de fonctionnement normal)
0
0
Réveil dû au Watchdog (en mode SLEEP)
1
0
Reset externe pendant le mode SLEEP
Réveil dû à une interruption
En testant si /TO = 0, on peut savoir si le Reset est dû à un plantage (débordement de Watchdog), et orienter la suite de programme en conséquence.
Comme quoi, une question mal posée .........
Ce n'est pas une instruction .... mais une commande Hard
Tu prend une sortie de ton PIC maitre, tu la branches sur les MCLR des pics esclaves avec une résistance de PullUP
Le passage à "0" de cette sortie Reset tous les esclaves
Sinon un "Goto Reset" (avec évidemment Reset: sur l'adresse 0x0000 ) doit être tout aussi efficace si tu ne gères pas /TO et /TD
Salut Pasrico,
Si tu veux une instruction Reset, il suffit de choisir un PIC16 de la nouvelle famille PIC16F1xxx (PIC16F1826 par exemple) qui proposent de nouvelles instructions dont le reset.
a+
Et c'est reparti....le problème est sur 16F84, pas sur la nouvelle gamme qu'elle est tellement bien qu'il faut l'acheter....Salut Pasrico,
Si tu veux une instruction Reset, il suffit de choisir un PIC16 de la nouvelle famille PIC16F1xxx (PIC16F1826 par exemple) qui proposent de nouvelles instructions dont le reset.
a+
salut risc
merci de ton conseil, mais est ce que l'asm du 16f84 va sur le 16f1826 ?, le compilateur aussi? par contre comme j'ai un master + 3 slaves, est ce que la consomation est equivalente? car j'avais fais sur atmel8515 mais trop gourmand.
Pas besoin de vérifier pour dire que les instructions seront les memes dans ce sens (par contre dans l'autre sens pas forcement).
Par contre il faut vérifier dans la datasheet que les registres portent le meme nom.
Si tu code en asm, il n'y a pas de compilo, juste un assembleur, MPASM, et lui ne change pas.
Pour ça, il y a une datasheet..on ne sait meme pas de quelle consommation tu parles ? Active, en veille, en sleep ?
Pour réduire la conso active deja la premiere chose est de baisser la fréquence, quelle que soit ton micro, c'est la meme regle pour tout le monde. Poses toi la question de savoir si tu as besoin de tourner aussi vite qu'actuellement.
Aurélien
Salut,
Le PIC16F84 est un très très vieux PIC ;=) (je dirai quinze ans...).
Le PIC16F1826 est très récent, consomme beaucoup moins ( 50uA / MHz) et intègre plus de périphériques.
L'assembleur pour les PIC16F1xxx possède plus d'instructions mais c'est les même mnémoniques. Il est inclus d'origine dans MPLAB.
L'architecture est plus évoluée notamment aux niveaux des banques. Il faut donc faire quelques changements dans un programme venant d'un PIC16 classique.
Toutefois, je te recommande d'utiliser MAPS (version offline téléchargeable) pour sélectionner le PIC le plus adéquat pour ton projet car je ne connais pas ton cahier des charges.
Tu sembles utiliser l'I2C ?
a+
merci à vous tous de m'avoir repondu , mais j'ai resolu mon prob comme l'a dit daudet
re bonjour
j'ai commander chez farnell des pic 16f1826 mais je me pose la question, j'ai un programmateur infinity usb mais je pense qu'il ne doit pas avoir de mise a jour pour les 16f1826, vous avez quoi pour les programmer ?(hard + soft) et un lien pour l'achat
merci
je vais essayer car j'ai mis h-s 3 pic 16f84 avec la methode de la resistance, mais comme j'ai fais avec trisa, j'aurai pas dû
Bonjour
Dans ton post #11, tu expliques que tu veux qu'un pic maître reset en même temps plusieurs 16F84, j'imagine qu'il s'agit de synchroniser le fonctionnement des 16F84, la encore , c'est à mon avis, une mauvaise idée, car il peut y avoir une difference de 104 ms au demarrage, c'est à dire que dans le pire des cas, un pic aura executé 104 000 instructions (ligne de code) avant qu'un autre n'ait simplement demarré, question synchro ce n'est pas le mieux.
Il serait preferable, à mon sens, de les laisser demarrer à leurs rythmes et de leur donner un point de synchro apres, quand tu veux qu'ils executent une partie deu code en même temps.
P.S. tu dis avoir tuer 3 pic 16F84, à part de leurs envoyer du 220V ou du 12V en direct, il faut avoir de l'imagination pour tuer des pics
Gilles
Enfin, comparer un 16F84 et un 8515, c'est comparer une 106 et un monospace, ils ne sont pas du tout dans la même catégorie...A la rigueur, il aurait fallu comparer avec un boitier de taille équivalente, jouer correctement avec les modes veille et surtout diviser la fréquence par 4 pour arriver à la vitesse équivalente du PIC....
Salut,
Le PIC16F1826 est un produit assez récent et beaucoup de fabricants de programmateurs n'ont pas fait les mises à jour...j'ai un programmateur infinity usb mais je pense qu'il ne doit pas avoir de mise a jour pour les 16f1826, vous avez quoi pour les programmer ?(hard + soft) et un lien pour l'achat
Si tu veux pouvoir programmer la majorité des PICs avec un outil qui est mis à jour régulièrement, je te conseille le Pickit3 (version nue PGxxxxxx ou avec une carte suivant ton budget)
a+
bonjour
gedonnet , j'ai dit h-s, pas tués, mais le resultat est le meme, j'arrive plus a les programmer , a la verif ,j'ai toujours une erreur en 0001 que j'arrive pas a effacer
j'attend de recevoir de chez farnell mon programmateur pour les pic 16f1826, si qq un pouvait me passer le fichier .inc pour ce pic, je pourrais adapter mon prog
merci
Salut,
Si tu programmes en ASM, il suffit de charger la dernière version de MPLAB ( v8.80 ), elle intègre l'assembleur pour ce PIC et les fichiers qui vont avec (INC, LKR).
Si tu programmes en C, télécharges la version gratuite (Lite) du compilateur HiTech : http://www.microchip.com/compilers
a+