Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
LABORATORIJSKE VEŽBE IZ ISPITA
PRIMENA MIKROPROCESORA U ELEKTROENERGETICI
II vežba
Primena mikrokontrolera za generisanje PWM signala i analogno digitalnu konverziju
Moderna tehnologija upravljanja energetskim pretvaračima bazira se na
korišćenju mikrokontrolera ili DSP-ova čijim programiranjem se realizuje funkcija
digitalnog upravljanja sistemom. Pored razumevanja same upravljačke funkcije,
neophodno je razumeti kako se izlazi upravljačke funkcije pretvaraju u komande ka
pretvaraču kao i kako se merni signali iz pogona dovode na ulaze te funkcije. Za
navedene zadatke u ovoj vežbi koriste se PWM i AD periferija.
Prva od ove dve periferije (PWM jedinica) konvertuje faktor ispune (broj) u
impulsni PWM signal koji je pogodnog oblika kao komanda ka energetskom
pretvaraču. Druga periferija (ADC jedinica) konveruje analogne ulaze čime u opštem
slučaju obezbeđuju digitalne merne signale potrebne upravljačkoj funkciji. Kao primer
analognog signala u ovoj vežbi se koristi analogna vrednost napona sa potenciometra.
2.1.
Priprema za vežbu
Teorijska priprema
•
Upoznati se sa osnovama praktičnog rada sa mikrokontrolerima, pročitati
uvodno poglavlje ovog praktikuma
1
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
•
•
Vežba 2
Proučiti internu arhitekturu mikrokontrolera dsPIC4011 i osnovne programske
instrukcije, korisničko uputstvo [Microchip, dsPIC30F4011/4012 Data Sheet]
Posebnu pažnju posvetiti ADC i PWM periferiji
Pripremiti za vežbe
•
•
2.2.
Proučiti opis eksperimentalne kartice, dat u uvodnom delu praktikuma
Detaljno proučiti date programe
Opis korišćene makete
Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy
dsPIC2 sa dsPIC4011 kontrolerom. Svi potrebni ulazi/izlazi nalaze se na samom
razvojnom sistemu, čiji je detaljan opis dat u uvodnom poglavlju praktikuma i prikazan
na slikama U-4, U-5. Za generisanje PWM signala upotrebljen je RE3 (PWM2H) pin,
dok se analogni signal (sa potenciometra) dovodi na pin RB0. DSP je serijskom vezom
povezan sa PC računarom.
2.3.
Zadaci za vežbu
U narednom tekstu nalaze se zadaci za vežbanje. Njihovo rešenje nalazi se na
kraju ovog poglavlja. Svi primeri su urađeni u programskomm jeziku "C". Od studenta
se očekuje da posle njihovog testiranja, samostalno napiše programe za zadatke date na
kraju svakog potpoglavlja.
2.3.1.
Zadatak 1 - Generisanje PWM signala
U prvom delu zadatka za generisanje PWM signala izabran je trougaoni
nosilac, dok se u drugom delu testira generisanje PWM-a sa testerastim nosiocem. Za
samo generisanje PWM signala se koristi PWM jedinica, čiji je detaljan opis dat u
tekstu koji sledi.
Najvažniji registri PWM periferije su registar koji određuje period generisanih
PWM signala (PTPER) i tri registra za upis faktora ispune (PDC1, PDC2 i PDC3) za
tri nezavisna PWM signala. PTPER i PDC registri su baferovani što znači da je
upisana vrednost registra aktivna tek od narednog perioda, time se izbegava mogućnost
višestruke komutacije. PTMR registar predstavlja tajmer PWM jedinice. Jedinica radi
na sledeći način: na svaki clock period PTMR registar uvećava svoju vrednost; dok je
vrednost PTMR manja u odnosu na vrednost upisanu u odgovarajući PDC registar
izlazna nožica PWMxL (ili PWMxH, x = 1, 2, 3) je neaktivna; kada PTMR premaši
vrednost upisanu u PDC registar izlazna nožica menja svoje stanje u aktivno; kada
2
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
PTMR registar dostigne vrednost upisanu u PTPER registru on se resetuje i počinje
brojanje od početka. Usput se i generiše prekid kao znak programu da je nova PWM
perioda započela. Postoji nekoliko režima rada PWM modula. Gore opisani način rada
je tzv. asimetrični režim jer noseći signal je oblika testere. Pored toga, program za ovu
vežbu koristi i drugačije konfigurisan PWM modul koji se inicijalizuje za rad u
simetričnom režimu (trougaoni nosilac). U tom režimu PTMR tajmer registar uvećava
svoju vrednost dok ne dostigne broj upisan u PTPER (to je polovina PWM periode), a
potom PTPER menja smer i smanjuje vrednost do 0. U vom režimu je moguće da
PWM jedinica generiše prekid na polovini i na početku PWM jedinice. Generalno,
prekid generisan simetrično u odnosu na polovinu PWM periode može imati naročiti
značaj pri realizaciji bipolarnog PWM upravljanja. Ovaj prekid je moguće iskoristiti za
sinhronizaciju ADC periferije koja tada čita struju baš na sredini PWM periode, gde
nema prekidačkog šuma i gde je trenutna vrednost struja jednaka srednjoj.
Registri PWMCON1, PWMCON2, DTCON1, FLTACON i OVDCON
predstavljaju konfiguracione registre PWM periferije. Više o značenju pojedinih bitova
ovih registara može se naći u katalozima proizvođača. Podešavanje ovih registara
olakšano je ako se koriste zaglavlja, header fajlovi, koje je već razvio Microchip.
Pored toga, Microchip je za svoj kompajler C30 razvio i biblioteke za rad sa
pojedinačnim periferijama svih mikrokontrolera iz svog proizvodnog programa (za
podešavanje i inicijalizaciju PWM periferije može se koristiti LIB30.pdf fajl koji sadrži
opis Microchip-ove biblioteke kompajlera C30). Ova biblioteka pored standardnih
funkcija "C"-a (npr. matematičke operacije sa floating-point brojevima, rad sa
stringovima i slično) sadrži i funkcije za podešavanje hardverskih komponenti
kontrolera. Da bi koristili funkcije unutar te biblioteke u program treba uključiti
libp30F4011A2.a fajl koji dolazi sa instalacijom kompajlera. Za korišćenje PWM
periferije u sastav programa treba još uključiti header datoteku pwm.h. Izvorni kod
svake funkcije u okviru libp30F4011A2.a biblioteke ovde je izostavljen, ali se takođe
može naći na računaru na laboratorijskim vežbama.
Algoritam programa za generisanje PWM signala dat je na slici 1.1, dok je
listing programa dat u prilogu vežbe, a opis u tekstu koji sledi.
U inicijalizaciji, PWM periferija je prvo postavljena u simetrični (up-down trougaoni nosilac) režim rada (PWM_MOD_UPDN). Frekvencija PWM-a je
postavljena na 20 kHz. Dozvoljen je PWM prekid koji se generiše svaki put kada
PWM tajmer uzme vrednost 0 (underfow, PWM_INT_EN & PWM_INT_PR1). U
okviru PWM prekidne rutine najčešće se izvršava čitava kontrolna petlja, odnosno tu
se upravlja faktorom ispune definisanim PDC registrom. Takt PWM periferije je
ujedno i takt kontrolera (korišćen preskaler 1, PWM_IPCLK_SCALE1), a interapt se
generiše u svakoj PWM periodi (postskaler je 1, PWM_OP_SCALE1). Posmatraju se
3
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
signali PWM2H i PWM2L nožica, dok se ostale PWM nožice u ovom primeru ne
koriste (PWM_PDIS3H & PWM_PEN2H & PWM_PDIS1H & PWM_PDIS3L &
PWM_PEN2L & PWM_PDIS1L). Pri tome su PWM2H i PWM2L signali invertovani
(PWM_MOD2_COMP). U drugom delu ovog zadatka, može se promeniti način rada
brojača, odnosno jednostavno izabrati testerasti nosilac, tj. tzv. free runing mode
(PWM_MOD_FREE).
Glavni program
Inicijalizacija sistema
Inicijalizacija PWM modula
dozvola PWM prekida
glavna petlja
Sl. 1.1. Opšti algoritam rada mikrokontrolera, zadatak 1
U glavom programu se čisto radi ilustracije, u promenljivu tipa niz snima
vrednost stanja tajmerskog registra koja se može offline (zaustavljen rad DSP-a)
pogledati u prozoru Data Monitor Control interface koji nudi sam proizvođač, slike
1.2 i 1.3.
Symbol: TMR_array
Source Symbol: TMR_array
200
Y Axis
150
100
50
0
6
18
12
30
24
42
36
54
48
X Axis
66
60
78
72
90
84
96
Sl. 1.2. Trougaoni nosilac: stanje PTMR registra (snimljeno u glavnom programu)
4
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
Symbol: TMR_array
Source Symbol: TMR_array
400
Y Axis
300
200
100
0
6
18
12
30
24
42
36
54
48
X Axis
66
60
78
72
90
84
96
Sl. 1.3. Testerasti nosilac: stanje PTMR registra (snimljeno u glavnom programu)
Ukoliko izaberemo trougaoni nosilac (za prescaler 1) željena perioda PWM signala
se dobija na osnovu izraza TPWM = 2*PTPER*TCY, odnosno prema katalogu precizno:
TPWM = 2⋅(PTPER+1)⋅TCY
dok je u slučaju testerastog nosioca perioda jednaka:
TPWM = (PTPER+1)⋅TCY
(minimalna perioda PWM signala ne može biti manja od 2⋅TCY odnosno TCY,
respektivno). Na osnovu datih jednakosti lako se dolazi do izraza za punjenje PTPER
registra:
PTPER = fCY/fPWM/2-1 - testerasti nosilac
PTPER = fCY/fPWM-1 - trougaoni nosilac
Za fCY = 8MHz, fPWM = 20kHz dobija se da je PTPER = 199 za testerasti i 399
za trougaoni nosilac, što odgovara vrednostima sa slika 1.2 i 1.3.
U prekidnoj rutini samo se vrši upis novog faktora ispune u PDC registar. Pun
faktor ispune se ima za dvostruko veću vrednost PDC registra od vrednosti u PTPER
registru (čime se ima dvostruka rezolucija PWM signala). Na kraju je obavezan reset
flega kojim se kontroleru praktično potvrđuje da je prekid obrađen.
Vežba u laboratoriji:
Izmeniti periodu rada čopera na 10Hz za obe vrste nosećeg signala; koji broj
treba upisati u PTPER registar? Menjati faktor ispune i posmatrati na osciloskopu
stanje odgovarajućeg pina.
5
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
Koliko je rezolucija PWM signala za fPWM = 200kHz, 20kHz i 2kHz, za datu
frekvenciju fCY? Posmatrati signale za date slučajeve.
Napraviti program koji automatski menja faktor ispune od 0 do 1 u vremenu
10s, fPWM = 20kHz, trougaoni nosilac.
2.3.2.
Zadatak 2 - AD konverzija
ADC periferija je sa spoljnim svetom povezana sa 8 analognih ulaznih pinova.
Četiri sample/hold kola unutar ADC modula omogućavaju istovremena odabiranja
četiri signala. Postoji samo jedan 10-bitni AD konvertor, signali se dovode na ADC
preko analognog multipleksera. Redosled odabiranja i potom konvertovanja odbiraka
određuje interna logika koja je programabilna. Naponski opseg napona AD konvertora
je podesiv, ali uglavnom se koristi opseg 0-5V.
Za inicijalizaciju i rad sa ADC modulom dsPIC-a korišćena je biblioteka
libp30F4011A2.a, sa definisanim header datotekama, slično kao kod PWM-a. Ovde je
pored biblioteke, za rad sa ADC modulom potrebno uključiti header datoteku adc10.h
sa definisanim simbolima funkcionalnih delova registara, čitavih registara, kao i
simboličkim konstantama koje treba upisati u ove registre, a radi lakšeg rada sa njima.
Program na kraju vežbe detaljno ilustruje način standardne upotrebe ADC
modula.
Prvo je ADC modul inicijalizovan, a zatim su u glavnom programu pozivane
rutine za start AD konverzije ConvertADC10() i čitanje ADC rezultata ReadADC10().
Analogni signal je doveden na AN0 ulaz mikrokontrolera pa je ADC modul
konfigurisan da odabire upravo samo tu nožicu (ADC_CH0_POS_SAMPLEA_AN0).
Signal se posmatra u odnosu na masu (ADC_CH0_NEG_SAMPLEA_NVREF). Ne
koristi se prekid ADC modula (ADC_INT_DISABLE).
Rezultat 10-bitne konverzije moguće je koristiti u tzv. integer formatu: broj
unutar opsega 0-1023 (ADC_FORMAT_INTG). Drugi način uzimanja rezultata AD
konverzije je u označenom fixed-point formatu (broj opsega -32768 do 32767). Do
njega se dolazi automatski, odabirom datog moda rada AD konvertora
(ADC_FORMAT_SIGN_FRACT). U tom slučaju, AD jedinica automatski pomera
dobijeni 10 bitni rezultat (0-3FF) u levu stranu (0-FFC0) i radi logičku operaciju
ekskluzivno ILI datog broja i broja 8000hex.
Dobijeni rezultat je pogodan za dalju aritmetičku obradu u kontrolnim
aplikacijama. Takt signal za ADC modul je takođe izveden iz osnovnog takta
mikrokontrolera (ADC_CONV_CLK_SYSTEM). Ulazni opseg ADC konvertora je od
0 do 5 V (ADC_VREF_AVDD_AVSS). Isključena je opcija automatskog semplovanja
(ADC_AUTO_SAMPLING_OFF & ADC_SAMP_OFF), i pokretanje semplovanja
6
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
vrši se softverski, setovanjem bita ADCON1bits.SAMP. Nakon semplovanja ulaza
konverzija se pokreće automatski (ADC_CLK_AUTO).
Razultati AD konverzije mogu se posmatrati na strani računara u Terminal
aplikaciji, slika 1.4. U datoj aplikaciji je potrebno podesiti broj komunikacionog porta,
brzinu prenosa, broj bitova u jednom paketu poruke. Programu na strani kontrolera je
dodat deo za serijsku komunikaciju sa računarem (takođe dat u prilogu vežbe). On je
informativnog karaktera, odnosno student se ne mora upuštati u njegove detalje da bi
odradio ovu vežbu.
Sl. 1.4. Aplikacija za prijem podataka sa kontrolera: rezultat AD konverzije
Vežba u laboratoriji:
7
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
Menjati vrednost napona na AN0 ulazu kontrolera menjajući vrednost otpora
datog potenciometra. Posmatrati rezultate konverzije prvo u integer, a zatim u
označenom fixed-point formatu (u Terminal aplikaciji).
Promeniti vrednost kanala na ulaz AN1 i proveriti rezultat.
Načiniti program koji na osnovu vrednosti napona na analognom ulazu (od 0
do 5V), generiše pwm signal faktor ispune od 0 do 100%. Iskoristiti programe iz
primera 1 (pwm) i primer 2 (adc).
2.4.
Rešenja zadataka za vežbu 2
U ovim poglavlju su priloženi programa korišćenih tokom vežbe. Potpuna verzija
programa je na raspolaganju u elektronskoj formi tokom vežbi.
2.4.1.
Rešenja zadatka 1 - Generisanje PWM-a
/************************************************************************************/
/* PROGRAM: Primer 1: Pwm
*/
/* OPIS : Demo pwm periferije
*/
/************************************************************************************/
// Ukljucivanje potrebnih zaglavlja
#include <p30f4011.h>
#include <pwm.h>
#include <uart.h>
// izbor odgovarajuceg moda oscilatora:
_FOSC(CSW_FSCM_OFF & XT_PLL4);
// Definicije konstanti
#define F_CY
#define F_PWM
// kristal je 8MHZ -> DSP radi na 8MIPS-a
8000000 // instrukcijski takt DSP-a (8MIPS-a)
20000
// frekvencija pwm-a, inicijalno 20kHz
// pwm period, za trougaoni nosilac: Tpwm = 2*PTPER*TCY, odnosno prema katalogu precizno Tpwm =
// 2*(PTPER + 1)*TCY -> PTPER = (fcy/fpwm)*0.5 - 1 (= 199 za 20KHz - rezolucija pwm-a 8bita (7+1))
#define PERIOD
(F_CY/F_PWM)*0.5-1
#define SIZE
// Deklaracije globalnih promenljivih
unsigned int Duty_Ratio = PERIOD;
unsigned int TMR_array[SIZE];
100
// broj tacaka buffera
// postavi pocetni faktor ispune na 50%
// Funkcija za inicijalizaciju pwm periferije
void PWM_Init(void)
8
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
{
// dozvola pwm int., prioritet 1, fault pin zabrani
ConfigIntMCPWM(PWM_INT_EN & PWM_INT_PR1 & PWM_FLTA_DIS_INT);
// posmatramo PWM kanal 2 (RE3), postavi pocetni faktor ispune na 50%
SetDCMCPWM(2,Duty_Ratio,0);
// period, bez specijalnog event-a za ADC
OpenMCPWM(PERIOD,0,
// dozvoli pwm, pwm clock bez prescalera, up down mode
PWM_EN & PWM_IDLE_CON & PWM_OP_SCALE1 & PWM_IPCLK_SCALE1 &
PWM_MOD_UPDN,
// dozvoli pwm, pwm clock bez prescalera, free runing mode
//PWM_EN & PWM_IDLE_CON & PWM_OP_SCALE1 & PWM_IPCLK_SCALE1 &
PWM_MOD_FREE,
// komplementaran mod za pinove RE2 i RE3, zabrani pwm 1 i pwm3
PWM_MOD2_COMP & PWM_PDIS3H & PWM_PEN2H & PWM_PDIS1H &
PWM_PDIS3L & PWM_PEN2L & PWM_PDIS1L,
// dozvoljeni update duty cycle i period registra
PWM_SEVOPS1 & PWM_OSYNC_PWM & PWM_UEN);
}
/*************************/
/*** GLAVNI PROGRAM ***/
/*************************/
int main(void)
{
unsigned int i = 0;
PWM_Init();
// inicijalizuj pwm periferiju
// beskonacna petlja
while(1)
{
// snimaj stanje timera: PTMR = direction bit + TMR (testera ili trougao)
if (i<SIZE)
TMR_array[i] = PTMR&0x7fff;
i++;
}
}
// PWM interupt routine:
void __attribute__((__interrupt__)) _PWMInterrupt(void)
{
PDC2 = Duty_Ratio;
// obnovi sadrzaj DUTY CYCLE registra
IFS2bits.PWMIF = 0;
// dozvoli ulazak u prekid i sledeci put
}
9
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
2.4.2.
Vežba 2
Rešenja zadatka 2 - AD konverzija
/************************************************************************************/
/* PROGRAM: Primer 2: ADC
*/
/* OPIS : Demo ADC periferije
*/
/************************************************************************************/
// Ukljucivanje potrebnih zaglavlja
#include <p30f4011.h>
#include <adc10.h>
#include <uart.h>
// izbor odgovarajuceg moda oscilatora:
_FOSC(CSW_FSCM_OFF & XT_PLL4);
// kristal je 8MHZ -> DSP radi na 8MIPS-a
// Funkcija za inicijalizaciju ADC periferije
void ADC_Init(void)
{
ADCON1bits.ADON = 0;
// iskljuci ADC modul
// cita se AN0 ulaz, u odnosu na masu
SetChanADC10(ADC_CH0_POS_SAMPLEA_AN0 &
ADC_CH0_NEG_SAMPLEA_NVREF);
// ne dozvoli prekid ADC modula
ConfigIntADC10(ADC_INT_DISABLE);
// integer ili sign fractional format:
OpenADC10(ADC_MODULE_ON & ADC_IDLE_STOP & ADC_FORMAT_INTG &
//OpenADC10(ADC_MODULE_ON& ADC_IDLE_STOP&ADC_FORMAT_SIGN_FRACT&
ADC_VREF_AVDD_AVSS & ADC_SCAN_OFF & ADC_CONVERT_CH0 &
ADC_SAMPLES_PER_INT_1 & ADC_ALT_BUF_OFF & ADC_ALT_INPUT_OFF,
ADC_SAMPLE_TIME_2 & ADC_CONV_CLK_SYSTEM & ADC_CONV_CLK_3Tcy,
ENABLE_AN0_ANA, SCAN_NONE);
}
// Funkcija za inicijalizaciju UART2 periferije
void UARTinit()
{
unsigned int config1, config2, baud;
// iskljuci UART2 modul
CloseUART2();
// zabrani prekide za prijem i slanje sa UART2
ConfigIntUART2(UART_RX_INT_DIS & UART_TX_INT_DIS);
// konfigurisi UART2 za slanje/prijem 8 bita, bez provere parnosti i sa 1 stop bitom
config1 = UART_EN &
UART_IDLE_STOP &
10
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
UART_RX_TX &
UART_DIS_WAKE &
UART_DIS_LOOPBACK &
UART_DIS_ABAUD &
UART_NO_PAR_8BIT &
UART_1STOPBIT;
config2 = UART_INT_TX &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE &
UART_INT_RX_BUF_FUL &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;
baud = 52;
// formula je baud = (kvarc[Hz]*PLL/(4*16*BaudRate))-1;
// za kvarc = 8 MHz, PLL = 4 i BaudRate = 9600 ==> baud = 52
// konfigurisi UART2 za BaudRate = 9600 bps, 8-bit, no parity, 1 stop bit
OpenUART2(config1, config2, baud);
}
/**********************/
/*** GLAVNI PROGRAM ***/
/**********************/
int main(void)
{
unsigned int i = 0;
unsigned int ADC_result;
// inicijalizuj ADC modul
ADC_Init();
// inicijalizuj UART2 modul
UARTinit();
// beskonacna petlja
while(1)
{
ADCON1bits.SAMP = 1;
while(!ADCON1bits.SAMP);
ConvertADC10();
while(BusyADC10());
ADC_result = ReadADC10(0);
// startuj semplovanje
// sacekaj kraj semplovanja
// startuj konverziju (brisi SAMP bit)
// sacekaj kraj konverzije
// sacuvaj rezultat
NewLine();
SendNum(ADC_result);
while(BusyUART2());
// novi red
// posalji rezultat na PC
// sacekaj da se zavrsi prenos
for (i=0;i<10000;i++);
// uspori slanje
}
11
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
}
// Funkcija za slanje karaktera za kraj reda i za novi red
void NewLine()
{
while(BusyUART2());
WriteUART2(13);
while(BusyUART2());
WriteUART2(10);
while(BusyUART2());
}
// CR
// LF
// Funkcija za slanje broja (integer) na UART
void SendNum(int value)
{
unsigned int c10000, c1000, c100, c10, c1;
while(BusyUART2());
if (value < 0)
{
WriteUART2('-');
while(BusyUART2());
value = -value;
}
c1=value % 10;
value/=10;
c10=value % 10;
value/=10;
c100=value % 10;
value/=10;
c1000=value % 10;
value/=10;
c10000=value % 10;
while(BusyUART2());
WriteUART2(c10000+'0');
while(BusyUART2());
WriteUART2(c1000+'0');
while(BusyUART2());
WriteUART2(c100+'0');
while(BusyUART2());
WriteUART2(c10+'0');
while(BusyUART2());
WriteUART2(c1+'0');
// ako je vrednost manja od nule posalji karakter minus
// broj jedinica
// broj desetica
// broj stotina
// broj hiljada
// broj deset hiljada
}
Microchip lib:
#include "adc10.h"
/*********************************************************************
12
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum
Vežba 2
* Function Name : ConvertADC10
* Description
: This function starts an A/D conversion by clearing ADCON1<SAMP> bit.
* Parameters
: None
* Return Value
: None
*********************************************************************/
void ConvertADC10(void)
{
ADCON1bits.SAMP = 0; /* clear SAMP to start conversion*/
}
/************************************************************************
* Function Name : ReadADC10
* Description
: This function reads from one of the 16 ADC Buffers (ADCBUF0 - ADCBUFF)
* Parameters
: unsigned char bufIndex
* Return Value
: unsigned int
*************************************************************************/
unsigned int ReadADC10(unsigned char bufIndex)
{
return(*(&ADCBUF0+bufIndex));
}
13
Download

Priprema_za_lab_2 NOVO.pdf