Modificare firmware 16U2 dell'Arduino Uno per eliminare l'autoreset

leo72:
Non ho trovato nulla nel datasheet del 32U4 in cui si parla della possibilità di scegliere a che velocità di trasmissione attivare il reset.

E non lo troverai mai perché è una cosa gestita a software e non dal micro.

Ora mi esprimo. Mi pare un sistema un po'... rozzo.

Per me è una vera "bischerata", ci sono metodi di gran lunga migliori, senza nessuna controindicazione, per far resettare l'ATmega a comando.

astrobeed:

leo72:
Non ho trovato nulla nel datasheet del 32U4 in cui si parla della possibilità di scegliere a che velocità di trasmissione attivare il reset.

E non lo troverai mai perché è una cosa gestita a software e non dal micro.

Voglio capire meglio questa cosa. Chi è che lato 32U4 "guarda" se la seriale è stata aperta a 1200 bps? A me pare nessuno.

EDIT:
aspetta, non dirmelo.... vuoi vedere che sta nell'unico posto in cui non ho guardato, ossia direttamente nel core (nel codice che gestisce la seriale)?

Ho fatto tombola! :stuck_out_tongue_closed_eyes:
Dal file CDC.cpp:

			// auto-reset into the bootloader is triggered when the port, already 
			// open at 1200 bps, is closed.  this is the signal to start the watchdog
			// with a relatively long period so it can finish housekeeping tasks
			// like servicing endpoints before the sketch ends

leo72:
Voglio capire meglio questa cosa. Chi è che lato 32U4 "guarda" se la seriale è stata aperta a 1200 bps? A me pare nessuno.

La USB, o meglio il software che gestisce il device CDC della USB, tra i parametri disponibili c'è anche la velocità della seriale, viene comunicato dal HOST quando apri la Vcom, in realtà non serve a nulla dal lato USB perché i dati viaggiano sempre alla massima velocità possibile, si usa per settare in modo corretto l'UART.

astrobeed:
La USB, o meglio il software che gestisce il device CDC della USB, tra i parametri disponibili c'è anche la velocità della seriale, viene comunicato dal HOST quando apri la Vcom, in realtà non serve a nulla dal lato USB perché i dati viaggiano sempre alla massima velocità possibile, si usa per settare in modo corretto l'UART.

L'ho trovato da solo... che fava che sono, non pensavo affatto che c'era ancora una cosa che non avevo controllato, il codice per gestire la seriale lato Arduino. :sweat_smile:

astrobeed:
L'IDE non comanda nulla relativamente a DTR/RTS, e l'ho detto 1000 volte.

e vuol dire che non c'ero, che ci puoi fare? :stuck_out_tongue:

DTR e RTS Sono segnali standard della RS232 ed è la parte di gestione della seriale sul pc, non importa se hardware o software, a cambiare stato a questi segnali in accordo con il protocollo RS232 che ne stabilisce il funzionamento.

Lungi da me l'idea di insistere, però riporto due constatazioni inoppugnabili:
1 - Se apro il Serial Monitor dell'IDE l'RTS dell'MCP2200 NON resetta l'ATmega328P
2 - Se apro Windows HyperTerminal l'RTS dell'MCP2200 RESETTA l'ATmega328P
certamente mi sbaglio, ma io sarei portato a dedurre che una qualche influenza il software deve averlo altrimenti i due programmi si dovrebbero comportare allo stesso modo no? :roll_eyes:

leo72:
che fava che sono, non pensavo affatto che c'era ancora una cosa che non avevo controllato, il codice per gestire la seriale lato Arduino. :sweat_smile:

Comunque rimane lo stesso una bischerata :grin:

astrobeed:
Comunque rimane lo stesso una bischerata :grin:

Mi piace leggere "bischerata", mi fa sentire a casa XD

Sia DTR che RTS sono bloccabili da software, anche di questa cosa ne abbiamo già discusso molto relativamente a come fare per bloccare l'autoreset da un programma utente, pertanto è possibile che il serial monitor venga attivato con RTS bloccato.
Questo non cambia l'essenza del discorso, sono segnali che fanno parte del protocollo UART/RS232 e cambiano stato automaticamente, non è necessario intervenire manualmente per controllarli.

@astrobeed "ci sono metodi di gran lunga migliori, senza nessuna controindicazione, per far resettare l'ATmega a comando."
quali sono? considerando che devono funzionare senza problemi su tutte le piattaforme.

m

Io il problema dell'autoreset l'ho risolto ad hardware, e un pizzico di software, sulla Luigino 328, e non è certo un mistero come ho fatto, oltretutto la mia soluzione consente di tenere collegata la seriale ad un utilizzatore esterno e di poter programmare l'ATmega senza dover staccare nulla.
Però esistono anche soluzioni totalmente software per la UNO e successive dove siete passati all'uso di un micro dedicato per la gestione della USB invece del FTDI.
Io sono disponibile per risolvervi la questione in modo definitivo e valido per tutte le piattaforme Arduino (con micro per la USB) e tutti i sistemi operativi senza dover operare nessun intervento hardware, solo alcune piccole modifiche al software del 8/16u2 e all'IDE, non voglio ne soldi ne alcun tipo di benefit per questa cosa, salvo il riconoscimento ufficiale del lavoro svolto, eventualmente sentiamoci in privato che ti spiego i dettagli..

astrobeed:

