Pages: 1 2 [3] 4   Go Down
Author Topic: Reset Software.  (Read 3795 times)
0 Members and 1 Guest are viewing this topic.
La Rochelle, France
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A bin la tu l'as dans l'os pour la soluce de moonpyk ... SMD = Surface Mounted Device en français CMS = Composant Monté en Surface. Dans ton cas l'atmega n'est pas amovible car soudé à la carte.

C'est dessoudable et changeable au prix de bonnes compétences en soudure, du matériel spécifique (station à air chaud) pour être remplacée et surtout une CPU ATmega1280 toute neuve, pas facile à trouver, si tu n'arrive pas à remettre la carte en état avec un programmeur externe, ta carte est bonne pour la poubelle.
Logged

France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

......., ta carte est bonne pour la poubelle.

Il faudrait peut être mettre un avertissement en tête du topic pour éviter la même mésaventure à d'autres!!!

Je verrai bien un [ATTENTION TOPIC A LIRE JUSQU'AU BOUT].
« Last Edit: January 09, 2013, 04:51:47 pm by Pac2Kro » Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,
J'ai commandé un programmateur externe (USBASP)
Vous les spécialistes, si vous pouviez commencer à me donner la marche à suivre etc ...
Je commencerais à potasser tout ça le temps de le recevoir (fin de semaine).
Il n'est pas question que j’abandonne avant d'avoir essayé toute les pistes.
Merci à vous
JP
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3645
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est ultra simple : tu connectes ton arduino au programmateur cia le header ISP, le programmateur au PC (y'a peut-être un jumper à mettre pour alimenter l'arduino via l'USB du programmateur) tu selectionnes le bon programmateur dans l'IDE et burn bootlader smiley-wink
Logged


France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec la méthode simple (en utilisant l'ide) :
1) tu choisis la carte qui va bien dans l'ide
2) tu choisis le programmateur qui va bien dans l'ide
3) burn bootloader
Ensuite il suffit d'attendre une petite minute et normalement tout sera comme en sortie d'usine.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Jr. Member
**
Karma: 1
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,
J'ai reçu le programmateur USBASP hier soir.
Ensuite adaptation de la connectique et récupération des drivers.
Donc ce matin j'ai tenté la programmation et ça a bien fonctionné.
Petit bémol, a la fin de la programmation, il met une erreur.
Mais, il suffit de rebrancher l'Arduino sur le port USB, de charger un sketch quelconque et ça fonctionne.
Conclusion, ce petit programmateur bon marché (6.50€) peut nous sortir d'un mauvais pas.
Ceci étant, je reviens à ma demande initiale : comment faire un reset lors de la mise sous tension de l'Arduino.
Si possible avec une autre solution que celle testée dans ce post !!!!!
JP
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3558
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Si possible avec une autre solution que celle testée dans ce post !!!!!

La 2560 possède un circuit de reset à la mise sous tension (un circuit RC) et un reset par le port série (par la ligne DTR). Donc avant de se lancer dans des manips risquées avec le watchdog il aurait peut être été plus simple de commencer par investiguer de ce coté. D'autant qu'il ne faut pas oublier que le watchdog est contraignant car il faut le réarmer périodiquement pour qu'il ne reset pas la carte à tout bout de champs.

Déjà est-ce une 2560 officielle? si oui le schéma est disponible là : http://arduino.cc/en/Main/ArduinoBoardMega2560.
Si c'est pas une officielle il faudra suivre les pistes partant de la broche 30 du processeur et regarder où il va. Le circuit de reset est assez simple.
A l'aide du schéma (ou sans) il faut suivre les pistes et regarder s'il n'y aurait pas une coupure ou une mauvaise soudure dans le circuit de reset.
Logged

France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

D'autant qu'il ne faut pas oublier que le watchdog est contraignant car il faut le réarmer périodiquement pour qu'il ne reset pas la carte à tout bout de champs.

Je comptais faire un reset avec le watchdog tous les 45 jours afin d'éviter la gestion du passage à zéro de millis() au bout d'un peu plus de 49 jours.

Code:
#include <avr/wdt.h>

const unsigned long FCT_MAX=45*86400*1000;

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

setup() {
}

loop() {
  if (millis()>FCT_MAX)
  {
    reset_software();
  }
}

Ton commentaire me laisse penser que je risque d'avoir des resets intempestifs ("réarmer périodiquement"?).
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si tu met :
Code:
wdt_disable();
en 1er ligne de ton setup() toute possibilité de reset intempestif par le watchdog deviendra impossible smiley-wink
(normalement le bootloader le fait tout seul mais bon ...)
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3558
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ton commentaire me laisse penser que je risque d'avoir des resets intempestifs ("réarmer périodiquement"?).
Le watchdog est un temporisateur qui doit être remis à zéro avant la fin de sa période de comptage sinon il reset la carte.
Si tu programmes un watchdog de 30ms comme dans le code que tu donnes en exemple il faut le réinitialiser avant l'échéance de ces 30ms. ce qui veut dire que tu dois avoir une fonction dans ta boucle loop qui remette à zéro le watchdog et tu dois t'assurer qu'en toutes circonstances ta boucle s'exécute en moins de 30ms.

Le problème de millis() qui reboucle tous les 50 jours possède une solution logicielle simple qui a déjà été expliqué plusieurs fois: http://arduino.cc/forum/index.php/topic,102491.0.html
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ton commentaire me laisse penser que je risque d'avoir des resets intempestifs ("réarmer périodiquement"?).
Le watchdog est un temporisateur qui doit être remis à zéro avant la fin de sa période de comptage sinon il reset la carte.
Si tu programmes un watchdog de 30ms comme dans le code que tu donnes en exemple il faut le réinitialiser avant l'échéance de ces 30ms. ce qui veut dire que tu dois avoir une fonction dans ta boucle loop qui remette à zéro le watchdog et tu dois t'assurer qu'en toutes circonstances ta boucle s'exécute en moins de 30ms.
Il veut faire un reset hardware depuis le software justement.

En activant le watchdog avec un timeout 30Ms et en créant une boucle infini juste derrière il force un reset hardware au moyen du watchdog.
Lors du reset le watchdog est désactivé par le bootloader (voir même par le fusible WDTON=1) ou au pire par la ligne que je donnai tout à l'heure.
Donc pas de réarmement nécessaire.

Après c'est vrai que la gestion du rollover de millis() serait bien propre qu'un simple reset.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci à vous deux pour ces explications claires et précises. Je regarde la solution logicielle du rollover de millis().



Edit : j'utilise bien millis() sous la forme :
Code:
if ( (millis() - date_avant) > TEMPS) )
Par contre, je ne savais pas qu'en C, pour une variable unsigned long, le résultat d'une soustraction donnant un résultat négatif, il est ajouté 2^32 (modulo 2^32). Donc pas de gestion à gérer lorsque millis() repasse à zéro.
« Last Edit: January 13, 2013, 08:42:24 am by Pac2Kro » Logged

Paris
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voici une méthode qui pourrait vous intéresser:
void(* resetFunc) (void) = 0; //declaration of the function

resetFunc();  //call reset
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Voici une méthode qui pourrait vous intéresser:
void(* resetFunc) (void) = 0; //declaration of the function

resetFunc();  //call reset
Très mauvaise idée car cela ne replace pas les valeurs par défaut des registres smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Paris
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pourtant elle marche pour mon appli, j'aimerais une explication  smiley-roll-sweat
Logged

Pages: 1 2 [3] 4   Go Up
Jump to: