Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori PIC. Nona puntata - 1

Corso di programmazione per microcontrollori PIC

Impariamo a programmare con la famiglia di microcontrollori PIC della Microchip, caratterizzata da una grande flessibilità d’uso e da un’estrema semplicità di impiego grazie alla disponibilità di uno Starter Kit a basso costo, di un ambiente di sviluppo software evoluto e di una vasta e completa libreria di programmi collaudati e pronti all’uso. Nona puntata.

Abbiamo visto nella precedente puntata del Corso come utilizzare l’interrupt generata dal timer TMR0 per far produrre al buzzer della demo-board un suono ad una determinata frequenza. Per comprendere meglio le tecniche di utilizzo del timer e della relativa interrupt analizziamo ora un altro semplice programma in grado, questa volta, di far generare al buzzer un suono molto simile a quello di una sirena bitonale. Il programma in oggetto è stato denominato DEMO5 e il relativo listato viene riportato in questi articoli.

Come si può osservare, buona parte del programma è simile a quello che generava un suono a frequenza fissa; in particolare, ricordiamo che veniva utilizzato il TMR0 per generare una interrupt ogni volta che il contatore vero e proprio del timer andava in overflow. Quando veniva gene-rata l’interrupt, il programma saltava alla locazione 04 dove si trovava la routine definita dalla label INT. Questa routine non faceva altro che complementare, cioè invertire il livello logico, presente sul piedino del micro a cui è collegato il buzzer.

In questa nuova applicazione, invece, la stessa routine provvede a ricaricare il timer con la variabile SUONO. La parte iniziale del programma serve per inizializzare il timer ed il prescaler al giusto rapporto di divisione onde ottenere un suono alla frequenza desiderata; viene anche inizializzata la logica degli interrupt, e abilitata l’interrupt di overflow del timer.

A questo punto, il programma provvede a generare alternativamente due note di diversa frequenza utilizzando due costanti definite dalle sigle SUONO1 e SUONO2. Poiché la routine di interrupt ricarica il timer con la variabile SUONO, viene trasferita in quest’ultima alternativamente la costante SUONO1 e la SUONO2. Ovviamente questa operazione deve essere fatta ad intervalli di tempo regolari. Nel nostro programma il main, che inizia all’etichetta MAIN, carica dapprima SUONO1 in SUONO, richiamando successivamente due volte la routine DELAY.

Quest’ultima, già analizzata nelle scorse puntate del Corso, viene utilizzata per introdurre dei ritardi nei programmi (circa mezzo secondo con quarzo da 4 MHz). Mentre vengono eseguite queste due routine viene processata, ad intervalli di tempo molto più stretti, la routine di interrupt generata dal timer che provvede a pilotare il buzzer con la frequenza determinata dal valore di SUONO1.

Terminata l’esecuzione della routine DELAY, il programma “ricarica” la variabile SUONO con la costante SUONO2 ed esegue altre due routine di DELAY durante le quali viene generata una nota di frequenza diversa dalla prima, essendo i valori di SUONO1 e di SUONO2 diversi fra di loro. Il programma torna a questo punto all’etichetta MAIN. Il risultato finale è quello di generare per circa mezzo secondo un suono di una certa frequenza e per un altro mezzo secondo un suono di frequenza diversa. Analizziamo ora il programma DEMO6 appositamente realizzato per gestire la tastiera a matrice implementata sulla demoboard.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 16 utenti e 120 visitatori collegati.

Ultimi Commenti