[quote author=Michele Menniti link=topic=129176.msg973372#msg973372 date=1351352885]
veramente è l'opposto, l'RTS era previsto con l'FT232RL

Non è nemmeno così, anche la 2009 con l'FTDI usa DTR, RTS è solo linkato a livello di schema per retrocompatibilità con le vecchie versioni di Arduino, quelle con la seriale RS232 per capirci, però non è fisicamente collegato sulla scheda, il componente marcato come R2 con valore 100 in realtà è un condensatore da 100 nf e non è montato sul pcb della 2009.
L'IDE non comanda nulla relativamente a DTR/RTS, e l'ho detto 1000 volte.
DTR e RTS Sono segnali standard della RS232 ed è la parte di gestione della seriale sul pc, non importa se hardware o software, a cambiare stato a questi segnali in accordo con il protocollo RS232 che ne stabilisce il funzionamento.
[/quote]

Il DTR e' presente in tutti ghli schemi, anche sulla seriale single side (quella chiamata Arduino Severino), indi per cui e' stato il primo ad essere usato per il reset.
Il RTS, come dice astro, e' solo presente su alcuni schemi, e non sapevo fosse non connesso.
Sulla UNO c'e' solo il segnale DTR, pero' effettivamente se si usa un programmatore con il solo RTS funziona ugualmente il reset come confermato anche da Michele.

Io ho construito un adattatore usb seriale a cui ho aggiunto un bel monitor di tutti i segnali. Con questo ho notato che ci sono dei programmi che fanno da Terminale che all'apertura della porta attivano il solo RTS, altri che attivano entrambi, altri che non li attivano.
La rxtxserial modificata fa in modo che non vengano attivati questi segnali durante il serial monitor.
La cosa interessante e' che questa funzionalita' l'ho scoperta io, perche' l'autore non ne fa menzione, lui ci ha lavorato per eliminare il problema della lentezza del menu Tool, che cmq e' lento perche' va a enumerare le seriali, secialmente le bluetooth che sono quelle che danno piu' problemi.

In attesa della proficua collaborazione Astro-Banzi si potrebbe iniziare ad includere la rxtxserial modificata per windows nell'ide (come richiesto dall'amministratore del forum in inglese) e poi se qualche programmatorer di buona volonta' volesse applicare quelle modifiche alla versione linux del file sarebbe ancora meglio. Quelli con gli apple lasciamoli fuori :stuck_out_tongue_closed_eyes:

Se non ricordo male, astrobeed si era già offerto un bel po' di tempo fa per fare questa modifica, ma senza riscontro. Vediamo se questa è la volta buona :wink:

@Testato:
ricompilare una libreria è una bischerata, basterebbe avere le modifiche che il tipo ha fatto. Il problema è che mi pare sia un po' "restìo" a divulgare certe cose. Vedo infatti che distribuisce gli eseguibili già compilati ma non sono riuscito a trovare i sorgenti modificati né cosa ha effettivamente modificato.

Veramente Astro si è offerto anche per altri interventi, ma non c'è stato seguito, sarei curioso di capire perché, soprattutto in considerazione del fatto che ha sempre detto espressamente che non vuole denaro :roll_eyes:

Per il momento tutto tace :slight_smile:
Chissà forse all'Arduino Team hanno paura di fare brutta figura se "uno qualunque" gli risolve dei problemi che si portano avanti da sempre :grin:

avete provato con i canali ufficiali? sul git ecc...

BrainBooster:
avete provato con i canali ufficiali? sul git ecc...

In tutta franchezza non vedo perché devo essere io a correre dietro a loro, qui leggono agli Admin e Banzi in persona, se sono interessati mi contattino direttamente.

Astro si propone a sistemare il piu grave problema cumunicativo di arduino e Massimo non lo accoglie a braccia aperte ? E' impossibile :astonished:

Astro si e' messo in gioco, che giochi anche Arduino team, non si finisce mai di imparare, ed anche il team deve farlo.

Per la rxtxserial: leo ma nei due link che ho postato c e del codice, nel sito cileno, che si capisce anche per un italiano, mi sembra spiega il tutto. Ci hai guardato ? Anche perche Astro ha detto che la sua modifica non è applicabile al ft232, tagliando fuori sia i vecchi arduini, ma principalmente gli stand alone
Quindi fornire una soluzione ai poveri linuxiani ed ai windowsiani 64ttristi sarebbe sempre utile (anche se limitatamente a Ide arduino e Processing

Testato:
Per la rxtxserial: leo ma nei due link che ho postato c e del codice, nel sito cileno, che si capisce anche per un italiano, mi sembra spiega il tutto. Ci hai guardato ? Anche perche Astro ha detto che la sua modifica non è applicabile al ft232, tagliando fuori sia i vecchi arduini, ma principalmente gli stand alone

Ci ho guardato ma non posso stare a rivoltare quel sito ed a cercare del codice.
Hai tu il link diretto? Sono 2 giorni che te lo chiedo... ]:smiley:

Quindi fornire una soluzione ai poveri linuxiani ed ai windowsiani 64ttristi sarebbe sempre utile (anche se limitatamente a Ide arduino e Processing

Questa la devi spiegare. :wink:

Non ricordo se per linux esistono versioni 32 e 64bit della rxtxserial, ma su windows si, ed eried ha modificato solo la 32bit. Poveri 64tristi in tal senso :slight_smile:

Questa fu la sua risposta via PM in merito alle modificje fatte

hehe good luck.here is a detailed info about the patch if you need more details: Erwin Ried's Blog

E poi, scusami se insisto, ma il link che ti ho postato prima, un paio di pagine fa, si intitola Road to solve ....
A me sembra ci sia scritto tutto, ma il promgrammatore sei tu :slight_smile:
Se mi dici che non va bene, non va bene :slight_smile: