62
Univerzitet u Nišu Elektronski Fakultet Katedra za Elektroniku PREDMET: Mikroprocesorski Sistemi Avgust 2008 RAZVOJNI ALAT MSP430 Laboratorijske vežbe Mentor: Studenti: Prof. Dr. Mile Stojčev, red. prof. Milena Jovanović, br. ind. 11710 Jelena Gligorijević, br. ind. 11418 Srđan Jovanović, br. ind. 12455 Aleksandar Ristović, br. ind. 11414

RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

Univerzitet u Nišu Elektronski Fakultet Katedra za Elektroniku

PREDMET: Mikroprocesorski Sistemi Avgust 2008

RAZVOJNI ALAT MSP430

Laboratorijske vežbe

Mentor: Studenti: Prof. Dr. Mile Stojčev, red. prof. Milena Jovanović, br. ind. 11710 Jelena Gligorijević, br. ind. 11418 Srđan Jovanović, br. ind. 12455 Aleksandar Ristović, br. ind. 11414

Page 2: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

2

Sadržaj Opšti uvod za laboratorijske vežbe.............................................................................3

Laboratorijska vežba I - Snimanje i reprodukcija audio signala.................................9 Laboratorijska vežba II - Ispisivanje karaktera na LCD-u....................................... 23 Laboratorijska vežba III - A/D konvertor..................................................................41 Laboratorijska vežba IV - D/A konvertor..................................................................50 Biografije autora.........................................................................................................59

Page 3: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

3

Opšti uvod za laboratorijske vežbe

Cilj laboratorijskih vežbi je upoznavanje sa određenim mogućnostima Texas Instruments-ove razvojne ploče MSP430FG4618/F2013.

Hardverska struktura mikrokontrolera familije MSP430

Razvojna ploča MSP430FG4618/F2013 je bazirana na Texas Instruments-ovoj

MSP430 familiji mikrokontrolera koja se karakteriše mikro potrošnjom. Na ploči su ugrađena dva mikrokontrolera: MSP430FG4618 i MSP430F2013.

Navodimo neke od osnovnih karakteristika familije MSP430: • Koristi 64K bajta za adresiranje ROM-a, RAM-a, EERAM-a i periferija. • Nema ograničenje prekida i potprogramskih nivoa zbog procesiranja magacina. • Samo tri formata istrukcija. Stroga ortogonalnost bez izuzetaka. • Koristi 1 reč/instrukcija ukoliko je moguće. • Sedam načina adresiranja izvorišta. • Četiri načina adresiranja odredišta. • Spoljašnji pinovi za prekide: postojeći Ulazno/Izlaznih pinovi se mogu koristiti za

prekide. • Prekidi imaju dodeljene prioritete: istovremena pojava prekida se razrešava na

principu prioriteta. • Periferije imaju lokalnu memoriju: registri su u modulima - ne koriste RAM. • USART se nalazi na čipu: odvojeni prekidi za slanje i primanje. • Tajmer sa prekidima za brojanje događaja, generisanje vremena, PWM,... • Watchdog • 12- bitni ADC sa 16 ulaza. • EPROM verzija (One Time Programmable-memorija koja može samo jednom da se

isprogramira) • LCD drajver • Stabilna frekvencija procesora obezbeđena korišćenjem PLL-a i kristala frekvencije

32,768 Hz • Jednostavan razvoj programa zbog ortogonalne strukture: sve instrukcije podržavaju

sve adresne režime • Radi se na razvoju C-kompajlera • Koncept modularnog projektovanja: moduli su striktno memorijski mapirani

Razvojna ploča MSP430FG4618/F2013

Razvojna ploča MSP430FG4618/F2013 može da se koristi za razvoj velikog broja aplikacija. MSP-EXP430FG4618 kit sadrži razvojnu ploču MSP430FG4618/F2013 koja je prikazana na slici 1. i dve AAA 1.5 V baterije.

Page 4: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

4

Slika 1.: Razvojna ploča MSP430FG4618/F2013

Navodimo osnovne komponente na ploči i njihove funkcije:

• Interfejsi � Integrisani displej SoftBaugh SBLCDA4 LCD � Dva tastera, S1 i S2, priključena su na digitalni ulazno/izlazni (U/I) port P1

mikrokontrolera MSP430FG4618. � Četiri svetleće diode (LED) služe za indikaciju. Tri su povezane sa

mikrokontrolerom MSP430FG4618 i jedna sa mikrokontrolerom MSP430F2013.

� Bazer je povezan na digitalni U/I port mikrokontrolera MSP430FG4618. � Kapacitivna tastatura osetljiva na dodir, koja ima oblik broja “4”, je povezana

na digitalni U/I port mikrokontrolera MSP430F2013.

• Komunikacioni periferni uređaji � Interfejs ka bežičnoj komunikaciji ostvarujemo preko Wireless Evaluation

Module konektora koji podržava Texas Instruments-ove CCxxxxEMK module. Primopredajni moduli su povezani na USART konektor mikrokontrolera MSP430FG4618.

� Serijsku komunikaciju sa računarom, mikrokontroler MSP430FG4618 ostvaruje standardnim RS-232 9-to pinskim konektorom preko svog USCI perifernog uređaja koji je konfigurisan u UART modu.

Page 5: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

5

� Mikrokontroleri MSP430FG4618 i MSP430F2013 koriste USCI i USI periferne uređaje i podržavaju I2C i SPI protokole. Protokol se koristi za međusobnu komunikaciju mikrokontrolera MSP430FG4618 i MSP430F2013.

• Obrada analognog signala � Mikrofon je povezan sa mikrokontrolerom MSP430FG4618. � Dva analogna filtra: aktivni filtar prvog reda propusnik visokih učestanosti

(HPF) i opcioni, Sallen-Key aktivni filtar drugog reda propusnik niskih učestanosti (LPF). Ovi filtri koriste integrisane operacione pojačavače koji se nalaze u mikrokontroleru MSP430FG4618.

� Analogni izlaz je izveden na ploči preko mono utičnice od 3.5mm koja je povezana sa izlazom mikrokontrolera MSP430FG4618.

• Sistemski taktovi � Mikrokontroler MSP430F2013 koristi interni naponski kontrolisan oscilator

(VCO) koji radi na ~12kHz za vreme koje je potrebno da procesor uđe iz standby režima rada sa mikropotrošnjom u normalan režim rada. Integrisani digitalno kontrolisani oscilator (DCO) je programabilan do frekvencije od 16MHz.

� Standardni kristal za 32.768kHz se nalazi na ploči (podnožje X2) i on se koristi za ACLK mikrokontolera MSP430FG4618 za rad na niskim frekvencijama, standby režim rada sa mikropotrošnjom i RTC funkcionalnost. Integrisani FLL+ taktni modul obezbeđuje programabilni interni generator takta visoke frekvencije koji se koristi za pobudu CPU-a i drugih periferija na čipu. Osim FLL+ , moguće je dograditi i spoljašnji kristal do 8MHz na podnožje X1.

• Konfiguracija kratkospajača � Razvojna ploča podržava rad raznih perifernih uređaja i komponenta koje

možemo, zbog smanjenja ukupne potrošnje, po potrebi isključiti. Ovo se ostvaruje softverski ili hardverski konfiguracijom kratkospajača.

Softverski alati Da bismo mogli da koristimo ovu razvojnu ploču u konkretim aplikacijama, moramo da programiramo mikrokontrolere MSP430FG4618 i MSP430F2013. Za to su nam potrebni Flash Emulation Tool (MSP-FET430UIF) i radno okruženje IAR Embedded Workbench IDE.

• Za unošenje i debagiranje kôda u mikrokontrolerima MSP430FG4618 i

MSP430F2013 koristimo Flash Emulation Tool (MSP-FET430UIF).

Page 6: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

6

Slika 2. Flash Emulation Tool MSP-FET430UIF

MSP-FET430UIF kao konektore sa jedne strane ima USB koji se priključuje na

računar, a sa druge strane JTAG konektor koji se priključuje na JTAG konektor odgovarajućeg mikrokontrolera na razvojnoj ploči.

• IAR Embedded Workbench IDE je radno okruženje u kome su integrisani svi potrebni

alati: C/C++ kompajler, asembler, IAR XLINK linker, IAR XAR kreator biblioteke, IAR XLIB Librarian, editor, projekt menadžer sa dodatkom za komandu Make, dodatak za komandnu liniju i IAR C-SPY® debugger, debugger za više programske jezike.

Programiranje mikrokontrolera MSP430FG4618 1. Povežimo USB konektor MSP-FET430UIF-a na računar. 2. Povežimo JTAG konektor MSP-FET430UIF-a na JTAG1 konektor koji se nalazi na razvojnoj ploči. 3. Kreirajmo novi projekat ili učitajmo postojeći projekat u IAR Embedded Workbench-u. 4. U padajućem meniju Project, IAR Embedded Workbench-a, izaberimo Options; pojaviće se meni koji je prikazan na slici 3. U General Options, pod Target izaberimo MSP430FG4618 iz MSP430x4xx Family opcija.

Slika 3: Izbor uređaja u IAR-u

Page 7: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

7

5. U Debugger opcijama, iz istog menija, izaberimo FET Debugger kao što je prikazano na slici 4.

Slika 4: Selektovanje FET Debugger-a

6. U opcijama FET Debugger-a izaberimo Texas Instrument USB-IF kao što je prikazano na slici 5. Nema potrebe da menjamo polaznu Automatic postavku.

Slika 5: Izbor USB interfejsa

Page 8: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

8

Programiranje mikrokontrolera MSP430F2013

1. Povežimo 14-to pinski kabal na JTAG2 konektor koji se nalazi na ploči. 2. Kreirajmo novi projekat ili učitajmo postojeći projekat u IAR Embedded Workbench-u. 3. U padajućem meniju Project, IAR Embedded Workbench-a, izaberimo Options; pojaviće se meni koji je prikazan na slici 3. U General Options, pod Target izaberimo MSP430F2013 iz MSP430x2xx Family opcija. 4. U Debugger opcijama, iz istog menija, izaberimo FET Debugger kao što je prikazano na slici 4. 5. U opcijama FET Debugger-a izaberimo Texas Instrument USB-IF kao što je prikazano na slici 5. Nema potrebe da menjamo polaznu Automatic postavku. 6. Za novo-kreirani projekat, Spy-Bi-Wire interfejs je polazna postavka za MSP430F2013. Ako je potrebno da tu postavku promenimo, u FET Debugger meniju čekirajmo Override default i zatim izaberimo Spy-Bi-Wire umesto 4-Wire JTAG, kao što je prikazano na slici 6. Paralelni FET ne podržava Spy-Bi-Wire interfejs i ne može da se koristi za debagiranje/programiranje MSP430F2013.

Slika 6: Izbor Spy-Bi-Wire interfejsa za MSP430F2013

Page 9: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

9

LABORATORIJSKA VEŽBA I

- Snimanje i reprodukcija audio signala –

Page 10: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

10

Uvod:

Dizajn ploče MSP430 je takav da omogućava pun tok obrade analognog signala korišćenjem MSP430FG4618. Ploča može da se koristi za brojne audio aplikacije. Moguće je snimati i reprodukovati audio signale bez korišćenja dodatnih spoljnih komponenata.

Slika 7: Tok obrade analognog signala

Mikrofon je povezan sa MSP430FG4618 i dozvola za rad mikrofona se dobija prekoodgovarajućeg porta MSP430FG4618.

Analogni filtri : Prvi po redu aktivni filtar propusnik visokih učestanosti (HPF) sa graničnom frekvencijom postavljenom približno na 340Hz nalazi se iza mikrofona da bi eliminisao ulazne signale niskih frekvencija. Opcionalan, drugi po redu, Sallen-Key aktivni filtar propusnik niskih učestanosti (LPF) sa graničnom frekvencijom postavljenom približno na 4 kHz, eliminiše šum visokih frekvencija na analognom izlazu 12-bitnog digitalno-analognog konvertora (DAC). Šema filtra prikazana je na slici 5. Ovi filtri koriste integrisane operacione pojačavače mikrokontrolera MSP430. Operacioni pojačavači OA0 i OA1 obavljaju proces filtriranja.

Page 11: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

11

Sivi blokovi na slici 8 prikazuju elemente koji se nalaze u MSP430FG4618.

Slika 8: Šema aktivnog analognog filtra

Analogni izlaz je izveden sa ploče preko mono utičnice od 3.5mm koja je povezana na integrisani operacioni pojačavač OA2. Ulaz u ovaj pojačavač može interno da se poveže na DAC12 izlaz MSP430FG4618. Nekoliko opcija slabljenjna je omogućeno interno i hardverski pomoću odgovarajućeg kratkospajača.

Direktni pristup memoriji –DMA

Predstavlja takav pristup gde U/I interfejs i glavna memorija direktno razmenjuju podatke, bez posredstva CPU-a. Ovim se premošćava usko grlo CPU-periferija i obezbeđuje prenos podataka između periferija i RAM-a mikroračunara bez aktivne intervencije CPU-a. Osnovne karakteristike ove tehnike su:

l. prenos se ostvaruje bez programskog upravljanja, 2. brzina prenosa je velika i odre ena je memorijskim ciklusom (< 0,5µs) a reda je 2 M bajta/s i više, 3. prenos se realizuje kao blokovski.

Slika 9: Tokovi podataka kod DMA U/I prenosa

Page 12: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

12

Zadatak: Snimanje i reprodukcija audio signala. Upoznavanje sa DMA (Direct Memory Acess) i kompletnim tokom obrade analognog signala na mikrokontroleru MSP430 FG4618. Potrebna oprema: Za izvođenje ove laboratorijske vežbe potrebno nam je:

� razvojna ploča MSP430FG4618/F2013

� računar

� Flash Emulation Tool(MSP-FET430UIF) kojim ćemo razvojnu ploču povezati na računar i izvršiti programiranje kontrolera MSP430FG4618

� slušalice koje ćemo priključiti na mono utičnicu od 3.5mm

Postupak rada:

Da bismo kreirali novi projekat, napisali program, učitali ga i izvršili na MSP430 uređajima, potrebno je da ispratimo sledeću proceduru:

1. Pokrenimo IAR Embedded Workbench. Kliknimo na Start dugme na taskbar-u i izaberimo All Programs > IAR Systems > IAR Embedded Workbench for MSP430 V4 > IAR Embedded Workbench.

Slika 10: Osnovni prozor IAR Embedded Workbench IDE-a

Page 13: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

13

2. Kreirajmo novi tekstualni fajl (File > New > File).

Slika 11: Kreiranje novog tekstualnog fajla u IAR Embedded Workbench IDE-u

3. Unesimo tekst programa iz Listinga 1 u novo kreirani fajl. Listing1:

#include "msp430xG46x.h" //------------------------------------------------------------------------------ // Definisanje memorije // // Definisu se dva dela memorije, tako sto se memorija MSP430FG4618 // deli u dve zasebne celine, jer se vektori prekida nalaze u sredini Fles // memorije MSP430FG4618, i ne sme se upisivati preko njih! // //------------------------------------------------------------------------------ #define Memstart 0x6000 // Deo memorije za upis #define Memend 0xfc00 // semplovanih podataka #define Memstart2 0x10000 // Deo memorije za upis #define Memend2 0x20000 // semplovanih podataka #define SamplePrd 118 // Vreme semplovanja: // SampleR = 1MHz / SamplePrd //------------------------------------------------------------------------------ // Definicije LCD segmenata //------------------------------------------------------------------------------ #define SEG_A 0x01 #define SEG_B 0x02 #define SEG_C 0x04

Page 14: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

14

#define SEG_D 0x08 #define SEG_E 0x40 #define SEG_F 0x10 #define SEG_G 0x20 #define SEG_H 0x80 //------------------------------------------------------------------------------ // Sledece dve promenjive sadrze podesavanja kontrolnih registara za DMA2 // upotrebu pri snimanju i reprodukciji. DMA1 se koristi za upis tih vrednosti // u kontrolni registar DM2, kako bi DMA2 poceo sa radom. //------------------------------------------------------------------------------ __root unsigned int DMA2CTL_Const_R = DMADSTINCR_3 + DMAEN + DMAIE; __root const unsigned int DMA2CTL_Const_P = DMASRCINCR_3 + DMAEN + DMAIE; //------------------------------------------------------------------------------ // Prototipi funkcija //------------------------------------------------------------------------------ void Record(void); void Playback(void); void Erase(void); //------------------------------------------------------------------------------ void main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Zaustavi watchdog FLL_CTL0 |= XCAP14PF; // Postavi ulazne kapacitivnosti do { IFG1 &= ~OFIFG; // Resetuj OSCFault bit for (i = 0x47FF; i > 0; i--); // Pauza za setovanje } while (IFG1 & OFIFG ); // OSCFault je jos uvek setovan? // Portovi P1OUT = 0; // Svi P1.x resetovani P1IE = 0x03; // P1.0, P1.1 sa dozvoljenim interaptom P1IES = 0x03; // P1.0, P1.1 hi/low ivica P1DIR = 0xFC; // P1.0/1 = ulaz (tasteri) P2OUT = 0; // Svi P2.x resetovani P2DIR = 0xDF; // UCA0RXD = ulaz P3OUT = 0x20; // Svi P3.x resetovani (3.5 = zujalica) P3DIR = 0xF9; // I2C pinovi = ulaz P4OUT = 0; // Svi P4.x resetovani P4DIR = 0xFF; // Svi P4.x izlazni P5OUT = 0; // Svi P5.x resetovani P5SEL = 0x1C; // P5.2/3/4 = LCD linije P5DIR = 0xFF; // Svi P5.x izlazni P6OUT = 0; // Svi P6.x resetovani P6SEL = 0xBF; // Svi osim P6.6 analogni P6DIR = 0xFF; // Svi P6.x izlazni P7OUT = 0; // Svi P7.x resetovani P7DIR = 0xFF; // Svi P7.x izlazni P8OUT = 0; // Svi P8.x resetovani P8DIR = 0xFF; // Svi P8.x izlazni P9OUT = 0; // Svi P9.x resetovani P9DIR = 0xFF; // Svi P9.x izlazni

Page 15: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

15

P10OUT = 0; // Svi P10.x resetovani P10DIR = 0xFF; // Svi P10.x izlazni // LCD_A for (i = 19; i > 0; i--) LCDMEM[i] = 0; // Izbrisi LCD LCDACTL = LCDON + LCD4MUX + LCDFREQ_128;

// 4mux LCD, ACLK/128 LCDAPCTL0 = 0x7E ; // Segmenti 4-27 while (1) // Ponavljaj stalno { P1IFG &= ~0x03; // Izbrisi eventualne interapte za tastere P1IE |= 0x03; // Dozvoli interapte za tastere // Cekaj na dogadjaj i postavi CPU u status male potrosnje (4) __bis_SR_register(LPM4_bits + GIE); __disable_interrupt(); // Obradi dogadjaj: pritisnut taster if (P1IFG & 0x02) // Taster za snimanje (SW2) pritisnut? Record(); else if (P1IFG & 0x01) // Taster za reprodukciju (SW1) pritisnut? Playback(); } } //------------------------------------------------------------------------------ //Snimanje i cuvanje audio zapisa g u Flash memoriji //korišæenjem DMA kontrolera i ADC12 modula //------------------------------------------------------------------------------ void Record(void) { // Prvo ukljucimo hardver P5OUT |= 0x02; // Ukljuci LED#4 P2OUT |= 0x08; // Ukljuci napajanje za mikrofon // Postavljanje OA0 = mikrofonsko pred-pojacalo // OA0+ = P6.2/OA0I1 // OA0- = P6.0/OA0I0 // OA0OUT = P6.1/OA0O, A1 (internal) OA0CTL0 = OAP_1 + OAPM_3; // Ulazi, u power modu OA0CTL1 = OARRIP; // Ulaz opste namene (rail-to-rail) // Postavljanje ADC12 modula ADC12CTL0 = ADC12ON; // Ukljuci ADC12 // ADC12 Takt = ADC12OSC ADC12CTL1 = SHS_3 + CONSEQ_2; // Izvor: Timer_B.OUT1 // ADC12IFG = 0x00; // Izbrisi ADC12 vektor prekida ADC12MCTL0 = 0x0001; // Ulazni kanal A1 ADC12CTL0 |= ENC; // Dozvoli konverziju // Podesavanje Timer_B za snimanje TBCTL = TBSSEL_2; // SMCLK kao Timer_B izvor TBR = 0; TBCCR0 = SamplePrd; // Inicijalizuj TBCCR0 TBCCR1 = SamplePrd - 20; // Triger za ADC12 TBCCTL1 = OUTMOD_7; // Resetuj OUT1 na EQU1, setuj na EQU0

Page 16: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

16

// Podešavanje DMA kontrolera // Podešavanje DMA okidaca DMACTL0 = DMA2TSEL_6 + // ADC12IFGx okida DMA2 DMA1TSEL_14 + // DMA0IFG okida DMA1 DMA0TSEL_6; // ADC12IFGx okida DMA0 // Podešavanje DMA0 za snimanje u prvi memorijski blok DMA0SA = (unsigned int)&ADC12MEM // Izvorisna adresa = ADC12 modul DMA0DA = Memstart; // Odredisna adresa = Flash memorija DMA0SZ = (Memend - Memstart) >> 1; // Velicina u recima (word) DMA0CTL = DMADSTINCR1 + DMADSTINCR0 + DMAEN; // Podešavanje DMA1 za aktiviranje DMA2 DMA1SA = (unsigned int)&DMA2CTL_Const_R; // Izvorisna adresa = podaci DMA1DA = (unsigned int)&DMA2CTL; // Odredisna adresa = DMA2CTL DMA1SZ = 1; // 1 Transfer DMA1CTL = DMAEN; // Jedan transfer, ukljuèi DMA // Podešavanje DMA2 za snimanje u drugi memorijski blok DMA2SA = (unsigned int)&ADC12MEM0; // Izvorisna adresa = ADC12 modul __data16_write_addr((unsigned short)&DMA2DA, Memstart2); // Odredisna adresa = Flash memorija DMA2SZ = (Memend2 - Memstart2) >> 1; // Velicina u recima (word) // Postavljanje i brisanje Flash memorije FCTL2 = FWKEY + FSSEL1 + FN1; // SMCLK/3 = ~333kHz FCTL3 = FWKEY; // Otkljuèaj Flash memoriju za pisanje Erase(); // FCTL1 = FWKEY + WRT; // Dozvoli upis u Flash za snimanje // Upiši na LCD LCDM8 = SEG_A + SEG_B + SEG_C + SEG_E + SEG_F + SEG _G; // "R" LCDM7 = SEG_A + SEG_D + SEG_E + SEG_F + SEG_G; // "E" LCDM6 = SEG_A + SEG_D + SEG_E + SEG_F ; // "C" LCDM5 = 0x00; // " " LCDM4 = 0x00; // " " // Poèni sa snimanjem P1OUT |= 0x01; // Ukljuci LED#4 TBCTL |= MC0; // Startuj Timer_B // (broji do TBCL0) // Aktiviraj LPM za vreme DMA snimanja, buðenje po završetku __bis_SR_register(LPM0_bits + GIE); // Dozvoli prekide, uði LPM0 __disable_interrupt(); // Zabrani prekide // Deactiviraj Flash memori FCTL1 = FWKEY; // Zabrani upis u Flash FCTL3 = FWKEY + LOCK; // Zakljuèaj Flash memoriju // Iskljuèi MSP430 modules ADC12CTL1 &= ~CONSEQ_2; // Zaustavi konverziju ADC12CTL0 &= ~ENC; // Zabrani konverziju ADC12 ADC12CTL0 = 0; // Iskljuèi ADC12 i referentni napon TBCTL = 0; // Zabrani Timer_B OA0CTL0 = 0; // Zabrani OA0

Page 17: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

17

P2OUT &= ~0x08; // Iskljuèi napajanje mikrofona P5OUT &= ~0x02; // Iskljuèi LED#4 // Ispis na LCD LCDM8 = 0x00; // " " LCDM7 = 0x00; // " " LCDM6 = 0x00; // " " } //------------------------------------------------------------------------------ // Reprodukcija audio zapisa smeštenog u Flash memoriji korišæenjem // DMA kontrolera i DAC12 modula //------------------------------------------------------------------------------ void Playback(void) { volatile unsigned int i; // Ispis na LCD LCDM8 = SEG_A + SEG_B + SEG_E + SEG_F + SEG_G; // "P" LCDM7 = SEG_D + SEG_E + SEG_F; // "L" LCDM6 = SEG_A + SEG_B + SEG_C + SEG_E + SEG_F + SEG_G; // "A" LCDM5 = SEG_B + SEG_C + SEG_F + SEG_G; // "Y" LCDM4 = 0x00; // " " // Ukljuci spoljni hardver P5OUT |= 0x02; // Ukljuci LED#4 // Postavi DAC12_0 DAC12_0CTL = DAC12IR + DAC12AMP_2 + DAC12ENC + DA C12OPS; DAC12_0DAT = 0x057F; // Nivo ofseta // Podešavanje OA1 // OA1+ = P6.4/OA1I0 // OA1- = R_Bottom (interni) // OA1OUT = P6.3/A3/OA1O, R_Bottom (interni) OA1CTL0 = OAPM_3 + OAADC1; // Odaberi ulaze OA1CTL1 = OAFC_1 + OARRIP; // Rail-to-rail ulazi // Podešavanje OA2 // OA2+ = DAC12_0OUT // OA2- = OA1OUT // OA2OUT = P6.5/OA2O OA2CTL0 = OAN_2 + OAP_2 + OAPM_3 + OAADC1; // Odaberi ulaze OA2CTL1 = OAFC_6 + OAFBR_2 + OARRIP; // // Podešavanje DAC12_1 modula ADC12CTL0 = REFON + REF2_5V; // ADC12 ref. napon za DAC12s DAC12_1CTL = DAC12IR + DAC12AMP_7 + DAC12LSEL_3 + D AC12ENC; // Konfigurisanje DAC12 for (i = 0; i < 0x3fff; i++); // Cekanje dok se napon stabilizuje // Podesi Timer_B za reprodukciju TBCTL = TBSSEL_2; // SMCLK kao taktni izvor za Timer_B TBCCR0 = SamplePrd; // TBCCR2 = SamplePrd >> 1; // TBCCTL2 = OUTMOD_7; // Resetuj OUT2 na EQU2, setuj na EQU0

Page 18: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

18

// Podešavanje DMA kontrolera // Podešavanje DMA okidaèa DMACTL0 = DMA2TSEL_2 + // Timer_B.CCIFG2 okida DMA2 DMA1TSEL_14 + // DMA0IFG okida DMA1 DMA0TSEL_2; // Timer_B.CCIFG2 okida DMA0 // Podešavanje DMA0 za reprodukciju iz prvog mem. bloka DMA0SA = Memstart; // Izvorišna adresa = Flash memorija DMA0DA = (unsigned int)&DAC12_1DAT // Odredišna adresa = DAC12 modul DMA0SZ = (Memend - Memstart) >> 1; // Velicina DMA bloka DMA0CTL = DMASRCINCR1 + DMASRCINCR0 + DMAEN; // Postavi DMA1 za aktiviranje DMA2 DMA1SA = (unsigned int)&DMA2CTL_Const_P; // Izvorisna adresa = sadrzaj za ucitavanje DMA1DA = (unsigned int)&DMA2CTL; // Odredisna adresa = DMA2CTL DMA1SZ = 1; // 1 transfer DMA1CTL = DMAEN; // 1 transfer, dozvoli DMA // Postavi DMA2 za reprodukciju iz drugog memorijskog bloka __data16_write_addr((unsigned short)&DMA2SA, Memsta rt2); // Izvorisna adresa = Flash memorija DMA2DA = (unsigned int)&DAC12_1DAT; // Odredisna adresa = DAC12 modul DMA2SZ = (Memend2 - Memstart2) >> 1; // Velicina DMA bloka // Startuj reprodukciju TBCTL |= MC0; // Startuj Timer_B u UP rezimu rada // (broji do TBCCR0) // Aktiviraj LPM za vreme DMA reprodukcije, probudi se po zavrsetku __bis_SR_register(LPM0_bits + GIE); // Dozvoli prekide, udji u LPM0 __disable_interrupt(); // Zabrani prekide // Iskljuci MSP430 module TBCTL = 0; // Zabrani Timer_B ADC12CTL0 = 0; // Iskljuci ADC12 ref. voltazu DAC12_0CTL &= ~DAC12ENC; // Zabrani DAC12 konverziju DAC12_0CTL = 0; // Iskljuci DAC12 DAC12_1CTL &= ~DAC12ENC; // Zabrani DAC12 konverziju DAC12_1CTL = 0; // Iskljuci DAC12 OA1CTL0 = 0; // Zabrani OA1 OA2CTL0 = 0; // Zabrani OA2 P5OUT &= ~0x02; // Iskljuci LED#4 LCDM8 = 0x00; // " " LCDM7 = 0x00; // " " LCDM6 = 0x00; // " " LCDM5 = 0x00; // " " } //------------------------------------------------------------------------------ // Brisanje Flash memorije za novo snimanje //------------------------------------------------------------------------------ void Erase(void) { unsigned int Ptr = Memstart; // Pocetak snimljene memorije

Page 19: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

19

unsigned long FarPtr = Memstart2; LCDM8 = SEG_A + SEG_D + SEG_E + SEG_F + SEG_G ; // "E" LCDM7 = SEG_E + SEG_G; // "R" LCDM6 = SEG_A + SEG_B + SEG_C + SEG_E + SEG_F + SE G_G; // "A" LCDM5 = SEG_A + SEG_C + SEG_D + SEG_F + SEG_G ; // "S" LCDM4 = SEG_A + SEG_D + SEG_E + SEG_F + SEG_G ; // "E" // Brisanje memorije od 'Memstart' do 'Memend' do { if (Ptr & 0x1000) // Bit 12 za kontrolu LED#4 P5OUT |= 0x02; else P5OUT &= ~0x02; FCTL1 = FWKEY + ERASE; *(unsigned char *)Ptr = 0x00; // Dummy write da bi se resilo // brisanje segmenta Ptr += 0x0200; // Sledeci segmenat } while (Ptr < Memend); // Brisanje memorije od 'Memstart2' do 'Memend2' do { if (FarPtr & 0x1000) // Bit 12 za kontrolu LED#4 P5OUT |= 0x02; else P5OUT &= ~0x02; FCTL1 = FWKEY + ERASE; __data20_write_char(FarPtr, 0x00); // Dummy write da bi se resilo // brisanje segmenta FarPtr += 0x0200; // Sledeci segmenat } while (FarPtr < Memend2); } //------------------------------------------------------------------------------ // Rukovanje PORT1 prekidnim vektorom //------------------------------------------------------------------------------ #pragma vector=PORT1_VECTOR __interrupt void Port1_ISR (void) { P1IE &= ~0x03; / /Zabrani prekide sa tastera __bic_SR_register_on_exit(LPM4_bits); // Izadji iz LPM4 na reti // da bi se aktiviralo snimanje } //------------------------------------------------------------------------------ // Upravljanje DMA prekidnim vektorom //------------------------------------------------------------------------------ #pragma vector=DMA_VECTOR __interrupt void DMA_ISR(void) { DMA2CTL &= ~DMAIFG; // Resetuj DMA2 vektor prekida __bic_SR_register_on_exit(LPM0_bits); // Izadji iz LPM0 na reti } //------------------------------------------------------------------------------

Page 20: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

20

Napomena: Koristimo fajlove sa ekstenzijom .h da pojednostavimo upis kôda. KickStart sadrži fajlove koji definišu registre i imena bitova, za svaki uređaj i oni mogu mnogo da pojednostave razvoj programa. Ovi fajlovi se nalaze u <Installation Root>\Embedded Workbench x.x\430\inc . Uključimo odgovarajući .h fajl, za ciljni uređaj, u tekst fajl (#include "msp430xyyy.h" ). Dodatno, postoje i io430xxxx.h fajlovi koji su optimizovani za C izvorne fajlove.

4. Sačuvajmo tekstualni fajl programa (File > Save) kao main.c .

Slika 12: Izgled prozora nakon unešenog i sačuvanog koda

5. Kreirajmo novi radni prostor (File > New > Workspace) 6. Kreirajmo novi projekat (Project > Create New Project). Pojaviće se Create New

Project dijalog prozor.

Slika 13: Create New Project dijalog prozor

Page 21: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

21

Proverimo da li je Tool chain postavljen na MSP430, izaberimo Empty project iz ponuđenih projektnih šablona (Project Templates) i kliknimo OK. U standardnom Save As dijalog prozoru, naznačimo direktorijum gde želimo da smestimo projektni fajl, ili kreirajmo novi projektni direktorijum. Ukucajmo naziv projekta, Voice Recorder u polje za upis imena fajla i kliknimo Save da bismo kreirali novi projekat. Projekat će se pojaviti u radnom prozoru.

7. Dodajmo prethodno kreirani tekstualni fajl programa projektu (Project > Add Files). Selektujmo željeni tekstualni fajl i kliknimo Open. Alternativno, kliknimo duplim klikom na fajl da ga dodamo projektu.

8. Sačuvajmo radni prostor (File > Save Workspace). Naznačimo ime radnog prostora i kliknimo Save.

9. Podesimo opcije projekta (Project > Options). Za svaku potkategoriju (General Options, C/C++ Compiler, Assembler, Linker, Debugger) prihvatimo polazne opcije Factory Settings sa sledećim izuzecima:

� naznačimo ciljni uređaj (General Options > Target > Device) � omogućimo asemblerski projekat ili C/asemblerski projekat (General Options

> Target > Assembler-only project). � omogućimo generisanje izvršnog izlaznog fajla (General Options > Output >

Output file > Executable). � za FET debagiranje, kliknimo Debugger > Setup > Driver > FET Debugger. � naznačimo aktivni port koji se koristi za vezu sa FET-om (FET Debugger >

Setup > Connection). 10. Debagirajmo aplikaciju korišćenjem C-SPY-a (Project > Debug). Ovim startujemo

C-SPY i on preuzima kontrolu nad uređajem, briše memoriju, zatim je programira aplikacijom i resetuje uređaj.

Slika 14: Osnovni prozor C-SPY Debugger-a

Page 22: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

22

11. Kliknimo Debug > Go da startujemo aplikaciju. 12. Kliknimo Debug > Stop Debugging da stopiramo aplikaciju, izađemo iz C-SPY-a i

vratimo se u Workbench. 13. Kliknimo File > Exit da izađemo iz Workbench-a.

Page 23: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

23

LABORATORIJSKA VEŽBA II - Ispisivanje karaktera na LCD-u -

Page 24: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

24

Uvod: Razvojni alat MSP430 sadrži Integrisani SoftBaugh SBLCDA4 LCD displej koji je piključen preko kontrolera LCD_A na mikrokontroler MSP430FG4618. Kontroler LCD_A direktno pokreće LCD displej u statičkom, 2-mux, 3-mux ili 4-mux načinu rada LCD-a. Karakteristike LCD-a su:

• Memorija LCD-a • Automatsko generisanje signala • Podešavanje frekvencije • Mogućnost blinkanja karaktera na displeju • Softverska kontrola kontrasta • Podrška za četiri načina rada displeja:

1. statički 2. 2-mux 1/2 popune ili 1/3 popune 3. 3-mux 1/2 popune ili 1/3 popune 4. 4-mux 1/2 popune ili 1/3 popune

Slika 15: Blok dijagram LCD_A kontrolera

Page 25: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

25

LCD memorija: Svaki bit memorije je povezan sa po jednim segmentom ili nije iskorišćen, što zavisi od režima rada. Postavljanjem određenog bita uključuje se odgovarajući segment LCD-a Mogućnost blinkanja: LCD_A kontroler podržava blinkanje karaktera na displeju. LCDSON bit je u vezi sa svakim bitom memorije segmenta. Kada je LCDSON = 1, svaki segment je uključen ili isključen u skladu sa vrednošću odgovarajućeg bita. Kada je LCDSON = 0, svaki segment je isključen. U statičkom režimu rada svaki pin MSP430 pobuđuje jedan LCD segment i jednu liniju COM0 U 2-mux režimu rada svaki pin MSP430 pobuđuje dva LCD segmenta i dve linije COM0 i COM1. U 3-mux režimu rada svaki pin MSP430 pobuđuje tri LCD segmenta i tri linije COM0, COM1 i COM2. Zadatak: Kontrola rada LCD-a pomoću mikrokontrolera MSP430FG4618. U ovoj vežbi videćemo kako se vrši ispisivanje slova na LCD-u. Upoznaćemo se i sa ispisivanjem ostalih karaktera koje je moguće prikazati na displeju. Kao primer na displeju ćemo prikazati tekst „ELEF“ Da bi smo ovo uradili potrebno je da izvršimo određena podešavanja, koja su prikazana u Lstingu 1 i Listingu 2. Potrebna oprema: Za izvođenje ove laboratorijske vežbe potrebno nam je:

� razvojna ploča MSP430FG4618/F2013 sa integrisanim SoftBaugh SBLCDA4 LCD displejem

� računar

� Flash Emulation Tool(MSP-FET430UIF) kojim ćemo razvojnu ploču povezati na računar i izvršiti programiranje kontrolera MSP430FG4618

Postupak rada: Da bismo kreirali novi projekat, napisali program, učitali ga i izvršili na MSP430 uređajima, potrebno je da ispratimo sledeću proceduru:

1. Pokrenimo IAR Embedded Workbench. Kliknimo na Start dugme na taskbar-u i izaberimo All Programs > IAR Systems > IAR Embedded Workbench for MSP430 V4 > IAR Embedded Workbench.

Page 26: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

26

Slika 16: Osnovni prozor IAR Embedded Workbench IDE-a

2. Kreirajmo novi tekstualni fajl (File > New > File).

Slika 17: Kreiranje novog tekstualnog fajla u IAR Embedded Workbench IDE-u

Page 27: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

27

3. Unesimo tekst programa iz Listinga 1 u novo kreirani fajl.

Listing1:

#include <LCD.h>

// Mapiranje segmenta LCD-a const UInt8 LCD_Char_Map[] = {

LCD_A+LCD_B+LCD_C+LCD_D+LCD_E+LCD_F, // '0' ili 'O'

LCD_B+LCD_C, // '1' ili 'I'

LCD_A+LCD_B+LCD_D+LCD_E+LCD_G, // '2' ili 'Z'

LCD_A+LCD_B+LCD_C+LCD_D+LCD_G, // '3'

LCD_B+LCD_C+LCD_F+LCD_G, // '4' ili'y'

LCD_A+LCD_C+LCD_D+LCD_F+LCD_G, // '5' ili'S'

LCD_A+LCD_C+LCD_D+LCD_E+LCD_F+LCD_G, // '6' ili 'b'

LCD_A+LCD_B+LCD_C, // '7'

LCD_A+LCD_B+LCD_C+LCD_D+LCD_E+LCD_F+LCD_G, // '8' ili 'B'

LCD_A+LCD_B+LCD_C+LCD_F+LCD_G, // '9' ili 'g'

LCD_A+LCD_B+LCD_C+LCD_E+LCD_F+LCD_G, // 'A'

LCD_A+LCD_D+LCD_E+LCD_F, // 'C'

LCD_B+LCD_C+LCD_D+LCD_E+LCD_G, // 'd'

LCD_A+LCD_D+LCD_E+LCD_F+LCD_G, // 'E'

LCD_A+LCD_E+LCD_F+LCD_G, // 'F'

LCD_B+LCD_C+LCD_E+LCD_F+LCD_G, // 'H'

LCD_B+LCD_C+LCD_D+LCD_E, // 'J'

LCD_D+LCD_E+LCD_F, // 'L'

LCD_A+LCD_B+LCD_E+LCD_F+LCD_G, // 'P'

LCD_B+LCD_C+LCD_D+LCD_E+LCD_F // 'U' };

const UInt8 LCD_MAX_CHARS = (sizeof(LCD_Char_Map)/s izeof(UInt8));

// // Inicijalizacija LCD_A-a // void initLCD_A(void) {

// Brisanje memorije LCD-a clrLCD();

// Postavljanje COM0-COM3 i pinova R03-R33 P5SEL |= (BIT4 | BIT3 | BIT2); P5DIR |= (BIT4 | BIT3 | BIT2);

// Postavljanje LCD_A-a LCDACTL = LCDFREQ_128 | LCDMX1 | LCDMX0 | LCDSON | LCDON; LCDAPCTL0 = LCDS4 | LCDS8 | LCDS12 | LCDS16 | LCD S20 | LCDS24;

Page 28: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

28

LCDAPCTL1 = 0; LCDAVCTL0 = LCDCPEN; LCDAVCTL1 = VLCD_2_60; }

