Pages: 1 [2]   Go Down
Author Topic: [RISOLTO]:clock out su Arduino  (Read 3028 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 123
Posts: 9294
"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

Ce l'ho fatta! vedo 8 o 16MHz sull'oscilloscopio, l'onda è quadra ma piuttosto distorta (vorrei che astrobeed mi chiarisse la questione del limitatore). Non chiedetemi come ho fatto, sto provando mille cose in contemporanea, stasera cerco di riordinare le idee.

Su tutti i DSO se apri il menù relativo al canale c'è la voce "BW limit" , o qualcosa di simile, che se attivata limita la massima banda del canale ad un valore compreso tra 10 e 20 MHz, dipende dal DSO, serve per tagliare fuori il rumore ad altissima frequenza quando si fanno misure su segnali lenti.
Se quell'opzione è attiva distorce moltissimo le onde quadre con frequenza maggiore di 0.5-1MHz.


Logged

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

Se non vedi la quadra come tale puó anche essere che la sonda non sia regolata bene. L'oscilloscopio ha un pin con un segnale di calibrazione. Attacca lí la Tua sonda e regola il condensatore nel BNC della sonda in modo che vede una bella quadra.
Qua é spiegato come fare col Tuo oscilloscopio:
http://www.testequipmentdepot.com/instek/pdf/gds2000_manu.pdf a pagina 115
e spiegazione come funziona:
http://www.salvitti.it/geo/scope/index.htm in basso capitolo "sonde".

Ciao Uwe
Ciao, grazie per il link, lo strumento l'ho comprato proprio da loro e sembrava che avrebbero realizzato un manuale in italiano, per questo non avevo scaricato l'originale, ho testato le sonde con l'uscita di calibrazione e sono perfette, ho misurato anche le quadre che escono dal mio generatore e vanno bene, fino a certe frequenze (max 4-5MHz), oltre è il generatore che distorce; l'altro link è piuttosto interessante; in effetti non ho avuto tempo di studiarmi questo strumento comprato da poco, e vedo che diverse delle voci che ho trovato nei menu qui sono spiegate, sei una fonte infinita di informazioni! smiley-lol
Ce l'ho fatta! vedo 8 o 16MHz sull'oscilloscopio, l'onda è quadra ma piuttosto distorta (vorrei che astrobeed mi chiarisse la questione del limitatore). Non chiedetemi come ho fatto, sto provando mille cose in contemporanea, stasera cerco di riordinare le idee.
Su tutti i DSO se apri il menù relativo al canale c'è la voce "BW limit" , o qualcosa di simile, che se attivata limita la massima banda del canale ad un valore compreso tra 10 e 20 MHz, dipende dal DSO, serve per tagliare fuori il rumore ad altissima frequenza quando si fanno misure su segnali lenti.
Se quell'opzione è attiva distorce moltissimo le onde quadre con frequenza maggiore di 0.5-1MHz.
Ok, tra manuale e pulsanti vari, se c'è la troverò e la attiverò, ti faccio sapere
Grazie ancora, ora riassumo le prove che ho fatto.
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

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

Bene, per chi è interessato a questa cosa: personalmnete trovo estremamente utile poter disporre di un clock bell'è pronto e, soprattutto, sincronizzato con l'ATmega, si perde il pin 8 ma si guadagna hardware  smiley-money Avviso gli elettronici che con il quarzo esterno si ottiene una stabilità perfetta, con l'oscillatore interno (che mi pareva d'aver letto fosse gestito da un quarzo integrato nel chip, avete conferme o smentite da fare?), invece si ha stabilità con risoluzione del KHz (ma devo fare altre prove), comunque più che valida per svariate applicazioni
La manovra, alla fine semplice per avere su questo pin lo stesso clock del micro è questa: prelevare dal file boards.txt i 3 valori di fuses dalla board con cui stiamo lavorando (p.es. UNO o 2009); inserirli manualmente nei tre spazi previsti nel programma Fusecalc in modo da settare quest'ultimo con la configurazione originale della board; attivare la casella "clock out" e ricalcolare i fuses; creare in boards.txt una nuova board, identica all'originale, ma con diverso codice identificativo (i caratteri iniziali di ogni riga) ed i nuovi valori di fuses; inviare bootloader e sketch (qualsiasi) ad Arduino; già col bootloader si avrà il clock out attivo.
Descritta così sinteticamente è una tecnica che potranno eseguire solo coloro che già si muovono in questi ambiti; nella guida che sto per pubblicare, invece è spiegato come trovare e modificare il file boards.txt, cercherò di mettere anche una nota riguardo questa cosa che mi sembra interessante, in tal modo anche chi è meno esperto (come me...) potrà eseguirla con facilità.
Grazie a tutti per le preziose notizie (informatiche, elettroniche e sulla strumentazione) e la disponibilità a fornirle  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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21457
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

