Come programmare l'Atmega328 già inserito nel circuito?

Buongiorno a tutti,
vi scrivo per avere due informazioni sull'arte del "saper fare", vi espongo la questione.

Domanda sintetica: "Come si può programmare un Atmega328 in StandAlone che è già collegato al circuito nel quale dovrà lavorare?"

Spiegazione:
Ho realizzato un piccolo progetto con un Atmega328 in StandAlone, alimentazione, basetta, potenzionetri, RTC, LCD, servo, ecc... programmando sempre l'Atmega328 attraverso la modalità ISP (guida Menniti), provandolo su basetta sperimentale ed infine inserendo il chip all'interno del circuito del prototipo.

Come capita sovente, il primo prototipo è pieno di problemi che via via emergono durante il normale utilizzo e pertanto occorre riprogrammare l'Atmega al fine di migliorare/eliminare i bugs.

Ho notato (almeno su un Attiny85) che se si cerca di programmare il chip quando questo è collegato al resto del circuito del prototipo, la programmazione non va a buon fine, pertanto il chip dev'essere "staccato" dalla basetta del progetto e programmato collegandolo con i soli fili necessari (evidentemente il circuito sul quale è montato il chip interferisce con la programmazione).

Il problema è che il circuito è all'interno di una cassetta e non vorrei ogni volta aprire il tutto, scollegare il 328 (il che non è facilissimo), programmarlo, reinserirlo, chiudere la cassetta, ecc.. ecc...

Mi domando quindi se nel prossimo progetto, fosse meglio prevedere di esporre all'esterno un po' di fili ai quali agganciarmi per la programmazione, evitando quindi di smontare tutte le volte il chip.
Se è possibile programmare l'Atmega328 già inserito nel circuito, cosa è meglio utilizzare? ISP o tecnica seriale?
Può venir comodo questo convertitore? USB to Seriale? (http://www.ebay.it/itm/USB-2-0-to-UART-TTL-6PIN-Connector-Module-Serial-Converter-CP2102-New-/190685792376?pt=LH_DefaultDomain_0&hash=item2c65c24878)

Grazie in anticipo,
Tredipunta.

Con Arduino emtrambe le opzioni sono possibili. Dipende dal circuito che hai costruito se ha la possibilitá di lasciare libero i Pin 0 e 1 oppure 10, 11, 12 e 13 (o almeno attacati del circuito che non disturba il caricamento del sketch) NEl caso di caricamento seriale hai bisogno del Bootloader sul ATmega che non hai nel caso ICSP.
Ciao Uwe

tredipunta:
Ho notato (almeno su un Attiny85) che se si cerca di programmare il chip quando questo è collegato al resto del circuito del prototipo, la programmazione non va a buon fine, pertanto il chip dev'essere "staccato" dalla basetta del progetto e programmato collegandolo con i soli fili necessari (evidentemente il circuito sul quale è montato il chip interferisce con la programmazione)

Questo è vero solo nel caso in cui sulle linee MOSI/MISO/SCK siano presenti dei segnali di disturbo (normalmente segnali di livello basso). O prevedi uno zoccolo per poter sfilare il chip oppure prevedi sulle 3 linee dei jumper per isolare i pin dal resto del circuito.

uwefed:
Con Arduino emtrambe le opzioni sono possibili. Dipende dal circuito che hai costruito se ha la possibilitá di lasciare libero i Pin 0 e 1 oppure 10, 11, 12 e 13 (o almeno attacati del circuito che non disturba il caricamento del sketch) NEl caso di caricamento seriale hai bisogno del Bootloader sul ATmega che non hai nel caso ICSP.
Ciao Uwe

E a che servirebbe il pin 10? Comunque sia questa è la numerazione dei pin di Arduino, qui si parla di uno stand-alone, quindi i seriali sono i pin 2 e 3 del micro e gli ISP sono i pin 17-18-19, mentre il 16 non serve a nulla, quello è usato da Arduino (il pin 10 appunto) per programmare il chip target.

@ tredipunta: come ti è stato già detto la cosa fondamentale è che i pin interessati siano liberi. La scelta che puoi fare è:
1 - Caricare nel micro il bootloader e lo sketch e poi fare l'aggiornamento tramite i pin 1-2-3 (Reset-RX-TX) mediante un convertitore USB-Seriale (o lo stesso Arduino, come spiegato nella mia Guida) e ovviamente il GND in comune (ma anche l'alimentazione positiva, se lavori a 5V)
2 - Usare la tecnica ISP isolando i pin 17-18-19 del micro daò resto del circuito mediante dei jumper o un dip-switch. Non è detto che tu debba isolarli tutti, in genere la programmazione ISP è infastidita da riferimenti a massa (pull-down p.es.) mentre se con un pin piloti correttamente un transistor non dovresti avere problemi. La cosa migliore è collegare elettricamente il connettore ISP ai pin interessati, poi aggiungere 3 jumper o un dip-switch a 3 vie che, quando sono posti su ON, collegano questi tre pin al resto del circuito, per il normale funzionamento; se invece devi fare un aggiornamento li metti in OFF ed il gioco è fatto. E' una tecnica che ho usato sulla mia "Barriera ad infrarossi", pubblicata su Elettronica In; nella foto vedi sulla sinistra il connettore ISP ed al centro due soli jumper (il micro è un tiny85) proprio perché il terzo pin non creava problemi alla programmazione.

Grazie delle tempestivissime risposte.

Sia nel caso dell'Attiny85 che nel Atmega328, le linee MOSI/MISO/SCK, erano e sono già utilizzate (penso che in futuro sarà sempre così).
Direi che è più pratico quindi utilizzare i pin 0 e 1, bootloader e programmazione seriale.
Ho letto un po' sui convertitori USB-Serial, so che occorre installare un driver in modo che il PC veda la chiave USB come porta COM e poter procedere alla programmazione. Ho anche letto però che vi sono convertitori che hanno l'auto reset ed altri no, non mi è chiarissima la questione ma ho compreso che alla fine (o all'inizio) della programmazione, qualora il convertitore non resetti in chip occorre farlo manualmente.

Vi chiedo quindi un ultimo parere sul convertitore (http://www.ebay.it/itm/USB-2-0-to-UART-TTL-6PIN-Connector-Module-Serial-Converter-CP2102-New-/190685792376?pt=LH_DefaultDomain_0&hash=item2c65c24878) oppure su quale altro apparato è meglio usare.

Grazie ancora,
buona giornata.

Tredipunta.

Nella mia Guida c'è un capitoletto dedicato all'argomento, se lo leggi con attenzione ti dovrebbe tornare tutto chiaro. Volendo puoi evitare di comprare un Convertitore ed usare Arduino: la tecnica "ufficiale" richiede che tu rimuova il micro di Arduino a tale scopo. Di fatto però ho sperimentato un metodo semplice per evitare questa fastidiosa manovra (lo trovi alla voce "una strana scoperta").
Il convertitore che hai postato va bene, ha tutti i segnali che servono; in alcuni casi bisogna aggiungere solo un C da 100nF tra il pin RST del convertitore e il pin 1 del micro, ma questo lo puoi stabilire solo quando ti arriva il convertitore. Magari per sicurezza prevedilo sul tuo circuito e se poi non serve ponticelli i pin.

Non ho parole, questione risolta.
Un ringraziamento a tutti.

Tredipunta.