Go Down

Topic: Giocando con l'Attiny85 (Read 48 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?

Go Up