Objectifs

  1. Pourquoi initialiser la carte ?
  2. Savoir initialiser la carte Arduino
  3. Savoir l’effet du RESET sur la fonction millis()/micros()
  4. Savoir les 3 techniques d’initialisation
  5. Exemple implémenté sur carte Arduino vers la fin de la vidéo

Importance

  1. Indique une anomalie dans le programme ou le hard
  2. Peut être utilisée pour effacer la mémoire SRAM
  3. Peut être utilisée pour initialiser les compteurs
  4. Etc.

Technique 1: Initialisation interne (voir la page 53 dans le Datasheet)

  • Induite par une faible alimentation de la carte OU
  • Surconsommation du courant dans les pins

Technique 2 – Reset matérielle

  • via l’application du niveau bas dans le pin RESET (appui sur le bouton poussoir de la carte)
  • ou mise à la masse du pin RESET

Technique 3: Initialisation logicielle – Watchdog

  • Le Watchdog ou Chien de garde
  • Mise en marche lorsque le programme prend plus de temps durant l’exécution ou en cas d’une anomalie durant l’exécution du programme => Induit un RESET du µC
  • Besoin  de la bibliothèque : avr/wdt.h
  • + Appel de la fonction wdt_enable(TimeOut)

Durée du TimeOut par défaut

  • 15mS    WDTO_15MS
  • 30mS    WDTO_30MS
  • 4S      WDTO_4S
  • 8S      WDTO_8S

Watchdog Timer Prescale Select

Reset Sources

  • The Atmel ATmega328P has four sources of reset:
  • Power-on reset. The MCU is reset when the supply voltage is below the power-on reset threshold (VPOT).
  • External reset. The MCU is reset when a low level is present on the RESET pin for longer than the minimum pulse length.
  • Watchdog system reset. The MCU is reset when the watchdog timer period expires and the watchdog system reset mode is enabled.
  • Brown-out reset. The MCU is reset when the supply voltage VCC is below the brown-out reset threshold (VBOT) and the brown-out detector is enabled.
wdt_enable(WDTO_15MS);  // Attente de 15ms avant l'init de la carte

wdt_enable(WDTO_4S);    // Attente de 4s avant l'init de la carte

Programme principal




#include <avr/wdt.h>




unsigned long MillisVal = 0;

unsigned long MicrosVal = 0;

unsigned long count=0;




void setup()

{

  // Init port série

  Serial.begin(9600);

}




void loop()

{

  // Lecture de la valseur de millis()

  MillisVal=1000*millis();

  MicrosVal=micros();




  // Affichage des valeurs

  Serial.print(MillisVal);Serial.print(",");

  Serial.print(MicrosVal);




  // Mise à jour du compteur

  count++;

  count =count %1024; // Init sans faire appel à l'instruction IF




  // Initiation si count=0

  if  (count==0) 

  {

    wdt_enable(WDTO_15MS);

    while(1){}

  }

}

Sujets connexes

  • Arduino reset programme
  • Arduino reset method
  • Arduino reset pin
  • Reset Arduino Nano
  • Arduino reset button
  • Arduino automatic reset
  • Bouton reset Arduino
  • Reset Arduino UNO
Click to rate this post!
[Total: 1 Average: 5]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

FPGA | Arduino | Matlab | Cours will use the information you provide on this form to be in touch with you and to provide updates and marketing.