Ottenere il massimo dalle periferiche

Per ottenere il massimo da molti microcontrollori attuali, è spesso necessario assicurare che le periferiche all'interno del microcontrollore siano correttamente configurate. Qualche volta ciò prevede la loro configurazione, passo-passo, prima di abbinarli. Ciò è particolarmente importante laddove il microcontrollore sia stato scelto perché le sue periferiche soddisfano le necessità di una particolare applicazione. Senza cure e attenzioni, le periferiche potrebbero non fornire l'output desiderato. Quale esempio, prendiamo in esame le famiglie PIC16F7X e PIC16C7X di microcontrollore mid-range a 8 bit, di Microchip. Il PIC16F7X è un dispositivo flash mentre il PIC16C7X è un dispositivo Otp (One-time-programming). Le periferiche, nel caso di entrambi i dispositivi, includono un convertitore analogico-digitale, timer, capture-compare Pwm e un Usart (Universal synchronous asynchronous receiver transmitter).

Modulo Adc
Il modulo Adc converte un segnale input analogico in un numero digitale 8bit corrispondente. L'output del circuito sample and hold interno è l'ingresso del converter, che genera il risultato per successive approssimazioni. La tensione di riferimento analogica è selezionabile via software sia per la tensione positiva di alimentazione del dispositivo che per il livello di tensione sul pin Vref pin. L'Adc ha l'eccezionale caratteristica di riuscire a funzionare mentre il dispositivo è in modalità Sleep. Il modulo ha tre registri; i due registri di controllo sono ADcon0 e ADcon1 e il registro risultati è ADres. ADcon0 controlla il funzionamento del modulo. Questo registro viene utilizzato per selezionare la frequenza di clock per la conversione ed il canale analogico. È dove viene determinato l'inizio e il completamento della conversione. ADcon1 configura le funzioni dei port pin. I microcontrollori hanno cinque oppure otto IO pin che possono essere configurati come ingressi analogici. Dopo che ADcon0 e ADcon1 sono stati configurati, il bit go/done in ADcon0 viene impostato a uno per avviare la conversione e quindi monitorato per tenere traccia di quando la conversione è completata. Quando la conversione A-D è completa, il risultato viene caricato nel registro ADres, il bit go/done azzerato, e l' A-D interrupt flag bit (ADif) settato. È disponibile il codice esempio che legge il registro ADres e lo trasferisce ai moduli Ccp e Usart. La commutazione tra i due canali analogici di ingresso viene effettuata cambiando il valore dei bit CHS2:CHS0 del registro ADcon0.

Il timer
I microcontrollori hanno tre moduli timer - timer0, timer1 e timer2 - Ognuno dei quali può generare un interrupt per indicare che si è verificato un evento, per esempio un overflow del timer. Timer0 è un semplice timer-contatore 8 bit. Timer1 è un timer-contatore 16bit consistente in due registri 8 bit che sono leggibili e scrivibili. Timer2 è un timer 8bit con un pre-scaler, post-scaler e period register. Utilizzando il pre-scaler e post-scaler alle loro massime impostazioni, il tempo di overflow è lo stesso di un timer 16bit. Timer2 è la base dei tempi del Pwm quando il modulo Ccp è utilizzato nella modalità Pwm. Per la modalità Pwm, i registri che necessitano essere configurati sono il timer2 period register (PR2), timer2 control register (T2con) e PIR1 register. L'uscita Pwm ha un time base (period) e un time nel quale l'output resta su high (duty cycle). La frequenza del Pwm è inversa rispetto al period. Il period Pwm è specificato nella scrittura nel registro PR2.

I moduli Pwm capture-compare
Sono presenti due moduli Ccp, ognuno dei quali contiene un registro a 16 bit che può funzionare come un registro 16 bit capture, registro 16 bit compare o registro duty-cycle master-slave Pwm 10bit. I moduli Ccp hanno funzionamento identico eccetto che per lo special event trigger.

Il modulo Usart
Il modulo Usart è uno dei due moduli seriali di IO, l'altro è il modulo Ssp. Usart è noto anche come interfaccia seriale di comunicazione, o Sci. Può essere configurato come un sistema full-duplex asincrono in grado di comunicare con dispositivi periferici quali terminali Crt e personal computer, o può essere configurato come sistema half-duplex sincrono che in grado di comunicare con dispositivi periferica come circuiti integrati A-D o D-A ed Eeprom seriali. Nel programma esempio, è configurato come un sistema full-duplex asincrono per comunicare con un Pc. In questa applicazione, la Usart è utilizzata solo in trasmissione. I registri che necessitano di essere impostati sono i Spbrg (Baud rate generator register), Txsta (Transmit status and control register), Rcsta (Receive status and control register), e Txreg (Transmit data register). L'Spbrg 8 bit dedicato controlla il periodo di un timer 8 bit free-running. In modalità asincrona, il baud rate è controllato da un bit, mentre in modalità sincrona questo bit viene ignorato. Il Txsta è quello in cui la modalità asincrona e la trasmissione 8 bit sono selezionati. Il bit transmit enable (TXen) del Txsta consente la trasmissione e il Trmt (Transmit shift register status) bit è un bit in sola lettura che indica lo status del Tsr (Transmit shift register). Per avviare la trasmissione, è necessario settare il SPen (Serial port enable) bit nel Rcstaregister. La scrittura sul TXreg avvia la trasmissione. Il codice esempio copia i risultati A-D nel TXreg. Il valore viene automaticamente spostato nel Tsr e “shifted out” sul pin RC6/TX.

L’integrazione delle periferiche
Dopo la configurazione di ognuna delle periferiche, queste debbono essere integrate l'un l'altra. Il loop code segment nel programma esempio mostra come ogni periferica sia connessa altra. Le porte seriali sono anche abilitate per trasmissioni Usart seguite dalla configurazione delle periferiche Usart, timer2, Adc e Ccp. Per l'Adc, solo un canale analogico di ingresso è selezionato durante il processo di configurazione. Timer2 è abilitato e il programma inizia il polling del flag bit del Tmr2If. Tmr2If setta ogni qualvolta viene rilevata una corrispondenza tra Tmpr e registri PR2. Quando si verifica una corrispondenza, Tmr2If viene quindi azzerato nel software e la conversione A-D ha inizio. Quando la conversione A-D è stata completata, il programma monitora che il bit Trmt sia impostato, indicando che il registro TSR dell' Usart è vuoto e pronto per la trasmissione. Il valore A-D viene quindi scritto nei registri TXreg e CcpR2L. Il canale analogico successivo viene quindi selezionato e il processo ripetuto. Le uscite Usart e Ccp vengono ricevute ed elaborate da dispositivi hardware esterni.

L’hardware
Sostanzialmente si tratta di una parte dello schema del Picdem 2 Plus con alcuni componenti addizionali. I trimmer RP1 e RP2 vengono usati per dimostrare una modalità di switching tra canali input analogici. Determinano anche il livello di tensione input fornito al Adc. Il Led L1 è connesso al pin output del Pwm, RC1/Ccp2, che è in serie alla resistenza di limitazione di corrente, R1. U2 è un line driver RS232 che fornisce una interfaccia elettrica tra Usart ed il connettore della porta seriale P1. Quando la tensione input analogica viene fornita all'Adc, questo converte la tensione input in un valore digitale corrispondente. Gli input arrivano da AN0 o AN1 a seconda del canale input analogico configurato. I risultati digitali vengono inviati sia al Ccp che Usart. L' Usart invia questo valore ad un programma di terminale seriale, che visualizza un valore output in un certo formato a seconda della configurazione del terminale. Allo stesso modo, il Pwm del Ccp varia il duty cycle dell'impulso output per controllare la luminosità di un Led. Per trasmissioni seriali e display, l'uscita Usart viene inviata al programma di terminale seriale connettendo il convertitore seriale -to-Uart al connettore della porta seriale nella Picdem 2 Plus demo board e alla porta Usb di un Pc. L' MCP2200 di Microchip può essere utilizzato come convertitore seriale Usb-to-Uart.Dato che due canali analogici vengono utilizzati nell'Adc, verranno anche visualizzati due valori sul monitor del Pc. Un programma di terminale seriale è utilizzato per catturare, controllare e fare il debug di flussi binari di dati. Deve essere settato a 2400baud, 8 data bit, one stop bit, e nessuna parità per accordarsi con la configurazione software Usart. Il valore visualizzato può anche essere settato per Ascii, Ansi, esadecimale, binario o altri tipi di rappresentazione numerica, a seconda delle caratteristiche del programma di terminale seriale.

Pubblica i tuoi commenti