Pages: 1 ... 36 37 [38] 39 40 41   Go Down
Author Topic: Giocando con l'Attiny85  (Read 46766 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23142
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23142
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?  smiley-razz
Logged


Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Quote
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.
« Last Edit: May 17, 2012, 07:56:42 pm by dab77 » Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12679
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
smiley-eek-blue smiley-eek-blue 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ì?
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12679
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dab, non mi attribuire nefandezze smiley-eek-blue
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.
Logged


Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dab, non mi attribuire nefandezze smiley-eek-blue
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.
ok. in effetti tu dicevi ciò:
Quote from: Michele Menniti
Quote
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;
mentre Leo suggeriva:
Quote
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 from: 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.
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.

« Last Edit: May 18, 2012, 03:47:30 am by dab77 » Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Invece mi sono riletto ciò che suggeriva Leo qui:
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.
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

mmm, mi sa che non è la soluzione, sul datasheet ho trovato questo:
Quote
Optionally the internal 2.56V voltage reference may be decoupled
by an external capacitor at the AREF pin to improve noise immunity.
il che vuol dire (come immaginavo) che serve solo a dare una pulita alla tensione di riferimento.
Cmq, ci metto un secondo e lo provo.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23142
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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é.
Logged


Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

mannaggia..
« Last Edit: May 18, 2012, 04:24:47 am by dab77 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23142
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

un oscillo ce l'ho, il DSO quad.. dovrebbe bastare.
come suggerisci di misurare? il pin 5 lo posso triggerare sulla sua trasmissione mentre invia dati, ma penso che in quel caso sia HIGH e basta..
oppure faccio uno sketch ad hoc per vedere l'influenza dell'analogReference? magari posso dichiarare l'analogReference nel loop, dandogli un abbondante delay per assestarsi?
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12679
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

oggi parlo da solo, tanto per cambiare....
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ù funzionare 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.
Logged


Pages: 1 ... 36 37 [38] 39 40 41   Go Up
Jump to: