Go Down

Topic: Come far lavorare ATmega a 128KHz di clock (Read 9606 times) previous topic - next topic

ypkdani


Nel file boards.txt: cerchi la sezione relativa all'hardware che vuoi modificare.
Credo (perché non sono un esperto di C) che tu possa comunque ridefinire quel valore nel tuo codice:
#define F_CPU xx000000UL

In alcune librerie l'ho visto fare.


Scusa ma se cambio quel valore in boards mi cambia la freq della cpu utilizzando il prescaler ?

leo72

Se cambi il valore in boards.txt poi cambia anche nel codice compilato. Però devi a questo punto ricompilare il bootloader per la nuova frequenza.

Però a 'sto punto non ho capito se vuoi cambiare frequenza al tuo micro o no  XD

astrobeed


Nel file boards.txt: cerchi la sezione relativa all'hardware che vuoi modificare.


Confermo, basta modificare questo parametro "nomescheda.build.f_cpu=16000000L" in boards.txt ove "nomescheda" è la board che vogliamo variare, meglio crearne una nuova.
Modificando f_cpu in boards.txt il nuovo valore viene usato automaticamente dal compilatore generando le corrette temporizzazioni, unica cosa che cambia rispetto allo standard, circa 490Hz, è la frequenza del PWM perché strettamente legata al clock e non è prevista la sua variazione in wiring.
Ovviamente non è detto che sia possibile ottenere sempre le corrette temporizzazioni per tutti i valori di clock possibili.

astrobeed


Se cambi il valore in boards.txt poi cambia anche nel codice compilato. Però devi a questo punto ricompilare il bootloader per la nuova frequenza.


Ovviamente si, e questa è la parte più difficile da mettere in pratica perché modificare e ricompilare il bootloader non è una cosa semplicissima da fare.


ypkdani


Se cambi il valore in boards.txt poi cambia anche nel codice compilato. Però devi a questo punto ricompilare il bootloader per la nuova frequenza.

Però a 'sto punto non ho capito se vuoi cambiare frequenza al tuo micro o no  XD


Si volevo cambiare la frequenza ed abbassarla magari ad 1Mhz. Quello che volevo capire era come farlo nel modo più semplice (anche a livello di codice) cioè senza utilizzare librerie come quella che ho postato per utilizzare la seriale, delay....
Per quanto riguarda il bootloader (dove ho ancora un po di confusione) mi state dicendo, se ho capito bene, che anche se cambio quel valore questo non viene memorizzato nel prescaler quindi la cpu lavora ancora a 16Mhz e dovrei cambiare direttamente il file del bootloader e ricaricarlo vero ? e se invece di modificare il bootloader mi setto il prescaler all'interno del software utilizzando la libreria postata?

Faccio queste domande senza provare perchè ho un Arduino mega che non è mio quindi se lo brucio....  XD

Michele Menniti


@michele:
Lo hai visto questo 3d?
http://arduino.cc/forum/index.php/topic,59682.0.html

Solo ora che me l'hai detto, ma l'inglese  :smiley-sweat: :smiley-sweat: :smiley-sweat:, ne ho ricavato indicazioni frammentarie; questo sta impazzendo per cercare di fare qualcosa che a noi già funziona, mi sembra interessante il discorso della frequenza per l'invio di dati; intanto ho fatto prove e ho brickato 4-5 atmega, ora ho lo schedino magico al lavoro.
Leo, sto cercando di ampliare i test con le virtual boards (partendo dalla tua) per aiutare anche chi ha la sola 2009, ma sta venendo un lavoro immane, non ce l'ho tutto questo tempo, nei prossimi due giorni riorganizzo le idee, rifaccio le prove e poi scrivo.
Dimmi qualcosa in più su questo thread altrimenti ci passo la domenica su. :smiley-red:
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

ypkdani

Ok ho provato e se cambio la mega2560.build.f_cpu=16000000L in 1mhz ho che il delay funziona correttamente mentre la seriale no quindi si prob dovrei modificare il bootloader.

leo72

@dani:
ma la seriale a quanto la fai lavorare?
Secondo me si tratta di un problema di velocità: scalando ad 1 MHz non penso il micro riesca a gestire temporizzazioni molto elevate. Prova 2400, 4800, 9600 baud non di più.

Tornando al discorso del bootloader, devi riflashare anche quello altrimenti credo poi avrai problemi di sincronizzazione nell'invio degli sketch. Cmq un chip impostato ad 1 MHz, non lo puoi più usare nell'Arduino, quindi lo programmerai con la tecnica ISP: a 'sto punto, avere un bootloader a bordo è solo uno sbattimento inutile perché non lo usi.

