7
PRIMI PROGETTI CON IL PIC 18-PIN 16F88 Parte 1
Altra piccola premessa sui Fusi di questa MCU a 18 Piedini (fuse in English):
essi sono rappresentati da una serie di parametri iniziali i quali vanno ad influire sul comportamento dei moduli hardware interni al PIC stesso. Essi vengono impostati sulle proprietà del progetto sul compilatore. Una classica configurazione è la seguente:
Oscillator selection:Permette di scegliere il clock interno a 4mhz oppure un clock esterno più preciso.
Watchdog Timer: Se stai usando l'interrupt interno con il Timer0, timer1 oppure il timer2 e ti serve un divisore prescaler (per variare più o meno velocemente il tempo di generazione degli interrupt interni dei timers prima citati) puoi affidare il divisore o al WDT(Watchdog Timer) o al TIMER0. (solo nel caso si usi il Timer0)
Infatti per il Timer2 e 3 si può usare soltanto il WDT.
GP3 o MCLR :Definisce il comportamento del pin: come semplice linea dati o come MCLR.
Program Memory Code: Come si intuisce abilita il PIC a proteggere il codice del programma contenuto in esso.
Data Code Protection: Abilita o disabilita la memoria EEprom dall'essere scritta dal programma principale contenuto nel PIC e scritto da voi.
CCP1: pin Selection: Permette anche di decidere in quale PIN (RB0 o RB3) deve lavorare modulo PWM, (modulatore di frequenze ad impulsi)
TASTIERA ANALOGICA E RICONOSCIMENTO DEL TASTO PREMUTO:16F88
Il progetto è collegato ad una tastiera analogica collegata sul pin RA0 del Pic. La tastiera per ogni pressione del tasto genera una differenza di potenziale diversa da ogni altro tasto premuto. (tastiera di 12 tasti) Da notare che il programma lavora in Polling e non in interrupt , ciò significa che ciclicamente il programma effettua dei campionamenti sulla uscita della tastiera analogica.
Una volta acquisito il valore del potenziale della tastiera degli IF che (contenuti nella funzione Unità chiamata cosi perchè è possibile espandere il codice aggiungendo anche le decine) permettono il riconoscimento del tasto.
Il programma è scritto per il PIC 16F88 frequenza clock esterno di 4 Mhz
dotato di ADC (convertitore analogico digitale )
Il calcolo per sapere il numero byte all'uscita del convertitore (ADC) e quello di questa formula
x= Vin (VDigMax) / Vref
Dove:
Vin è la tensione sul Pin della tastiera, VDdigMax è il massimo valore rappresentabile dal convertitore Interno (ADC) tale valore intero è: 1024 , Vref è l'alimentazione della tastiera e del Pic ossio 5V.
In pratica se dovete acquisire una tensione di 3,7 volt il numero convertito dal convertitore interno A/D sara dato dal calcolo 3,2x1024/5=655,36 0ssia si tolgono i numeri dopo la virgola e si ottiene il numero 655.
I rami che collegano i Led della Retro Illuminazione possono tranquillamente essere rimossi e rendere lo schema più semplificato.
Faccio notare ogni qual volta si usa un display 16x2 occorre frapporre tra +5Vcc ed il piedino MCRL una resistenza da 4,7k altrimenti ci saranno problemi di visualizzazione sul Display.
l'intero Progetto con il relativo codice lo si può scaricare dal link di Google Drive qui:
Controllo per tastiera Analogica
//=========================//
MENU SU DISPLAY 16x2 GESTITO DA ENCODER: 16F88
Questo progetto è composto da due parti fondamentali:
- La gestione di un menù con tre voci comprese ciascuna di un sotto menù
- La gestione di un Encoder Rotativo compreso di uno switch posto sull'asse dell'Encoder.
Questa è una idea mi era venuta perché avevo necessità di gestire al meglio il piccolo pic a 18 piedini; allora ho pensato che se invece dei pulsanti usassi un encoder che era in grado di raccogliere il tutto in un oggetto unico, ci avrei guadagnato in praticità che in economia.
Un'altra idea era di rendere dinamico ed interattivo il mio programma principale (modificando il valore di alcune variabili al suo interno) in modo che si comportasse in maniera diversa; così è nata l'esigenza di creare un menu interattivo gestito appunto da questo Encoder.
Prima di passare al programma però vanno fatte due precisazioni su come funziona l'Encoder Rotativo ed il menu da esso gestito:
L'Encoder rotativo è formato al suo interno da due sensori: CLK e TD questi generano due segnali sfasati (meccanicamente) di 90° , questo sfasamento permette di distinguere se stiamo ruotando l'Encoder verso destra o verso sinistra. Più precisamente se ruoto a sinistra l'encoder i due segnali commuteranno con lo stesso livello logico, invece se ruoterò l'asse dell'encoder verso destra i due segnali commuteranno a livelli logici Opposti, Come in figura:
Da notare che sia sul fronte di discesa che sul fronte di salita i due segnali o sono uguali o nell'altro caso sono diversi, il tutto è stato fatto gestire dal programma nella routine di Interrupt B0 collegando il piedino CLK con quello RB0 (del Pic).
Un'altra cosa che ho imparato con l'esperienza è stata che non tutti gli encoder sono ottici, quelli più economici sono meccanici e questa parola equivale a dire rimbalzi tra le transizioni da livello logico 1 allo 0 e viceversa. Il risultato è che quando viene generato l'Interrupt sul piedino RB0 il codice scritto nel pic non sa distinguere se avete girato l'encoder a sinistra o a destra, il risultato è che l'encoder risulta ingestibile. Per ovviare a questo problema si può frapporre tra i due segnali (CLK e TD) e massa due condensatori (da 10Pf a 10000Pf a vostra scelta) , ciò permette di eliminare il rimbalzo dei due segnali dell'Encoder durante le loro transizioni da 0 a 1 e viceversa.
Quì di seguito viene riportato lo schema elettrico del Progetto:
In data 06.04.2016 il progetto è stato Migliorato e reso più stabile.
Io ora credo di avervi dato così le basi per sviluppare i vostri futuri progetti ora metteteci il vostro, buon lavoro.
l'intero Progetto con il relativo codice lo si può scaricare dal link di Google Drive qui:
//=========================//
GENERATORE ONDA QUADRA CON ENCODER ROTATIVO 1Hz A 12Khz: 16F88
Questo è un progetto più semplice rispetto al precedente , si tratta di gestire una frequenza variabile mediante l'uso della funzione Sound, ovviamente girando l'asse dell'Encoder varia la frequenza generata dalla funzione Sound.
Il display vi mostra il valore della frequenza che state generando sulla porta A2 (PORTA.2).
Di seguito vi mostro lo schema elettrico del progetto:
Vi consiglio di collegare in serie all'altoparlante da 8ohm una resistenza da 220ohm perchè il pic non gestisce correnti maggiori di 20ma. Di fatti dalla legge di Ohm R=5v/0.02A=250ohm.
Vi ricordo, per ciò che concerne l'encoder rotativo meccanico due condensatori (da 10Pf a 10000pf a vostra scelta) in modo da evitare i rimbalzi, come in Foto:
l'intero Progetto con il relativo codice lo si può scaricare dal link di Google Drive qui:
//=========================//
Pagina Scritta da Leonardo Moretti