Go Down

Topic: ATtiny85 a 16mhz con High Frequency PLL Clock (Read 5780 times) previous topic - next topic

leo72

Basta programmare un fuse del microcontrollore. Ti riquoto questo mio vecchio post:

Secondo il datasheet bisogna programmare il fuse CKSEL su $0001 e poi impostare il bit PLLE del registro PLLCSR ad 1. Ma a me va senza quest'ultima impostazione. Boh... comunque basta programmare il fuse basso dell'Attiny con questo comando:

Code: [Select]
./avrdude -P /dev/ttyACM0 -C ./avrdude.conf -U lfuse:w:0xf1:m -p t85 -c stk500v1 -b 19200

che dovete dare dalla cartella /arduino-0022/hardware/tools in modo da usare avrdude distribuito con l'IDE, che può vedere l'Arduino come programmatore ISP.

Il fuse basso così settato ($F1) imposta il PLL interno e disattiva il divisore 8x sul clock dell'oscillatore, per cui: 8 MHz * 8 = 64 MHz / 4 (il divisore 1/4 interno) = 16 MHz finali

Se caricate il Blink usando il profilo modificato per un Attiny85@8 MHz vedrete il led lampeggiare al doppio della velocità.


Ovviamente si usa ora la cartella arduino-1.0.1

erpomata

Ok quella risposta è ancora valida  :)
Quindi non devo caricare il bootloader a 8Mhz come spiegato qui "Configuring the ATtiny to run at 8 MHz (for SoftwareSerial support)"

Ma lanciare quel comando.
Non dovrei farmi una board virtuale per i 16MHz
http://www.paologiammarco.it
http://www.valentinamagni.it

leo72

1) Per modificare i fuse basta agire da terminale usando avrdude. L'uso del bootloader è inutile se sai muoverti sul terminale. Tieni poi a mente che il bootloader per i Tiny è "finto" nel senso che è un file vuoto, serve solo per poter modificare i fuse ma, almeno con con la 0022, non funzionava neanche come procedura. Non so se con la 1.x adesso va. Io però cambio i fuse da terminale per abitudine, quindi non so dirti.

2) è ovvio che poi devi crearti una board virtuale con Attiny85 a 16 MHz per poter compilare del codice con le giuste tempistiche, altrimenti hai tempi di esecuzione sfalsati. Basta che prendi quella per il Tiny a 1 o a 8 MHz e poi cambi la voce relativa al clock.

erpomata

http://www.paologiammarco.it
http://www.valentinamagni.it

erpomata

Ho eseguito il comando e sembra essere andato tutto bene:

Code: [Select]
./avrdude -P /dev/ttyACM0 -C ./avrdude.conf -U lfuse:w:0xf1:m -p t85 -c stk500v1 -b 19200

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.06s

avrdude: Device signature = 0x1e930b
avrdude: reading input file "0xf1"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.06s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xf1:
avrdude: load data lfuse data from input file 0xf1:
avrdude: input file 0xf1 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.


Poi ho creato la board virtuale:

Code: [Select]
attiny85-16.name=ATtiny85 (internal 16 MHz clock)
attiny85-16.bootloader.low_fuses=0xf1
attiny85-16.bootloader.high_fuses=0xdf
attiny85-16.bootloader.extended_fuses=0xff
attiny85-16.upload.maximum_size=8192
attiny85-16.build.mcu=attiny85
attiny85-16.build.f_cpu=16000000L
attiny85-16.build.core=arduino:arduino
attiny85-16.build.variant=tiny8


Ho fatto bene?
http://www.paologiammarco.it
http://www.valentinamagni.it

leo72

Non mi torna quel "variant:tiny8" che hai messo in fondo.

Ma lo hai scaricato il core Tiny? La nuova voce la devi ovviamente mettere nel file boards.txt che trovi in /hardware/tiny, non in /hardware/arduino.

EDIT:
ho controllato ora il file boards.txt che è fornito con il core Tiny. Esso contiene già la voce per poter compilare per un Attiny85 a 16 MHz col PLL interno. Non me ne ero accorto perché normalmente tolgo le voci che non mi servono per ridurre il numero di board presenti nel menu a tendina  :smiley-sweat:

Quindi, ricapitolando. Ti scarichi il core Tiny e con quello sei già pronto a compilare a 16 MHz.

erpomata

Il variant:tiny8 l'ho trovato nella definizione per l'attiny85 a 8Mhz scaricata da qui: http://hlt.media.mit.edu/?p=1695


...
ho controllato ora il file boards.txt che è fornito con il core Tiny. Esso contiene già la voce per poter compilare per un Attiny85 a 16 MHz col PLL interno. Non me ne ero accorto perché normalmente tolgo le voci che non mi servono per ridurre il numero di board presenti nel menu a tendina  :smiley-sweat:


Io la voce non l'avevo mi dici dive scaricare questo core?
http://www.paologiammarco.it
http://www.valentinamagni.it

leo72

Il core Tiny è il core di riferimento quando si parla di programmazione di Attiny25/45/85, Attiny24/44/84 e Attiny2313/4313.
Lo puoi scaricare da qui:
http://code.google.com/p/arduino-tiny/


erpomata

http://www.paologiammarco.it
http://www.valentinamagni.it

erpomata

http://www.paologiammarco.it
http://www.valentinamagni.it

leo72


Scusa Leo non mi hai risposto niente sulla programmazione a 16Mhz.
http://arduino.cc/forum/index.php/topic,73754.msg954729.html#msg954729

Che ti dovevo rispondere?  :smiley-sweat:
L'hai programmato? Ci sei riuscito? Funziona tutto con i tempi giusti?

erpomata

Bè potevi rispondermi si o no dopo aver letto il log che ho postato.
Per il resto il blibk sembra blinkare correttamente ricompilato a 16Mhz
http://www.paologiammarco.it
http://www.valentinamagni.it

leo72


Bè potevi rispondermi si o no dopo aver letto il log che ho postato.

Uh... pignolo...
Facciamo così, quando mi ringrazi per tutti gli aiuti che ti ho dato, allora ti rispondo anch'io....


leo72

Guarda che la mia era una battuta  :P

Tornando alla domanda, era implicito che avessi fatto bene, d'altronde te lo aveva confermato anche avrdude che tutto era andato per il verso giusto  :D
Ti avevo però posto una domanda a cui non mi hai risposto (variant:tiny8) ma poi ho capito che quella voce doveva essere dovuta all'uso del core di David Mellis al posto del core Tiny.

Go Up