2 cose ( scusami che mi é venuto in mente la seconda soluzione solo ora):
* L' oscillatore interno al ATmega é un circuito RC non uno quarzo.
* Volendo si puó usare un oscillatore esterno al quarzo e dare il clock di questo al arduino. vedi http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf
pagina 27: 8.2 Clock Sources
pagina 34: 8.8 External Clock

Ciao Uwe
Logged

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

2 cose ( scusami che mi é venuto in mente la seconda soluzione solo ora):
Ciao Uwe, ci manca solo che devi scusarti smiley-confuse i tuoi interventi sono come benedizioni, in qualsiasi momento arrivino! smiley-lol
Quote
* L' oscillatore interno al ATmega é un circuito RC non uno quarzo.
L'avevo immaginato dal comportamento "ballerino" della frequenza, ma volevo conferma di non aver commesso errori. Grazie.
Quote
* Volendo si puó usare un oscillatore esterno al quarzo e dare il clock di questo al arduino. vedi http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf
pagina 27: 8.2 Clock Sources
pagina 34: 8.8 External Clock
Ciao Uwe
Ottimo! Questa p.es. è una tecnica eccellente quando il circuito esterno richiede un  proprio oscillatore, magari ad una frequenza particolare, che dovrebbe essere ottenuta con dell'hardware in uscita dal micro. Un esempio di ciò che ho realizzato tempo fa (ne avevamo parlato anche con te); un circuito generatore di sequenze di bit clockato a 10MHz; ho dovuto usare un quarzo+circuito (ma poteva essere qualsiasi altro hardware); invece di mettere anche il quarzo di stand alone al micro, avrei potuto inviargli tranquillamente questa frequenza al pin XTAL1. Allora non sapevo ovviamente del clock out altrimenti avrei potuto mettere un divisore per 1,6, ma il circuito sarebbe stato "scomodo" da realizzare, oppure mettere il quarzo da 10MHz al micro e prelevare il clock out per il circuito. Insomma ora che tutte queste tecniche sono note e sono uscite tante info forse vale la pena scriverle, dopo aver fatto le opportune prove, così chiunque abbia questo tipo di necessità potrebbe decidere quale sia la soluzione migliore.
Grande Uwe, e grazie ancora!

EDIT: aggiungo che il reference dell'ATmega è davvero una miniera di informazioni, devo mettermi in testa che va stampato (448pp!!!) e almeno sfogliato una volta; io non riesco a fare ricerche "a video" su file così lunghi, sono un antico all'antica smiley-wink magari poi uso il pdf per cercare l'argomento e la stampa per studiarlo (anche perché con l'inglese smiley-confuse)
« Last Edit: May 09, 2011, 06:19:20 am by menniti » 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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 123
Posts: 9294
"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 vuoi ottenere un clock veramente preciso con l'oscillatore RC interno, a patto che la temperatura del micro non vari molto, puoi usare il registro OSCCAL (pag. 37 datasheet) per aggiustare la frequenza.
La taratura va fatta a caldo, con un frequenzimetro misuri la reale frequenza tramite CLOCKOUT e vari OSCCAL fino a ottenere 8 MHz esatti.
La variazione di OSCCAL la puoi facilmente ottenere in dinamico usando un potenziometro letto tramite l'ADC alla guisa di un trimmer di taratura, poi una volta trovato il valore lo memorizzi come costante e lo carichi nel registro all'avvio del micro.


Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22630
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma anche con questa taratura hai gli sbalzi dovuti alla temperatura che riporta il datasheet relativamente all'oscillatore interno (che è tarato per 25°C, se non ricordo male)?
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 123
Posts: 9294
"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

