Arduino · 2 luglio 2013 0

Una soluzione per il problema del led integrato sempre acceso sulle UNO R3

Un paio di giorni fa ho ricevuto una Arduino UNO R3. Il nuovo layout R3 utilizza la metà libera dell’amplificatore operazionale utilizzato sui precedenti layout per selezionare l’alimentazione (se esterna o da USB) in modalità inseguitore di tensione per pilotare il led “L” integrato sulla scheda. Questa soluzione sostituisce la precedente basata sull’uso di una linea parallela a quella del pin D13, in modo da eliminare il consumo di corrente del LED. Essa però introduce un comportamento anomalo e casuale del LED stesso, ossia che su alcune schede tale LED si accende da solo, senza che l’utente cambi le impostazioni del pin.

Come ha ben spiegato l’utente uwefed del forum di Arduino, tale difetto è dato dalla possibilità che l’op-amp riesca a leggere anche la minima corrente parassita che scorre su un pin ad alta impedenza del microcontrollore Atmega328P, interpretandola come un segnale “high” ed accendendo di conseguenza il LED. Il LED può accendersi/spengersi in base alle condizioni ambientali oppure sfiorando con un dito il retro della scheda in corrispondenza del pin D13 e non a tutti lo fa: dipende dalle tolleranze dei singoli componenti elettronici.

In attesa di una soluzione hardware nel prossimo layout della scheda ho pensato ad una soluzione software per chi ha questo problema (che non pregiudica il funzionamento della scheda) e vuole il LED spento all’avvio. Ho modificato quindi il bootloader Optiboot in modo che prima dell’avvio dello sketch dell’utente esso metta il pin D13 in OUTPUT con un segnale LOW in modo che l’amplificatore operazionale veda uno stato ben definito sul pin e spenga il LED. Ricordatevi quindi che quel pin non è più in condizione di alta impedenza all’avvio, situazione di default di tutti i pin dopo un reset del microcontrollore.

Nell’archivio allegato trovate il bootloader Optiboot 4.4.1, derivato dal bootloader dell’IDE 1.0.5, in formato .hex pronto all’uso nonché il sorgente se volete ricompilarvelo da soli.

Istruzioni per l’installazione del nuovo bootloader:

  1. aprite la cartella che contiene l’eseguibile di Arduino;
  2. entrate in /hardware/arduino/bootloaders/optiboot;
  3. rinominate il file optiboot_atmega328.hex in optiboot_atmega328.orig in modo da avere una copia del file originale (se saltate questo passaggio, potete sempre riscaricare l’IDE e recuperare il file originale da lì);
  4. decomprimente l’archivio allegato e copiate il file .hex allegato nella suddetta cartella. Questo è il nuovo bootloader;
  5. adesso aprite l’IDE e procuratevi o un altro Arduino oppure un programmatore esterno (esempio: USBtinyISP) per poter scrivere il bootloader sul chip dell’Arduino UNO R3;
  6. caricate il bootloader e poi montate il chip così preparato sulla vostra UNO R3.

Dando alimentazione, il led integrato dovrebbe dare adesso 4 flash:

  • i 3 iniziali sono quelli classici dell’Optiboot, che segnalano l’avvio del bootloader;
  • il 4° flash che vedete non è un flash vero e proprio ma è il passaggio veloce dalla condizione di acceso causata dall’op-amp integrato a quella di spento data dal pin messo su output/low dal nuovo bootloader.

PS:
nel caso vogliate compilare il bootloader apportando altre modifiche, tenete presente che dovete rispettare il limite dei 512 byte di dimensione massima: con la modifica da me proposta siamo a 506, quindi avete ancora qualche byte di spazio.

Optiboot
Optiboot
optiboot-4.4.1.zip
Version: 4.4.1
7.5 KiB
2048 Downloads
Dettagli...