// // Brisanje LCD-a // void clrLCD(void) { int i; for(i = LCD_MEM_OFFSET; i < (LCD_MEM_OFFSET+LCD_M EM_LOC); i++) { LCDMEM[i] = 0; } }

// // Prikaz svih segmenata na LCD-u // void dispAllLCDSegs(void) { int i; for(i = LCD_MEM_OFFSET; i < (LCD_MEM_OFFSET+LCD_M EM_LOC); i++) { LCDMEM[i] = 0xff; } }

// // Prikaz karaktera na LCD-u // void dispChar(UInt8 pos, UInt8 index) { LCDMEM[pos + LCD_MEM_OFFSET] &= ~LCD_Char_Map[8]; if( pos < LCD_NUM_DIGITS ) { if( index < LCD_MAX_CHARS ) { LCDMEM[pos + LCD_MEM_OFFSET] |= LCD_Char_Map[ index]; } } }

//

Page 29: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

29

// Prikaz nivoa napona napajanja na LCD-u // void dispPwrLvl(UInt8 lvl) { LCDMEM[7+LCD_MEM_OFFSET] &= ~(BIT1+BIT2+BIT3); LCDMEM[8+LCD_MEM_OFFSET] &= ~(BIT0+BIT1+BIT2+BIT3 ); switch(lvl) { case LCD_PWR_LVL_0: LCDMEM[7+LCD_MEM_OFFSET] |= (BIT1); LCDMEM[8+LCD_MEM_OFFSET] |= (BIT0); break; case LCD_PWR_LVL_1: LCDMEM[7+LCD_MEM_OFFSET] |= (BIT1); LCDMEM[8+LCD_MEM_OFFSET] |= (BIT0+BIT1); break; case LCD_PWR_LVL_2: LCDMEM[7+LCD_MEM_OFFSET] |= (BIT1); LCDMEM[8+LCD_MEM_OFFSET] |= (BIT0+BIT1+BIT2); break; case LCD_PWR_LVL_3: LCDMEM[7+LCD_MEM_OFFSET] |= (BIT1); LCDMEM[8+LCD_MEM_OFFSET] |= (BIT0+BIT1+BIT2+BIT 3); break; case LCD_PWR_LVL_4: LCDMEM[7+LCD_MEM_OFFSET] |= (BIT1+BIT3); LCDMEM[8+LCD_MEM_OFFSET] |= (BIT0+BIT1+BIT2+BIT 3); break; case LCD_PWR_LVL_5: LCDMEM[7+LCD_MEM_OFFSET] |= (BIT1+BIT2+BIT3); LCDMEM[8+LCD_MEM_OFFSET] |= (BIT0+BIT1+BIT2+BIT 3); break; }; }

// //Prikaz F1 do F5 na LCD-u // void dispFunc(UInt8 mask) { UInt8 tmp; LCDMEM[7+LCD_MEM_OFFSET] &= ~0xf1; if( mask < LCD_FUNC_OFF ) { tmp = mask << 4; if( (mask & LCD_F5) ) { tmp |= BIT0;

Page 30: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

30

} LCDMEM[7+LCD_MEM_OFFSET] |= tmp; } }

// // Prikaz stanja baterije na LCD-u // void dispBattLvl(UInt8 lvl) { LCDMEM[9+LCD_MEM_OFFSET] &= ~(BIT0+BIT1+BIT2+BIT3 ); switch(lvl) { case LCD_BATT_LOW: LCDMEM[9+LCD_MEM_OFFSET] |= (BIT0+BIT3); break; case LCD_BATT_HALF: LCDMEM[9+LCD_MEM_OFFSET] |= (BIT0+BIT2+BIT3); break; case LCD_BATT_FULL: LCDMEM[9+LCD_MEM_OFFSET] |= (BIT0+BIT1+BIT2+BIT 3); break; }; }

// // Prikaz nivoa signala na LCD-u // void dispSigLvl(UInt8 lvl) { LCDMEM[9+LCD_MEM_OFFSET] &= ~(BIT4+BIT5+BIT6+BIT7 ); switch(lvl) { case LCD_SIG_LVL_0: LCDMEM[9+LCD_MEM_OFFSET] |= (BIT4); break; case LCD_SIG_LVL_1: LCDMEM[9+LCD_MEM_OFFSET] |= (BIT4+BIT7); break; case LCD_SIG_LVL_2: LCDMEM[9+LCD_MEM_OFFSET] |= (BIT4+BIT6+BIT7); break; case LCD_SIG_LVL_3: LCDMEM[9+LCD_MEM_OFFSET] |= (BIT4+BIT5+BIT6+BIT 7); break; }; }

Page 31: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

31

// // Prikaz strelice na LCD-u // void dispArrow(UInt8 mask) { LCDMEM[8+LCD_MEM_OFFSET] &= ~(BIT4+BIT5+BIT6+BIT7 ); if( mask < LCD_ARROW_OFF ) { LCDMEM[8+LCD_MEM_OFFSET] |= (mask << 4); } }

// // Prikaz simbola na LCD-u // void dispSymbol(UInt8 mask) { UInt8 tmp; LCDMEM[10+LCD_MEM_OFFSET] &= ~(BIT0+BIT1+BIT2+BIT 4+BIT5+BIT6+BIT7); if( mask < LCD_SYM_OFF ) { tmp = mask << 4; tmp |= mask >> 4; LCDMEM[10+LCD_MEM_OFFSET] |= tmp; } }

// // Prikaz specijalnih karaktera na LCD-u // void dispSpecialChar(UInt16 mask) { UInt16 x; UInt8 index = 0; if( mask & LCD_8BC ) { LCDMEM[10+LCD_MEM_OFFSET] |= BIT3; } else { LCDMEM[10+LCD_MEM_OFFSET] &= ~BIT3; } for(x = 1; x < LCD_8BC; x <<= 1) {

Page 32: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

32

if( x & mask ) { LCDMEM[index+LCD_MEM_OFFSET] |= BIT7; } else { LCDMEM[index+LCD_MEM_OFFSET] &= ~(BIT7); } ++index; } } #if LCD_TEST > 0 void testChar(void) { // Prikaz karaktera(pozicija, indeks); dispChar(1, 14); dispChar(2, 13); dispChar(3, 17); dispChar(4, 13); } void testSpecialChar(void) { static UInt16 mask = 1; dispSpecialChar(mask); if( mask >= LCD_SPC_CHAR_OFF ) { mask = 1; } else { mask <<= 1; } } void testPwrLvl(void) { static UInt8 lvl = LCD_PWR_LVL_0; dispPwrLvl(lvl); if( lvl >= LCD_PWR_OFF ) {

Page 33: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

33

