Pages: 1 ... 4 5 [6] 7 8 9   Go Down
Author Topic: Come far lavorare ATmega a 128KHz di clock  (Read 6235 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 453
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-lol
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 453
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-lol

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....  smiley-lol
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 453
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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  smiley-lol
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  smiley-razz
Logged


0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 453
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-lol
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! smiley-lol
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Qui ti devo bacchettare  smiley-twist
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"  smiley-lol
Mi sa che quel tuo monitor da laboratorio è ora che tu lo butti via  smiley-yell smiley-yell
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-lol
Sei una fonte di informazioni, ma io imparo in fretta non è vero? smiley-wink
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

azz come sei ermetico smiley-eek
Logged

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

Pages: 1 ... 4 5 [6] 7 8 9   Go Up
Jump to: