Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #15 on: March 29, 2011, 03:43:21 am » |
No, quel file lo modifichi tramite un editor di testo  Contiene solo le direttive per il compilatore dello sketch. Il programmatore serve per modificare i fuse, altrimenti sei costretto ad usare il micro a 1MHz. AGGIORNAMENTO SU NEWSOFTSERIAL: adesso compare un altro errore, relativo all'uso delle definizioni del timer. La librerie usa TIMSK0, ma lo "0" finale non serve perché l'Attiny ha solo 1 timer TIMSK, quindi dovrei smanettare dentro alla lib per modificare questo parametro. AGGIORNAMENTO 2: Questo chippettino mi sorprende sempre di più... adesso scopro che ha anche l'I2C...
|
|
|
|
|
Logged
|
|
|
|
|
Torino
Offline
Full Member
Karma: 0
Posts: 133
|
 |
« Reply #16 on: March 29, 2011, 03:47:55 am » |
No, quel file lo modifichi tramite un editor di testo  Contiene solo le direttive per il compilatore dello sketch. Il programmatore serve per modificare i fuse, altrimenti sei costretto ad usare il micro a 1MHz. AGGIORNAMENTO SU NEWSOFTSERIAL: adesso compare un altro errore, relativo all'uso delle definizioni del timer. La librerie usa TIMSK0, ma lo "0" finale non serve perché l'Attiny ha solo 1 timer TIMSK, quindi dovrei smanettare dentro alla lib per modificare questo parametro. AGGIORNAMENTO 2: Questo chippettino mi sorprende sempre di più... adesso scopro che ha anche l'I2C... ...allora non ho capito bene cosa sia il fuse... meglio che studi un pò!
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #18 on: March 29, 2011, 04:05:02 am » |
I fuse sono delle impostazioni di tutti i micro Atmel registrate tramite registri interni che normalmente non possono venir modificati con l'uso di una scheda Arduino per flashare il bootloader o lo sketch. Per modificarli serve un programmatore vero e proprio e l'uso del software "avrdude", che permette tante cose, tra cui l'erase totale del chip, il caricamento di sketch compilati, e la lettura/programmazione di questi fuse.
Questi fuse controllano tante cose, tra cui ad esempio l'uso dell'oscillatore interno oppure di un quarzo esterno, il watchdog, ecc...
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #19 on: March 29, 2011, 04:06:21 am » |
Sì quel documento ce l'ho ma non l'ho ancora letto tutto: sono 236 pagine 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #20 on: March 29, 2011, 04:10:04 am » |
Nuovo aggiornamento: ho modificato la NewSoftSerial per poterla usare con l'Attiny85 muahahah  Ottimo ottimo ottimo
|
|
|
|
|
Logged
|
|
|
|
|
Torino
Offline
Full Member
Karma: 0
Posts: 133
|
 |
« Reply #21 on: March 29, 2011, 04:16:43 am » |
I fuse sono delle impostazioni di tutti i micro Atmel registrate tramite registri interni che normalmente non possono venir modificati con l'uso di una scheda Arduino per flashare il bootloader o lo sketch. Per modificarli serve un programmatore vero e proprio e l'uso del software "avrdude", che permette tante cose, tra cui l'erase totale del chip, il caricamento di sketch compilati, e la lettura/programmazione di questi fuse.
Questi fuse controllano tante cose, tra cui ad esempio l'uso dell'oscillatore interno oppure di un quarzo esterno, il watchdog, ecc...
...chiaro quindi, riassumendo: i ATTINY85-20 escono di fabbrica con clock 1 MHz, per poter utilizzare gli 8Mhz occorre modificare il fuse, calcolandolo con il “calcolatore” e scaricandolo con un programmatore e modificare il boards.txt.. esatto? Grazie anora!
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 27
|
 |