Infatti ho precisato "a patto che la temperatura del micro non vari molto".
La taratura di serie degli ATmega, cioè il valore che viene caricato in OSCCAL all'accensione, è un valore medio ottenuto in modo empirico con test di laboratorio alle condizioni specificate sul data sheet, garantisce che la frequenza è più o meno 8 MHz, ma ti garantisco che la tolleranza è abbastanza alta proprio perché si tratta di un valore medio.
Normalmente la precisione, e il jitter, dell'oscillatore RC interno va bene per la stragrande maggioranza delle applicazioni, inclusa la precisione del baud rate nelle comunicazioni seriali, ma se devi misurare dei tempi, tramite timer, in modo molto preciso allora è indispensabile trovare il corretto valore di OSCCAL e fare in modo che la temperatura operativa del micro rimanga abbastanza stabile.

Logged

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

Se vuoi ottenere un clock veramente preciso con l'oscillatore RC interno, a patto che la temperatura del micro non vari molto, puoi usare il registro OSCCAL (pag. 37 datasheet) per aggiustare la frequenza.
La taratura va fatta a caldo, con un frequenzimetro misuri la reale frequenza tramite CLOCKOUT e vari OSCCAL fino a ottenere 8 MHz esatti.
La variazione di OSCCAL la puoi facilmente ottenere in dinamico usando un potenziometro letto tramite l'ADC alla guisa di un trimmer di taratura, poi una volta trovato il valore lo memorizzi come costante e lo carichi nel registro all'avvio del micro.

Come detto, voglio approfondire tutta questa cosa, quindi ogni info è utilissima, grazie!
Vorrei però capire una cosa, al di là del valore "preciso" della frequenza, che, come tu mi stai dicendo si può tarare, anche in modo abbastanza semplice, ma poi mi aiuterai in modo più approfondito  smiley-mr-green io per la verità segnalavo cifre ballerine, quindi instabilità della frequenza, non la variazione fissa rispetto agli 8MHz e, come mi ha confermato Uwe, sembra che ciò sia dovuto al fatto che questo è un oscillatore non quarzato; infatti se uso il chip col quarzo esterno sul pin vengono sparati 16000000 +/- 1 Hz, cioè non solo frequenza precisa ma anche estremamente stabile; quindi ciò che tu mi stai insegnando si rferisce alla precisione "di base" o anche alla stabilità della frequenza?
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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 123
Posts: 9294
"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

infatti se uso il chip col quarzo esterno sul pin vengono sparati 16000000 +/- 1 Hz, cioè non solo frequenza precisa ma anche estremamente stabile; quindi ciò che tu mi stai insegnando si rferisce alla precisione "di base" o anche alla stabilità della frequenza?

Che trovi 16.000.000 Hz +/- 1Hz non ci credo nemmeno se lo vedo  smiley-mr-green
Scherzi a parte non è possibile che misuri 16 MHz esatti per il semplice motivo che anche un buon quarzo ha la sua tolleranza, diciamo 20 ppm per uno buono, che rapportato a 16MHz fanno un errore compreso tra +/- 160 Hz rispetto al valore nominale.
Esempio pratico, se misuro la frequenza del quarzo della UNO, della mega 2560 e delle tre Luigino 328 che ho a mia disposizione trovo queste frequenze :

Ta 22.3C°, misura presa dopo 60 dall'accensione della scheda.

UNO      15.959.622 Hz
2560      16.000.036 Hz
L328 1   15.999.957 Hz
L328 2   16.000.982 Hz
L328 3   16.000.115 Hz

Da notare che le misure le ho fatte aspettando solo un minuto dopo aver acceso la scheda, ma tenuto conto che la temperatura ambiente è poco più di 23C° e che normalmente Arduino non scalda va bene farla così.
Il frequenzimetro usato è un METEX da laboratorio, uno strumento calibrato nemmeno due mesi fa e preciso al singolo Hertz fino a 500 MHz, inteso non come visualizzazione, che è a 9 cifre, ma proprio come precisione reale.
Ho lasciato completare il warm up, circa 10 minuti, al frequenzimetro in modo da permettere al sistema di termostabilizzazione del suo oscillatore di andare a regime.
Poi anche con i quarzi c'è da fare i conti con la deriva termica che incide di altri ppm in funzione della temperatura, quanti e come dipendono dal modello specifico (consultare data sheet)
Il valore della frequenza sulla UNO è abbastanza distante da quello atteso, quasi 41 kHz in meno, perché sull'ATmega non c'è un quarzo, ma un risonatore ceramico, notoriamente meno precisi dei quarzi, in compenso sono molto più stabili di un oscillatore RC.

OSCCAL interviene solo sulla frequenza dell'oscillatore RC, la stabilità dipende in gran parte dalla temperatura, però per effetto di questa non fluttua rapidamente, è una variazione abbastanza lenta.
« Last Edit: May 09, 2011, 10:23:04 am by astrobeed » Logged

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

Alla faccia, che lezione di elettronica  smiley-zipper
Vabbé, forse ho esagerato  smiley-red; no, scherzi a parte, devo solo controllare quanti 0 c'erano tra il 6 e l'1 finale (dicesi risoluzione smiley-grin), visto che avevo l'oscilloscopio ad una 80na di cm che per me sono come 80 metri per te  smiley-eek
Invece sono più che certo che la fequenza dell'oscillatore interno era molto ballerina continuamente, non erano lente variazioni dovute a fattori di temperatura o altro. Però, per dovere di cronaca, e per non lasciare strnzt scritte sul thread rifaccio le misure, le segno scrupolosamente e le riporto qui, appena possibile, magari mi avvicino con Arduino all'Oscilloscopio  smiley-fat

EDIT: solo ora ho letto che in realtà parlavi di TeraHertz, si dicono così 16.000.000 di MHz ? così il tuo discorso prende una piega diversa smiley-grin smiley smiley smiley
« Last Edit: May 09, 2011, 10:21:00 am by menniti » 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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21457
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao astrobeed
Quale clock del Arduino UNO hai misurato?
Quello del ATmega 8U2 o del ATmega328?
Il ATmega328 sul Arduino UNO ha un risonatore non un quarze e percui piú inpreciso.
Ciao Uwe
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 123
Posts: 9294
"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

Corretto lo svarione dei 16 THz  smiley-grin
Se la misura l'hai fatta con il frequenzimetro integrato nel DSO ci credo che hai visto 16MHz esatti perché negli strumenti di questo tipo la risoluzione reale è solo 6 cifre, se non solo 5, quindi ti segna 16 MHz esatti per una frequenza compresa tra 15.999.900 Hz e 16.000.100 Hz nella migliore delle ipotesi.

Logged

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

 smiley-lol
Sì ne sono convito anch'io anche se ora sono fuori; misurerò anche col frequenzimetro, saprò essere un po' più preciso. Sorry!
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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 123
Posts: 9294
"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

ciao astrobeed
Quale clock del Arduino UNO hai misurato?
Quello del ATmega 8U2 o del ATmega328?

Sull'ATmega 328 e più sotto, nel mio post, ho fatto notare che l'abbondante errore è dovuto al fatto che sulla UNO c'è un risonatore al posto del quarzo.
Logged

Pages: 1 [2]   Go Up
Jump to: