Premesso che il 4518 non è un PIC, bisogna vedere cosa dice il datasheet del tuo microcontrollore riguardo alle interruzioni, in particolare a pag. 111 PORTB Interrupt on change.
PS: Io userei un transistore per pilotare lo speaker, così.
Cambiare frequenza speaker tramite PIC
Moderatore:
Paolino
20 messaggi
• Pagina 2 di 2 • 1, 2
0
voti
Grazie per il consiglio, ma è una sorta di compito che ci ha dato il prof quello di cambiare la frequenza del segnale tramite il timer. Leggerò il datasheet e vedrò di capire qualcosa 
0
voti
Ho chiesto al prof e mi ha detto di far alternare il segnale in ingresso allo speaker tramite due timer con overflow diversi!! In effetti ho provato e si alternano un segnale più alto con uno più basso, anche se non si avvincina neanche al suono della sirena! un po' "rustica" come soluzione, che ne pensate??? 
0
voti
Da quello che ho capito vuoi un'onda quadra con una frequenza che varia in modo abbastanza continuo tra una
e una
.
Per fare questo il modo migliore mi sembra usare il PWM del PIC e variarne il periodo nel main ogni tot millisecondi.
Equivalentemente si può invece variare il valore di partenza del timer ogni tot overflow direttamente dalla ISR.
Avresti idea di quali sono le
e
? Se programmi in C potrei postarti un esempio di codice.
e una
.Per fare questo il modo migliore mi sembra usare il PWM del PIC e variarne il periodo nel main ogni tot millisecondi.
Equivalentemente si può invece variare il valore di partenza del timer ogni tot overflow direttamente dalla ISR.
Avresti idea di quali sono le
e
? Se programmi in C potrei postarti un esempio di codice.0
voti
Qualsiasi frequenza max e min va bene, e sarei interessato a vedere come lo faresti tu in C ! =) Grazie
1
voti
A me invece piacerebbe vedere come lo risolveresti TU in C.
Suppongo che tu ci abbia già provato, vero?
Suppongo che tu ci abbia già provato, vero?
"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.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Davidark ha scritto:Qualsiasi frequenza max e min va bene
Non credo, cioè se vuoi simulare una sirena dovranno almeno essere nel range dell'udibile (circa 20Hz a circa 20kHz).
Bisogna decidere anche la frequenza con cui si passa da una all'altra, ad esempio quelle delle ambulanze mi sembrano abbastanza lente, direi 0,5Hz, ma non ne sono sicuro..
Ci saranno delle specifiche da rispettare sulle cui costruire il programma e quelle devi saperle tu.
Poi come dice
Hai verificato che il tuo PIC abbia il modulo PWM?
0
voti
Ciao davide!
ti preannuncio che sono ancora agli inizi, ma per caso hai provato a far variare l'uscita dello speaker tramite 2 timer a differente frequenza?
Personalmente ho fatto qualche prova e cosi facendo sembra che si possa ottenere qualche risultato, personalmente ho usato il compilatore "PIC C Compiler" , per ottenere ottimi risultati però dovrai comunque utilizzare un circuito di amplificazione, un BJT, che amplifica il segnale, in quanto il PIC non fornirà sufficiente corrente allo speaker.
Ad ogni modo ti posto una bozza di codice per farti vedere come avrei risolto il problema
Ho usato 2 timer per fare variare la frequenza, ed ho inizializzato le seguenti variabili per gestire "un'attesa" all'interno del singolo timer:
int i=0;
int a=0;
I timer li ho cosi realizzati:
1° timer
#int_RTCC
void RTCC_isr(void){
if (a<3){
if(input(PIN_A1)==1){
output_toggle(PIN_A2);}
a++;}
else {a=0;
disable_interrupts(INT_RTCC);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
}}
2° timer
#int_TIMER2 //usato per la sirena
void TIMER2_isr(void)
{
if (i<250){
if(input(PIN_A1)==1){
output_toggle(PIN_A2);}
i++;}
else {i=0;
disable_interrupts(INT_TIMER2);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
}}
dove all'interno del main ho inserito questo:
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
setup_timer_2(T2_DIV_BY_16,101,2);
dove variando i parametri dei singoli timer riesci ad ottenere "tonalità" differenti.
spero di esserti stato utile!
ti preannuncio che sono ancora agli inizi, ma per caso hai provato a far variare l'uscita dello speaker tramite 2 timer a differente frequenza?
Personalmente ho fatto qualche prova e cosi facendo sembra che si possa ottenere qualche risultato, personalmente ho usato il compilatore "PIC C Compiler" , per ottenere ottimi risultati però dovrai comunque utilizzare un circuito di amplificazione, un BJT, che amplifica il segnale, in quanto il PIC non fornirà sufficiente corrente allo speaker.
Ad ogni modo ti posto una bozza di codice per farti vedere come avrei risolto il problema
Ho usato 2 timer per fare variare la frequenza, ed ho inizializzato le seguenti variabili per gestire "un'attesa" all'interno del singolo timer:
int i=0;
int a=0;
I timer li ho cosi realizzati:
1° timer
#int_RTCC
void RTCC_isr(void){
if (a<3){
if(input(PIN_A1)==1){
output_toggle(PIN_A2);}
a++;}
else {a=0;
disable_interrupts(INT_RTCC);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
}}
2° timer
#int_TIMER2 //usato per la sirena
void TIMER2_isr(void)
{
if (i<250){
if(input(PIN_A1)==1){
output_toggle(PIN_A2);}
i++;}
else {i=0;
disable_interrupts(INT_TIMER2);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
}}
dove all'interno del main ho inserito questo:
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
setup_timer_2(T2_DIV_BY_16,101,2);
dove variando i parametri dei singoli timer riesci ad ottenere "tonalità" differenti.
spero di esserti stato utile!
-

Francesco90
0 2 - Messaggi: 5
- Iscritto il: 18 mag 2013, 19:07
0
voti
Mi piace molto la tua idea Francesco! Proverò e ti farò sapere! 

20 messaggi
• Pagina 2 di 2 • 1, 2
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 5 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



