attiny usare RESET come I/O

salve, so che per usare il RESET dell'attiny come I/O bisogna "bruciare" il fuse, ma vorrei trovare una soluzione alternativa. ....cercando cercando ho trovato questo: http://forum.arduino.cc//index.php?topic=151176.msg1135052#msg1135052

The RESET pin can be used as analog/digital input without losing the normal reset/programming function. Just make sure you don't go below 0.5Vcc (ndr: questo significa 1/2Vcc o 0,5Volts???)and use analogRead() to read the state. eg. To connect a switch to the pin all you do is set up a resistor divider and connect the RESET pin to the center. Use the switch to short out the upper resistor, the voltage will go from 0.5 to 1.0 when you press it...

vi risulta sia fattibile? qualcuno ha mai provato? io ci sto provando, ma non ottengo nulla di buono: l'analogRead sul RESET mi da valori casuali tra 0 e 7, benchè sul RESET ci sia il livello HIGH lo sketch è questo:

// test RESET pin as I/O on ATtiny85
const int switchPin = PB5; 
const int LedPin = PB0; 

void setup(){
  Serial.begin(9600);
  pinMode(switchPin, INPUT);
  pinMode(LedPin  , OUTPUT);
  digitalWrite (LedPin  , HIGH);  
}

void loop(){
  Serial.println( analogRead(switchPin) );
  }

ndr: questo significa 1/2Vcc o 0,5Volts??? 1/2Vcc

below 0.5Vcc

significa non deve andare sotto metá della tensione di alimentazione del ATtiny.
Ciao Uwe

Dato che su quel pin ci possono anche arrivare 12V (programmazione H/V fatta con un programmatore hardware per ripristinare il pin di reset quando questo è stato impostato come normale I/O), esso ha un'impedenza maggiore rispetto agli altri pin proprio per proteggerlo durante quell'operazione. Ciò significa che quel pin può fornire meno corrente in output ed è meno sensibile ai segnali in ingresso. Inoltre su tale pin non puoi far arrivare un segnale basso perché, essendo il pin di reset, se lo mandi LOW ti resetta il pin.

La soluzione di fungus, che io non ho mai provato, è quella di dare un segnale che sia ALMENO pari a metà tensione di alimentazione (0,5*Vcc) in modo da non resettare il micro e di usare l'analogRead per leggere il valore sul pin. Il suggerimento dato è quello di creare un circuito che in fase di riposo (pulsante non premuto) legga il valore del partitore di tensione (2K/2K) quindi metà Vcc mentre con pulsante premuto venga letto Vcc. Dovresti poter leggere una variazione fra i due stati.

Ripeto, io non ho mai provato questo. Se ti serve un pin di input in più, considera l'uso di un Attiny84, che senza strani arzigogoli te ne offre 11 contro i 5 del Tiny85.

l’operazione, per come descritta, sembra abbastanza semplice, ma nella pratica, dopo diverse prove, non mi ha reso possibile utilizzare il reset come descritto.
non dico che non sia possibile, sono alle prime esperienze in questo campo, anche se con una discreta conoscenza di elettronica, ma non sono riuscito ad ottenere alcun valore discriminante dal pin di reset. solo valori all’apparenza casuali tra 0 e 7 ottenuti con l’analogRead.
ho abbandonato questa possibile soluzione ed ho risolto utilizzando un altro pin “switchandolo” da una funzione all’altra.

se qualcuno è riuscito con successo in questo procedimento e vuole condividere, può sempre tornare utile :slight_smile:

Se mi mancano pin, come ho detto, uso un altro chip. Per lo meno sono cose che funzionano sicuramente. ;)

leo72: Se mi mancano pin, come ho detto, uso un altro chip. Per lo meno sono cose che funzionano sicuramente. ;)

ci avevo pensato Leo, ma per questioni di spazio e consumo preferisco usare un 8 DIP. comunque i pin in multifunzione funzionano bene, almeno per quel che devo farci io.

Da un DIP8 ad un DIP14 non ci sono tante differenze né di spazio né di consumo. Ovviamente va vista la necessità che uno ha.