Giocando con l'Attiny85

Ciao Leo buon giorno,
e grazie ancora per l'aiuto che mi hai fornito in passato. Si appunto, ho avuto modo di riprovare per conferma in un secondo tempo ed e' chiaro che la IDE 1.0 non va bene per programmare ISP via Arduino, mentre la 0022 funziona senza problemi, ho fatto diverse prove anche con il mega328 ed ha funzionato sempre, confermo.
Ho invece il problema di utilizzare avrdude con il mac, non mi ricordo piu' come avevo fatto per passare l'istruzione da finestra di terminale al tiny85 per settarlo ad 8mhz. la programmazione tramite IDE mi funziona, carico i vari sketch senza problemi, ma il tiny85 mi e' rimasto a 1mhz.

P.S. possibile che la velocita' sia veramente ridotta di 1/8? mi spiego meglio, come mai l'istruzione ** dalay (1000) ** ci impiega 8 secondi ad essere eseguita? che stranezza e'? forse e' perche' ho utlizzato per la programmazione la board AT tiny 85 @ 8 mhx BOD disabled ? dovrei utilizzare la voce @ 1 mhz ??

  • mentre scrivo naturalmente mi rispondo da me : fai una prova e vedi da solo la soluzione, pirla!
    ok ma lo posto ugualmente questo mess, in quanto potrebbe essere utile a qualcuno che fa la stessa cosa che ho tentato di fare io!
    vi postero' cosa ho scoperto cambiando la voce di board!
    saluti a tutti e buon divertimento

Nella mia guida ci sono i parametri da passare ad avrdude per impostare i fuse dell'Attiny85 per mandarlo a 8 MHz.
Se compili uno sketch per un micro ad 8 MHz e lo esegui su un micro a 1 MHz, è normale che poi i tempi non siano corretti: i timing del codice vengono impostati per una frequenza che non corrisponde a quella reale.

Si confermo dopo la prova sperimentale, programmando con la board alla giusta velocita', le istruzioni vengono eseguite nei tempi regolari, cioe' per esempio dalay (1000) dura veramente 1 secondo.
bene, altra cosa che ho imparato!
definito questo, non ho neppurel'esigenza di passare ad 8 mhz, tanto le cose che deve fare per i miei progetti sono molto piu' lente!, nell'ordine di millisecondi, quindi ci sto' dentro anche a 1 mhz.
grazie

Ho provato a programmare Attiny85 con IDE 1.01.-rc1 aggiornato con l'ultimo compilatore Atmel come da post
http://arduino.cc/forum/index.php/topic,96976.0.html
funzionante correttamente nelle prove "normali"
usando il nuovo sketch ArduinoIsp mi ritorna l'errore:
In file included from c:..../arduino/arduino-1.0.1-rc1/hardware/tools/avr/lib/gcc/../../avr/include/util/delay.h:46,
from c:....../arduino/arduino-1.0.1-rc1/hardware/tools/avr/lib/gcc/../../avr/include/avr/delay.h:39,
from C:........\arduino-1.0.1-rc1\hardware\tiny\cores\tiny/wiring_private.h:32,
from C:........\arduino-1.0.1-rc1\hardware\tiny\cores\tiny\WInterrupts.c:37:
c:............/arduino-1.0.1-rc1/hardware/tools/avr/lib/gcc/../../avr/include/math.h:426: error: expected identifier or '(' before 'double'
c:............/arduino-1.0.1-rc1/hardware/tools/avr/lib/gcc/../../avr/include/math.h:426: error: expected ')' before '>=' token

i punti nel path è per semplificare

Per curiosità, ho ripristinato il compilatore originale e la programmazione con ArduinoIsp funziona correttamente, quindi è solo un problema della patch del compilatore.
Importante è il fatto che hanno corretto ArduinoIsp, quindi non c'è bisogno con questa versione di usare TinyIsp.