@mick:
hai ragione, alla fine ne esci pazzo  XD
Dammi retta, freeza tutto ad ora, concludi la guida e non stare più dietro ad altro. Se qualcosa non sei riuscito ad implementarlo, rimandalo alla prox versione della guida. Se continui a chiedere, io continuo a metterti nuova carne sul fuoco  :P

ypkdani

Si allora se imposto 1mhz in board.txt e tramite la funzione setClockPrescaler(CLOCK_PRESCALER_16); faccio lavorare tutto ad 1mhz la seriale funzione fino a 14400bps poi niente da fare.

Quote
Tornando al discorso del bootloader, devi riflashare anche quello altrimenti credo poi avrai problemi di sincronizzazione nell'invio degli sketch. Cmq un chip impostato ad 1 MHz, non lo puoi più usare nell'Arduino, quindi lo programmerai con la tecnica ISP: a 'sto punto, avere un bootloader a bordo è solo uno sbattimento inutile perché non lo usi.


per il momento non ho avuto prob a caricare i sketch.


Michele Menniti

Quote
@mick:
hai ragione, alla fine ne esci pazzo 
Dammi retta, freeza tutto ad ora, concludi la guida e non stare più dietro ad altro. Se qualcosa non sei riuscito ad implementarlo, rimandalo alla prox versione della guida. Se continui a chiedere, io continuo a metterti nuova carne sul fuoco 

Me ne sono accorto, una caramellina alla volta mi farai diventare un pachiderma :smiley-mr-green:, ed io non sono uno stecchino :smiley-red: Comunque alla fine ho trovato una soluzione soddisfacente, con la quale ho risolto contemporaneamente la problematica della Guida e la questione del clock out, ogni tanto un po' di cose tutte dritte XD
Ti anticipo il nocciolo, anche perché tutto parte dal tuo eccellente lavoro con gli attiny: in pratica sono partito col fusecalc al rovescio, cioè ho messo i 3 valori di Arduino UNO per vedere cosa usciva, e lì ho trovato la soluzione: praticamente Arduino NON è impostato per lavorare con "clock esterno" generico, come provavamo noi, bensì con clock esterno a 8MHz; non ho approfondito la problematica dell'oscillatore, altrimenti ero ancora lì a leggere :smiley-roll-sweat: :smiley-eek:, però attivando il clock out a partire da quella configurazione mi ha funzionato al primo colpo, inoltre sempre partendo da quei valori ho ricavato quelli per gli stand alone a 8MHz e 1MHz con oscillatore interno su board minimal; devo fare un paio di controprove ma sono ragionevolmente convinto di aver risolto tutto.
Poi proseguirò con le prove di prescaler ma soprattutto con quelle di sleep, ma prima pubblico la guida. Grazie del prezioso aiuto! XD
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Qui ti devo bacchettare  ]:D
Arduino è preimpostato per operare con clock esterno da 8 MHz in su. Difatti se guardi bene nel FuseCalc, quando metti i valori dei fuse dell'Arduino Uno che trovi nel file boards.txt, ti esce "Ext. Crystal Osc.; Frequency 8.0- MHz; ecc..."
Ecco quel segno "-" dopo 8.0 significa "da 8.0 in poi"  XD
Mi sa che quel tuo monitor da laboratorio è ora che tu lo butti via  :smiley-yell: :smiley-yell:

Michele Menniti

No, non mi posso nascondere dietro il monitor per questo, è che nelle convenzioni che conosco si usa + per dire maggiore, non - :smiley-eek:, quindi questa mi è onestamente nuova; e infatti ho scritto che non avevo approfondito e poi mi pare questa storia dell'oscillatore esterno, senza indicazione da frequenza, non era partita da me.... io ieri ho cambaito percorso per risolvere i problemi, non per crearmene XD
Sei una fonte di informazioni, ma io imparo in fretta non è vero? ;)
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Se dici che io sono una fonte di informazioni, mi fai vergognare come un gatto nudo!  :smiley-eek-blue:
Io che dovrei dire, all'ombra di voi guru dell'elettronica?  :smiley-sweat:
Che non so neanche la legge di Ohm a mente e che calcolo le resistenze con la funzione rnd()?  :smiley-eek:

BrainBooster

tutti questi dubbi e problemini nascono dal fatto che il file boards.txt mischia varii concetti...
e come se in un unico file ci fossero configure make e make install.

Michele Menniti

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Go Up