Ciao a tutti,
sto usando uno shield sparkfun avr isp che sicuramente tutti conoscete.
Ho a disposizione 7 ATMEGA328P, tutti forniti già con il bootloader UNO.
Ho (ovviamente) caricato lo sketch "Arduino ISP" sulla board UNO che sta sotto allo shield e ho impostato "Strumenti>Programmatore>Arduino as ISP"; fino a poche ore fa ero in grado SIA di caricare uno sketch su tutti i microcontrollori in mio possesso, usando "File>Carica con un programmatore", SIA di scrivere il bootloader "Strumenti>Scrivi il bootloader". Tutto come mi aspettavo.
Scrivevo un "Blink" di prova e testavo l'avvenuta scrittura su una breadboard base a 16MHz (2 condensatori + 1 quarzo) con uno zoccolo ZIF e un led al D13. Tutto funzionava regolarmente.
Poi ho voluto provare a caricare uno sketch che mi permettesse di leggere dei dati sulla seriale, a caso, per prova, ho scelto "File>Esempi>Basics>DigitalReadSerial" (tutti sapete che fa un digitalread del pin 2 e riporta il valore sulla seriale ogni ms).
A questo punto, dopo il caricamento, il led rosso "ERROR" sullo shield si è acceso. E perchè?. Resetto. Ritorna "Error". Senza stare troppo a pensarci provo il microcontrollore sulla breadboard e vedo che lo sketch è stato caricato: la seriale funzionava correttamente e ricevevo le letture del pin 2.
Quindi il programmatore ha funzionato.
Riprovo a rimettere il microcontrollore sullo ZIF della shield ma appena chiudo lo zoccolo, "ERROR". Dopo aver caricato quello sketch sul quell'ATMEGA, qualsiasi tentativo di caricarncene uno nuovo, fallisce con un out of sync 0x00.
Provo con altri ATMEGA e finchè carico sketch che NON utilizzino la seriale, tutto va bene, posso riprogrammarli quanto voglio.
Quando invece carico su un ATMEGA uno sketch che utilizza la seriale, con quel chip lo shield va in ERROR e non c'è più il verso di smuoverlo: non è più possibile caricarvi alcuno sketch.
Risulta evidente che allo sketch "Arduino ISP" non piace che l'ATMEGA sullo ZIF invii dati seriali, infatti se isolo il piedino TX con un pezzo di termorestringente lo shield non si accorge di nulla e l'errore sparisce (ma resta comunque impossibile caricare uno sketch: anche se la procedura apparentemente va a buon fine in realtà non viene caricato niente, è solo che avrdude non puo' verificare il caricamento visto che non riceve i dati e da per scontato che tutto sia ok, come descritto nella guida del Prof. Menniti).
Ci sono diverse condizioni nello sketch "Arduino ISP" per le quali si accende il led rosso "ERROR", ma la mia conoscenza di programmazione non è così avanzata da permettermi di capire da solo come posso risolvere.
Ma il bello è che ho provato anche a rimuovere il microcontrollore "originale" di Arduino UNO e metterci al suo posto quelli "improgrammabili". E la cosa assurda è che rimangono improgrammabili. Out of sync 0x00. Se ci metto, per prova, quelli che non sono stati programmati con "DigitalReadSerial", la programmazione avviene correttamente. L'hardware funziona e il software pure. Assurdo!
Avete consigli?