progetto accordatore con pic
progetto accordatore con pic
vi lascio questa chicca che ho trovato su diystompboxes.com in caso a qualcuno interessi
http://www.diystompboxes.com/smfforum/i ... ic=80673.0
enjoy!
http://www.diystompboxes.com/smfforum/i ... ic=80673.0
enjoy!
[align=center][url=http://garageeffects.altervista.org][img]http://garageeffects.altervista.org/_altervista_ht/pics/banner.png[/img][/url][/align]
- davidefender
- Garzone di Roger Mayer
- Messaggi: 1437
- Iscritto il: 11/02/2008, 23:51
- Località: Roma
- Contatta:
Re:progetto accordatore con pic
hai fatto una segnalazione interessantissima!
da tempo volevo, finiti i miei 15 progetti aperti, concentrarmi su un accordatore, grande!
(peccato che non vi sia il sorgente... però da una delle fonti che cita ci sono informazioni interessanti http://www.myplace.nu/avr/gtuner/index.htm )
da tempo volevo, finiti i miei 15 progetti aperti, concentrarmi su un accordatore, grande!
(peccato che non vi sia il sorgente... però da una delle fonti che cita ci sono informazioni interessanti http://www.myplace.nu/avr/gtuner/index.htm )
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché.
(Albert Einstein)
(Albert Einstein)
Re:progetto accordatore con pic
guarda qui
http://schickt.de/comments.php?y=08&m=0 ... 610-101437
EDIT: accidenti vero, c'è l'HEX ma non il sorgente.....
ma magari si può decompilare quanto meno in assembler?
http://schickt.de/comments.php?y=08&m=0 ... 610-101437
EDIT: accidenti vero, c'è l'HEX ma non il sorgente.....
ma magari si può decompilare quanto meno in assembler?
Ultima modifica di robizz il 16/04/2010, 23:07, modificato 1 volta in totale.
[align=center][url=http://garageeffects.altervista.org][img]http://garageeffects.altervista.org/_altervista_ht/pics/banner.png[/img][/url][/align]
Re:progetto accordatore con pic
Bellissimo!!!
vedo che il programma in C è semplice ma comunque non capisco bene, qualcuno può commentarlo in modo più approfondito?
(davide domani vado in fiera, se l'arduino ce l'hanno li bene, altrimenti lunedi lo prendo online :-) )
vedo che il programma in C è semplice ma comunque non capisco bene, qualcuno può commentarlo in modo più approfondito?
(davide domani vado in fiera, se l'arduino ce l'hanno li bene, altrimenti lunedi lo prendo online :-) )
MEMENTO trimmer Humdinger :lol1:
- davidefender
- Garzone di Roger Mayer
- Messaggi: 1437
- Iscritto il: 11/02/2008, 23:51
- Località: Roma
- Contatta:
Re:progetto accordatore con pic
salve!
allora, per la decompilazione secondo me non conviene neppure! sarebbe molto meglio/interessante riproggettarlo, tanto il senso si capisce molto bene.
si possono distinguere due problemi:
- Uno di tipo hardware, ovvero determinare la frequenza della nota suonata
- Uno di tipo software, una volta che so la frequenza come faccio a riconoscere la nota?
Primo problema:
Si risolve molto elegantemente, un'ipotesi che già immaginavo fin dai primi momenti che pensai di fare un accordatore, ma che nel progetto postato da robizz prende forma in tutto il suo splendore Il circuito prima si occupa di "ripulire" un pò il segnale grazie al TL072 (e su questi primi stadi, Luix ne saprebbe dire mooolto più di me ) l'ultimo è un LM393 che è un "comparatore" (non un opamp) con configurazione che se non sbaglio mi sembra ad isteresi. Questo squadra perfettamente il segnale. Risultato? un'onda quadra alla frequenza che state suonando entra in un PIN del uC al quale è connesso un interrupt; questo scatta sulla transizione da alto-basso (o viceversa, è uguale) ed ogni volta si segna l'ora di sistema. Dopo aver preso abbastanza campioni restituisce una media del tempo intercorso fra ogni interrupt... cos'é? è l'inverso della frequenza! è il periodo dell'onda quadra, a questo punto troviamo
f = 1/p
Secondo problema:
sappiamo la frequenza del nostro segnale.. e questo è già davvero moltissimo, ma cosa ci facciamo? guardate qui:
http://ulisse.sissa.it/chiediAUlisse/do ... 40418d001/
con questa formula possiamo, scelto un punti di riferimento ad esempio LA3 a 440 trovare i semitoni di distanza, e dunque quale nota con estrema precisione stiamo suonando, basta invertire la formula:
2^(n/12) * frif = f
invertiamola e diventa
n= log2(f/frif) * 12
quindi trovata la f del segnale, fissata una frif sappiamo i semitoni che intercorrono fra la nota suonata e il LA 440.. insomma, non rimane che spiattellare questi risultati su un LCD!
#Luix: ehehe ti sto portando nell'oscuro mondo di noi Arduinisti! vedrai che una volta acquistato non ti saprai spiegare perchè non ci avessi cominciato a giocare prima! ....inutile dire che anche l'accordatore è un progetto tranquillamente alla portata dell'Arduino!
allora, per la decompilazione secondo me non conviene neppure! sarebbe molto meglio/interessante riproggettarlo, tanto il senso si capisce molto bene.
si possono distinguere due problemi:
- Uno di tipo hardware, ovvero determinare la frequenza della nota suonata
- Uno di tipo software, una volta che so la frequenza come faccio a riconoscere la nota?
Primo problema:
Si risolve molto elegantemente, un'ipotesi che già immaginavo fin dai primi momenti che pensai di fare un accordatore, ma che nel progetto postato da robizz prende forma in tutto il suo splendore Il circuito prima si occupa di "ripulire" un pò il segnale grazie al TL072 (e su questi primi stadi, Luix ne saprebbe dire mooolto più di me ) l'ultimo è un LM393 che è un "comparatore" (non un opamp) con configurazione che se non sbaglio mi sembra ad isteresi. Questo squadra perfettamente il segnale. Risultato? un'onda quadra alla frequenza che state suonando entra in un PIN del uC al quale è connesso un interrupt; questo scatta sulla transizione da alto-basso (o viceversa, è uguale) ed ogni volta si segna l'ora di sistema. Dopo aver preso abbastanza campioni restituisce una media del tempo intercorso fra ogni interrupt... cos'é? è l'inverso della frequenza! è il periodo dell'onda quadra, a questo punto troviamo
f = 1/p
Secondo problema:
sappiamo la frequenza del nostro segnale.. e questo è già davvero moltissimo, ma cosa ci facciamo? guardate qui:
http://ulisse.sissa.it/chiediAUlisse/do ... 40418d001/
con questa formula possiamo, scelto un punti di riferimento ad esempio LA3 a 440 trovare i semitoni di distanza, e dunque quale nota con estrema precisione stiamo suonando, basta invertire la formula:
2^(n/12) * frif = f
invertiamola e diventa
n= log2(f/frif) * 12
quindi trovata la f del segnale, fissata una frif sappiamo i semitoni che intercorrono fra la nota suonata e il LA 440.. insomma, non rimane che spiattellare questi risultati su un LCD!
#Luix: ehehe ti sto portando nell'oscuro mondo di noi Arduinisti! vedrai che una volta acquistato non ti saprai spiegare perchè non ci avessi cominciato a giocare prima! ....inutile dire che anche l'accordatore è un progetto tranquillamente alla portata dell'Arduino!
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché.
(Albert Einstein)
(Albert Einstein)
- botti1988
- Diyer
- Messaggi: 129
- Iscritto il: 05/10/2006, 16:21
- Località: Petritoli (FM) - Bologna
- Contatta:
Re:progetto accordatore con pic
anche io sto pensando di fare un accordatore, visto che ho a casa inutilizzaato uno schermino lcd 128x32 volevo farci qualcosa di carino.davidefender ha scritto: ! ....inutile dire che anche l'accordatore è un progetto tranquillamente alla portata dell'Arduino!
davide una domanda, ma che differenza c'è tra l'usare arduino oppure usare un atmel atmega8 ad esempio con i relativi componenti per assemblare un circuito?
Re:progetto accordatore con pic
Ma con i controllori si è in grado di calcolare un logaritmo?? spettacolo!
Comunque io mi riferivo a questo codice http://www.myplace.nu/avr/gtuner/gtuner.c non ho ben capito a cosa servono certi procedimenti (quello che fanno le istruzioni si)... se magari qualcuno mi da una spiegazione più approfondita....
Grazie!
Ah come display cosa conviene prendere? un seriale o un parallelo?
Comunque io mi riferivo a questo codice http://www.myplace.nu/avr/gtuner/gtuner.c non ho ben capito a cosa servono certi procedimenti (quello che fanno le istruzioni si)... se magari qualcuno mi da una spiegazione più approfondita....
Grazie!
Ah come display cosa conviene prendere? un seriale o un parallelo?
MEMENTO trimmer Humdinger :lol1:
- davidefender
- Garzone di Roger Mayer
- Messaggi: 1437
- Iscritto il: 11/02/2008, 23:51
- Località: Roma
- Contatta:
Re:progetto accordatore con pic
@botti1988: allora, c''è da dire che ovviamente il chip è lo stesso, dunque le "potenzialità" sono le stesse. Se fosse una vita che programmi Atmel, allora probabilmente non saresti interessato ad Arduino. Per fartela davvero davvero breve (per maggiori info vai su www.arduino.cc) Arduino è una board pe lo sviluppo con tre vantaggi:
- Si programma tramite USB: questo è possibile grazie ad un piccolo bootloader preinstallato nel uC (il cuore di Arduino) che permette di scrivere i programmi passati dal cavo USB
- Dispone di librerie di base avanzate: non ci saranno mai istruzion a bassissimo livello incomprensibile, ti sembrerà sempre di programmare su un PC piuttosto che su un uC, le funzionalità offerte sono tantissime tutte pronte e documentate alla perfezione
- C'è una grande comunità: moltissime persone utilizzano Arduino, e grazie a loro oggi ci sono librerie oramai stabili per controllare qualsiasi cosa si possa attaccare all'Arduino (per farti capire.. sai come scrivi ciao 'mondo' su un LCD? lcd.print("Ciao Mondo!"))
La cosa ovviamente migliore è che è tutto in PIU', cioè anche se compri Arduino nessuno ti vieta di programmare direttamente in assembler, c o c++ (io ad esempio il programma per il MIDI switcher l'ho sviluppato in c++ con le librerie di base di Arduino!) di eliminare o ripristinare il bootloader.
Ma controlla il sito per informazioni più dettagliate!
@Luix: eccome! potenze,esponenziali, logaritmi.. giusto il caffé ancora non lo sà fare!
cmq, ho dato un'occhiata al codice, cerco di spiegare a grandi linee l'intento del codice (nei particolari non scendo), forse sono cose che avrai già notato.. cmq:
Prima cosa, c'è un timer interno che ogni volta che scade aumenta di 1 il contatore "count_hi" a cosa serve? da quanto si evince dal codice se il timer scatta per 80 volte vuol dire che non c'è stato input per 80 cicli = si considera che non c'è segnale in ingresso (così spegne i led quando non si suona una nota). La prima for accumula (nel caso non scada il timer come detto) 32 campioni dell'input nella variabile count.
Nel caso di una serie valida questo valore viene diviso per 32 mediante lo shift di 5 (praticamente se ne fa la media) e poi si comincia a a fare dei controlli per verificare in che fascia si ricade (Transition_Count) così si identifica dove è la nota suonata (fra E e B? fra B e G? e così via...).
In ultimo si verifica se fosse mai la nota è intonata, e quindi se coincide più o meno con un valore "centered" (dico più o meno perchè si prende un piccolo margine per evitare che l'accordatore sia troppo sensibile e non ti dia mai la nota intonata, si crea difatti un comparatore ad isteresi proprio come è documentato sul codice)
.... praticamente fine dei giochi!
ora.. in effetti è un pò cervellotico, ma sopratutto perchè probabilmente con quel PIC non si possono definire interrupt esterni (per l'onda quadra, infatti se la legge con una sequenza di polling.. questo incasina parecchio l'idea). Credo che un'implementazione migliore, sfruttando a meglio le Potenzialità dell'Arduino vorrebbe almeno due oggetti software, uno che AUTONOMAMENTE (grazie ad interrupt trasparenti al ciclo di main) calcolasse CONTINUAMENTE la nota suonata (eventualmente con un valore speciale tipo "NO_NOTE" per dire che non c'è segnale in ingresso) e che un altro oggetto, diciamo il ciclo main ogni tot gli chiedesse "che nota suona?" con un metodo dedicato.. molto più pulito e ordinato e sopratutto.. comprensibile!
Edit: scusa mi ero dimenticato dell'LCD, io direi un parallelo.. costa meno! considera che è vero che ti prende 6 PIN, ma quello seriale poi ti impedisce di usare la trasmissione seriale perchè ci devi attaccare l'LCD e non ci puoi mettere altro!
- Si programma tramite USB: questo è possibile grazie ad un piccolo bootloader preinstallato nel uC (il cuore di Arduino) che permette di scrivere i programmi passati dal cavo USB
- Dispone di librerie di base avanzate: non ci saranno mai istruzion a bassissimo livello incomprensibile, ti sembrerà sempre di programmare su un PC piuttosto che su un uC, le funzionalità offerte sono tantissime tutte pronte e documentate alla perfezione
- C'è una grande comunità: moltissime persone utilizzano Arduino, e grazie a loro oggi ci sono librerie oramai stabili per controllare qualsiasi cosa si possa attaccare all'Arduino (per farti capire.. sai come scrivi ciao 'mondo' su un LCD? lcd.print("Ciao Mondo!"))
La cosa ovviamente migliore è che è tutto in PIU', cioè anche se compri Arduino nessuno ti vieta di programmare direttamente in assembler, c o c++ (io ad esempio il programma per il MIDI switcher l'ho sviluppato in c++ con le librerie di base di Arduino!) di eliminare o ripristinare il bootloader.
Ma controlla il sito per informazioni più dettagliate!
@Luix: eccome! potenze,esponenziali, logaritmi.. giusto il caffé ancora non lo sà fare!
cmq, ho dato un'occhiata al codice, cerco di spiegare a grandi linee l'intento del codice (nei particolari non scendo), forse sono cose che avrai già notato.. cmq:
Prima cosa, c'è un timer interno che ogni volta che scade aumenta di 1 il contatore "count_hi" a cosa serve? da quanto si evince dal codice se il timer scatta per 80 volte vuol dire che non c'è stato input per 80 cicli = si considera che non c'è segnale in ingresso (così spegne i led quando non si suona una nota). La prima for accumula (nel caso non scada il timer come detto) 32 campioni dell'input nella variabile count.
Nel caso di una serie valida questo valore viene diviso per 32 mediante lo shift di 5 (praticamente se ne fa la media) e poi si comincia a a fare dei controlli per verificare in che fascia si ricade (Transition_Count) così si identifica dove è la nota suonata (fra E e B? fra B e G? e così via...).
In ultimo si verifica se fosse mai la nota è intonata, e quindi se coincide più o meno con un valore "centered" (dico più o meno perchè si prende un piccolo margine per evitare che l'accordatore sia troppo sensibile e non ti dia mai la nota intonata, si crea difatti un comparatore ad isteresi proprio come è documentato sul codice)
.... praticamente fine dei giochi!
ora.. in effetti è un pò cervellotico, ma sopratutto perchè probabilmente con quel PIC non si possono definire interrupt esterni (per l'onda quadra, infatti se la legge con una sequenza di polling.. questo incasina parecchio l'idea). Credo che un'implementazione migliore, sfruttando a meglio le Potenzialità dell'Arduino vorrebbe almeno due oggetti software, uno che AUTONOMAMENTE (grazie ad interrupt trasparenti al ciclo di main) calcolasse CONTINUAMENTE la nota suonata (eventualmente con un valore speciale tipo "NO_NOTE" per dire che non c'è segnale in ingresso) e che un altro oggetto, diciamo il ciclo main ogni tot gli chiedesse "che nota suona?" con un metodo dedicato.. molto più pulito e ordinato e sopratutto.. comprensibile!
Edit: scusa mi ero dimenticato dell'LCD, io direi un parallelo.. costa meno! considera che è vero che ti prende 6 PIN, ma quello seriale poi ti impedisce di usare la trasmissione seriale perchè ci devi attaccare l'LCD e non ci puoi mettere altro!
Ultima modifica di davidefender il 17/04/2010, 23:37, modificato 1 volta in totale.
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché.
(Albert Einstein)
(Albert Einstein)
Re:progetto accordatore con pic
ma una cosa più "minimal" con un display 7 segmenti per questo accordatore non era meglio?
di solito a me non interessa molto sapere di quanto e calante la nota, magari se qualcuno si prende la briga di sistemare il codice potrebbe prendere in considerazione la cosa....
l'accordatore diventerebbe grosso come un mignolo
di solito a me non interessa molto sapere di quanto e calante la nota, magari se qualcuno si prende la briga di sistemare il codice potrebbe prendere in considerazione la cosa....
l'accordatore diventerebbe grosso come un mignolo
[align=center][url=http://garageeffects.altervista.org][img]http://garageeffects.altervista.org/_altervista_ht/pics/banner.png[/img][/url][/align]
Re:progetto accordatore con pic
OK per l'LCD va bene il parallelo
Per il codice ci ho capito poco.... studierò!
Per il circuito di ingresso dell'accordatore, è un passa basso "multiple feedback" limita il segnale della chitarra probabilmente al mi alto (non serve andare oltre)... poi c'è il comparatore che squadra l'onda!
Per il codice ci ho capito poco.... studierò!
Per il circuito di ingresso dell'accordatore, è un passa basso "multiple feedback" limita il segnale della chitarra probabilmente al mi alto (non serve andare oltre)... poi c'è il comparatore che squadra l'onda!
MEMENTO trimmer Humdinger :lol1:
- davidefender
- Garzone di Roger Mayer
- Messaggi: 1437
- Iscritto il: 11/02/2008, 23:51
- Località: Roma
- Contatta:
Re:progetto accordatore con pic
lo sapevo che ne sapevi più di me! :Dluix ha scritto: Per il circuito di ingresso dell'accordatore, è un passa basso "multiple feedback" limita il segnale della chitarra probabilmente al mi alto (non serve andare oltre)...
in effetti anche io avevo pensato che si dovessero togliere tutte le armoniche in maniera da rendere il segnale "quasi" sinusoidale.. ma non converrebbe che si arrivasse almeno al Mi del 12 tasto? in questo modo si potrebbero controllare anche le armoniche della chitarra
In effetti toccherebbe provarlo...
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché.
(Albert Einstein)
(Albert Einstein)
Re:progetto accordatore con pic
Ad esempio questa "funzione" con la parentesi quadra che cosa è?
unsigned int Center_Count[] =
{
BASE_FREQUENCY/EH_STRING, // High E
BASE_FREQUENCY/B_STRING, // B
BASE_FREQUENCY/G_STRING, // G
BASE_FREQUENCY/D_STRING, // D
BASE_FREQUENCY/A_STRING, // A
BASE_FREQUENCY/E_STRING, // Low E
};
un array?
Dividendo la frequenza base del la 440 con la frequenza della corda cosa si ottiene?
PS non ti conviene accordare con gli armonici, potresti scoprire che la tua chitarra non è cosi precisa
unsigned int Center_Count[] =
{
BASE_FREQUENCY/EH_STRING, // High E
BASE_FREQUENCY/B_STRING, // B
BASE_FREQUENCY/G_STRING, // G
BASE_FREQUENCY/D_STRING, // D
BASE_FREQUENCY/A_STRING, // A
BASE_FREQUENCY/E_STRING, // Low E
};
un array?
Dividendo la frequenza base del la 440 con la frequenza della corda cosa si ottiene?
PS non ti conviene accordare con gli armonici, potresti scoprire che la tua chitarra non è cosi precisa
MEMENTO trimmer Humdinger :lol1:
- davidefender
- Garzone di Roger Mayer
- Messaggi: 1437
- Iscritto il: 11/02/2008, 23:51
- Località: Roma
- Contatta:
Re:progetto accordatore con pic
quello, come hai detto correttamente, è un array. Quei valori, secondo qualche formula matematica che però non so (on so su che "base teorica" si è fondato), sono i valori esatti che deve avere il valore letto per dire: "è un MI!" o "è un LA!"
Sono semplicemente i valori per confronto...
Sono semplicemente i valori per confronto...
si è vero.. ma potresti usare l'accordatore per aggiustare le sellette per l'8ttava!luix ha scritto: PS non ti conviene accordare con gli armonici, potresti scoprire che la tua chitarra non è cosi precisa
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché.
(Albert Einstein)
(Albert Einstein)
Re:progetto accordatore con pic
Ah ecco! quindi dividendo la frequenza effettiva per il LA 440 dovresti ottenere il numero di conteggi che il pic deve rilevare per dire la nota!
MEMENTO trimmer Humdinger :lol1:
Re:progetto accordatore con pic
butto lì un input nel caso a qualcuno interessi:
a costo zero si rimediano i display dei nokia tipo 3310 e fratelli che sono ottimi per questo tipo di applicazione, googlando trovate un infinità di tutorial e codice per gestirlo!
ovviamente va risistemato il software!
un'altra cosa, potete postare il link diretto al sorgente che io non l'ho trovato?
thanks!
a costo zero si rimediano i display dei nokia tipo 3310 e fratelli che sono ottimi per questo tipo di applicazione, googlando trovate un infinità di tutorial e codice per gestirlo!
ovviamente va risistemato il software!
un'altra cosa, potete postare il link diretto al sorgente che io non l'ho trovato?
thanks!
[align=center][url=http://garageeffects.altervista.org][img]http://garageeffects.altervista.org/_altervista_ht/pics/banner.png[/img][/url][/align]