Go Down

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

MatteoG

Ok,grazie, sempre gentile.
Ciao, Matteo.

DevonMiles

Faccio riemergere questo topic cercando come al solito aiuto. Vorrei fare delle prove di trasmissione RF con gli ATtiny85 e in questa discussione http://arduino.cc/forum/index.php?topic=80942.0 ho visto che modificando opportunamente la libreria VirtualWire è possibile farlo. Questo comporta il fatto di impostare i fuses per usare il micro con quarzo esterno 16MHz. Ho provato a ricavarmeli con fuse calc http://www.engbedded.com/fusecalc/ ma i valori che trovo sono diversi da quelli contenuti nella board.txt creata dal tipo del link. E' sufficiente che li setto come nella boards.txt e cioè low_fuses=0xFF, high_fuses=0xD7, extended_fuses=0xFF? Mi appello alla vostra saggezza..
Grazie.

leo72

Quote
E' sufficiente che li setto come nella boards.txt e cioè low_fuses=0xFF, high_fuses=0xD7, extended_fuses=0xFF

Sì, questi vanno bene. Puoi usare per il fuse Alto anche il valore $DF, che a differenza di $D7 non preserva il contenuto della EEPROM durante la flashatura del micro.

Per il fuse Esteso, prova con $FF oppure con il suo complementare $01. Il fuse esteso è un po' particolare, alcuni micro accettano il valore diretto (ossia 0 per 0 e 1 per 1) dei bit oppure il valore inverso (ossia 0 per impostare 1 e viceversa), dipende dal micro. Se programmando i fuse vedi che ti restituisce l'errore, prova l'altro valore.

DevonMiles


leo72


DevonMiles

Intanto sto raccogliendo nozioni, quando metterò in piedi una mezza basettina ti saprò dire. Se ce la faccio in settimana faccio due prove con la breadboard. Tutto nasce dalla richiesta di un mio amico che mi stressa perchè gli costruisca un radiocomando per pilotare la sua macchina del fumo. Ho pensato quindi agli attiny+moduli radio Aurel visto che ne ho una decina. Userei 2 pin in ingresso per 2 canali, 1 in output per il modulo radio tx e un altro output per led di segnalazione trasmissione. Piú o meno stessa cosa per rx con aggiunta di transistor + relè per chiudere il pulsante attivazione fumo.

leo72

Alcune cose:
1) tra i pin che userai ti troverai il pin di reset, che è un pin un po' più "debole" degli altri in quanto a segnale elettrico, secondo datasheet.
2) come ricevi i dati? Via seriale? Ricordati che l'Attiny non gestisce la seriale in HW e devi usare la SoftwareSeriale, che però blocca il codice in ricezione. La NewSoftSerial in ricezione NON funziona perché non è compatibile con l'Attiny85.


DevonMiles

#367
Jan 07, 2012, 11:00 am Last Edit: Jan 07, 2012, 11:06 am by DevonMiles Reason: 1
1) Adesso che mi ci fai pensare, su delle prove che avevo fatto mi ricordo che c' era un pin che sembrava più debole. Grazie di avermelo ricordato. Bhè potrei evitare di usare il pin di RESET tanto nel conto dei pin 2(input)+2(output)+2(alimentazione)=6 pin usati, ne avanzerei ancora 2. Oppure lo potrei usare come input. ***
2) Per ricevere i dati utilizzo un modulino rx radio 433MHz. Vorrei appunto provare la libreria VirtualWire modificata come ha fatto l' utente sul post http://arduino.cc/forum/index.php?topic=80942.0 per vedere se riesco effettivamente a trasmettere e ricevere lo stesso dato. Alla fine del post ha scritto che con 2 Attiny85 la libreria funziona.

*** che scemo nella mia equazione ho dimenticato i due pin del quarzo   :smiley-mr-green:

leo72

Tieni a mente un altro problema. Per usare il pin di reset devi disattivare questa funzione con i fuse. Ma ciò comporta che dopo la sua disattivazione NON puoi più flashare il micro né ripristinare il reset senza usare un programmatore ad alta tensione (12V). L'operazione non è impossibile (in rete c'è uno schema di un programmatore H/V per ripristini di emergenza di chip briccati) però devi tenerne conto.

Domanda: ma usare un Tiny84 (14 pin)? Avresti 9 linee I/O, tolti i pin dell'alimentazione (2), quelli del quarzo esterno (2) e quello di reset (1). L'ingombro rispetto al Tiny85 sarebbe di poco superiore.

DevonMiles

Cavolo sto pin di RESET ora diventa il mio problema ]:) . Per fortuna che me lo hai fatto presente se no chissà quanto tempo ci perdevo! L' idea di usare un 85 era perché li avevo già a disposizione, senza stare a riordinare materiale. Per quello che devo fare mi basta comunque un canale, per cui potrei eliminare proprio il pin di RESET e far fare tutto alla logica RX (vedi schema sotto). Eventualmente se mi dovesse servire un altro canale con qualche trick (tipo doppio click o pressione più lunga del pulsante) potrei spedire un' altra informazione. 
               
                START <-----------------------------------------------                     
                    |                                                                 |
                    |              no                                               |
                Dato RX  ------------------------------------------->|
               sì  |                                                                  |
                    |                    no                                          |
   Sto già sparando il fumo? ------> Spara fumo ----->|
                    |                                                                  |
                    |sì                                                               |
          Blocca fumo -------------------------------------------->| 

menniti

Se non hai problemi di implementazione e ti trovi un banale SN7400, 01, 06, 14, usa due porte in serie al segnale e lo amplifichi in tensione e corrente; o al limite usa un TR, tenendo conto che devi invertire poi tu la logica del pin.
Se è solo "debole" risolvi senza problemi.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

DevonMiles

Sì sarebbe sperimentabile anche questa via, ma mi sa che il pin di RESET non lo disabilterò..non vorrei trovarmi incasinato dopo per la riprogrammazione.

menniti

Scusami, devo essermi espresso malissimo, sempre che tu abbia risposto a me :)
Io NON parlo di disabilitare ma semplicemente di potenziare il pin, e quindi usarlo come tutti gli altri, solo integrando un componente che permetta di superare le limitazioni di questa "debolezza" che ancora non ho capito in cosa consiste, ecco perché non sono sicuro che il mio suggerimento sia idoneo.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

DevonMiles


Scusami, devo essermi espresso malissimo, sempre che tu abbia risposto a me :)

No no sei stato chiarissimo, è un metodo da tenere in considerazione solo che Leo ha scritto:

Tieni a mente un altro problema. Per usare il pin di reset devi disattivare questa funzione con i fuse.

Quindi il dubbio è questo, devo comunque disabilitare il RESET per poter usare questo pin come IN/OUT o posso comunque utilizzarlo con la coscienza di non avere il massimo della potenza?

leo72

Vedo di far chiarezza, perché penso di aver capito di cosa stiate parlando entrambi.

1) di default il pin di reset è configurato come RESET per cui NON può essere usato come pin di I/O
2) per poterlo usare come normale pin di I/O bisogna (leggi "SI DEVE") programmare i fuse per disattivare il circuito di reset ed attivare quello di I/O - vedi però punto 4)
3) siccome il pin di reset deve tollerare voltaggi di 12V quando il micro viene programmato ad alto voltaggio, il circuito elettrico interno è più debole di quello presenti sugli altri pin. Il datasheet da pag. 189 mostra infatti che la corrente che può generare o assorbire è inferiore rispetto a quella degli altri pin.
4) una volta programma come I/O, non puoi più inviare nessun tipo di sketch tramite la procedura ISP usando un comune Arduino ma ti serve un programmatore ad alta tensione per azzerare i fuse né puoi più resettare il micro ma devi per forza ogni volta staccare/riattaccare l'alimentazione.

Go Up