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.
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,.
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).
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.
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?
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.
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] 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
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
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.
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.
Vado a rileggermi il datasheet e provo anche col condensatore tra Aref e GND. Qualcuno sa spiegarmi a che serve?
Grazie Davide.
Premetto una cosa. La "bibbia" è sempre il datasheet. Me lo sono andato a rileggere.
In più ho spulciato nel core Tiny.
Dunque, riassumo:
analog reference su DEFAULT: non viene toccato nulla, viene usato Vcc come riferimento ed il pin AREF lo si può continuare ad usare come pin normale.
INTERNAL o INTERNAL1V1: per il core sono identici, ed impostano il reference interno a 1,1V.
EXTERNAL attiva il riferimento su AREF.
INTERNAL2V56: devi obbligatoriamente usare un condensatore di disaccoppiamento. Altro obbligo è quello di usare una tensione di alimentazione di 3V, così dice il datasheet.
Esisterebbe un'altra modalità, ossia la INTERNAL2V56 senza obbligo di condensatore su AREF, ma questa è disattivata di default nel core Tiny, non so perché.
Grazie per aver ricontrollato Leo. riguardo il problema che ho usando l'INTERNAL a 1,1V ti viene in mente niente?
EDIT:
Allora, ho messo per prova il condensatore ceramico da 0,1uf tra Aref(pin 5) e GND.
non gli cambia niente. nel senso che se imposto analogReference(INTERNAL) la seriale non viene letta. Praticamente, la schedina slave con le letture analogiche riceve bene la seriale, perchè il LED di controllo mi lampeggia bene. poi questa dovrebbe ritrasmettere la lettura di due porte analogiche. con analogReference(INTERNAL) il master non riceve il pacchetto corretto.
forse INTERNAL aggiunge dei ritardi?
Poi analogReference l'ho dichiarato nel setup, è giusto?
No. Bisognerebbe avere un oscilloscopio e vedere se, attivando il riferimento interno, cambia qualcosa a livello di... livelli sul pin Aref.
La tabella a pag. 138 del datasheet riporta le impostazioni del reference e del pin AREF. In alcune modalità tale pin viene disconnesso (=possibilità di usarlo come pin normale): curiosamente tale cosa non è precisato con il riferimento a 1V1 interno.