Giocando con l'Attiny85

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.

Leo, ho una domanda per te che sicuramente sei quello che ha smanettato di più con l'ATtiny..
Se io uso l'oscillatore esterno, quei 2 pin me li gioco? a me serve leggere due pin analogici, e dei tre presenti, due sono quelli Xtal.
non si possono più usare? confermi?

Grazie.
Per il discorso del riferimento interno, alla fine sto usando quello a 1.1V, quindi per ora non ho potuto provarei 2.56V.

Davide.

Eh sì. E' come sugli Atmega. Impostando un clock esterno, perdi quei 2 pin. Ma perché, 8 MHz non ti bastano?

avoja! solo che ho paura che tra l'imprecisione degli 8 MHz di 4 attiny85 e quella degli 8MHz di un 328P tutti in RS485 potrei perdermi qualcosa..

paura infondata?

Paura infondata. Quando dialoghi con la seriale, hai un margine di tolleranza rispetto al valore nominale della velocità specificata.

Ti chiedo: ti sei mai preoccupato per la presenza di un identico risonatore ceramico sull'Arduino UNO? Eppure col PC avrai anche dialogato a 57600 bps, no? E non hai perso un bit, o mi sbaglio? :stuck_out_tongue:

eccomi finalmente con un pò di prove fatte....e domande varie..
allora, dialogando tramite i SN75176 (RS485) a 9600baud qualche pacchetto lo perde, ma stra-trascurabili.
Ho una prima domanda riguardo l'utilizzo della NewSoftSerial (nel caso specifico con le modifiche per l'ATtiny..):
Ma lavora solo alle velocità standard?
lo chiedo perchè su quel bel sito con le varie velocità supportate dagli ATmel, mi dice che con l'oscillatore a 8MHz, avrei tutta una serie di velocità esatte, tipo 10000baud per capirci, ma se provo ad aprire una mySerial.begin(10000); le due non si vedono per niente.

l'Altra domanda invece è ancora più difficile:
Ho il sistema che dialoga, con tanto di protocollo, checksum ecc.. a 9600baud, usando per le letture analogiche il reference default di 5V..
se provo ad impostare analogReference(x) provando x= INTERNAL,INTERNAL1V1 o INTERAL2V56, la trasmissione seriale non va più...
L'unica cosa che mi è venuta in mente dopo tantissime prove, è il pin Aref, che sull'ATtiny85 è il 5, o D0, che io uso come pin Tx della NewSoftSerial.
Sarà qui il problema? Come si fa a disabilitare il pin Aref dell'ATtiny? qualcosa del genere?

Sul reference di analogReference() trovo questo:

Warning

If you're using an external reference voltage (applied to the AREF pin), you must set the analog reference to EXTERNAL before calling analogRead(). Otherwise, you will short together the active reference voltage (internally generated) and the AREF pin, possibly damaging the microcontroller on your Arduino board.

Alternatively, you can connect the external reference voltage to the AREF pin through a 5K resistor, allowing you to switch between external and internal reference voltages. Note that the resistor will alter the voltage that gets used as the reference because there is an internal 32K resistor on the AREF pin. The two act as a voltage divider, so, for example, 2.5V applied through the resistor will yield 2.5 * 32 / (32 + 5) = ~2.2V at the AREF pin.

c'entra qualcosa?

Grazie, Davide.

Ti rispondo per l'ultima parte. Il pin ARef funziona così:
Di default sul pin hai la tensione di alimentazione, che l'ADC usa come riferimento
Se lo setti come "internal" su quel pin ti vieni a trovare 1,1V, cioè il riferimento interno, molto preciso, per l'ADC
Se lo setti come "external" quel pin diventa un ingresso e gli devi applicare la tensione di riferimento per l'ADC.

Se setti il riferimento dell'ADC per tensioni inferiori a quella di alimentazione (1,1 - 3,3V, p.es.) poi ai pin analogici DEVI applicare segnali che NON superino tale soglia, altrimenti fai fuori l'ADC del micro.

[quote author=Michele Menniti link=topic=56772.msg797813#msg797813 date=1337326485]
Ti rispondo per l'ultima parte. Il pin ARef funziona così:
Di default sul pin hai la tensione di alimentazione, che l'ADC usa come riferimento
Se lo setti come "internal" su quel pin ti vieni a trovare 1,1V, cioè il riferimento interno, molto preciso, per l'ADC
Se lo setti come "external" quel pin diventa un ingresso e gli devi applicare la tensione di riferimento per l'ADC.

Se setti il riferimento dell'ADC per tensioni inferiori a quella di alimentazione (1,1 - 3,3V, p.es.) poi ai pin analogici DEVI applicare segnali che NON superino tale soglia, altrimenti fai fuori l'ADC del micro.
[/quote] :fearful: :fearful: Scusami Michele, ma quando tempo fa chiesi questa cosa tu mi hai risposto non preoccuparti che al massimo ti riporta sempre 1024 ?!?! ...e ch l'importante (ovviamente) era non superare i 5V.
Cmq, per evitare problemi, e ovviamente per logica, se setto a 1,1V cercho di non superarli...

Quindi ho il dubbio: sull'Attiny, da come dici tu, mi viene da pensare che non posso fare letture analogiche mentre invio dati su questo pin (ricordo che lo sto usando come TX della Seriale..), è così?

Dab, non mi attribuire nefandezze :fearful:
Se lavori con l'ADC a 5V e gliene arrivano 5,1-5,2 non succede nulla e leggi 1023 esattamente come per i 5V; ma se gli appioppi 6-7 volt il 1023 lo leggerai per mezzo secondo, poi l'ADC si rompe.
Il discorso, in modo proporzionale vale per tensioni più ridotte: se imposti il riferimento a 1,1 o 3,3V NON puoi mandare segnali a 5V.

Questo pin NON ti serve per le letture analogiche ma solo per il riferimento esterno, se lo setti come tale; in tal caso penso che non possa più funzinare come pin digitale D0, mi pare ovvio. Se non tocchi proprio l'analogReference (quindi lo lasci nella condizione di default) il pin funziona da digitale e non ti dovrebbe creare problemi.

[quote author=Michele Menniti link=topic=56772.msg797842#msg797842 date=1337329718]
Dab, non mi attribuire nefandezze :fearful:
Se lavori con l'ADC a 5V e gliene arrivano 5,1-5,2 non succede nulla e leggi 1023 esattamente come per i 5V; ma se gli appioppi 6-7 volt il 1023 lo leggerai per mezzo secondo, poi l'ADC si rompe.
Il discorso, in modo proporzionale vale per tensioni più ridotte: se imposti il riferimento a 1,1 o 3,3V NON puoi mandare segnali a 5V.
[/quote]ok. in effetti tu dicevi ciò: [quote author=Michele Menniti]

Quote from: dab77 on April 06, 2012, 07:40:30 PM
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;[/quote]
mentre Leo suggeriva:

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

[quote author=Michele Menniti]
Questo pin NON ti serve per le letture analogiche ma solo per il riferimento esterno, se lo setti come tale; in tal caso penso che non possa più funzinare come pin digitale D0, mi pare ovvio. Se non tocchi proprio l'analogReference (quindi lo lasci nella condizione di default) il pin funziona da digitale e non ti dovrebbe creare problemi.
[/quote]e se metto analogReference(INTERNAL); a questo pin che gli succede?
mi sa proprio che rifaccio le schede con i 328P... sarebbe perfetto l'84, ma per ora non li ho.