Go Down

Topic: [RESOLU] reset automatique + [RESOLU] Démarrage du moniteur série sans reset (Read 4859 times) previous topic - next topic

numero_744

Bonjour tout le monde !
Je pense que cette question sera vite résolue :
Comment faire un reset automatique de la carte (sans appuyer sur un bouton).
C'est tout...

Merci d'avoir lu et de bientôt répondre !
- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (po

SesechXP

Salut,

Je n'ai jamais essayé mais à priori il y aurait moyen de faire quelque chose avec le watchdog, et plus particulièrement la macro wdt_reset.

++
Julien - www.idreammicro.com

skywodd

Bonjour,

Reset depuis le code ou depuis un montage externe ?

Pour faire un reset software il existe deux solutions :
- la solution pas propre qui marche que dans certain cas :
Code: [Select]
asm("jmp 0x00");
- la solution propre via le watchdog :
Code: [Select]
#include <avr/wdt.h>
// ...
wdt_enable(WDTO_15MS);
for(;;);
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

numero_744

- Reset depuis le code;
- "Reset software" : qu'est ce que "software" ?;
- "Dans certains cas" : lequels ?;
- Insérer une bibliothèque pour une fonction ?;

Pour faire simple, j'aimerais qu'avec une ligne C la carte fasse un reset comme si l'on avait appuyé sur un bouton,
quitte à utiliser une voie digitale et faire des branchements (pas trop compliqués quand-même, les branchements...).
- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (po

icare

Bonsoir skywodd,

Code: [Select]

for(;;);



Que fait exactement cette instruction de boucle ?
icare
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

skywodd


- Reset depuis le code;
- "Reset software" : qu'est ce que "software" ?;
- "Dans certains cas" : lequels ?;
- Insérer une bibliothèque pour une fonction ?;

- "software" = logiciel en anglais, donc reset software = reset depuis le code (à contrario de "hardware reset" = reset physique depuis l'extérieur).
- "dans certain cas" = les registres du CPU ne sont pas réinitialisé quand tu fait asm("jmp 0x00") donc si tu utilises des timers (ou autre truc exotique) il resterons actif et irons foutre le bordel dans ton code ;)
- pour pouvoir utiliser le watchdog il faut inclure la librairie "avr/wdt.h" (wdt = watchdog) ce qui semble assez logique ;)


Pour faire simple, j'aimerais qu'avec une ligne C la carte fasse un reset comme si l'on avait appuyé sur un bouton,
quitte à utiliser une voie digitale et faire des branchements (pas trop compliqués quand-même, les branchements...).

Le travail pré-mâché c'est mal ;)

Code: [Select]
#include <avr/wdt.h>

void reset_software(void) {
  wdt_enable(WDTO_15MS);
  for(;;);
}

(pas trop compliqué comme fonction ;))


Que fait exactement cette instruction de boucle ?

Elle ne fait rien, c'est une boucle infini ;)

En C si tu fait un while(1); normalement tu doit avoir un warning du style "condition always true".
Si tu fait for(;; ); cela revient exactement au même mais le compilateur ne fera aucun warning.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

numero_744

#6
Sep 24, 2012, 09:23 pm Last Edit: Sep 25, 2012, 06:44 pm by numero_744 Reason: 1
C'est juste un retour au début du programme (la led L (broche 13) ne clignote pas) + vidange de la file de réception.
Mais quelle est la différence avec une pression sur le bouton (à part les timers)?
- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (po

skywodd


C'est juste un retour au début du programme (la led L (broche 13) ne clignote pas) + vidange de la file de réception.
Mais quelle est la différence avec une pression sur le bouton (à part les timers)?

Quand tu appuis physiquement sur le bouton RESET les registres en ram sont remis à leurs valeurs par défaut (timer off, pas de serial, toutes les broches en entrées, ...).

Quand tu fait un asm("jmp 0x00") tu "saute" à l'adresse zéro (début du programme) SANS remettre les valeurs par défaut des registres.
Du coup ce qui avait été mis en marche (timer, serial, ...) reste en l'état et dans beaucoup de cas ton code planteras de manière inexplicable (ou plus souvent le bootloader).
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

numero_744

Et si j'utilise
Quote
la solution propre via le watchdog :
Code: [Select]
#include <avr/wdt.h>
// ...
wdt_enable(WDTO_15MS);
for(;;);

?
- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (po

skywodd

Avec le watchdog le reset est physique (comme si tu appuyais sur RESET) donc pas de soucis.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

numero_744

#10
Sep 25, 2012, 09:44 pm Last Edit: Sep 25, 2012, 09:52 pm by numero_744 Reason: 1
Merci !
(Résolu en 3 jours, pas mal !)

Si on veut une commande manuelle mais qu'on n'aime pas les boutons, reliez la carte à un transistor PNP :
Reset -> E; C -> LED (protégée, bien sur) -> GND
Touchez la base et la carte fait un reset.
- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (po

numero_744

Salut tout le monde !

Je suis de retour sur cette discussion pour demander l'inverse de la question de départ :
Comment empêcher un reset lorsque je clique sur moniteur série dans l'IDE ?
- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (po

skywodd


Je suis de retour sur cette discussion pour demander l'inverse de la question de départ :
Comment empêcher un reset lorsque je clique sur moniteur série dans l'IDE ?

En hardware : http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection
En software : ... ne pas utiliser le "Serial Monitor" de l'ide mais une vrai console série :smiley-mr-green:

Moi j'utilise TerminalBpp : http://skyduino.wordpress.com/2012/02/11/terminalbpp-le-logiciel-a-avoir-absolument/
Il permet de faire un reset (bouton DTR) uniquement quand on le souhaite.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

numero_744

Merci pour ta réponse mais j'ai déjà cherché TerminalBpp mais il ne va pas pour mac (et mon PC ne détecte pas ma carte).
Sur ton premier lien allait très bien jusqu'à ce que je regarde en dessous de l'image... J'ai une UNO =( .
Connaitrais-tu un autre logiciel terminal série gratuit mais pour mac ?
Merci.

P.S. : J'ai un PowerBook G4 qui est plus vieux que moi alors un pas trop lourd si possible...
- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (po

barbudor

#14
Oct 07, 2012, 10:08 am Last Edit: Oct 07, 2012, 10:14 am by barbudor Reason: 1
Sur ton premier lien allait très bien jusqu'à ce que je regarde en dessous de l'image... J'ai une UNO =( .


Mais en dessous du dessin il est écrit :
Quote
For the Uno, connecting a 10?F capacitor between the RESET and GND lines works for me (as described in the linked thread).


L'autre solution étant de couper le bout de piste entre les 2 plots entourés de blanc sur la photo ci-dessous.
Si tu veux ensuite réactiver l'auto-reset il faut mettre un pont de soudure entre les 2 plots.
C'est fait pour çà.

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Go Up