Ciao a tutti, è da un po' che manco, ma più o meno sono sempre all' "opera"
Un po' di tempo fa, ho parlato con un mio amico liutaio, è mi è venuto in mente di provare a fare un dispositivo che riuscisse
a leggere il suono e identificare la nota corrispettiva.
Non so, l'idea, sarebbe quella di far tintinnare un bicchiere di cristallo, e fargli determinare che nota emette.
Per prima cosa, mi sono procurato un diapason, che emette una nota perfetta a 440 hz spaccati, quindi un LA in quarta ottava.
Ho recuperato una capsula microfonica preamplifaicata, montato un paio di operazionali per amplificare il tutto e un terzo operazionale come comparatore.
L'amplificazione totale è molto alta: il primo stadio a 48 volte, mentre il secondo 15, per un totale di 48*15= 720 volte.
Il segnale viene squadrato ovviamente, perchè l'amplificazione è troppo e elevata in rapporto all'alimentazione, solo 5 volts (per non complicarmi la vita
con l'entrata del pic)
ho dovuto fare 2 stadi con gli operazionali, perchè amplificando di 720 volte in una botta sola, avrei ridotto parecchio la banda passante
considerando poi che gli lm358, sono scarsi.
Avevo anche dei tl081 o tl082 molto migliori in termini di slew rate ecc, ma necessitano una tensione duale...insomma l'lm358, fa il suo dovere.
lo stadio comparatore, è usato come trigger, ma è ancora in fase di studio, non capisco bene se serve o meno.
Il problema è che quando vado ad osservare la forma d'onda di certe note, vedo che le creste "fluttuano" verso il basso...un po' difficile da spiegare adesso e il trigger aiuterebbe.
Le porte del pic, sono già triggerate, ma io avrei bisogno una soglia diversa di quella di TTl, da qui l'idea di un comparatore...
Comunque, una volta fatto l'hardware esterno, ho steso il programma, abilitato la periferica per il conteggio degli impulsi, mi sono fatto una finestra temporale di 1 secondo
e ho provato.
I pin del pic adibiti ad input sono 2: uno entra nel modulo di conteggio, mentre l'altro aspetta il segnale, se non arriva nulla, la periferica non parte con il conteggio
in definitiva è :
il pin A è alto? si: parti col conteggio. No? aspetta che arrivi, nle frattempo non fare nulla.
Logicamente, come avrete capito è un polling, ma mi va bene così, senza scomodare gli interrupt.
Per ora nel programma, ho messo solo 3 ottave: la quarta, la quinta e la sesta. Quelle inferiori sono ancora d'aggiungere.
L'idea, come avrete capito, non è altro che un frequenzimetro, che al valore memorizzato, compara valori che io ho messo.
Se l'esito soddisfa determinati requisiti, la nota viene stampata a lcd.
Per fare questo, bastano delle banali sottrazioni e test sul bit C (di riporto) nel registro status
Es
frequenza entrante 540 hz
sapendo (mi sono documentato)
che il Do 4 ottava va da 523 a 554 hz
DO# 4 ottava 554 a 586
il pic legge la frequenza appunto 540 e inizia a comparare
540-523 va in negativo? no
540-554 va in negativo? si, allora non può essere ed è per forza un DO 4 ottava
e cos' via.....
Ho provato a far funzionare tutto e va abbastanza bene, riconosce le note del flauto che uso come prova.
A volte però, se non si soffia bene, la nota non viene riconosciuta in modo corretto, mi sto tirando pazzo, non riesco a capire
se c'è qualcosa che non va, oppure il flauto fa schifo.
Una prova che vorrei fare, è montare un ne555 più una piccola cassa, variare la frequenza con un trimmer, leggere con un frequenzimetro
e vedere se la nota viene restituita in modo esatto.
Comunque per il momento, mi ritengo abbastanza soddisfatto. Allego la bozza del software, per chi fosse interessato....