Sto facendo varie prove con arduino e ho notato che quanto tolgo e rimetto il cavo USB nel pc (quindi riavvio arduino) le uscite del mio programma (che ora sto monitorando con dei led e resistenze da 220) nella fase di boot della scheda (primi 2-3 secondi) lampeggiano molto rapidamente per 2-3 volte.
Penso che questo non sia dovuto ad un problema software in quanto scrivo l'output in un solo punto e anche usando digitalWrite( 12, false); o, nel setup pinMode(12, INPUT); ottendo sempre lo stesso risultato.
Una volta che il tutto è partito sembra funzionare bene, il problema è solo durante il boot...
PS: mi sono scordato di dire che questo non accade quando carico una versione nuova del software (e lascio collegata la porta USB) ma solo quando sconnetto e riconnetto il cavo.
Uso una scheda molto costosa (costava anche 11cent in meno quando l'ho comprata): può essere questo che causa il problema?
Nell'applicazione l'alimentazione sarà fornita tramite 5v direttamente, può cambiare qualcosa?
In ogni caso è possibile che qualche input venga premuto all'avvio (ovvero corto verso 0V) => friggo tutto?
E' inoltre certo che i 4 output menzionati verranno collegati a mosfet di potenza, come posso evitare che si verifichino problemi all'accensione?
All'avvio i pin della MCU sono sempre in alta impedenza ...
... questo significa che se non hai previsto tu una resistenza di pull-up o di pull-down (a seconda delle esigenze) che li tiene stabili verso un valore, possono oscillare in modo completamente causale sino a quando il setup() non li imposta in OUTPUT e gli assegna un valore (HIGH o LOW).
Per quanto riguarda il pin 13 leggevo che essendo collegato ad un led onboard viene settato come output e durante il bootloader ha delle sequenze predefinite. Per tale motivo sconsigliano l'utilizzo. Per il mio caso è importante (penso) applicarci una resistenza da almeno 250ohm per evitare che con tasto premuto in caso di boot si frigga la scheda.
Per quanto riguarda gli altri pin il problema non viene risolto applicando una resistenza da 10k in parallelo al led.
Inoltre l'ipotesi dei pin flottanti non spiegherebbe i sincronismo tra i pin, che resta inalterato mettendo la resistenza.
Esiste un modo per disabilitare tutte le lucette integrate? Se volevo un albero di natale mica compravo un arduino
Posta il codice (... mi raccomando, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) e vediamo cosa fai ... :
Già con questo codice ottengo l'effetto del primo video (testato).
void setup() {
}
void loop() {
}
In ogni caso il problema non si verifica più dopo che arduino si è avviato quindi escluderei un problema software. Il problema avviene solo durante il caricamente dopo aver dato corrente.
Scusa, ma la scheda è quella che hai linkato nel tuo primo post ?
... un clone cinese da 1.74 US$ basato su ATmega168 ? ? ? :o
E vuoi pure che ti aiutiamo ? ? ?
E' un pessimo clone, monta un chip di recupero (a quel prezzo di sicuro non è garantito Atmel, il solo ATmega168 costa da più) e non si sa che bootloader ci sia sopra (... e potrebbe essere lui che fa quelle cose) ...
... che vuoi che ti diciamo ... :
Ah, in merito a:
brazoayeye:
... Se volevo un albero di natale mica compravo un arduino
... difatti NON hai comprato un Arduino/Genuino, hai comprato un prodotto cinese di dubbia qualità :
Mah, sinceramente è il primo che prendo e avevo puntato su un componente economico sapendo che sarebbe stata possibile una rottura o un guasto nel medio termine. Da ciò a dire che proprio ha delle lacune di questo tipo mi sembra che ne passi...
Da profano pensavo che il chip fosse lo stesso della AMTEL, quindi mi aspettavo un atteggiamento simile.
Ergo: il problema da cosa può essere causato e come compro qualcosa che non abbia lo stesso problema?
PS: visto che devo comandare delle bobine da 2 A collegate dopo un mosfet n-ch posso pensare che l'induttanza della bobina sia sufficiente per ovviare al problema? O è meglio se faccio un RC da 0.2s nel gate (ma in tal caso rischio di surriscaldare il mosfet)?
brazoayeye:
Ergo: il problema da cosa può essere causato e come compro qualcosa che non abbia lo stesso problema?
Primo NON comprare schede complete il cui prezzo è inferiore al valore del singolo componente ... perché ti rendi conto da solo che è impossible senza qualche cosa dietro ...
Secondo informati sulle caratteristiche ... ho visto bootloader che facevano lampeggiare in continuazione il LED 13 in attesa del caricamento ... e questo può creare problemi indesiderati. Altri bootloader comunque fanno lampeggiare il LED e magari alterano altri pin ...
Terzo ... compra da venditori affidabili, prodotti affidabili ... Arduino Nano, da Robot Italy ... costa 24,40 € ... non ti fa pensare ?
Concordo che 24€ sono un po' tanti per quella schedina, ma era per farti capire da che estremo a che estremo si va ...
... comunque, se la cerchi di una certa qualità, più o meno quello è il prezzo.
Il bootloader e quel programma, caricato in una zona protetta della memoria della MCU, che parte all'avvio e che ti permette di caricare i tuoi programmi via USB. Ovviamente lo si può sostituire ... disponendo di un programmatore ISP o di un altro Arduino da utilizzare come programmatore ISP.
Anzi, se uno ha un programmatore ISP ... può proprio evitare di mettere il bootloader (si caricano i programmi via ISP) e recupera anche la memoria che esso occupa
Ti consiglio di prendere QUESTO libro ... da tutte le indicazioni necessarie per capire queste cose ...
Sulle Nano si può mettere senza alcun problema il bootloader della Uno, ottenendo upload più rapidi e il risparmio di 1.5 kb di flash. Ovviamente da quel momento dal menù delle scheda va trattata come una Uno.
Oltre a questo, sottolineo che tra un clone cinese al risparmio totale (che per certe cose può pure andare bene, se si è consci di cosa si ha sotto le mani), e una Nano originale, ci sono parecchie vie di mezzo affidabili e un po' meno costose: ad esempio, io ho un paio di cloni della Sainsmart, e mi sembrano ben fatti, oltre che ad un prezzo ragionevole.
Ma a quanto dite il bootloader si può flashare senza problemi (il metodo più semplice mi sembra quelli di usare un arduino come tramite, visto che ne ho due).
Se ci flasho sopra il bootloader della micro (ma cosa cambia con la nano?) dite che la situazione potrebbe migliorare o rischio di bloccare tutto?
Il bootloader si può riprogrammare con un programmatore ICSP, che può essere un secondo Arduino. La Micro è una scheda totalmente diversa, con un microcontrollore abbastanza diverso e un bootloader TOTALMENTE diverso. Se ti ho detto di metterci quello della Uno un motivo ci sarà...
Comunque se il problema è hardware (MCU di "seconda scelta" che non presenta un'impedenza corretta quando i pin sono Hi-Z, ad esempio), niente risolverà il problema.
Se eseguo gli step di [url=http://www.instructables.com/id/How-To-Burn-a-Bootloader-to-Clone-Arduino-Nano-30/?ALLSTEPS]questa[/url] guida (cambiano i pin 11-12-13 con 51-50-52) ottengo il seguente errore quando provo a flashare il bootloader:
[quote]Arduino:1.6.7 (Windows 10), Scheda:"Arduino Nano, ATmega168"
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega168 -cstk500v1 -PCOM6 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0x00:m -Uhfuse:w:0xdd:m -Ulfuse:w:0xff:m
avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"
Using Port : COM6
Using Programmer : stk500v1
Overriding Baud Rate : 19200
AVR Part : ATmega168
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 512 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 16384 128 128 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Errore durante la scrittura del bootloader
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e940b
avrdude: Expected signature for ATmega168 is 1E 94 06
Double check chip, or use -F to override this check.
avrdude done. Thank you.
Cosa mi conviene fare? Dite che bricco tutto se ci carico il bootloader con -F (e tra l'altro come lo faccio?)?
EDIT: Penso che il tutto sia dovuto al fatto che monta un chip ATmega168PA e non un Tmega168... Sapete se con avrdude si possono fashare anche i bootloader per questi chip? Vedo che gli ATmega168P sono supportati ma del PA non si sa niente...
Brunello:
e comunque la scheda monta un Atmega168, quindi ti ci vuole un bootloader per quel chip
Indi rimane la possibilita' della nano con Atmega168
Ovvio, ma credo che Optiboot si possa compilare anche per il 168, alla fine è come il 328, solo con meno risorse, ma per il bootloader sono sufficienti.
SukkoPera:
Ovvio, ma credo che Optiboot si possa compilare anche per il 168,
L'optiboot è disponibile, nella cartella bootloader, già compilato per il 168, "optiboot_atmega168.hex", va bene sia per la versione 168A che 168PA, la P indica semplicemente che è un dispositivo con tecnologia picoPower, riguarda solo il consumi di energia e relativi registri che la gestiscono, se non si usa la gestione energia, p.e. per il deep sleep, il 168A e il 168PA sono perfettamente identici.