lvl = LCD_PWR_LVL_0; } else { lvl <<= 1; } } void testSigLvl(void) { static UInt8 lvl = LCD_SIG_LVL_0; dispSigLvl(lvl); if( lvl >= LCD_SIG_OFF ) { lvl = LCD_SIG_LVL_0; } else { lvl <<= 1; } } void testBatt(void) { static UInt8 lvl = LCD_BATT_LOW; dispBattLvl(lvl); if( lvl >= LCD_BATT_OFF ) { lvl = LCD_BATT_LOW; } else { lvl <<= 1; } } void testFunc(void) { static UInt8 func = LCD_F1; dispFunc(func); if( func >= LCD_FUNC_OFF ) { func = LCD_F1;

Page 34: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

34

} else { func <<= 1; } } void testArrow(void) { static UInt8 dir = LCD_ARROW_UP; dispArrow(dir); if( dir >= LCD_ARROW_OFF ) { dir = LCD_ARROW_UP; } else { dir <<= 1; } } void testSymbol(void) { static UInt8 sym = LCD_SYM_DOL; dispSymbol(sym); if( sym >= LCD_SYM_OFF ) { sym = LCD_SYM_DOL; } else { sym <<= 1; } } void testAll(void) { UInt8 x; for(x = 0; x < 3; x++) {

//_BIS_SR(LPM3_bits + GIE); // LPM3, dozvola prekida dispAllLCDSegs(); }

Page 35: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

35

clrLCD(); } #endif // LCD_TEST

Napomena: Koristimo fajlove sa ekstenzijom .h da pojednostavimo upis kôda. KickStart sadrži fajlove koji definišu registre i imena bitova, za svaki uređaj i oni mogu mnogo da pojednostave razvoj programa. Ovi fajlovi se nalaze u <Installation Root>\Embedded Workbench x.x\430\inc . Uključimo odgovarajući .h fajl, za ciljni uređaj, u tekst fajl (#include "msp430xyyy.h" ). Dodatno, postoje i io430xxxx.h fajlovi koji su optimizovani za C izvorne fajlove.

4. Sačuvajmo tekstualni fajl programa (File > Save) kao LCD.c .

Slika 18: Izgled prozora nakon unešenog i sačuvanog koda

5. Kreirajmo još jedan tekstualni fajl (File > New > File). 6. Unesimo tekst programa iz Listinga 2 u novo kreirani fajl. Listing 2:

//************************************************* ***************************** // // // // ACLK = 32.768kHz, MCLK = SMCLK = default DCO // // MSP430FG4618 // ----------------------- // /|\| | // | | P2.2|-->LED1 // --|RST P2.1|-->LED2

Page 36: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

36

// | P5.1|-->LED4 // | | // SW1-->|P1.0 | SoftBaugh SBLCDA4 4-mux LCD // SW2-->|P1.1 P10.5/S4|-->S0-->PIN14 (1A_1B_1C_1D) // | P10.4/S5|-->S1-->PIN13 (1F_1G_1E_DP1) // | P10.3/S6|-->S2-->PIN12 (2A_2B_2C_2D) // | P10.2/S7|-->S3-->PIN11 (2F_2G_2E_DP2) // | P10.1/S8|-->S4-->PIN10 (3A_3B_3C_3D) // | P10.0/S9|-->S5-->PIN9 (3F_3G_3E_COL3) // | P9.7/S10|-->S6-->PIN8 (4A_4B_4C_4D) // | P9.6/S11|-->S7-->PIN7 (4F_4G_4E_DP4) // | P9.5/S12|-->S8-->PIN6 (5A_5B_5C_5D) // | P9.4/S13|-->S9-->PIN5 (5F_5G_5E_COL5) // | P9.3/S14|-->S10->PIN4 (6A_6B_6C_6D) // | P9.2/S15|-->S11->PIN3 (6F_6G_6E_DP6) // | P9.1/S16|-->S12->PIN2 (7A_7B_7C_7D) // | P9.0/S17|-->S13->PIN1 (7F_7G_7E_DP7) // | P8.7/S18|-->S14->PIN19 (F5_PR_P4_P3) // | P8.6/S19|-->S15->PIN20 (F1_F2_F3_F4) // | P8.5/S20|-->S16->PIN21 (PL_P0_P1_P2) // | P8.4/S21|-->S17->PIN22 (AU_AR_AD_AL) // | P8.3/S22|-->S18->PIN23 (BT_B1_B0_BB) // | P8.2/S23|-->S19->PIN24 (ANT_A2_A1_A0) // | P8.1/S24|-->S20->PIN25 (ENV_TX_RX_8BC) // | P8.0/S25|-->S21->PIN26 (DOL_ERR_MINUS_MEM) // | COM3|-->COM3 (COM3) // | COM2|-->COM2 (COM2) // | COM1|-->COM1 (COM1) // | COM0|-->COM0 (COM0) // | | // // //************************************************* ***************************** #include <Board.h> #include <LCD.h>

// // Deklaracija funkcija // void initBasicTimer(void); void initPortPins(void);

void main(void) {

WDTCTL = WDTPW + WDTHOLD; // Zaustavljanje WDT-a

FLL_CTL0 |= XCAP18PF; // Postavljanje ulazne kapacitivnosti za 32k kristal initPortPins(); // Inicializacija port pins

Page 37: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

37

initBasicTimer(); // Inicializacija basic tajmera

initLCD_A(); // Inicializacija LCD_A-a clrLCD(); for(;;) {

_BIS_SR(LPM3_bits + GIE); // LPM3, dozvola prekida testChar(); testSpecialChar(); testSigLvl(); testBatt(); testPwrLvl(); testFunc(); testArrow(); testSymbol(); } }

// Servisna Rutina prekida Tajmera #pragma vector=BASICTIMER_VECTOR __interrupt void basic_timer_ISR(void) {

P2OUT ^= PIN2+PIN1; // Promena stanja pina P2.2,1

P5OUT ^= PIN1; // Promena stanja pina P5.1 LPM3_EXIT; }

// // Inicijalizacija pinova porta // void initPortPins(void) {

P2DIR = PIN2+PIN1; // Postavljanje pina P2.2,1 kao izlaznog

P5DIR = PIN1; // Postavljanje pina P5.1 kao izlaznog

P2OUT = PIN1; // Postavljanje pina P2.1 na 1 }

// // Inicijalizacija Tajmera // void initBasicTimer(void) {

// Podešavanje Tajmera // Podešavanje takta na 32768/(256*128) // Dozvola BT prekida BTCTL = BT_fCLK2_DIV128 | BT_fCLK2_ACLK_DIV256; IE2 |= BTIE; }

Page 38: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

38

7. Sačuvajmo tekstualni fajl programa (File > Save) kao Board.c .

Slika 19: Izgled prozora nakon unešenog i sačuvanog koda

8. Kreirajmo novi radni prostor (File > New > Workspace) 9. Kreirajmo novi projekat (Project > Create New Project). Pojaviće se Create New

Project dijalog prozor.

Slika 20: Create New Project dijalog prozor

Proverimo da li je Tool chain postavljen na MSP430, izaberimo Empty project iz ponuđenih projektnih šablona (Project Templates) i kliknimo OK. U standardnom Save As dijalog prozoru, naznačimo direktorijum gde želimo da smestimo projektni fajl, ili kreirajmo novi projektni direktorijum. Ukucajmo naziv projekta, LCD u polje

Page 39: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

39

za upis imena fajla i kliknimo Save da bismo kreirali novi projekat. Projekat će se pojaviti u radnom prozoru.

10. Dodajmo prethodno kreirane tekstualne fajlove programa projektu (Project > Add Files). Selektujmo željeni tekstualni fajl i kliknimo Open. Alternativno, kliknimo duplim klikom na fajl da ga dodamo projektu.

11. Sačuvajmo radni prostor (File > Save Workspace). Naznačimo ime radnog prostora i kliknimo Save.

12. Podesimo opcije projekta (Project > Options). Za svaku potkategoriju (General Options, C/C++ Compiler, Assembler, Linker, Debugger) prihvatimo polazne opcije Factory Settings sa sledećim izuzecima:

� naznačimo ciljni uređaj (General Options > Target > Device) � omogućimo asemblerski projekat ili C/asemblerski projekat (General Options

> Target > Assembler-only project). � omogućimo generisanje izvršnog izlaznog fajla (General Options > Output >

Output file > Executable). � za FET debagiranje, kliknimo Debugger > Setup > Driver > FET Debugger. � naznačimo aktivni port koji se koristi za vezu sa FET-om (FET Debugger >

Setup > Connection). 13. Debagirajmo aplikaciju korišćenjem C-SPY-a (Project > Debug). Ovim startujemo

C-SPY i on preuzima kontrolu nad uređajem, briše memoriju, zatim je programira aplikacijom i resetuje uređaj.

Slika 21: Osnovni prozor C-SPY Debugger-a

Page 40: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

40

14. Kliknimo Debug > Go da startujemo aplikaciju. 15. Kliknimo Debug > Stop Debugging da stopiramo aplikaciju, izađemo iz C-SPY-a i

vratimo se u Workbench. 16. Kliknimo File > Exit da izađemo iz Workbench-a.

Page 41: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

41

LABORATORIJSKA VEŽBA III - A/D konvertor -

- Konverzija analognog napona dovedenog na ulaz A/D konvertora mikrokontrolera MSP430-

Page 42: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

42

Uvod: U mikrokontroleru MSP430FG4618 nalazi se ADC12 modul koji predstavlja 12-to bitni A/D konvertor. Karakteristike ADC12 modula:

• Maksimalna brzina konverzije preko 200-ksps • 12-to bitni konvertor sa monotonom karakteristikom bez preskakanja kodova • Sample-and-hold sa programabilnim periodom semplovanja kontrolisan od strane

softvera ili tajmera • Softversko podešavanje referentnog napona (1,5 V ili 2,5 V) • Osam eksternih ulaznih kanala koji se individualno konfigurišu • Kanali konverzije za interni temperaturni senzor AVcc • Nezavisna selekcija kanala i za pozitivni i za negativni referentni napon • Podešavanje izvora takta konverzije • Registri vektora prekida za brzo dekodiranje 18 mogućih izvora prekida ADC-a • 16 registara za čuvanje rezultata konverzije

Slika 22: Blok dijagram ADC12 modula

A/D konvertor vrši konverziju analognog ulaza u odgovarajući 12-to bitni digitalni oblik i tako dobijeni rezultat konverzije se smešta u memoriju. Da bi se odredile gornja i donja granica konverzije koriste se programabilni naponski nivoi RV + i RV − . Vrednost

digitalnog izlaza ( ADCN ) ima vrednost pune skale (0FFFh) kada je ulazni signal jednak ili veći

Page 43: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

43

od RV + , a kada je vrednost ulaznog signala jednaka ili manja od RV − vrednost digitalnog

izlaza je 0. Ulazni kanali i referentni naponski nivoi RV + i RV − su definisani u upravljačkoj

memoriji konverzije. Vrednost digitalnog izlaza pri A/D konverziji se može izračunati pomoću formule:

4095 in RADC

R R

V VN

V V−

+ −

−= ×−

Zadatak: Izvršiti konverziju analognog napona dovedenog na ulaz A/D konvertora mikrokontrolera MSP430 i izračunati grešku linearnosti Na pin P6.0 (A0) dovodimo napone od 0V do 5V u koracima od 0.5V. Za svaku vrednost napona pročitati vrednost registra ADC12MEM0 i upisati je u tabelu. Po završenom merenju računamo relativnu i apsolutnu grešku. Potrebna oprema:

Za izvođenje ove laboratorijske vežbe potrebno nam je:

� razvojna ploča MSP430FG4618/F2013

� računar

� Flash Emulation Tool(MSP-FET430UIF) kojim ćemo razvojnu ploču povezati na računar i izvršiti programiranje kontrolera MSP430FG4618

� izvor analognog napona u opsegu od 0V do 5V

Postupak rada:

1. Povežimo USB konektor MSP-FET430UIF-a na računar. 2. Povežimo JTAG konektor MSP-FET430UIF-a na JTAG1 3. Priključimo izvor analognog napona u opsegu od 0V do 5V na pin P6.0 4. Kreirajmo novi projekat u programu IAR Embedded Workbench IDE-u.

Da bismo kreirali novi projekat, napisali program, učitali ga i izvršili na MSP430 uređajima, potrebno je da ispratimo sledeću proceduru:

1. Pokrenimo IAR Embedded Workbench. Kliknimo na Start dugme na taskbar-u i

izaberimo All Programs > IAR Systems > IAR Embedded Workbench for MSP430 V4 > IAR Embedded Workbench.

Page 44: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

44

Slika 23: Osnovni prozor IAR Embedded Workbench IDE-a

2. Kreirajmo novi tekstualni fajl (File > New > File).

Slika 24: Kreiranje novog tekstualnog fajla u IAR Embedded Workbench IDE-u

Page 45: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

45

3. Unesimo tekst programa iz Listinga 1 u novo kreirani fajl. Listing 1: //************************************************* ***************************** // // U ovom primeru je moguće videti upotrebu internog referentnog napona // samog ADC12. Koristi se unutrašnja referenca vrednosti 2.5V i vrši se // jedna konverzija na kanalu A0. Rezultat konverzije se smešta u ADC12MEM0. // Na ulaz kanala A0 (P6.0) dovesti napon vrednosti do 5V, a zatim startovati // tačku prekida na liniji "__no_operation()". // Da bi videli rezultat konverzije, potrebno je otvoriti proz sa registrima // u Dibag režimu rada kako bi videli vrednost upisanu u ADC12MEM0. // ACLK = 32kHz, MCLK = SMCLK = default DCO 1048576Hz, ADC12CLK = ADC12OSC // // // MSP430xG461x // --------------- // | XIN|- // | 32kHz // Vin -->|P6.0/A0 XOUT|- // | | // // //************************************************* ***************************** #include "msp430xG46x.h" volatile unsigned int i; void main(void) {

WDTCTL = WDTPW + WDTHOLD; // Zaustavljanje watchdog-a

P6SEL |= 0x01; // Dozvola za upotrebu A/D kanala A0 ADC12CTL0 = REFON + REF2_5V + ADC12ON + SHT0_2;

// Uključivanje 2.5V referentnog // postavljanje vremena semplovanja ADC12CTL1 = SHP; // Sample/Hold pulsni režim rada

ADC12MCTL0 = SREF_1; // Vr+=Vref+ for (i = 0x3600; i; i--); // Kašnjenje potrebno za uspostavljanje // referentnog napona ADC12CTL0 |= ENC; // Dozvoli konverziju while (1) {

ADC12CTL0 |= ADC12SC; // Startuj konverziju

while (!(ADC12IFG & 0x0001)); // Da li je gotova konverzija?

ADC12MEM0; // Pristup memoriji u kojoj se nalazi rezultat

__no_operation(); // Postaviti tačku prekida ovde } }

Page 46: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

46

Napomena: Koristimo fajlove sa ekstenzijom .h da pojednostavimo upis kôda. KickStart sadrži fajlove koji definišu registre i imena bitova, za svaki uređaj i oni mogu mnogo da pojednostave razvoj programa. Ovi fajlovi se nalaze u <Installation Root>\Embedded Workbench x.x\430\inc . Uključimo odgovarajući .h fajl, za ciljni uređaj, u tekst fajl (#include "msp430xyyy.h" ). Dodatno, postoje i io430xxxx.h fajlovi koji su optimizovani za C izvorne fajlove.

4. Sačuvajmo tekstualni fajl programa (File > Save) kao main.c .

Slika 25: Izgled prozora nakon unešenog i sačuvanog koda

5. Kreirajmo novi radni prostor (File > New > Workspace) 6. Kreirajmo novi projekat (Project > Create New Project). Pojaviće se Create New

Project dijalog prozor.

Slika 26: Create New Project dijalog prozor

Page 47: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

47

Proverimo da li je Tool chain postavljen na MSP430, izaberimo Empty project iz ponuđenih projektnih šablona (Project Templates) i kliknimo OK. U standardnom Save As dijalog prozoru, naznačimo direktorijum gde želimo da smestimo projektni fajl, ili kreirajmo novi projektni direktorijum. Ukucajmo naziv projekta, ADC u polje za upis imena fajla i kliknimo Save da bismo kreirali novi projekat. Projekat će se pojaviti u radnom prozoru.

7. Dodajmo prethodno kreirani tekstualni fajl programa projektu (Project > Add Files). Selektujmo željeni tekstualni fajl i kliknimo Open. Alternativno, kliknimo duplim klikom na fajl da ga dodamo projektu.

8. Sačuvajmo radni prostor (File > Save Workspace). Naznačimo ime radnog prostora i kliknimo Save.

9. Podesimo opcije projekta (Project > Options). Za svaku potkategoriju (General Options, C/C++ Compiler, Assembler, Linker, Debugger) prihvatimo polazne opcije Factory Settings sa sledećim izuzecima:

� naznačimo ciljni uređaj (General Options > Target > Device) � omogućimo asemblerski projekat ili C/asemblerski projekat (General Options

> Target > Assembler-only project). � omogućimo generisanje izvršnog izlaznog fajla (General Options > Output >

Output file > Executable). � za FET debagiranje, kliknimo Debugger > Setup > Driver > FET Debugger. � naznačimo aktivni port koji se koristi za vezu sa FET-om (FET Debugger >

Setup > Connection). 10. Debagirajmo aplikaciju korišćenjem C-SPY-a (Project > Debug). Ovim startujemo

C-SPY i on preuzima kontrolu nad uređajem, briše memoriju, zatim je programira aplikacijom i resetuje uređaj.

Page 48: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

48

Slika 27: Osnovni prozor C-SPY Debugger-a

11. Na pin P6.0 (A0) dovodimo napone od 0V do 5V u koracima od po pola volta. Zatim

kliknemo na Debug > Go kako bi startovali aplikaciju i pročitali vrednost registra ADC12MEM0, i tako za svaki napon koji dovodimo na ulaz AD konvertora.

Da bismo otvorili Register prozor kliknimo View > Register.

Slika 28: Register prozor

Page 49: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

49

Vrednosti koje pročitamo iz registra upisujemo u tabelu i po završenom merenju računamo relativnu i apsolutnu grešku.

inU [V] N U [V] ∆ [V] δ [%]

0V 0.5V 1V 1.5V 2V 2.5V 3V 3.5V 4V 4.5V 5V

inU - ulazni napon u opsegu od 0V do 5V

N- isčitana vrednost iz registra U- vrednost napona koju računamo iz formule:

4095

FSU NU = gde je FSU napon pune skale i iznosi 5V

∆- apsolutna greška koju računamo iz formule: inU U∆ = −

δ- relativna greška koju računamo iz formule:

100%in

in

U U

Uδ −= ×

12. Kliknimo Debug > Stop Debugging da stopiramo aplikaciju, izađemo iz C-SPY-a i

vratimo se u Workbench. 13. Kliknimo File > Exit da izađemo iz Workbench-a.

Page 50: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

50

LABORATORIJSKA VEŽBA IV − D/A konvertor -

Izračunavanje greške linearnosti D/A konvertora mikrokontrolera MSP430

Page 51: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

51

Uvod: U mikrokontroleru MSP430FG4618 nalazi se DAC12 modul koji predstavlja 12-to bitni digitalno-analogni konvertor. DAC12 modul može biti podešen da radi u 8-mo bitnom ili 12-to bitnom režimu rada. Može se koristiti u sprezi sa DMA kontrolerom. Karakteristike DAC12 modula su:

12-to bitna monotona izlazna funkcija 8-mo bitna ili 12-to bitna rezolucija izlaznog napona programabilno podešavanje vremena konverzije nasuprot potrošnji energije unutrašnja i spoljašnja selekcija referentnog napona podaci su u jediničnom ili u formatu dvoičnog komplementa opcija automatske korekcije ofseta

Sledeća tabela prikazuje opseg pune skale DAC12 u 8-mo bitnoj ili 12-to bitnoj rezoluciji izlaznog napona.

Na sledećoj slici je data prenosna karakteristika u 12-to bitnom režimu rada za podatke u jediničnom komplementu.

Page 52: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

52

Na sledećoj slici je data prenosna karakteristika u 12-to bitnom režimu rada za podatke u dvoičnom komplementu. Zadatak: Izračunavanje greške linearnosti D/A konvertora mikrokontrolera MSP430. Grešku linearnosti D/A konvertora izračunavamo na osnovu poznatih, očekivanih vrednosti na izlazu D/A konvertora i dobijenih, izmerenih vrednosti pomoću formule:

( )

max

max*100i i

i

y ax bG

y

− +=

gde je yi izmerena i-ta vrednost napona na izlazu D/A konvertora na pinu P6.6 za odgovarajuću digitalnu

vrednost xi na ulazu D/A konvertora, ymax najveća vrednost izlaza, a a i b su nagib i odsečak prave.

U ovoj laboratorijskoj vežbi koristimo 12-to bitni D/A konvertor, pa je na prenosnoj karakteristici maksimalna vrednost na X-osi 4095.

Maksimalni izlazni napon D/A konvertora je 2.5V, pa je na prenosnoj karakteristici maksimalna vrednost na Y-osi 2.5.

Page 53: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

53

Očekivane vrednosti na izlazu D/A konvertora očitavamo sa slike

Potrebna oprema:

Za izvođenje ove laboratorijske vežbe potrebno nam je:

� razvojna ploča MSP430FG4618/F2013

� računar

� Flash Emulation Tool(MSP-FET430UIF) kojim ćemo razvojnu ploču povezati na računar i izvršiti programiranje kontrolera MSP430FG4618

� univerzalni merni uređaj kojim ćemo da izmerimo dobijene rezultate.

Postupak rada:

1. Povežimo USB konektor MSP-FET430UIF-a na računar.

2. Povežimo JTAG konektor MSP-FET430UIF-a na JTAG1 3. Kreirajmo novi projekat u programu IAR Embedded Workbench IDE-u.

Da bismo kreirali novi projekat, napisali program, učitali ga i izvršili na MSP430

uređajima, potrebno je da ispratimo sledeću proceduru:

1. Pokrenimo IAR Embedded Workbench. Kliknimo na Start dugme na taskbar-u i izaberimo All Programs > IAR Systems > IAR Embedded Workbench for MSP430 V4 > IAR Embedded Workbench.

Page 54: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

54

Slika 29: Osnovni prozor IAR Embedded Workbench IDE-a

2. Kreirajmo novi tekstualni fajl (File > New > File).

Slika 30: Kreiranje novog tekstualnog fajla u IAR Embedded Workbench IDE-u

Page 55: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

55

3. Unesimo tekst programa iz Listinga 1 u novo kreirani fajl. Napomena: Koristimo fajlove sa ekstenzijom .h da pojednostavimo upis kôda. KickStart sadrži fajlove koji definišu registre i imena bitova, za svaki uređaj i oni mogu mnogo da pojednostave razvoj programa. Ovi fajlovi se nalaze u <Installation Root>\Embedded Workbench x.x\430\inc . Uključimo

odgovarajući .h fajl, za ciljni uređaj, u tekst fajl (#include "msp430xyyy.h" ).

Dodatno, postoje i io430xxxx.h fajlovi koji su optimizovani za C izvorne fajlove. Listing 1:

//************************************************* ***************************** // U ovom primeru je iskorišćen DAC12_0 modul i 2.5V ADC12REF referentni // napon, sa pojačanjem 1, kako bi na izlazu P6.6 dobili pozitivnu rampu. // Normalni režim rada je LPM0 uz isključen CPU. WDT se koristi kako // bi omogućio ~0.5ms prekid kojim se budi CPU i programski upisuje // vrednost DAC. // ACLK = 32kHz, SMCLK = MCLK = WDTCLK = podrazumevane vrednosti // // // MSP430xG461x // ----------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | DAC0/P6.6|--> pozitivna_rampa // | | // //************************************************* ***************************** #include "msp430xG46x.h"

void main(void) {

WDTCTL = WDT_MDLY_0_064; // WDT ~0.064ms vremenskog intervala

IE1 |= WDTIE; // Dozvoli WDT prekid

ADC12CTL0 = REF2_5V + REFON; // Unutrašnji ref. napon 2.5V

TACCR0 = 13600; // Kašnjenje potrebno za smirivanje // referentnog napona TACCTL0 |= CCIE; // Prekid režima poređenja (Compare)

TACTL = TACLR + MC_1 + TASSEL_2; // režim na gore (up), SMCLK je odabran

__bis_SR_register(LPM0_bits + GIE); // Uđi u LPM0, dozvoli prekide

TACCTL0 &= ~CCIE; // Zabrani prekide tajmera

__disable_interrupt(); // Opšta zabrana prekida DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // UNUTRAŠNJE POJA ČANJE = 1 while (1) {

__bis_SR_register(LPM0_bits + GIE); // Uđi u LPM0, dozvoli prekide

Page 56: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

56

DAC12_0DAT++; // Pozitivna rampa DAC12_0DAT &= 0x0FFF; } }

#pragma vector = TIMERA0_VECTOR __interrupt void TA0_ISR(void) {

TACTL = 0; // Resetuj vrednost u kontrolnom registru Timer_A

__bic_SR_register_on_exit(LPM0_bits); // Izađi iz LPM0, dozvoli interapte } #pragma vector = WDT_VECTOR __interrupt void WDT_ISR(void) {

__bic_SR_register_on_exit(LPM0_bits); // TOS = resetuj LPM0 }

4. Sačuvajmo tekstualni fajl programa (File > Save) kao main.c .

Slika 31: Izgled prozora nakon unešenog i sačuvanog koda

5. Kreirajmo novi radni prostor (File > New > Workspace) 6. Kreirajmo novi projekat (Project > Create New Project). Pojaviće se Create New

Project dijalog prozor.

Page 57: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

57

Slika 32: Create New Project dijalog prozor

Proverimo da li je Tool chain postavljen na MSP430, izaberimo Empty project iz ponuđenih projektnih šablona (Project Templates) i kliknimo OK. U standardnom Save As dijalog prozoru, naznačimo direktorijum gde želimo da smestimo projektni fajl, ili kreirajmo novi projektni direktorijum. Ukucajmo naziv projekta, DAC u polje za upis imena fajla i kliknimo Save da bismo kreirali novi projekat. Projekat će se pojaviti u radnom prozoru.

7. Dodajmo prethodno kreirani tekstualni fajl programa projektu (Project > Add Files). Selektujmo željeni tekstualni fajl i kliknimo Open. Alternativno, kliknimo duplim klikom na fajl da ga dodamo projektu.

8. Sačuvajmo radni prostor (File > Save Workspace). Naznačimo ime radnog prostora i kliknimo Save.

9. Podesimo opcije projekta (Project > Options). Za svaku potkategoriju (General Options, C/C++ Compiler, Assembler, Linker, Debugger) prihvatimo polazne opcije Factory Settings sa sledećim izuzecima:

� naznačimo ciljni uređaj (General Options > Target > Device) � omogućimo asemblerski projekat ili C/asemblerski projekat (General Options

> Target > Assembler-only project). � omogućimo generisanje izvršnog izlaznog fajla (General Options > Output >

Output file > Executable). � za FET debagiranje, kliknimo Debugger > Setup > Driver > FET Debugger. � naznačimo aktivni port koji se koristi za vezu sa FET-om (FET Debugger >

Setup > Connection). 10. Debagirajmo aplikaciju korišćenjem C-SPY-a (Project > Debug). Ovim startujemo

C-SPY i on preuzima kontrolu nad uređajem, briše memoriju, zatim je programira aplikacijom i resetuje uređaj.

Page 58: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

58

Slika 33: Osnovni prozor C-SPY Debugger-a

11. Upisujemo u registar DAC12_0DAT vrednosti u heksadecimalnom kodu od 0V do

2.5V (0x0000 do 0x0FFF) sa korakom od pola volta. Zatim kliknemo na Debug > Go kako bi startovali aplikaciju i pomoću univerzalnog mernog instrumenta izmerili vrednost napona na izlazu iz D/A konvertora P6.6. Izmerene vrednosti upisujemo u tabelu i računamo grešku linearnosti D/A konvertora.

12. Kliknimo Debug > Stop Debugging da stopiramo aplikaciju, izađemo iz C-SPY-a i vratimo se u Workbench.

13. Kliknimo File > Exit da izađemo iz Workbench-a.

Page 59: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

59

Biografije autora

Ime i prezime Milena Jovanović

Datum rođenja 31.08.1978.

Mesto rođenja Požega, Srbija

Obrazovanje završena osnovna škola u Kosjeriću

završena srednja škola: Gimnazija Sveti Sava u Požegi

trenutno apsolvent Elektronskog fakulteta u Nišu, smer Elektronika

Poznavanje rada na računaru Operativni sistemi: Windows XP, Linux Ubuntu

Strani jezik Engleski i poznavanje osnova ruskog

e-mail adresa [email protected]

Page 60: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

60

Ime i Prezime Aleksandar Ristovic

Datum i mesto rođenja 25.10.1977, Kraljevo

Kontakt telefon 064/1528631

E-mail [email protected]

Obrazovanje El.teh.pogona (SSS), ESTŠ “Nikola Tesla” Kraljevo

apsolvent elektronike, El.Fakultet Niš

Page 61: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

61

Prezime: Gligorijević Ime: Jelena Datum rođenja: 13.04.1980 Nacionalnost: Srbin Adresa stanovanja: Vojvode Putnika 32, 18237 Sokobanja E-mail: [email protected] Mobilni telefon: 063/88 54 222 Obrazovanje: Gimnazija Poznavanje jezika: Poznavanje engleskog jezika

Page 62: RAZVOJNI ALAT MSP430es.elfak.ni.ac.rs/Papers/J.Gligorijevic, S.Jovanovic, M...Ovim se premoš ćava usko grlo CPU-periferija i obezbe đuje prenos podataka izme đu periferija i RAM-a

62

Prezime: Jovanović Ime: Srđan Datum rođenja: 07.12.1978 Adresa stanovanja: Laze Lazarevića 1, 37000 Kruševac E-mail: [email protected] Poznavanje jezika: Engleski; C/C++/C#