« Reply #22 on: March 29, 2011, 04:23:37 am » |
leoooooo mi devi aiutare anche a me a mettere la seriale nel tiny... per ora nn sto capendo niente parlate arabo xD
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #23 on: March 29, 2011, 04:31:05 am » |
Sì, gli AttinyX5 (25/45/85) escono a 1 MHz ma l'oscillatore interno va a 8 MHz: hanno un divisore per 8 attivato. Per togliere il divisore ed usare la piena frequenza dell'oscillatore va programmato il fuse basso ma serve assolutamente un programmatore esterno. Io ho l'USBtinyISP, uso Linux ed il comando che ho dato per riprogrammare il fuse è questo: avrdude -P /dev/ttyACM0 -U lfuse:w:0xe2:m -p t85 -c usbtiny
dove il parametro "-P" specifica la porta usata (su Windows sarà tipo /com ecc.. non so), "-p" il chip da programmare (t85 sta per Attiny85), "-c" il programmatore e "-U" quale parte di memoria è da gestire: lfuse:w:0xe2:m dice di programmare il fuse basso ("lfuse" -> "low fuse") w dice di scrivere (w -> write) 0xe2 è il nuovo valore del fuse (nello specifico, ossia con l'Attiny85, $E2 imposta l'oscillatore interno a 8 MHz senza il divisore per 8. Di fabbrica il fuse basso è impostato a $62, ossia con oscillatore a 8 MHz e divisore attivo). m la codifica del file da usare (m -> immediate: significa che non legge nessun file di dati e scrive direttamente il valore segnato. Se si programmava la Flash si poteva specificare un file HEX contenente il firmware da scrivere)
|
|
|
|
|
Logged
|
|
|
|
|
Milan
Offline
Edison Member
Karma: 1
Posts: 1128
gioblu.com
|
 |
