PIC carillon

Salve a tutti

Ho la necessità di far suonare delle note tipo carillon da un pic. Mi accontenterei di suonare anche solo 2-3 note, ma ho dei requisiti precisi:

1) che siano proprio dei toni da carillon, stile din-don dei campanelli, quindi con un inviluppo che decade esponenzialmente. 2) non posso usare troppa circuiteria esterna (analogica o digitale), diciamo che voglio usare SOLO il pic 3) vorrei (se possibile) una certa polifonia, cioè mi piacerebbe poter sovrapporre anche solo parzialmente note consecutive.

Se qualcuno ricorda gli ic siemens SAB600 e SAE800 capisce di cosa parlo.

Ovviamente questo non si può fare con le istruzioni base del picbasic e altri linguaggi che si trovano per i PIC o l'uso "semplice" dei timer interni del pic, le note escono secche e senza inviluppo, delle pure e semplici onde quadre.

Escludo di "suonare" dei samples in formato Wav/PCM ecc, a parte questioni di memoria mi serve poter generare *qualsiasi* nota entro un intervallo ragionevole.

Avevo pensato che forse è possibile esprimere lo spettro di quel tipo di suoni con adeguata "modulazione" del duty cycle del PWM, vi risulta qualcosa del genere ? A me pare di ricordare che qualcuno c'era riuscito con gli AVR.

Forse semplicemente riducendo progressivamente il duty cycle si ottiene un'attenuazione dell'ampiezza del suono in uscita ?

In realtà dovrei saper maneggiare i necessari strumenti matematici, ma l'università è ormai molto lontana nel tempo, forse qui ci sono baldi giovani freschi di studio ...

--
____
MazE

Compatta le lettere per scrivermi
Reply to
MazE
Loading thread data ...

MazE ha scritto:

Ni, per me passi solo dal classico suono dell'onda quadra a quello dei picchi impulsivi, che potrebbe pure essere sonoramente di livello inferiore, ma non e' piu' lo stesso suono/nota.

Tu chiedi invece una riduzione del volume.

Per una nota singola non mi sembra complicato, si fa lavorare il PWM fuori banda audio e si filtra l'uscita con un banale R+C. Invece di mandare ad intervalli regolari alto e basso un pin di uscita, si scrive un valore adeguato nei registri CCP1/CCP2 (sempre con gli stessi intervalli).

Settando ad esempio il tutto per avere 256 step del duty cycle possiamo considerare 128 come tensione zero (1/2Vcc), e scostamenti dal 128 in piu' o in meno rappresentano l'ampiezza della nostra quadra.

Se il valore dello scostamento e' messo in un registro che viene decrementato secondo una qualche legge, l'ampiezza decrescera'in conformita' ad essa.

Avere le note sovrapposte, anche sommando le due uscite pwm, temo sia piu' complicato, perche' forse bisogna ricominciare a ragionare per campioni, o per intervalli di tempo molto piu' fitti.

Claudio_F

Reply to
Claudio_F

Claudio_F ho scritto:

Ad esempio, da quanto rileggo da questa pagina scritta quasi 10 anni fa:

formatting link

Una possibilita' sarebbe: T = (PR2+1) * 4 * Tclock * Prescaler

Con 20MHz Tclock = 5E-8 s Prescaler = 1 PR2 = 127

T = (127+1) * 4 * 5E-8 * 1 = 2.56E-5 s F = 1/T = 39.0625 kHz

Ton = V * Tclock * Prescaler V = 0 Ton = 0% V = 512 Ton = 100%

Tenendo i due bit bassi a 0: V = 0 * 4 Ton = 0% V = 128 * 4 Ton = 100%

Meta' tensione V = 64

Ampiezza da 0 a 64.

Quindi data un'ampiezza V si puo' generare la frequenza audio scrivendo alternativamente 64-V e 64+V nel registro CCPR1L.

Claudio_F

Reply to
Claudio_F

Il 26/07/2011 17.32, MazE ha scritto:

Per il momento grazie ai 2 volenterosi, nel primo caso purtroppo non è quello che cercavo ma quello che già conoscevo e ampiamente avevo già trovato, nel secondo l'idea è molto interessante, vedrò di approfondirla e magari di metterla in pratica

In ogni caso se qualcuno trova ancora qualcosa ...

--
____
MazE
Reply to
MazE

Il 26/07/2011 17.32, MazE ha scritto:

,

solo esponenziale e' il "ding" sintetico che senti in aereo; ma con un poco di lento vibrato sull' inviluppo diventa molto piu' naturale.

ha l' istruzione per eseguire velocemente la moltiplicazione ?

r

ci sono in giro AN dove spiegano come generare sinusoidi a frequenze diverse utilizzando una sola tabella di campioni (DTMF); con una seconda tabella per l' inviluppo, il gatto sarebbe nel sacco. poi come dac servono un timer in pwm ed un filtro passivo.

pero', forse sarebbe piu' facile caricare nella flash del micro, o in una e2prom_flash seriale esterna, un file mp3, generato esternamente.

e quegli IC che registrano e riproducono brevi messaggi, possibile che non ci sia niente di gia' fatto ? deve essere un pic ?

--=20 saluti lowcost

Reply to
lowcost

Il 31/07/2011 14:49, lowcost ha scritto:

no purtroppo

mi pare buono, come parametrizzarlo per generare note di frequenze a piacere ?

dovrei decodificare un mp3, io voglio mettere tutto in un pic16 o meglio pic12 ...

no, non va bene, voglio poter programmare e suonare brevi musichette con un suono più armonico e gradevole della banale onda quadra

sarebbe meglio un pic, ho più esperienza e tools rispetto ad avr, msp430, (ex)motorola ecc

L'unico che mi è venuto in mente in alternativa è un PSOC della cypress, ha blocchi analogici programmabili ma devo rimettere in piedi tutta la tool chain software e ripescare i pezzi che già avevo, inoltre non ci ho mai capito una mazza sul loro sistema, e sì che dovrebbe essere intuitivo e drag&drop!

BTW che spettro ha uno di quei suoni che vorrei produrre ?

--
____
MazE

Compatta le lettere per scrivermi
Reply to
MazE

Il 03/08/2011 12:44, MazE ha scritto:

Non vedo il nesso con la proposta di lowcost. Comunque, cosa intendi per "programmare"? In che modo vorresti "programmare" la tua musichetta?

Marco

Reply to
Marco Trapanese

Il 03/08/2011 13.35, Marco Trapanese ha scritto:

se ho capito bene lui propone di utilizzare un ICD o simili per

*registrare*. Io invece voglio *suonare* una melodia memorizzando magari delle note (do, re, mi ...) nella eeprom o direttamente nel codice sorgente.

Anche un'ipotesi di registrare tutte le note che mi occorrono è da scartare: un ICD è costoso ed ingombrante. Il mio ideale è 8 pin in tutto.

Il software deve simulare dei toni puri con frequenza fondamentale dipendente da tale "programmazione" e con inviluppo d'ampiezza decrescente esponenzialmente, nello stile dei carillon, possibilmente utilizzando solo il modulo PWM del pic.

Dato che questo (o un loop del programma) può generare solo delle onde quadre controllabili in frequenza e duty cycle, se esiste la possibilità di questa simulazione io credo si ottenga modulando opportunamente questi parametri nel tempo.

Di programmi che suonano musichette in (pic)basic che ce ne sono a iosa, io in più vorrei un suono in stile carillon (molto probabile che occorra passare al C se non all'assembler per motivi di velocità).

Non so se sia possibile, forse analizzando lo spettro di questi suoni si può valutarne la fattibilità.

--
____
MazE
Reply to
MazE

Il 03/08/2011 20:44, MazE ha scritto:

Sarà anche ideale ma dovrai avere molti compromessi, soprattutto per le limitazioni di flash e velocità di calcolo.

Io seguirei la strada di sintetizzare l'inviluppo della sinusoide tramite PWM ad alta frequenza (appunto limitata dal tuo pic) ma un filtrino in uscita ci vorrebbe, anche del primo ordine se la frequenza è sufficientemente alta.

A quel punto puoi fare tutti gli inviluppi che vuoi e anche un po' di polifonia. Tutto è limitato dalle capacità del pic. Con un micro un po' più evoluto non ci sarebbe troppa difficoltà a calcolare in real-time la somma di più sinusoidi con inviluppo variabile.

Potresti utilizzare una LUT per evitare la trigonometria, una moltiplicazione per scalare l'ampiezza (e qualche shift oppure una LUT per l'inviluppo) e un timer per cambiare la frequenza dei toni.

Ciascuno di questi "aggeggi" ti restituisce i campioni da mandare al PWM. Se ne usi più d'uno e li sommi hai della polifonia.

Certo io non mi sognerei mai di usare un pic da 8 pin per fare questo! Dati anche i costi dei micro più tosti.

In cosa l'avresti scritto? Basic?

Se parliamo dello stesso carillon non sono affatto toni puri! Usa audacity e guarda un frammento audio che ti piace.

Ti suggerisco comunque di valutare un micro più grosso: probabilmente avresti possibilità di memorizzare nella flash con qualche trucco i campioni audio già pronti. Certo magari non per 8 ottave... però a quel punto devi solo scorrere la memoria e buttare fuori il dato. Se vuoi il sustain basta che definisci un loop tra due campioni dopo il decadimento. Alcuni micro hanno poi direttamente un DAC a board.

In questo modo avresti una qualità nemmeno paragonabile a sintetizzare sinusoidi con il PWM.

Marco

Reply to
Marco Trapanese

Il 04/08/2011 9.56, Marco Trapanese ha scritto:

sì sì, è evidente. Ma non pretendo cose eccezionali, anche in termini di qualità del suono

almeno un RC era sottinteso, anche i limiti di un altoparlantino possono (aiutare a) fare il lavoro

ero più che altro curioso di vedere la cosa dal punto di vista degli spettri di frequenza, ma al contempo non ho il coraggio (ed il tempo) di riaprire quei libri ...

questa mi mancava, in effetti ci sono pic con più di un pwm. Potrei creare un pool di risorse (i pwm) ed il programma ne fa richiesta di una ad ogni nuova nota, se il primo pwm è ancora occupato a "suonare" si passano i dati al secondo ecc.

beh questa è una delle mie fissazioni. C'è anche da dire che per l'applicazione pratica non mi servono molti pin di connessione: uscita, trigger e qualche pin di setting (dip switch?). Chiaro che se intravedo la soluzione a portata di mano con 18 non mi pongo neanche il problema

magari solo il corpo principale, poi tutte le routine in assembler, almeno finchè non riprendo la mano con il c

grazie per gli spunti

--
____
MazE
Reply to
MazE

Il 03/08/2011 20.44, MazE ha scritto:

he

con

infatti i cosini suddetti registrano e riproducono voce e musica.

io dicevo IC, quei cosini che trovi in certe buste di cartoncino, per le lettere di auguri, e quando le apri suonano la musichetta; ve ne sono anche in grado di registrare il proprio messaggio personalizzato.

e' il richiamo al DTMF di cui sopra: sono le due note contemporanee usate per la selezione telefonica a toni.

tutto.

boh, non capisco cosa intendi per ICD.

si, ma... (*)

e

=E0

e' esattamente cosi', si prelevano i campioni da una tabella (una sola per tutte le note), poi serve la moltiplicazione veloce per modulare con esponenziale (anche qui, una sola tabella per tutte le note), magari con un po' di vibrato sovrapposto, non costa niente.

,

rra

i

senza andare nel difficile, credo che una sinusoide modulata in ampiezza con un esponenziale lungo parecchi cicli, abbia banda molto stretta.

(*) hai goglato "pic microcontroller carillon" ?

--=20 saluti lowcost

Reply to
lowcost

Il 04/08/2011 13:42, MazE ha scritto:

In realtà mi riferivo a un unico PWM che modulava la risultante della somma di più sinusoidi.

Non è questione di numero di pin. Quasi sempre (cioè in tutti i casi che io conosco) si tratta di dispositivi di fascia bassa con limitate risorse hw e di memoria. Se devi farne una produzione è un conto, ma se è per pochi pezzi io utilizzerei direttamente un Cortex-M3. Per qualche euro in più di costo ho un mostro a disposizione! O senza voler esagerare anche solo un xmega che quanto a capacità di flash e velocità di esecuzione non sono niente male.

Marco

Reply to
Marco Trapanese

Il 04/08/2011 15:13, lowcost ha scritto:

Secondo me intendeva questi:

formatting link

Marco

Reply to
Marco Trapanese

MazE ha scritto:

i=20

Il problema e' generare i campioni con sufficiente rapidita', un banale=20 PCM 8kHz ti permetterebbe tutti gli spettri da 0 a 4kHz, ma calcolare ad =

esempio 4 sinusoidi, moltiplicarle per 4 valori di inviluppo, ed infine=20 sommare il tutto per ottenere il campione da passare al PWM ogni 125uS,=20 significa per un PIC a 20MHz avere il tempo per appena 450..550=20 istruzioni assembler utili per ogni campione.

Claudio_F

Reply to
Claudio_F

Il 04/08/2011 15.13, lowcost ha scritto:

sì, sì l'avevo capito, e come ho detto non cercavo quello

ecco diciamo che non ho la moltiplicazione abbastanza veloce

sì (da vari giorni), ora ho trovato un circuito che usa 8 (otto) ic ... :(

Per gli ICD ti ha risposto Marco

I PSOC cypress sembrano molto promettenti, hanno tutti i pezzi per fare il lavoro anche in analogico pure nella versione 8 pin. Dovrei averne ancora qualcuno insiema al programmatore "basico"

--
____
MazE
Reply to
MazE

Il 04/08/2011 20.26, Claudio_F ha scritto:

esatto, ed e' la moltiplicazione sw che rallenta il tutto; certo se ci fosse il moltiplicatore hw...

--
saluti
  lowcost
Reply to
lowcost

lowcost ha scritto:

Nei 18F c'e'... ad 8 bit O_o

Claudio_F

Reply to
Claudio_F

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.