Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Oscillatore con Arduino

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Oscillatore con Arduino

Messaggioda Foto UtentePioz » 27 ott 2012, 17:23

Ciao ragazzi. Ho acquistato da poco Arduino uno. Me la cavavo bene con il C e inoltre le mie basi sui core80 sono buone, sia da un punto di vista hardware che da quello della programmazione(anche se mi manca la parte dei timer che adesso dovremmo fare) perché a scuola in laboratorio programmiamo il mitico 8051.
Volevo realizzare un progetto di un "oscillatore" a frequenza variabili controllate via sofware. Esempio in poche parole gli dico che:
volgio una frequenza sul pin 13 di 1KHz per 10s, passati i dieci secondi la frequenza cambia a 500Hz e me la mantiene per 5secondi.
Ovviamente ciò risco a farlo via software agendo direttamente sul pin e chiamando un opportuno delay, ma ovviamente se inserisco altre istuzioni nel programma la frequenza che imposto non è più vera!!
Quindi l'unico sistema per fare ciò sarebbe quello di usare i timer e interrupt o sbalgio?
mi consigliate qualcos'altro? intanto io me li studio per bene...
Avatar utente
Foto UtentePioz
629 4 8
Expert
Expert
 
Messaggi: 568
Iscritto il: 11 ago 2011, 21:56

0
voti

[2] Re: Oscillatore con Arduino

Messaggioda Foto Utenterusty » 27 ott 2012, 17:57

Eh si putroppo devi programmare un timer, e ti consiglio anche un XTAL esterno per maggiore precisione.
Avatar utente
Foto Utenterusty
4.075 2 9 11
Utente disattivato per decisione dell'amministrazione proprietaria del sito
 
Messaggi: 1578
Iscritto il: 25 gen 2009, 13:10

0
voti

[3] Re: Oscillatore con Arduino

Messaggioda Foto UtentePioz » 27 ott 2012, 18:13

Bene dai, ho visto che non è poi una cosa così difficile. Sfruttando le istruzioni che creano un segnale PWM impostando il periodo diventa una cosa molto facile, più facile di quello che pensavo.
Non ho problemi di precisione, quindi va più che bene anche l'oscillatore suo del micro!!
Grazie ciao.
Avatar utente
Foto UtentePioz
629 4 8
Expert
Expert
 
Messaggi: 568
Iscritto il: 11 ago 2011, 21:56

1
voti

[4] Re: Oscillatore con Arduino

Messaggioda Foto Utentecyclone » 30 ott 2012, 20:43

Ciao,
Se devi realizzare un semplice generatore onda quadra a frequenza variabile questo metodo va bene.
Dopo aver configurato il timer1 a 16bit e il prescaler puoi calcolarti, con le formule che trovi sul data sheet dell'atmega328, i valori di reload da assegnare al timer.
Poi, abilitare gli interrupt, l'interrupt di overflow del timer1, scrivere l'isr e il gioco è fatto.
Oppure ti puoi connettere all' OCR1A ,1B (pin d'uscita) e gestirlo direttamente con il timer(metodo più performante).

I problemi, ovvero le difficoltà, nascono se vuoi realizzare un generatore di forme d'onda arbitrarie o sinusoidali.
Lì hai bisogno di creare una tabella con tutti i valori precalcolati e normalizzati, e inviare tali valori al timer1 configurato come PWM.... metti un filtro passa basso del secondo ordine e ottieni un bel generatore audio che potrà servirti per vari scopi.

Ti interessa anche questo metodo o ti basta la sola onda quadra ?
ciao
Avatar utente
Foto Utentecyclone
86 2
New entry
New entry
 
Messaggi: 64
Iscritto il: 6 feb 2012, 11:38

1
voti

[5] Re: Oscillatore con Arduino

Messaggioda Foto UtenteTardoFreak » 30 ott 2012, 23:43

Da questo articolo potresti forse trovare qualche spunto. O_/
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[6] Re: Oscillatore con Arduino

Messaggioda Foto UtentePioz » 31 ott 2012, 0:24

Ciao ragazzi.
Purtroppo, lo dico sinceramente, ho trovato già le librerie belle pronte online che gestiscono i timer 1 e 2 e generano ritardi dall'ordine di microsecondi a quello di decine di minuti.
timerone.h qui
mstimer2.h qui
Ciò ovviamente non mi vieta di studiarmoi per bene il datasheet del328 e provare a configurare i timer manualmente. Adesso a scuola abbiamo accenntato quelli dell'8051 e loro modi d'impiego, quindi sono sicuro che presto comincerò a smanettarci in assembly e poi in C. Però intanto mi guardo lo stesso il data sheet e qualche guida online per vedere di capire qualcosa da solo.
Per la mia applicazione per ora ho solo bisogno di un generatore di onde quadre controllato da un timer e di un altro timer che generi un interrupt dopo un tempo prestabilito che vada a modificare la frequenza dell'onda quadra, quindi niente di così eccezionale se faccio uso delle librerie citate.
metti un filtro passa basso del secondo ordine e ottieni un bel generatore audio che potrà servirti per vari scopi
...mmmm, belle le applicazioni del teorema di Fourier :mrgreen: :mrgreen: :ok:

TardoFreak ha scritto:Da questo articolo potresti forse trovare qualche spunto. O_/


Bell'articolo, però per il momento non fa il caso mio, ma magari in futuro mi piacerebba implementaro con un altro micro magari... :D
Se ho problemi so dove venire a sbattere la testa #-o , con voi no c'è mai preoccupazione. Grazie ragazzi, a presto!! O_/
Avatar utente
Foto UtentePioz
629 4 8
Expert
Expert
 
Messaggi: 568
Iscritto il: 11 ago 2011, 21:56

0
voti

[7] Re: Oscillatore con Arduino

Messaggioda Foto Utenteaduri » 31 ott 2012, 11:47

Anche questo post sui timer di arduino potrebbe essere interessante.
http://arduino.cc/forum/index.php/topic,37875.0.html

ciao
Antonio
Avatar utente
Foto Utenteaduri
435 1 5 11
Expert
Expert
 
Messaggi: 937
Iscritto il: 29 giu 2005, 23:13
Località: Genova

0
voti

[8] Re: Oscillatore con Arduino

Messaggioda Foto UtentePioz » 9 nov 2012, 20:06

Ciao ragazzi, vi chiedo un informazione sempre riguardante arduino.
C'è la possibilità di estrarre un numero random da una serie di valori certa, mi spiego
questa è la classica: random(min,max);
Questa pesca il numero nell'intervallo min,max.
A me ne servirebbe una del tipo:
random(n1,n2,n3,n4..);
Cioè che pescasse un numero a caso sciegliendo uno degli nx...
Avatar utente
Foto UtentePioz
629 4 8
Expert
Expert
 
Messaggi: 568
Iscritto il: 11 ago 2011, 21:56

0
voti

[9] Re: Oscillatore con Arduino

Messaggioda Foto Utentecyclone » 10 nov 2012, 10:45

Fattibilissimo:
crea una tabella puntata con tutti i tuoi valori certi messi a caso, (o anche in successione)

poi accedi ad una locazione della tabella indicando come range(min,max)nella function rnd le locazioni min e max che puntano alla tabella, a questo punto estrapoli il valore random. Quindi alla funzione rnd non passerai i valori ma gli indirizzi che puntano alla tabella che contiene i tuoi valori certi.

Spero essere stato chiaro.
Ciao
Avatar utente
Foto Utentecyclone
86 2
New entry
New entry
 
Messaggi: 64
Iscritto il: 6 feb 2012, 11:38

1
voti

[10] Re: Oscillatore con Arduino

Messaggioda Foto Utentecyclone » 10 nov 2012, 11:26

altro metodo.
se i valori non sono molti puoi inserire i valori certi in ram.

metti i tuoi valori certi in una array di [n] elementi.
la tua array alla fine avrà un indice [Idx] es:50

calcola l'rnd tra l'indice min(può essere=0 o altro) e il max della matrice e preleva il valore corrispondente.

ciao
Avatar utente
Foto Utentecyclone
86 2
New entry
New entry
 
Messaggi: 64
Iscritto il: 6 feb 2012, 11:38

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti