Pages: [1]   Go Down
Author Topic: Soft reset pour atmega328p via avrdude ?  (Read 1350 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 18
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

J'ai un Arduino Serial Board sur lequel j'ai ajouté un soft reset (voir ce topic). Cela marche out of the box depuis le PC avec AduinoIDE, mais pas si j'utilise avrdude directement en ligne de commande. Si j'ai tout compris, ArduinoIDE déclenche lui-même le soft reset avant de lancer avrdude.

Pourtant, en fouillant le web, il semble qu'avrdude puisse être configuré pour intégrer l'étape du soft reset. Quelqu'un sait-il concrètement si et comment ça peut se faire ?

Le but est de pouvoir utiliser avrdude directement sous mon routeur WRT54G avec openwrt (donc sans ArduinoIDE).

La ligne de commande avrdude que j'utilise est :
Code:
avrdude -F -pm328p -cstk500v1 -P/dev/tts/1 -b115200 -D -Uflash:w:<firmware.hex>:a
Il faudrait donc voir du côté du programmer stk500v1 (ajouter "reset = 4" ?), puis du part m328p. Mais c'est là que je coince...

Merci par avance.
Logged

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pour avrdude, il y a un stk500 modifié qui s'apelle 'arduino'   smiley-grin

Dans la doc d'avrdude c'est indiqué, il faut une version récente, bizarrement Arduino Ide ne l'utilse pas, mais elle fait le boulot attentu : toggle de rts et dtr( des fois le reset est sur l'un ou l'autre )
 

A+ Teiva

www.Zartronic.fr : Votre source Arduino en France
Logged


www.Zartronic.fr : Arduino & Robotique

0
Offline Offline
Newbie
*
Karma: 0
Posts: 18
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci Teiva, je vais tester ça d'ici demain.

Quote
bizarrement Arduino Ide ne l'utilise pas
Oui, et je crois comprendre pourquoi : l'IDE en version 0021 est distribué avec la version 5.4 d'avrdude, qui date de 2007 :-/.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 18
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Et ben rien à dire : ça marche parfaitement bien !

En plus ça résoud le pb de la signature non reconnue (j'étais obligé d'ajouter l'option -F avec avrdude >= 5.8 et stk500v1) et le baudrate par défaut est correct (plus besoin de spécifier -b115200).

Seul bémol : la version 5.8 (celle que j'ai sur mon WRT54G) ne déclenche pas le reset. Ça ne marche qu'avec la 5.10 que j'ai sur mon PC. Il va falloir que j'upgrade mon routeur...

Merci encore !
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 18
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Seul bémol : la version 5.8 (celle que j'ai sur mon WRT54G) ne déclenche pas le reset.
En y repensant dans le train, c'est tout à fait normal et ça ne peut pas marcher sur le WRT54G : celui-ci dispose uniquement de Rx et Tx :'(
Code:
The pinout of JP1 on the Linksys PCB is as follows:

Pin  1: 3.3V        Pin  2: 3.3V
Pin  3: Tx (ttyS1)  Pin  4: Tx (ttyS0)
Pin  5: Rx (ttyS1)  Pin  6: Rx (ttyS0)
Pin  7: NC          Pin  8: NC
Pin  9: GND         Pin 10: GND
Il va falloir que je trouve une autre solution, genre une interaction avec le programme tournant sur arduino pour provoquer un reset...
Logged

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Il va falloir que je trouve une autre solution, genre une interaction avec le programme tournant sur arduino pour provoquer un reset...
Tu peux t'inspirer du bootloader de l'Arduino Bluetooth, il prend une pin pour la relier au reset, autre solution : watchdog

Tiens nous au courant ...

A+ Teiva

www.Zartronic.fr : Votre source Arduino en France
Logged


www.Zartronic.fr : Arduino & Robotique

0
Offline Offline
Newbie
*
Karma: 0
Posts: 18
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
autre solution : watchdog
J'ai tenté ça, et ça fait effectivement redémarrer l'arduino, mais je n'ai pas l'impression que ça repasse par le boot loader :
  • je ne vois pas la led sur la pin 13 clignoter lors d'un reset watchdog
  • toutes mes tentatives d'uploader après un reset watchdog ont échoué
Du coup je crois qu'il ne reste plus que le reset déclenché par une pin dédiée... Mais j'ai moyen envie de passer par un timer 555 comme vu sur la littérature consacrée. Est qu'un bête montage transistor NPN + condo 100nF (par analogie avec le soft reset du Uno) ne pourrait pas suffire pour gérer le timing ?
Code:
                                  +5V
                                    |
                                    |
                                   ---
                                   | |10k
                                   | |
                                   ---
                                    |------------x Reset
                          10k      /
                    ____|----|___|/ BC 547
                    |   |----|   |\
                    |              \i
                    |              -|
                    | 100n  ___     |
   pin x---|\|---------||--|___|----|
 dédiée    |/|               1k   -----
                                  GND
Le scénario serait le suivant :
1- la pin dédiée passe à HIGH
2- le condo se charge
3- quand le condo est chargé, le transistor déclenche
4- le reset commence et la pin dédiée passe à LOW
5- Le condo se décharge et maintient le transistor ouvert le temps d'assurer le reset.

Ça le ferait ?
Logged

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je crois que tu te compliques trop, tu branches une pin au reset, en normal tu la laisses en haute impédance, pour faire le reset tu la mets à 0, une fois le reset démarré elle passe en haute impédance automatiquement.

Pour qu'un bootloader fonctionne avec le watchdog, il faut qu'il soit modifié, voir les sources du bootloader Arduino Bluetooth.

A+ Teiva

www.Zartronic.fr : Robots & Arduino
Logged


www.Zartronic.fr : Arduino & Robotique

0
Offline Offline
Newbie
*
Karma: 0
Posts: 18
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
tu branches une pin au reset, en normal tu la laisses en haute impédance, pour faire le reset tu la mets à 0, une fois le reset démarré elle passe en haute impédance automatiquement.
Je ne suis pas sûr de saisir ce que tu entends par haute impédance dans ce contexte :/

Tu veux dire qu'en normal la pin est en +5V (HIGH) et que pour déclencher le reset je la passe à 0 (LOW) ?
Logged

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
normal la pin est en +5V (HIGH)
Je me suis mal exprimé, en normal la pin est en entrée (sans pullup), cqfd en haute impédance. Et donc n'influence pas le reset.
Pour faire un reset : tu prépares un 0 sur la sortie, tu la mets en mode sortie  la suite n'a pas d'importance puisqu'un reset va se faire ...
Par contre il ne faut pas que la capa du reset soit trop grosse et éventuellement mette une résistance pour limiter le courant à 20mA, donc peut être mette une tempo pour attendre le coup de grâce  smiley-wink
Mais j'ai l'impression que tu connais bien l'électronique ...

A+ Teiva

www.Zartronic.fr : Robots et Arduino

Logged


www.Zartronic.fr : Arduino & Robotique

0
Offline Offline
Newbie
*
Karma: 0
Posts: 18
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Je me suis mal exprimé, en normal la pin est en entrée (sans pullup), cqfd en haute impédance. Et donc n'influence pas le reset.
Pour faire un reset : tu prépares un 0 sur la sortie, tu la mets en mode sortie  la suite n'a pas d'importance puisqu'un reset va se faire ...
Ah OK. Je comprends mieux. smiley

Quote
Par contre il ne faut pas que la capa du reset soit trop grosse et éventuellement mette une résistance pour limiter le courant à 20mA, donc peut être mette une tempo pour attendre le coup de grâce
Mais j'ai l'impression que tu connais bien l'électronique ...
Ben non, justement, je n'y connais pas grand'chose : jusqu'à présent j'ai procédé par analogie avec les schémas à ma disposition.

Si je tente une reformulation de ta proposition, je mets en série un condo et une résistance entre la pin et le reset. Mais en quoi consiste la tempo dont tu parles ? C'est du soft ou du hard ?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 18
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon ben dans le doute je suis resté sur mon idée, que j'ai testée ce soir et qui fonctionne \o/
En plus il y a probablement moyen de mutualiser la majeure partie avec le montage que j'ai fait pour le soft reset via DTR. Je tenterai ça à la rentrée...
Logged

Pages: [1]   Go Up
Jump to: