Le reset des µcontrôleurs

Le problème du reset PIC avec des tensions Vdd lentes

Du façon générale, les PIC peuvent démarrer seuls à la mise sous tension (si MCLRE=0, broche /MCLR non autorisé, utilisable en port IO).

Cela ne fonctionne que si la pente Vdd est supérieure à 0.05 V/ms, soit 5V en moins de 100ms. Le reset arrive ~18ms après le franchissement d'une tension de l'ordre de 1,6V +/- 0,4V. A cet instant précis, il faut absolument que la tension Vdd soit dans la spécification, au dessus du Vmin de 3,0V.

Dans le cas contraire, on forcera MCLRE=1, et la broche /MCLR doit être utilisée, maintenue basse tant que la tension Vdd n'est pas correcte.

Les circuits proposés par Microchip sont classiques, d'abord un réseau RS, et 2 circuits à transistor.

 

Un réseau RC est fortement conditionné par la valeur du pull-up interne sur la broche /MCLR et celle ci est très variable. On trouve parfois des valeurs à 250µA soit 20k min (PIC12C508 erreur très probable), ou bien 250-500k (12C508A), ou bien +/-30µA (12F508) ou encore +/-5µA (PIC16F628). Bon bien sûr, c'est une résistance fortement non linéaire, qui diminue fortement lorsque la tension à ces bornes diminue. Le courant de fuite de la broche /MCLR étant de l'ordre de +/-5µA, et le Vih de cette entrée est toujours inférieur à 0,8Vdd, Microchip ne recommande pas de dépasser 40k en pull up externe. Avec une capacité externe de 10µF, la constante de temps reste faible, et il n'est pas sûr qu'on arrive à retarder suffisamment le reset dans le cas d'alimentations très lentes, par exemple 1 ou 2 V/s.

Le premier circuit avec un transistor et 3 résistances est très simple, mais présente une très forte sensibilité à la température. C'est normal, ce montage est aussi ce qu'on appelle un "Vbe multiplier", à 2,1mV par Kelvin, cela fait presque 0,9 V sur une gamme -15°C-45°C.

Le deuxième est plus stable au prix d'une diode zener de 3,9V typiquement pour un Vdd de 5V. Ce montage marche très bien avec des résistances beaucoup plus fortes que celles recommandées.

 

Nota : on devrait pouvoir utiliser le "brown-out" interne pour remplacer le transistor externe.

Les courbes ci dessous donnent la variation d'un signal reset RC, 40k et 10µF, avec une alimentation lente (alim secteur 100nF+100nF/100µF), et un circuit qui consomme 1mA (5k équivalent). Le signal retardé par le RC passe le seuil mini (Vih=0,5*Vdd mini) ou le seuil maxi (Vih=0,7*Vdd maxi) toujours lorsque la tension d'alimentation est supérieure à 3V.

 

 

La courbe ci après donnent le signal reset avec transistor/zener pour 0°C et 50°C. La position est stable, le reset intervient lorsque la tension est supérieure à 90% de la tension finale.

 

PIC : Compatibilité d'un ICD2 avec un reset lent

Un programmateur/débogueur genre ICD2 utilise la broche MCLR/Vpp pour envoyer la tension de programmation, et contrôler le reset. Impossible dans ce cas de monter un réseau RC sur le circuit cible.

En plus, le ICD2 n'aime pas du tout lorsque l'horloge est interne et le reset aussi.