13
Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2 1 LABORATORIJSKE VEŽBE IZ ISPITA PRIMENA MIKROPROCESORA U ELEKTROENERGETICI 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 Primena mikrokontrolera za generisanje PWM signala i analogno - digitalnu konverziju II vežba

Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Embed Size (px)

Citation preview

Page 1: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

1

LABORATORIJSKE VEŽBE IZ ISPITA PRIMENA MIKROPROCESORA U ELEKTROENERGETICI

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

Primena mikrokontrolera za generisanje PWM signala i analogno -digitalnu konverziju

II vežba

Page 2: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

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

• Proučiti opis eksperimentalne kartice, dat u uvodnom delu praktikuma • Detaljno proučiti date programe

2.2. 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

Page 3: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

3

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

Page 4: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

4

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 PWM modula

dozvola PWM prekida

glavna petlja

Inicijalizacija sistema

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.

0

50

100

150

200

Symbol: TMR_arraySource Symbol: TMR_array

Y Axis

X Axis

6

12

18

24

30

36

42

48

54

60

66

72

78

84

90

96

Sl. 1.2. Trougaoni nosilac: stanje PTMR registra (snimljeno u glavnom programu)

Page 5: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

5

0

100

200

300

400

Symbol: TMR_arraySource Symbol: TMR_array

Y Axis

X Axis

6

12

18

24

30

36

42

48

54

60

66

72

78

84

90

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.

Page 6: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

6

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

Page 7: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

7

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:

Page 8: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

8

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); // kristal je 8MHZ -> DSP radi na 8MIPS-a // Definicije konstanti #define F_CY 8000000 // instrukcijski takt DSP-a (8MIPS-a) #define F_PWM 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 100 // broj tacaka buffera // Deklaracije globalnih promenljivih unsigned int Duty_Ratio = PERIOD; // postavi pocetni faktor ispune na 50% unsigned int TMR_array[SIZE]; // Funkcija za inicijalizaciju pwm periferije void PWM_Init(void)

Page 9: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

9

{ // 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 }

Page 10: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

10

2.4.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 &

Page 11: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

11

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; // startuj semplovanje while(!ADCON1bits.SAMP); // sacekaj kraj semplovanja ConvertADC10(); // startuj konverziju (brisi SAMP bit) while(BusyADC10()); // sacekaj kraj konverzije ADC_result = ReadADC10(0); // sacuvaj rezultat NewLine(); // novi red SendNum(ADC_result); // posalji rezultat na PC while(BusyUART2()); // sacekaj da se zavrsi prenos for (i=0;i<10000;i++); // uspori slanje }

Page 12: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

12

} // Funkcija za slanje karaktera za kraj reda i za novi red void NewLine() { while(BusyUART2()); // CR WriteUART2(13); while(BusyUART2()); // LF WriteUART2(10); while(BusyUART2()); } // Funkcija za slanje broja (integer) na UART void SendNum(int value) { unsigned int c10000, c1000, c100, c10, c1; while(BusyUART2()); if (value < 0) // ako je vrednost manja od nule posalji karakter minus { WriteUART2('-'); while(BusyUART2()); value = -value; } c1=value % 10; // broj jedinica value/=10; c10=value % 10; // broj desetica value/=10; c100=value % 10; // broj stotina value/=10; c1000=value % 10; // broj hiljada value/=10; c10000=value % 10; // broj deset hiljada 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'); } Microchip lib: #include "adc10.h" /*********************************************************************

Page 13: Priprema za lab 2 NOVO - keep.ftn.uns.ac.rs · Maketa korišćena za vežbu 1 jeste razvojni sistem Mikroelektronika easy ... Prvo je ADC modul inicijalizovan, a zatim su u glavnom

Primena mikroprocesora u elektroenergetici – laboratorijski praktikum Vežba 2

13

* 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)); }