Go Down

Topic: Giocando con l'Attiny85 (Read 50251 times) previous topic - next topic

leo72

MIke, oggi parli da solo ma leggi anche da solo  ;)
Dab ha detto che il pin AREF gli viene isolato anche usando il reference interno a 1V1. Secondo il datasheet tale riferimento non dovrebbe alterare il funzionamento del piedino 5 perché l'AREF, sempre secondo il datasheet, viene agganciato all'ADC solo in determinate condizioni, quelle specificate dalla tabella di pag. 138. Però dab dice invece che anche con il reference interno perde la funzionalità del piedino come pin digitale

dab77

allora, prima prova, con questo sketch:
Code: [Select]
void setup() {
  pinMode(1, OUTPUT);
}

void loop() {
  analogReference(INTERNAL);
  digitalWrite(1, HIGH);              // accende un Led, giusto per vedere che il codice va..
  analogRead(A2);                       // ho aggiunto delle letture (reali) così da impegnare un minimo l'ADC..
  delay(1000);
  analogReference(DEFAULT);
  digitalWrite(1, LOW);
  analogRead(A3);
  delay(1000);
}


Ho messo il DSO in lettura sul piedino 5 (Aref) e, sorpresa delle sorprese... calma piatta. Non si muove di pezza da zero.
ora provo ad usare il pin D0 (sempre Aref, piedino 5)

@Menniti, tranquillo, leggo tutto quello che scrive chiunque qui, ognuno può dire la cosa giusta al momento giusto, anche un novellino, figuriamoci tu!

dab77

Ora con questo Codice:
Code: [Select]
#include <NewSoftSerial.h>
#include <icrmacros.h>

NewSoftSerial ser(2, 0);   // 0 è il pin Tx che combacia con Aref.

void setup() {
  pinMode(1, OUTPUT);
  ser.begin(9600);
}

void loop() {
  analogReference(INTERNAL);
  digitalWrite(1, HIGH);
  analogRead(A2);
  delay(500);
  spedisci();
  delay(500);
  analogReference(DEFAULT);
  digitalWrite(1, LOW);
  analogRead(A3);
  delay(500);
  spedisci();
  delay(500);
}

void spedisci() {
  ser.print("vedemosefunziona!");
}


ottengo questo:

che non cambia da un reference all'altro..

leo72

1a cosa:
la tua prima prova allora conferma il datasheet, ossia che il riferimento interno a 1V1 non aggancia l'ADC al pin AREF per cui possiamo escludere questo

2a cosa:
la tua seconda prova ci dice che la NewSoftSerial prende il controllo del pin. Ma non specificando il reference per l'ADC (ossia lasciando quindi quello di default, che è Vcc), quindi togliendo le righe di codice seguenti:
Code: [Select]
  analogReference(INTERNAL);
  digitalWrite(1, HIGH);
  analogRead(A2);
  delay(500);
  spedisci();
  delay(500);
  analogReference(DEFAULT);

sul pin 0 hai una lettura diversa con il DSO oppure hai lo stesso grafico di questo?

dab77

Avevo provato senza mettere nessuna dichiarazione, e il risultato era uguale.
Invece guarda un pò che ho scoperto? anzi, aiutami ad interpretare.
Allora, i titoli delle immagini spiegano la situazione. Il codice è il mio protocollino, e c'è la richiesta da parte del master (Segnale Giallo) due volte allo slave giusto, due volte ad un altro per ora scollegato.
Il segnale Blu è la risposta. Le due sonde praticamente sono collegate ai pin Rx e Tx dell'Attiny85.
L'unica differenza tra i due è che usando ref=1,1V la conferma del Master arriva prima (segnale Giallo dopo il Blu). Quindi io ne dedurrei che usando il riferimento interno l'ADC ci mette meno tempo, potrebbe essere?

leo72

Il circuito è lo stesso, se guardi il diagramma a blocchi vedi che in pratica il riferimento è solo un blocco dal quale l'ADC preleva la tensione per comparare quella letta.

Una domanda: non è che hai fatto il passaggio al reference 1V1 dopo aver fatto la lettura con quello di default?
Se vedi le tabelle sul datasheet, la prima lettura non solo è inaccurata ma è anche estremamente più lenta delle latre (10 volte di più in cicli macchina).

dab77

No, nel codice che uso per quest'ultime immagini, la dichiarazione aRef() la faccio nel setup e basta.

Ho appena trovato una cosa tanto curiosa quanto inquietante..
praticamente, ricordando che uso due celle di carico attaccate ai pin analogici, ho il gtkterm davanti gli occhi per vedere se avviene la trasmissione, e non si muove una paglia (usando aRef 1,1V), ma quando faccio forza su una delle 2 celle la trasmissione parte!!  :smiley-eek: :smiley-eek: :smiley-eek:

Voglio morire... mica lo capisco perchè.. in compenso era successa una cosa strana anche usando aRef 5V, con la taratura del trimmer di regolazione degli operazionali delle celle un pò più alta, la trasmissione avveniva perfetta, ma appena facevo un pò più di forza su una delle due celle si bloccava...

quindi mi sa che devo mettere sotto torchio l'uscita degli INA128...

dab77

allora, ho altre 2 letture strane..
ho triggerato il segnale della Seriale in uscita, che sarebbe il pin Aref (piedino 5) e praticamente ogni volta che manda qualcosa la lettura del pin analogico fa quel casino (sia su A2 che A3).la misura Vpp (picco-picco) di quello spike è di circa 0,15V, che in una misura riferita a 1,1V è più del 10%.

Non ho capito perchè se premo forte su una cella di carico comincia a funzionare il dialogo seriale. sull'oscillo gli spike rimangono quando premo, solo si alza tutta la lettura da 0.65V a 0.78V (dove più o meno comincia a trasmettere bene...)

bel mistero, no?

dab77

Ecco qua forse il problema..

Come si può vedere, quando premendo una delle due celle si supera una certa soglia verso l'alto, ma anche verso il basso (togliendo peso dalla cella..) si sposta il segnale di Enable di 2-3 ms..
lo odio...

dab77

e solo per completare il quadro ho rifatto le due prove togliendo la riga analogReference, quindi utilizzando i 5V Default, e ritarando un pò più alta l'uscita degli operazionali ho il problema inverso, cioè che a riposo trasmette mentre premuta la cella no, e diminuisce il delay tra un Enable e l'altro.

il canale giallo è l'Enable, il canale blu è l'Rx.

leo72

Andiamo con ordine.

1) leggendo un'altra fonte analogica e non quelle celle, cosa succede?
2) se tu non metti nessun analogReference nel setup (neanche analogReference(DEFAULT), che viene usato di... default appunto), cosa succede?

dab77


Andiamo con ordine.

1) leggendo un'altra fonte analogica e non quelle celle, cosa succede?

Non ho provato, ma su quella schedina al pin A1 c'è il Rx della seriale, mantre A0 è sul pin del reset, che in effetti non uso se non per programmare, quindi potrei provare..
Quote

2) se tu non metti nessun analogReference nel setup (neanche analogReference(DEFAULT), che viene usato di... default appunto), cosa succede?

A parte la prova con i delay 1s DEFAULT e 1s INTERNAL, negli altri casi ho sempre evitato di scrivere "analogReference(DEFAULT)", quindi posso dire che il problema NON dipende dall'analogReference.

leo72

No, aspetta. A0, che è il piedino n°1, ossia reset, non usarlo. Per poterlo usare come pin normale, devi disattivare il reset tramite i fuse, poi però ti serve un programmatore H/V (alta tensione, 12V) per rimetterlo a posto. Diversamente non puoi più riprogrammare il micro.

In ultima analisi, ti consiglio di rivolgerti qui:
http://arduino.cc/forum/index.php/topic,51984.0.html
è il thread aperto dal creatore del core Tiny. Magari potresti sentire anche lui.

dab77


No, aspetta. A0, che è il piedino n°1, ossia reset, non usarlo. Per poterlo usare come pin normale, devi disattivare il reset tramite i fuse, poi però ti serve un programmatore H/V (alta tensione, 12V) per rimetterlo a posto. Diversamente non puoi più riprogrammare il micro.

In ultima analisi, ti consiglio di rivolgerti qui:
http://arduino.cc/forum/index.php/topic,51984.0.html
è il thread aperto dal creatore del core Tiny. Magari potresti sentire anche lui.

infatti, il piedino 1 ho proprio evitato di considerarlo..

Allora, intanto queste prove rimangono qui per i posteri. Io risolvo (credo..) ridisegnando la schedina e mettendoci i 328P, tanto ce li ho. Se avete un buon fornitore per gli attiny84 li prendo volentieri. (trovo molti 24 e qualche 44...)

Poi mi farò anche un giro li sul link che hai messo, ma mettermi a rispiegare tutto in inglese non mi va molto..

Grazie mille comunque.
Ciao!

leo72

Gli Attiny84 io li prendo da RS:
http://it.rs-online.com/web/p/microcontrollori/7380684/
Prendi questi, modello "A": sono quelli nuovi, lavorano a 20 MHz come i precedenti ma in più reggono tensioni di funzionamento minime fino a 1,8V come i vecchi modelli "V" che, però, andavano solo fino a 10 MHz.

Con i Tiny84 ho lavorato ad un sensore di fughe di gas e non ho avuto problemi con le letture analogiche. I Tinyx5 non li ho usati (tranne che per alcuni test) in analogico.

Go Up