« Reply #24 on: March 29, 2011, 04:32:44 am » |
Leo sei un grande, scusate la mancanza di questi due giorni ma siamo stati tiratissimi. Per chi ha comprato il kit pico85 buon divertimento, ne rimangono 3!! Sono contento che sia risultato interessante per la comunità. Leo mi spieghi come sei riuscito a far funzionare la seriale ? 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #25 on: March 29, 2011, 04:47:04 am » |
Ciao gbm, io ho testato l'Attiny per ora solo in scrittura, quindi in USCITA verso un'Arduino Uno. Per usare la seriale ci sono 2 strade: SoftwareSerial oppure NewSoftSerial SoftwareSerial: tralasciando i problemi che ha (non usando interrupt, se usata in lettura blocca l'esecuzione dello sketch finché non arriva qualcosa), per usarla basta caricare nell'Attiny un programmino tipo questo: #include <SoftwareSerial.h>
#define rxPin 0 #define txPin 1 #define BUTTON 4
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup() { pinMode(rxPin, INPUT); pinMode(txPin, OUTPUT); pinMode(BUTTON, INPUT); mySerial.begin(9600); }
void loop() { byte reading;
reading=digitalRead(BUTTON); if (reading == HIGH ) { mySerial.print("1"); delay(100); } } Collegare quindi il pin PB0 (RX) dell'Attiny al pin D1 (TX) dell'Arduino, il pin PB1 (TX) dell'Attiny al pin D0 (RX) dell'Arduino ed un pulsantino al pin PB4 dell'Attiny. Ricordo che i pin corrispondono ai seguenti piedini del micro PB0: piedino 4 PB1: piedino 5 PB4: piedino 3 Caricare sull'Arduino un sempice sketch come questo: void setup(){ delay(3000); Serial.begin(4800); }
void loop(){ if (Serial.available()>0) { Serial.println(Serial.read()); } } Dare alimentazione all'Attiny ed all'Arduino e poi aprire tramite IDE di Arduino un terminale. Dopo 3 secondi, premendo il pulsantino collegato all'Attiny si vedrà apparire sul terminale "49", che è l'ASCII del carattere "1".
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #26 on: March 29, 2011, 04:55:11 am » |
Per la NEWSOFTSERIAL la situazione è più complicata perché la libreria da per scontato di lavorare con un micro a 8 MHz e che ha più di 1 timer per cui va modificata anch'essa. Inoltre serve un programmatore per sistemare i fuse altrimenti il chip di fabbrica lavora a 1 MHz, come detto. Do per scontato che si abbia già sul computer il mod per lavorare con l'Attiny85 e la NewSoftSerial messi entrambi in ~/sketchbook/ 1) sistemare i fuse dell'Attiny togliendo il divisore per 8: avrdude -P /dev/ttyACM0 -U [b]lfuse:w:0xe2:m[/b] -p t85 -c usbtiny 2) andare in ~/sketchbook/hardware/attiny45_85/ ed aprire il file boards.txt 3) mettere 8000000L al posto di 1000000L in tutti i punti del documento 4) andare in ~/sketchbook/hardware/libraries/NewSoftSerial ed aprire il file NewSoftSerial.cpp 5) cercare la funzione void NewSoftSerial::enable_timer0(bool enable) (riga 518) e modificarla da così: { if (enable) #if defined(__AVR_ATmega8__) sbi(TIMSK, TOIE0); #else sbi(TIMSK0, TOIE0); #endif else #if defined(__AVR_ATmega8__) cbi(TIMSK, TOIE0); #else cbi(TIMSK0, TOIE0); #endif }
a così: void NewSoftSerial::enable_timer0(bool enable) { if (enable) sbi(TIMSK, TOIE0); else cbi(TIMSK, TOIE0); } Salvare tutto e riavviare l'IDE. Addesso creare per l'Attiny85 un semplice sketch come questo: #include <NewSoftSerial.h> #define BUTTON 4
NewSoftSerial mySerial(0, 1);
void setup() { delay(3000); // set the data rate for the NewSoftSerial port mySerial.begin(4800); pinMode(BUTTON, INPUT); }
void loop() { byte reading;
reading=digitalRead(BUTTON); if (reading == HIGH ) { mySerial.print("1"); } } Le connessioni sono come nell'esempio della SoftwareSerial.
|
|
|
|
|
Logged
|
|
|
|
|
Torino
Offline
Full Member
Karma: 0
Posts: 133
|
 |
« Reply #27 on: March 29, 2011, 05:22:17 am » |
Sì, gli AttinyX5 (25/45/85) escono a 1 MHz ma l'oscillatore interno va a 8 MHz: hanno un divisore per 8 attivato. Per togliere il divisore ed usare la piena frequenza dell'oscillatore va programmato il fuse basso ma serve assolutamente un programmatore esterno. Io ho l'USBtinyISP, uso Linux ed il comando che ho dato per riprogrammare il fuse è questo: avrdude -P /dev/ttyACM0 -U lfuse:w:0xe2:m -p t85 -c usbtiny
dove il parametro "-P" specifica la porta usata (su Windows sarà tipo /com ecc.. non so), "-p" il chip da programmare (t85 sta per Attiny85), "-c" il programmatore e "-U" quale parte di memoria è da gestire: lfuse:w:0xe2:m dice di programmare il fuse basso ("lfuse" -> "low fuse") w dice di scrivere (w -> write) 0xe2 è il nuovo valore del fuse (nello specifico, ossia con l'Attiny85, $E2 imposta l'oscillatore interno a 8 MHz senza il divisore per 8. Di fabbrica il fuse basso è impostato a $62, ossia con oscillatore a 8 MHz e divisore attivo). m la codifica del file da usare (m -> immediate: significa che non legge nessun file di dati e scrive direttamente il valore segnato. Se si programmava la Flash si poteva specificare un file HEX contenente il firmware da scrivere) ...chiarissimo! uso anche io Linux, devo solo procurarmi il programmatore... grazie!
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 27
|
 |
« Reply #28 on: March 29, 2011, 07:10:09 am » |
non ho capito che programmatore serve per cambiare il clock del processore.. dove posso trovarlo?? nn posso usare arduino come programmatore??
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #29 on: March 29, 2011, 07:16:13 am » |
No, serve un programmatore esterno. Io uso l'USBtinyISP di Adafruit ma va bene anche qualsiasi altro programmatore per Atmega.
|
|
|
|
|
Logged
|
|
|
|
|
|