TinyISP era appunto una versione sistemata per funzionare con la 1.0.
La 1.0.1 riporta nel changelog il fix allo sketch ArduinoISP, quindi non è più necessario usare TinyISP.

leo72:
TinyISP era appunto una versione sistemata per funzionare con la 1.0.
La 1.0.1 riporta nel changelog il fix allo sketch ArduinoISP, quindi non è più necessario usare TinyISP.

Ma TinyISP con 1.0 serviva solo per i Tiny o si poteva usare anche per gli altri micro? Poco fa un utente (a cui ho consigliato di scaricarsi la ArduinoISP101LM ;)) mi ha scritto "Programmo con facilità che definirei "scandalosa" e a diverse frequenze di clock: ATtiny85, ATtiny84, ATMega328, ATMega1284".

Lo stesso utente mi ha dato una notizia che ignoravo: da quanto mi risulta noi no siamo riusciti a variare i fuses dei tiny da IDE, forse a motivo dei bootloader finti del core; lui sostiene che con la 1.0, inviando il bootloader (stessa tecnica ISP del 328P) programma tranquillamente i fuses dei tiny; conferme? qualcuno può aggiungere approfondimenti per favore?

Veramente credo che quello sketch si chiamasse TinyISP per dire che era "ridotto" rispetto all'ArduinoISP, non che fosse destinato a programmare gli Attiny. Difatti Testato lo aveva avuto da un utente del forum internazionale ed era una rielaborazione dell'ArduinoISP per aggirare il problema che la versione allegata alla 1.0 non funzionava.

Poco fa un utente (a cui ho consigliato di scaricarsi la ArduinoISP101LM ;)) mi ha scritto "Programmo con facilità che definirei "scandalosa" e a diverse frequenze di clock: ATtiny85, ATtiny84, ATMega328, ATMega1284".

Ma riferito a quale sketch? TinyISP o ArduinoISP101LM?

Lo stesso utente mi ha dato una notizia che ignoravo: da quanto mi risulta noi no siamo riusciti a variare i fuses dei tiny da IDE, forse a motivo dei bootloader finti del core; lui sostiene che con la 1.0, inviando il bootloader (stessa tecnica ISP del 328P) programma tranquillamente i fuses dei tiny; conferme? qualcuno può aggiungere approfondimenti per favore?

Non confermo e non smentisco (sono ancora mezzo arrocchettato di salute per poter mettermi a spippolare coi micro, oggi) però la cosa ha una sua logica, se pensi che con la 1.0 è cambiato il modo in cui l'IDE interagisce con avrdude.

Riferito a TinyISP

Sarebbe una gran cosa quando confermerai..... forse ciò che mi convincerebbe a cercare di far funzionare l'1.0.1-rc1 :sweat_smile:

Credo che la facilità con cui il tipo programma i vari micro non dipenda dallo sketch usato (d'altronde, quello è un firmware che risiede sull'Arduino) ma proprio dalla versione dell'IDE. Dalla 1.0 hanno cambiato la gestione degli MCU rendendola più snella: l'IDE è più slegata dall'hardware rispetto alle versioni precedenti, che bene o male erano incentrate sull'Arduino e basta.

calcolando che con la ide 1 si caricano ufficialmente micro senza bootloader, sarebbe ottimo che gestisse i fuse.
Diventerebbe tutto piu' user friendly, poter caricare lo sketch su un micro vergine modificandogli anche i fuse in un solo colpo.

e' da testare :slight_smile:

Testato:
calcolando che con la ide 1 si caricano ufficialmente micro senza bootloader, sarebbe ottimo che gestisse i fuse.
Diventerebbe tutto piu' user friendly, poter caricare lo sketch su un micro vergine modificandogli anche i fuse in un solo colpo.

e' da testare :slight_smile:

No, aspetta, a me ha spiegato e mi pare di averlo specificato, che lui cambia i fuse caricando il bootloader, che io ricordo essere una specie di file finto, poi carica gli sketch, tutto via ISP esattamente come facciamo con il 328P.

