Pages: [1] 2   Go Down
Author Topic: Autoreset ? No, grazie.  (Read 5812 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9698
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come promesso ecco una soluzione semplice, che non richiede nessuna modifica dell'IDE, per bloccare l'autoreset sulla UNO, R1-R2-R3, e la MEGA 2560, R1-R2-R3 e ADK, il blocco funziona anche con qualunque software applicativo sia realizzato da noi che di terze parti.
La disattivazione del autoreset si ottiene inserendo un jumper tra i pin 6 e 4 del connettore ISP del l'8/16u2 utilizzato come convertitore USB seriale, il pin 6 è GND e il pin 4 corrisponde a MOSI (PB2), la foto allegata mostra chiaramente come deve essere posizionato il jumper, per chi ha schede versione R1 e R2, dove il connettore ISP non è montato, può saldare solo i due pin necessari invece di tutti e sei.
Se il jumper tra GND e PB2 non è presente il comportamento di Arduino è quello classico con autoreset attivo e relativo reset aprendo la comunicazione seriale con Arduino.
Se il jumper è presente autoreset è disattivato, Arduino non resetta più aprendo la comunicazione seriale, ovviamente il blocco è valido anche per la fase di programmazione, o si rimuove il jumper, consigliato in fase di sviluppo, oppure si preme manualmente il tasto di reset, consigliato per applicazioni definitive per gli eventuali aggiornamenti software.

Il jumper può essere inserito/rimosso in qualunque momento con la relativa modifica del comportamento del autoreset.
Non è necessario resettare Arduino e/o l'8/16u2 per cambiare il comportamento del autoreset.


La modifica al firmware del 8/16u2 è quasi banale tanto è semplice, come prima cosa si aggiungono le seguenti righe alla funzione "main":
Code:
int main(void)
{
// set PB2 (MOSI) as input with pull up
DDRB  &= 0b011; // Port B2 input
PORTB |= 0b100; // Pull Up

Viene settato PB2 come input con la pull attiva in modo da tenerlo fisso a uno logico

La funzione EVENT_CDC_Device_ControLineStateChanged() va modificata da cosi:
Code:
void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
{
bool CurrentDTRState = (CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR);
   
    if (CurrentDTRState)
   AVR_RESET_LINE_PORT &= ~AVR_RESET_LINE_MASK;
    else
  AVR_RESET_LINE_PORT |= AVR_RESET_LINE_MASK;
     
}

A così:
Code:
void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
{
  bool CurrentDTRState = (CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR);
  unsigned char ResetOK;
 
  ResetOK = PINB & 0b100;
  if(ResetOK == 4)
{
  if (CurrentDTRState)
   AVR_RESET_LINE_PORT &= ~AVR_RESET_LINE_MASK;
  else
  AVR_RESET_LINE_PORT |= AVR_RESET_LINE_MASK;
   } 
}

Viene aggiunto un controllo sullo stato di PB2, se è a uno logico (jumper rimosso) il segnale DTR attiva il reset, se è a 0 logico (jumper presente) il reset non viene eseguito.
Nel file rar allegato trovate il sorgente modificato del file "Arduino-usbserial.c" e il relativo .hex già compilato per l'ATMEGA 8u2 (UNO R1 e R2), ho messo anche il file "UNO-dfu_and_usbserial_combined.hex" che è quello originale per eventuale ripristino tramite programmazione ISP.
Purtroppo a causa di un imprevisto oggi non posso compilare, e testare, le versioni per la UNO R3 e quelle per la MEGA, le rilascerò nei prossimi giorni, i sorgenti originali, e i vari file .hex già compilati, si trovano nella cartella "..\arduino-1.0.1\hardware\arduino\firmwares\arduino-usbserial".
Per caricare il file hex sul 8u2 potete utilizzare la programmazione ISP oppure tramite il bootloader DFU precaricato sul micro, la procedura per utilizzare il DFU la trovate qui.
Attenzione che se caricate l'hex tramite ISP perdete il bootloader DFU, è sempre possibile ripristinarlo utilizzando i file originali forniti con la distro di Arduino.

Questo post verrà aggiornato nei prossimi giorni con le versioni per le R3 e le MEGA



* ArNO.jpg (536.06 KB, 1324x1065 - viewed 179 times.)
* NoAutoReset.rar (13.22 KB - downloaded 51 times.)
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22972
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sto già scaldando il saldatore per aggiungere il connettore alla mia UNO e provvedere alla modifica  smiley-wink
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22972
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Perfetto! Sulla mia UNO R1 funziona perfettamente.

Ho scelto l'upload tramite ISP con il mio USBtinyISP perché non me la sentivo di piazzare un jumper sul retro della scheda (sono molto cialtrone nelle saldature piccole) perciò ho deciso di sacrificare il bootloader Dfu, tanto se mi occorre posso sempre riscrivercelo sopra.

Adesso la presenza del jumper impedisce il reset della scheda quando si avvia l'IDE o si apre il monitor seriale. Basta ricordarsi di staccare il jumper in fase di programmazione, altrimenti si riceverà l'errore di "stk500_getsync(): not in sync: resp=0xe0" da parte di avrdude. Se si vuole conservare il comportamento "tradizionale" basta togliere il jumper e tutto funziona come prima.

Bravo Astro!
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9698
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perfetto! Sulla mia UNO R1 funziona perfettamente.

Grazie per la prova  e la conferma del funzionamento.

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22972
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Perfetto! Sulla mia UNO R1 funziona perfettamente.

Grazie per la prova  e la conferma del funzionamento.


Dovere  smiley-razz
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12643
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Grande Astro, qualcuno aveva dubbi?
Logged


Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7194
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Io ho la R3.
Attendo..
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

0
Offline Offline
Faraday Member
**
Karma: 47
Posts: 5965
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grande Astro,
bellissima la frase
Quote
La modifica al firmware del 8/16u2 è quasi banale tanto è semplice
 smiley-yell

devo saldare anche io l'header per la R1, approfittero' per "pazziare" con dfu che non l'ho mai usato.

per le modifiche/compilazione hai usato AVRStudio ?

per il discorso che facevo sull'altro topic, cioe' la provocazione promessa, non e' niente di che, semplicemente mi chiedevo, ma queste stesse cose le si fanno con l'apposita piazzola per il reset. Ad esempio su R1 si deve saldare l'header, quindi cmq serve saldatore, a quel punto si mette un jumper sulla piazzola reset. Diciamo che la tua modifica e' piu' pulita a livello hardware perche' va ad usare un jumper stadard invece di saldare la piazzola ogni volta e dissaldarla.
La cosa piu' banale che io farei al posto di arduinoteam e' semplicemente mettere un jumper al posto della piazzola, in modo da avare di fabbrica la possibilita' di abilitare o meno lo stesso, senza la necessita' di modificare nulla.
« Last Edit: November 04, 2012, 03:21:53 pm by Testato » Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9698
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

per le modifiche/compilazione hai usato AVRStudio ?

No perché la libreria LUFA è scritta talmente male che tocca impazzire per renderla compatibile con AvrStudio, ho usato la make, leggermente modificata, fornita con i sorgenti e winavr come compilatore.
Mi ci è voluto più tempo per riuscire a capire come fare la compilazione che realizzare la  modifica al software  smiley
La cosa divertente è che se segui alla lettera le istruzioni ufficiali per compilare, provato sia con windows che con Linux, ottieni solo una sfilza interminabile di errori, la prima cosa che non ti dicono è che la libreria LUFA deve essere la versione 100807, con tutte le altre non si riesce a compilare senza doverci mettere mano pesantemente.
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9698
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La cosa piu' banale che io farei al posto di arduinoteam e' semplicemente mettere un jumper al posto della piazzola, in modo da avare di fabbrica la possibilita' di abilitare o meno lo stesso, senza la necessita' di modificare nulla.

Forse con una mazza da 1 Tons si riesce a fargli entrare in testa questa semplicissima modifica a costo 0  smiley-mr-green
Tieni presente che il mio lavoro è solo il primo mattone di un qualcosa di più grande, ho intenzione di implementare il mio SmartReset, quello presente sulla Luigino 328 che consente di programmare Arduino tenendo l'autoreset generico bloccato, su Arduino e poi vediamo se l'Arduino Team ha il coraggio di dire che è una modifica inutile  smiley-mr-green
Logged

0
Offline Offline
Faraday Member
**
Karma: 47
Posts: 5965
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yep,
avevi detto che questo era il primo step, credo che alla fine, pur di non darti soddisfazione, metteranno il jumper reset sulla UNO R4  smiley-yell
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7194
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ha detto Banzi che non ci sarà un R4.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22972
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

No perché la libreria LUFA è scritta talmente male che tocca impazzire per renderla compatibile con AvrStudio, ho usato la make, leggermente modificata, fornita con i sorgenti e winavr come compilatore.
Mi ci è voluto più tempo per riuscire a capire come fare la compilazione che realizzare la  modifica al software  smiley
La cosa divertente è che se segui alla lettera le istruzioni ufficiali per compilare, provato sia con windows che con Linux, ottieni solo una sfilza interminabile di errori, la prima cosa che non ti dicono è che la libreria LUFA deve essere la versione 100807, con tutte le altre non si riesce a compilare senza doverci mettere mano pesantemente.
Me ne sono accorto anch'io..... cos'hai modificato, scusa? E' tutto il pomeriggio che impazzisco per cercare di compilare il firmware però io ho usato la 12xxx.

EDIT:
scaricando la 100807 ho compilato senza apportare modifiche ad alcunché (su Linux).
« Last Edit: November 04, 2012, 05:22:24 pm by leo72 » Logged


0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10498
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

astro, protresti proporre la modifica del bootloader sul progetto arduino, così da renderlo (si spera) una feature "di default" su tutti i prossimo arduino UNO (R4?)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9698
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

astro, protresti proporre la modifica del bootloader sul progetto arduino, così da renderlo (si spera) una feature "di default" su tutti i prossimo arduino UNO (R4?)

Banzi ha detto che a loro le cose stanno bene così come sono, non vedo nessun motivo per cui devo perdere tempo dietro loro per cose che non gli interessano.
Domani aggiungo le versioni compilate per la UNO R3 e la MEGA tutte le release.
« Last Edit: November 07, 2012, 10:12:06 am by astrobeed » Logged

Pages: [1] 2   Go Up
Jump to: