Giocando con l'Attiny85

allora, prima prova, con questo sketch:

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!

Ora con questo Codice:

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

IMAG004.BMP (47 KB)

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:

  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?

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?

Aref1V1.BMP (47 KB)

Aref5V.BMP (47 KB)

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

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!! :astonished: :astonished: :astonished:

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

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?

A2+Seriale-Tx.BMP (47 KB)

A2+RS485EN.BMP (47 KB)

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

RS485_En+A2_a_Riposo.BMP (47 KB)

RS485_En+A2_Premuto.BMP (47 KB)

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.

RS485_En_aRef_5v_a_riposo.BMP (47 KB)

RS485_En_aRef_5V_Premuto.BMP (47 KB)

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?

leo72:
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..

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

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.

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.

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!

Gli Attiny84 io li prendo da RS:

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.

Grazie. Si RS era in lista, ma devo accumulare qualcos'altro da comprare sennò non conviene.

Ciao!

dab77:
Grazie. Si RS era in lista, ma devo accumulare qualcos'altro da comprare sennò non conviene.

Ciao!

Ricordati che RS ha da un po' abbassato i prezzi di spedizione. Adesso con corriere espresso ti costa solo 6€+IVA.
Alternativamente c'era LP elettronica che aveva i Tiny84 a listino ma in questo momento il loro sito non va. Su Ebay i Tiny84 in Italia non li trovo.

ah, dimenticavo dell'altra domanda, che oramai è solo per curiosità.
con la NewSoftSerial, perchè non riesco ad usare velocità diverse dai "passi" standard?
che so, tipo 10000 o 15000?

...già che ci sono...ehm...non riesco a trovare gli zoccoli a tulipano su RS, come si chiamano?

come non detto, si chiamano zoccoli, solo che la ricerca su RS non è migliorata come speravo. se cerchi zoccolo non esce niente.

Perché ci sono delle tabelle per i tempi calcolate su particolari velocità, al di fuori di quelle non accetta.
Guarda nel file NewSoftSerial/NewSoftSerial.cpp.

leo72:
Perché ci sono delle tabelle per i tempi calcolate su particolari velocità, al di fuori di quelle non accetta.
Guarda nel file NewSoftSerial/NewSoftSerial.cpp.

Ok, grazie, ho visto..

Colto dalla "Sindrome di Acquisto Compulsivo" via Internet, ho ordinato questo piccolo kit in scatola di montaggio

-->http://store.tinkerlog.com/store/index.php?main_page=product_info&cPath=3&products_id=7

...per poi accorgermi che il Tiny2313, come cita il primo numeretto ha "solo" 2 kb di memoria programmabile.
La domanda adesso è, e lo chiedo anche a voi: che ce fò??