Ciao! leggendo sul datasheet dell'ATtiny85, a pag.127, sta scritto chre si può usare il riferimento interno per gli ADC sia di 1.1V che di 2.56V! (pensavo solo l'1.1..)
ovviamente mi serve quello a 2.56...
si abilita sempre con:
analogReference(INTERNAL2V56); ?

altra domanda, una volta settato a 1.1V, o a 2.56V, se per sbaglio arrivano su un pin analogico 5V, cosa mi devo aspettare? brucio il convertitore? no, ma mi arriva un valore inaspettato?

grazie..
p.s. lo chiedo perchè non ho modo di provare...

capisco, diciamo che io sto' aggiungendo un carico :slight_smile:
cioe' che caricando il bootloader si programmino i fuse e' normale, almeno per i micro ufficiali, e quindi non mi mereaviglierei che funzionasse anche con attiny, mentre il test che conviene fare e' se con la ide 1 abbiano inserito al possibilita' di programmare i fuse durante il caricamento del solo sketch.
Prima non era possibile, pero' il tutto era giustificato dal fatto che ufficialmente il sl sketch non era gestibile, ora che e' diventato ufficiale potrebbe essere che funziona, o cmq si potrebbe pensare di chiederne l'implementazione.
E' da testare sia con 328P che attiny (ho preso un paio di 85 ed un 2313)

p.s. mi sono fornito dal tua amico leccese, e' stato veloce e professionale, l'avvocato l'ho chiamato ugualmente perche' mi ha mandato dei PCF8574P invece dei PCF8574AP
scherzo, anzi gliel'ho fatto presente ed ha detto che correggera' subito il sito :slight_smile: ringraziandomi

dab77:
altra domanda, una volta settato a 1.1V, o a 2.56V, se per sbaglio arrivano su un pin analogico 5V, cosa mi devo aspettare? brucio il convertitore? no, ma mi arriva un valore inaspettato?

alla prima domanda non so rispondere, ma immagino di sì; a questa ti dico che forse non bruci il micro visto che lo stai alimentando a 5V (ma mi piacerebbe la conferma di qualcuno che ha approfondito la cosa), se non lo bruci ottieni semplicemente 1023, nessun valore inaspettato; ovviamente meglio mettere un partitore in modo da sfruttare tutta la scala per il riferimento settato, altrimenti che vantaggio ne avresti?

@ Test: visto che lavori con la 1.0 ovvio che aspettiamo i tuoi risultati, se avrai tempo e modo di fare qualche prova; riguardo il mio amico (diciamo che io non ci compro più da un bel po', l'ho sponsorizzato perché è serio e vedo che continua ad esserlo :)), mi fa piacere che stai notevolmente migliorando il tuo self-control :D, ma dimmi: che diff c'è tra i due modelli?

Allora, intanto grazie, se qualcuno ne sa di più dica la sua.
hai ragione sul fatto che se supero la soglia il risultato rimane 1023. La mia prova è questa: come spiego in un altro post uso una cella di carico amplificata con INA128, e taro l'INA con un trimmer in modo da avere in uscita da 200mV a 1V circa (questo usando l'Aref INTERNO da 1.1V..), ma la taro su un carico che prevedo sia il mio massimo.
La domanda l'ho fatta perchè se nelle prove supero il mio carico massimo arrivo a mandargli anche 1.5V. ...ebbene ho provato (per ora l'unico riscontro che ho è un LED attaccato ad un pin digitale dell'ATtiny85 da far lampeggiare più o meno veloce) e una volta superata la soglia il LED continua a lampeggiare con la stessa frequenza.

Ora rimane la possibilità o meno di settare l'Aref Interno a 2,56V, perchè ho provato con INTERNAL2V56, ma sembra non funzionare..
idee?

x menny: cambia l'indirizzo i2c, quindi finche' devi progettare da zero un circuito non ci sono problemi, ma se lo avessi dovuto usare per una riparazione non avrebbe funzionato

sul datasheet ho trovato solo questo:
The voltage reference for the ADC may be selected by writing to the REFS[2:0] bits in ADMUX.
The VCC supply, the AREF pin or an internal 1.1V / 2.56V voltage reference may be selected as
the ADC voltage reference.
ma non ho idea di come si faccia..

dab77:
Ciao! leggendo sul datasheet dell'ATtiny85, a pag.127, sta scritto chre si può usare il riferimento interno per gli ADC sia di 1.1V che di 2.56V! (pensavo solo l'1.1..)
ovviamente mi serve quello a 2.56...
si abilita sempre con:
analogReference(INTERNAL2V56); ?

Sì, è già integrato nel core. Solo una precisazione.
Questa opzione prevede l'utilizzo di un C da 0.1uF sul pin AREF, che è il piedino fisico n°5. Ci sarebbe anche un'altra opzione, ossia l'uso del riferimento interno a 2,56V ma senza il condensatore esterno però, non so perché, tale opzione è commentata nel codice, quindi inutilizzabile.
Però attenzione ad una cosa. Il datasheet, a pagina 138, riporta sotto ad una tabellina che per usare il riferimento a 2,56V il micro deve essere alimentato a 3V.

altra domanda, una volta settato a 1.1V, o a 2.56V, se per sbaglio arrivano su un pin analogico 5V, cosa mi devo aspettare? brucio il convertitore? no, ma mi arriva un valore inaspettato?

grazie..
p.s. lo chiedo perchè non ho modo di provare...

Credo che se rimani all'interno del range di tolleranza del micro (quindi non gli "spari" ad esempio 12V! :P) otterrai solo un valore di 1023.

leo72:

dab77:
Ciao! leggendo sul datasheet dell'ATtiny85, a pag.127, sta scritto chre si può usare il riferimento interno per gli ADC sia di 1.1V che di 2.56V! (pensavo solo l'1.1..)
ovviamente mi serve quello a 2.56...
si abilita sempre con:
analogReference(INTERNAL2V56); ?

Sì, è già integrato nel core. Solo una precisazione.
Questa opzione prevede l'utilizzo di un C da 0.1uF sul pin AREF, che è il piedino fisico n°5. Ci sarebbe anche un'altra opzione, ossia l'uso del riferimento interno a 2,56V ma senza il condensatore esterno però, non so perché, tale opzione è commentata nel codice, quindi inutilizzabile.
Però attenzione ad una cosa. Il datasheet, a pagina 138, riporta sotto ad una tabellina che per usare il riferimento a 2,56V il micro deve essere alimentato a 3V.

Credo che intenda di almeno 3V. l'ho letto anche da qualche altra parte sul datasheet..ma non ricordo dove..
però invece non ho capito bene ciò che dici. Il condensatore, sul datasheet, lo consigliano per rendere più precisi i 2,56V, OK. Però tu parli di un'altra possibilità senza il condensatore, che però non si può fare.. che vuol dire? che con il condensatore non si usa il codice commentato?
cmq, ora ho un attimo di tempo e riprovo con (INTERNAL2V56), perchè ieri sembrava non funzionare..

Io mi attengo a quanto ho trovato nel codice del core Tiny ed a quanto ho letto sul datasheet,.

  1. nel core Tiny le righe per attivare il reference interno a 2,56V senza condensatore sono commentate, per cui non puoi, senza modifiche, farlo con un semplice analogReference(qualcosa):
// An alternative for INTERNAL2V56 is (6) ...
// 1 1 0 Internal 2.56V Voltage Reference without external bypass capacitor, disconnected from PB0 (AREF)(1).
  1. a pag. 138 del datasheet dell'Attinyx5 c'è uno schema in cui per ai riferimenti a 2,56V c'è una nota:

The device requries a supply voltage of 3V in order to generate 2.56V reference voltage.

Altro non so. Non ho sperimentato l'AREF interno. Potresti provare e darci un po' di risultati.