67
Mikrokontroleri KONFIGURACIJA PINOVA 1. PDIP 2. TQFP/MLF Milica Orlandić 27/03 1

Mikrokontroleri (Skripta)

Embed Size (px)

DESCRIPTION

Predavanja o mikrokontrolerima sa Elektrotehnickog fakulteta

Citation preview

Page 1: Mikrokontroleri (Skripta)

Mikrokontroleri

KONFIGURACIJA PINOVA

1. PDIP

2. TQFP/MLF

Milica Orlandić 27/03 1

Page 2: Mikrokontroleri (Skripta)

Mikrokontroleri

1. ULAZNO – IZLAZNI PORTOVI

Svi AVR portovi imaju funkcije čitanja, modifikovanja i pisanja kada se koriste kao digitalni ulazno-izlazni portovi. Ovo podrazumijeva da se smjer porta može mijenjati. Svi pinovi portova imaju zasebne pull-up otpornike sa konstantnom otpornošću.

Slika 1.1. Šema ulazno – izlaznog pina

Svi registri i reference bitova su pisani u generalnooj formi. Slovo “x” u indeksu određuje koji se port koristi a broj “n“ broj bita. Ipak, kada koristimo registar ili definišemo bitove u toku programa, precizna forma mora se koristiti, na primjer, PORTB3 za bit broj 3 u Portu B.

Svaki port koristi tri ulazno – izlazne memorijske adresne lokacije: PORTx – Registar podatka (Data Register) DDRx – Registar smjera podatka (Data Direction Register) PINx – Ulazni pin porta (Port Input Pins)

Milica Orlandić 27/03 2

Page 3: Mikrokontroleri (Skripta)

Mikrokontroleri

Bit DDxn u DDRx Registru određuje smjer pina. Ako je u DDxn upisana logička jedinica, Pxn je konfigurisan kao izlazni pin.

Ako je u PORTxn upisana logička jedinica tada je pin konfigurisan kao ulazni pin, a pull – up otpornik je aktiviran. U suprotnom, pull – up se gasi, PORTxn se konfiguriše kao izlazni.

Da se ugasi pull-up, mora biti upisana nula na PORTxn ili pin mora biti konfigurisan kao izlazni.

Pinovi porta su trostatički kada se sistem resetuje, čak i ako nema takta.

Naredni kod pokazuje kako se pinovi porta B definišu. U programu se na pinovima 0 i 1 postavlja jedinica, a na pinovima 2 i 3 nula. Pinovi 4 – 7 su Ulazni bez pull-upa, 6 – 7 sa pull - up otporima.

1.1 Ulazno – izlazni Registar Specijalnih funkcija (SFIOR)

Bit 2 – PUD: Pull Up Disable“1” – pull up otpornik je ugašen čak i kada su DDxn i PORTxn

Registri konfigurisani da uključe otpornike“0“ – ne utiče na rad pull up otpornika

Milica Orlandić 27/03 3

unsigned char i;.../* Definisanje bitova sa pull up-om I postavljanje izlaznih jedinica*//* Definisanje smjera pinova */PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);_NOP();/* Citanje pinova porta */i = PINB;...

Page 4: Mikrokontroleri (Skripta)

Mikrokontroleri

1.2 Alternativne funkcije PORT-a A

Port A ima alternativnu funkciju analognog ulaza za AD Konvertore kao što je prikazano u tabeli.

Postoji samo jedan ADC i multiplekser za izbor ulaza

Tabela 1.

1.3 Alternativne funkcije PORT-a B

Tabela 2.

Bit 7 – SCK: Master taktni izlazni, Slave taktni ulazni pin za SPI kanal. Kada je SPI uključen kao Slave, ovaj pin je konfigurisan kao ulaz bez obzira koja je vrijednost DDB7. Kada je SPI uključen kao Master, smjer podatka ovog pina kontroliše DDB7.

Milica Orlandić 27/03 4

Page 5: Mikrokontroleri (Skripta)

Mikrokontroleri

Bit 6 – MISO: (Master Input Slave Output) Master ulazni, Slave izlazni pin podatka za SPI kanal. Kada je SPI uljučen kao Master, ovaj pin je konfigurisan kao ulazni bez obzira koja je vrijednost DDB6. Kada je SPI uključen kao Slave, smjer kontroliše DDB6.

Bit 5 – MOSI: (Master Output Slave Input) SPI Master izlazni, Slave ulazni pin podatka za SPI kanal. Kada je SPI uključen kao Slave, ovaj pin je konfigurisan kao ulazni bez obzira koja je vrijednost DDB5. Kada je SPI uključen kao Master, smjer kontroliše DDB5.

Bit 4 – : (Slave Select) Kada je SPI uljučen kao Slave, ovaj pin je konfigurisan kao ulazni bez obzira koja je vrijednost DDB4. Kada je SPI uključen kao Master, smjer kontroliše DDB4.

Bit 3 – AIN1/OC0: AIN1,Negativni ulaz Analognog komparatora. OC0: Pin PB3 može da služi kao eksterni izlaz za vrijednost sa

kojom se upoređuje Timer/Counter0. Pin PB3 mora biti konfigurisan kao izlaz da bi podržao funkciju.

Bit 2 – AIN0/INT2: AIN0, Pozitivni ulaz Analognog Komparatora. INT2: Eksterni Spoljašnji Vanjski izvor prekida 2.

Bit 1 – T1: Brojački izvor za Timer/Counter1

Bit 0 – TO/XCK: T0, Brojački izvor za Timer/Counter0XCK:USART-ov eksterni takt. Pin XCK je aktivan samo kada USART radi u sinhronom režimu

Milica Orlandić 27/03 5

Page 6: Mikrokontroleri (Skripta)

Mikrokontroleri

1.4 Alternativne funkcije PORT-a C

Ako je JTAG interfejs uključen, pull - up otpornici na pinovima PC5, PC3 i PC2 biće aktivirani čak i ako se resetuje sistem.

Tabela 3.

Bit 7 – TOSC2: Timer Oscillator pin 2: Kada je bit AS2 u ASSR setovan, omogućava asinhrono taktovanje Timer/Counter-a 2, pin PC7 je otkačen sa porta i postaje ulaz invertujućeg pojačavača oscilatora. Ovaj režim se koristi kada je U ovom režimu, kristalni oscilator je povezan na ovaj pin i pin se ne može koristiti kao ulazno-izlazni.

Bit 6 – TOSC1: Timer Oscillator pin 1: Kada je bit AS2 u ASSR setovan, omogućava asinhrono taktovanje Timer/Counter-a 2, pin PC6 je otkačen sa porta i postaje ulaz invertujućeg pojačavača oscilatora. U ovom režimu, kristalni oscilator je povezan na ovaj pin i pin se ne može koristiti kao ulazno – izlazni.

Bit 5 – TDI: JTAG Test Data In: Serijski izlaz podatka šiftuje pomjera u Instruction Register ili Data Register.

Bit 4 – TDO: JTAG Test Data Out: Serijski izlaz podatka šiftuje pomjera iz Instruction Registra ili Data Registra.

Bit 3 – TMS: JTAG Test Mode Select: Ovaj pin se koristi za upravljanje

state – mašinom TAP kontrolera.

Bit 2 – TCK: JTAG Test Clock: rad JTAG-a je sinhronizovan sa TCK.

Milica Orlandić 27/03 6

Page 7: Mikrokontroleri (Skripta)

Mikrokontroleri

Bit 1 – SDA: Two Wire Serial Interface Data: Kada je bit TWEN u TWCR setovan omogućava se Two Wire Serial Interfaceserijski interfejs. Tada je, pin PC1 je diskonektovan sa porta i postaje Serial Data I/O pin za Two Wire Serial Interface.

Bit 0 – SCL: Two wire Serial Interface Clock: Kada je bit TWEN u TWCR setovan omogućava se Two Wire Serial Interfaceserijski interfejs. Tada je, pin PC0 je diskonektovan sa porta i postaje Serial Clock I/O pin za Two Wire Serial Interface.

1.5 Alternativne funkcije PORT-a D

Tabela 4.

Bit 7 – OC2: Timer/Counter2 Output Compare Match, pin PD7 može da služi kao eksterni izlaz za Timer/Counter2 Output Compare. Pin mora biti konfigurisan kao izlazni.

Bit 6 – ICP1: Input Capture pin: Pin PD6 može da se ponaša kao Input Capture pin za Timer/Counter1.

Bit 5 – OC1A: Output Compare Match A izlaz: Pin PD5 može da služi kao eksterni izlaz za Timer/Counter1 Output Compare A. Pin mora biti konfigurisan kao izlazni.

Bit 4 – OC1B: Output Compare Match B izlaz: Pin PD4 može da služi kao eksterni izlaz za Timer/Counter1 Output Compare B. Pin mora biti konfigurisan kao izlazni.

Bit 3 – INT1: External Interrupt Source 1: Pin PD3 može da služi kao eksterni izvor prekida.

Milica Orlandić 27/03 7

Page 8: Mikrokontroleri (Skripta)

Mikrokontroleri

Bit 2 – INT0: External Interrupt Source 0: Pin PD2 može da služi kao eksterni izvor prekida

Bit 1 – TXD: Transmit Data: Izlazni pin podatka USART-a. Kada je uključen, ovaj pin je izlazni.

Bit 0 – RXD: Receive Data: Ulazni pin podatka USART-a. Kada je uključen, ovaj pin je ulazni.

Milica Orlandić 27/03 8

Page 9: Mikrokontroleri (Skripta)

Mikrokontroleri

2.USART

Jedno od kola velikog stepena integracije je univerzalni asinhroni i sinhroni primopredajnik USART (Universal Synchronous and Asynchronouns Receiver Transmitter). Služi za serijsku razmjenu podataka između mikrokontrolera i spoljašnje sredine.

Glavne osobine su: Potpuni dupleks u radu (Nezavisni serijski prijemni i

predajni registri) Asihroni i sihroni rad Master/Slave taktovani sihroni rad Baud rate generator velike rezolucije Podržava serijske okvire sa 5,6,7,8 ili 9 bitova

podatka i 1 ili 2 stop bita Generisanje bita parnosti i kontrola parnosti Detekcija prekoračenja( Data OverRun) Detekcija greške u okviru Filtriranje suma uključujući i detekciju lažnog start bita

i digitalni niskopropusni filtar Tri odvojena zahtjeva za prekid TX Complete, TX

Data Registar Empty i RX Complete Multi-procesorski komunikacioni mod Dvostruko brži asihroni komunikacioni mod

2.1 ARHITEKTURA USART-A

Milica Orlandić 27/03 9

Page 10: Mikrokontroleri (Skripta)

Mikrokontroleri

Pojednostavljeni blok dijagram USART-a je prikazan na slici 2.1 Isprekidanim linijama na blok dijagramu su predstavljeni glavni djelovi USART-a:

Generator takta Predajnik (Transmitter) Prijemnik (Receiver)

Kontrolni i statusni registri USCRA, USCRB iI USCRC su zajednički svim cjelinama i oni regulišu rad USART-a.

Slika 2.1. Blok dijagram USART-a

2.1.1 Generator takta

Milica Orlandić 27/03 10

Page 11: Mikrokontroleri (Skripta)

Mikrokontroleri

Logika generatora takta sastoji se od sinhrone logike za ulaz eksternog takta koji koristi sihrona operacija Slave i od baud rate generatora (baud rate definise broj bita u sekundi). Generiše osnovni takt za Predajnik i Prijemnik .

USART podržava četiri režima rada: Normalni asinhroni Asinhroni dvostruke brzine Sinhroni Master(Gospodar) režim Sinhroni Slave(Sluga) režim

UMSEL bit u Kontrolnom i Statusnom Registru C (UCSRC) odlučuje između asinhronog i sinhronog režima rada.

U2X bit u registru USCRA kontroliše koji od dva asinhrona režima će biti aktivan.

XCK (Transfer Clock) pin se koristi samo u Sinhronom režimu. U i Slave mode XCK je ulaz za eksterni takt, dok u Master mode preko njega interni takt izlazi van. kontroliše da li je izvor takta eksterni (Slave mode) ili interni (Master mode).

Slika 2.2. Blok dijagram logike generatora takta

Na dijagramu se uočavaju signali:

Txclk – Takt Predajnika (Interni signal) Rxclk – Takt Prijemnika(Interni signal) Xcki – Ulaz sa XCK pina(Interni signal). Koristi se za sinhroni Slave

režim Xcko – taktni izlaz sa XCK pina(Interni signal). Koristi se za sinhroni

Master režim Fosc – frekvencija kvarcnog kristala (Sistemski takt)

Milica Orlandić 27/03 11

Page 12: Mikrokontroleri (Skripta)

Mikrokontroleri

Interni generator takta se koristi kod asinhronog i sinhronog Master režima rada.

USART Baud Rate Regisar (UBRR) se sastoji od dva registra UBRRH (High) i UBRRL (Low) koji u sebi sadrže informaciju koliki je baud rate USART-a.

UBRR i brojač na dolje zajedno funkcionišu kao preskaler ili baud rate generator. Brojač, koji je taktovan sistemskim taktom (fosc) se postavlja na vrijednost UBRR svaki put kad odbroji do nule ili kad se upiše UBRRL. Takt se generiše svaki put kad brojač izbroji nulu. Ovaj takt predstavlja izlaz baud rate generatora (=fosc/(UBBR+1)). Predajnik, u zavisnosti od režima rada, dijeli takt sa 2,8 ili 16. Prijemnik, ipak, koristi direktno izlaz baud rate generatora.

Tabela 5.

BAUD – baud rate (u bitima po sekundi, bps)UBRR – Sadržaj UBRRH I UBRRL registaraFosc – Frekvencija sistemskog takta

Formati okvira

Serijski okvir se sastoji od bitova podatka i sinhronizacionih bitova (start i stop bit) i opciono bita parnosti za provjeru grešaka. USART prihvata svih 30 kombinacija sledećih elemenata kao ispravan okvir:

1 start bit 5,6,7,8 ili 9 bitova podatka Bez bita parnosti, bit parnosti ili neparnosti 1 ili 2 stop bita

Okvir počinje sa start bitom a nastavlja bitom podatka najmanje težine, ređajući sve bitove podatka. Posle podatka postavlja se bit parnosti, ako ga ima, a tek na kraju i stop bitovi. Kada se potpuni okvir prenese, može biti propraćen odmah novim okvirom ili komunikaciona linija može biti postavljena u stanje čekanja (idle). Sledeća šema prikazuje moguće kombinacije formata okvira. Bitovi unutar zagrada su opcioni.

Milica Orlandić 27/03 12

Page 13: Mikrokontroleri (Skripta)

Mikrokontroleri

Slika 2.3. Okvir podatka kod USART-a

St – Start bit, uvijek nula (low)(n) – bitovi podatka (0 do 8)P – bit parnosti, paran ili neparanSp – stop bit, uvijek jedinica (high)IDLE – nema prenosa na komunikacionoj liniji. Uvijek ima vrijednost ‘1’ (high).

Format okvira se kontroliše bitovima UCSZ2:0, UPM1:0 I USBS u registrima UCSRB I UCSRC. Prijemnik i predajnik koriste ista podešavanja. Primjećuje se da mijenjanje vrijednosti bilo kog od ovih bitova ugrožava već postojeću komunikaciju predajnika i prijemnika.

Bitovi UCSZ2:0 određuju broj bitova u okviru.Bitovi UPM1:0 određuju da li je omogućen bit parnosti i ako jeste, tip bita

parnosti.Bit USBS određuje broj stop bitova. Prijemnik ignoriše drugi stop bit.Bit parnosti se računa funkciju “ekskluzivno ili” svih bitova.

2.1.2 Predajnik

Predajnik se sastoji od bafera za upis podatka, serijskog pomjeračkog registra, generatora parnosti i kontrolne logike za obradu različitih formata serijskog okvira. Bafer omogućava prenos podataka bez kašnjenja između okvira.

Slika2.4. Blok šema predajnika

Milica Orlandić 27/03 13

Page 14: Mikrokontroleri (Skripta)

Mikrokontroleri

2.1.3 Prijemnik

Prijemnik je najsloženiji dio USART-a zbog svog takta i sklopa za obnovu podataka (data recovery). Pored ovih elemenata, prijemnik sadrži i detektor parnosti, kontrolnu logiku, pomjerački registar i prijemni bafer iz dva nivoa (UDR). Može da detektuje grešku u okviru, grešku prekoračenja(bijeg podatka) i grešku parnosti.

Slika 2.5. Blok šema prijemnika

2.2 Registri USART-a

2.2.1 USART I/O Data Register-UDR

Registri bafera predajnika i prijemnika dijele ulazno-izlazne adrese koje odgovaraju registru podatka UDR USART-a (USART Data Register). U bafer predajnika upisuje se podatak kad je UDRE u registru UCSRA setovan. Podatak upisan na UDR kada je UDRE Flag postavljen na „0” biće ignorisan od strane predajnika USART-a. Pošto je podatak upisan u bafer predajnika, ako je predajnik uključen, podatak se prebacuje u predajni pomjerački registar kada on bude prazan. Tada ce podatak biti prebačen serijski na pin TxD.

Prijemnikov bafer se sastoji iz dva nivoa.

Milica Orlandić 27/03 14

Page 15: Mikrokontroleri (Skripta)

Mikrokontroleri

2.2.2 USART-ov Kontrolni I Statusni Registar A (USART Control and Status Register A) – UCSRA

Bit 7 – RXC: USART Receive Complete“1” – kada na baferu prijemnika postoji nepročitan podatak„0” – prijemni bafer prazanAko je prijemnik ugašen, RXC postaje „0”.

Bit 6 – TXC: USART Transmit Complete„1” – čitav okvir je pomjeren iz predajnogijemnog pomjeračkog registra i nema novih podataka u baferu predajnika „0” – u predajnom baferu ima podataka

Bit 5 – UDRE: USART Data Register Emptypokazuje da li je bafer predajnika(UDR) spreman da primi novi podatak.“1” – bafer je prazan i spreman za upis“0” – nije spreman

Bit 4 – FE: Frame Error“1”– ako sledeći podatak u prijemnom baferu ima grešku okvira, to jest kada je prvi stop bit sledećeg podatka jednak nuli„0” – ako nema greške okvira, odnosno prvi stop bit je jedinica

Bit 3 – DOR: Data OverRun“1” – ako je prijemni bafer (dva podatka na dva nivoa) ispunjen a novi podatak čeka u prijemnom pomjeračkom registru i novi start bit je detektovan. Jednostavnije rečeno, ovaj bit se postavlja ako novi primljeni podatak preklopi prethodni nepročitani podatak.„0” – ako nema prekoračenja

Bit 2 – PE: Parity Error“1” – sledeći podatak u baferu prijemnika ima grešku parnosti pri prijemu

Milica Orlandić 27/03 15

Page 16: Mikrokontroleri (Skripta)

Mikrokontroleri

„0” – nema greške parnosti

Bit 1– U2X:Double the USART Transmission Speed (Udvostručena brzina USART-a) - kod Asinhronog režima, udvostručuje prenos“1” – redukuje djelitelja baud rate-a sa 16 na 8 “0” – djelitelj baud rate-a je 16

Bit 0 – MPCM: Multi-processor Communication Mode“1” – uključuje Multi-procesorski komunikacioni režim

2.2.3 USART-ov Kontrolni I Statusni Registar B (USART Control and Status Register B) – UCSRB

Bit 7 – RXCIE: RX Complete Interrupt Enable“1” – omogućava prekid na RXC Flagu “0” – onemogućava prekid

Bit 6 – TXCIE: TX Complete Interrupt Enable“1” – omogućava prekid na TXC Flagu“0” – onemogućava prekid

Bit 5 – UDRIE: USART Data Register Empty Interrupt Enable“1” - omogućava prekid na UDRE Indikatoru “0” – onemogućava prekid

Bit 4 – RXEN: Receiver Enable“1” - omogućava rad prijemnika “0” – prekida rad prijemnika

Bit 3 – TXEN: Transmitter Enable “1” – omogućava rad predajnika “0” – prekida rad predajnika

Bit 2 – UCSZ2: USART Character Size – kombinuje se sa bitovima UCSZ1:0 u UCSRC i zajedno sa njima određuje broj bita podatka

Milica Orlandić 27/03 16

Page 17: Mikrokontroleri (Skripta)

Mikrokontroleri

Bit 1 – RXB8: Receive Data Bit 8 – deveti bit primljenog podatka u slučaju kada je serijski okvir sa 9 – to bitnim podatkom. Mora biti pročitan prije čitanja najnižih bita iz UDR-a.

Bit 0 – TXB8: Transmit Data Bit 8 – deveti bit predatog podatka u slučaju kada je serijski okvir sa 9-to bitnim podatkom. Mora biti upisan prije upisivanja najnižih bitova iz UDR-a.

2.2.4 USART-ov Kontrolni I Statusni Registar C (USART Control and Status Register C) – UCSRC

Bit 7 – URSEL:USART Register SelectOdređuje kojem se registru pristupa (UCSRC ili UBRRH Registru).„1” – čita UCSRC„0” – čita UBRRH

Bit 6 –UMSEL: USART Mode SelectOdređuje režim rada.„1” – Sinhroni režim„0” – Asinhroni režim

Bit 5:4 – UMP1:0 :USART Parity ModeOmogućavaju bit parnosti i biraju tip bita parnosti.“1X” – predajnik generiše bit parnosti za svaki okvir. Prijemnik će provjeriti parnost za dolazeći podatak i uporediti ga sa vrijednošću UPM0. Ako se ne poklope, bit PE Flag u UCSRA će biti setovan. “00” – nema bita parnosti u okviru

Tabela 6.

Milica Orlandić 27/03 17

Page 18: Mikrokontroleri (Skripta)

Mikrokontroleri

Bit 3 - USBS: USART Stop Bit SelectOvaj bit određuje broj Stop Bita koje će biti dodati u predajniku. Prijemnik ignoriše ovaj bit.

Tabela 7.

Bit 2:1 – UCSZ1:0 : USART Character SizeKombinuju se sa bitom UCSZ2 u UCSRB i postavljaju broj bita podatka u okvir koje koriste Prijemnik i Predajnik

Tabela 8.

Bit 0 – UCPOL: USART Clock PolarityOvaj bit se koristi samo za Sinhroni rezim.

2.2.5 USART Baud Rate Registar – UBRRL i UBRRH

UBRRH Registar dijeli iste ulazne i izlazne lokacije kao UCSRC Registar.

Milica Orlandić 27/03 18

Page 19: Mikrokontroleri (Skripta)

Mikrokontroleri

Bit 15 – URSEL: USART Register Select„1” – čita UCSRC„0” – čita UBRRH

Bitovi14:12 – Rezervisani bitovi

Bitovi 11:0 – UBRR11:0 : USART Baud Rate RegisterOvo je 12-to bitni registar koji sadrži baud rate. UBRRH sadrži 4 bita najveće težine i UBRRL sadrži 8 bita najmanje težine od vrijednosti baud rate-a

2.3 Inicijalizacija USART-a

USART mora da se inicijalizuje prije neko što počne bilo kakva komunikacija. Proces inicijalizacije se sastoji u postavljanju baud rate, postavljanja formata okvira i omogućavanja Prijemnika i Predajnika u zavisnosti od upotrebe. Globalni indikator za prekid mora biti prazan (i time svi interapti onemogućeni) za vrijeme inicijalizacije.

Prije reinstalacije sa promijenjenim baud rate-om i formatom okvira, budite sigurni da nema nikakvog prenosa za vrijeme perioda za koji se registri mijenjaju. TXC Flag koristi se da se provjeri da li je transmiter završio sve prenose, i RXC Indikator se koristi da se provjeri da nema nepročitanih podataka u prijemnom baferu.

#define FOSC 1843200// Clock Speed #define BAUD 9600 #define MYUBRR FOSC/16/BAUD-1 void main( void ) { ... USART_Init ( MYUBRR ); ... } void USART_Init( unsigned int ubrr) { /*postavljanje baud rate-a*/ UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; /*ukljucivanje prijemnika I predajnika*/ UCSRB = (1<<RXEN)|(1<<TXEN); /* Postavljanje formata okvira: 2 stop bita i 8 bita podataka*/ UCSRC = (1<<USBS)|(3<<UCSZ0); }

Milica Orlandić 27/03 19

Page 20: Mikrokontroleri (Skripta)

Mikrokontroleri

Primjećuje se da TXC Indikator mora biti postavljen na nulu prije svakog prenosa (prije nego što je UDR upisan).

Ovo je prosti kod u C za inicijalizaciju USART-a. Pretpostavljeno je da je uključen asinhroni režim, da su prekidi dozvoljeni. Baud rate je dat kao parametar funkcije. Omogućen je rad prijemnika i predajnika. Setovanjem bita USBS, u okvir se postavljaju dva stop bita, a množenjem bita UCSZ0 sa 3 dobijamo kombinaciju UCSZ2:0 bitova koja postavlja 8 bita podatka. Složenije rutine za inicijalizaciju USART-a mogu da sadrže format okvira kao parametar, omoguću/onemogući prekide i drugo.

Rad predajnika USART-a se omogućava postavljanjem bita TXEN (Transmit Enable) na „1” u UCSRB Registru.

2.3.1 Slanje okvira sa 5-8 bitova podatka

Prenos podatka se započinje unošenjem podatka u bafer predajnika. Zatim će, podatak iz bafera da se prebaciomjeri u pomjerački registar kada ovaj bude spreman to jest prazan za prijem. Pomjerački registar uzima podatak kada je stanje čekanja ili odmah posle poslednjeg stop bita prethodnog okvira koji je poslat. Kad se u pomjerački registar upiše podatak, on ce proslijediti čitav okvir brzinom koju je definisao Baud Registar,U2X ili XCK u zavisnosti od režima rada.

Funckcija jednostavno ceka da se bafer predajnika isprazni provjeravajući UDRE indikator, prije nego unese novi podatak za slanje.

2.3.2 Slanje okvira sa 9 bitova podatka

Ako podatak ima 9 bitova, kombinacija kontrolnih bitova UCSZ2:0 je ”111”. Deveti bit mora biti upisan u TXB8 bit registra UCSRB prije nego što je bit najmanje težine upisan u UDR.

Data je funkcija u C koja rešava prenos 9-to bitnog podatka.

Milica Orlandić 27/03 20

void USART_Transmit( unsigned char data ){/* Ceka dok se bafer predajnika isprazni */while ( !( UCSRA & (1<<UDRE)) ) ;

/* Postavlja podatak u bafer i salje podatak*/UDR = data;}

Page 21: Mikrokontroleri (Skripta)

Mikrokontroleri

2.3.3 Indikatori ( flags) predajnika i prekidi

Predajnik USART-a ima dva indikatora svog stanja:

UDRE(USART Data Register Empty) TXC (Transmit Complete)

Oba se mogu koristiti za stvaranje prekida.UDRE Indikator pokazuje kada je bafer predajnika spreman da primi novi

podatak. Ovaj bit je setovan kada je bafer prazan i resetovan kada bafer sadrzi podatak.

Kada je bit UDRIE (USART Data Register Empty Interrupt Enable) u UCSRB postavljen na „1”, USART data Register Empty Interrupt će se izvršiti kad god je UDRE setovan. UDRE se postavlja na nulu upisivanjem podatka u UDR.

TXC Indikator je setovan kada je čitav okvir poslat iz pomjeračkog registra predajnika i nema novih podataka u baferu predajnika. TXC Indikator se automatski resetuje kada se izvrši prekid.

Kada je setovan TXCIE bit u UCSRB, USART Transmit Complete Interrupt biće izvršen kada TXC Indikator postane setovan.

Gašenje predajnika (postavljanje TXEN na „0”) neće biti izvršeno sve tok se već postojeći prenos ne završi, to jest tek onda kada pomjeračcki registar i bafer prijemnika ne sadrže podatak za prenos.

Milica Orlandić 27/03 21

void USART_Transmit( unsigned int data ){/*Ceka da se bafer prijemnika isprazni*/

while ( !( UCSRA & (1<<UDRE))) );/* Kopira 9-ti bit u TXB8 */UCSRB &= ~(1<<TXB8);if ( data & 0x0100 )UCSRB |= (1<<TXB8);/* Postavlja podatak u bafer I salje podatak*/UDR = data;}

Page 22: Mikrokontroleri (Skripta)

Mikrokontroleri

2.3.4 Prijem okvira sa 5-8 bitova podatka

Prijemnik USART-a je uključen upisom „1” na bit RXEN u UCSRB Registru. Kada je prijemnik uključen, RxD pin predstavlja serijski ulaz prijemnika. Baud rate, režim rada i format okvira moraju biti definisani prije bilo kakvog prijema.

Prijemnik počinje prijem kada detektuje ispravan start bit. Svaki bit koji slijedi biće odabran periodom (baud rate) i pomjeren u pomjerački registar prijemnika dok prvi stop bit ne naidje. Kada je prvi stop bit primljen, kompletan serijski okvir je prisutan u prijemnom pomjeračkom registru, sadržaj pomjeračkog registra biće pomjeren u bafer prijemnika.

Dat je kod funkcije prijema.

2.3.5 Prijem okvira sa 9 bitova podatka

Ako je 9-to bitni podatak korišćen, deveti bit mora biti pročitan iz bita RXB8 registra UCSRB prije čitanja bitova manje težine iz UDR. Status se čita iz UCSRA, a zatim podatak iz UDR. Ispituju se i greške: greška okvira, prekoračenja i parnosti.

Milica Orlandić 27/03 22

unsigned char USART_Receive( void ){/* Ceka prijem podatka*/while ( !(UCSRA & (1<<RXC)) );/* Uzima iI vraca podatak iz bafera prijemnika*/return UDR;}

unsigned int USART_Receive( void ){unsigned char status, resh, resl;

/* Ceka prijem podatka*/while ( !(UCSRA & (1<<RXC)) );/* Definise status, deveti bit I uzima podatak */

status = UCSRA;resh = UCSRB;resl = UDR;

/* Ako se desi greska okvira,prekoracenja ili parnosti, upisuje -1 */if ( status & (1<<FE)|(1<<DOR)|(1<<PE) )return -1;/* Filtrira 9-ti bit , a zatim ga vraca*/resh = (resh >> 1) & 0x01;return ((resh << 8) | resl);}

Page 23: Mikrokontroleri (Skripta)

Mikrokontroleri

2.3.6 Indikatori prijemnika i prekidi

Prijemnik ima jedan indikator koji prikazuje njegovo stanje.RXC Indikator pokazuje da li ima nepročitanog podatka u baferu

prijemnika. Ovaj indikator je setovan kada nepročitan podatak postoji u baferu, a resetovan kada je bafer prazan. Ako je prijemnik ugasen ( RXEN=0), RXC će postati nula.

Kada je RXCIE u registru UCSRB setovan. USART Receive Complete Interrupt biće izvršen dok je RXC Indikator setovan.

Prijemnik ima tri Indikatora greške: grešku okvira (FrameError), grešku prekoračenja (DataOverRun) i grešku parnosti (Parity Error). Može im se pristupiti čitanjem UCSRA registra. Zajedničko im je to što su locirane u prijemnom baferu zajedno sa okvirom za koji provjeravaju greške. Da bi se našle u baferu, UCSRA mora biti pročitan prije prijemnog bafera (UDR). Indikatori greške ne mogu da generišu prekide.

Milica Orlandić 27/03 23

Page 24: Mikrokontroleri (Skripta)

Mikrokontroleri

3. ANALOGNO – DIGITALNI KONVERTORI

Mjerenje analognih veličina je dosta čest pratilac programera. To se pokazalo kao jedan od težih zadataka svakog sistema. Odbirci analognog signala moraju se predstaviti preko konačnog broja bita, kojim je definisan i broj kvantizacionih nivoa. Ukoliko je vrijednost odbirka u oblasti između 2 kvantizaciona nivoa, on će poprimiti vrijednost bližega. Ako signal ima n bita u digitalnom obliku, to je 2^n kvantizacionih nivoa.

Glavne osobine su:

10-to bitna rezolucija Integralna nelinearnost 0.5 LSB (Bit najmanje težine) Apsulutna tačnost 2 LSB Vrijeme konverzacije 13-260 us 8 ulaznih kanala 7 diferencijalnih ulaznih kanala 2 diferencijalna ulazna kanala sa opcionim pojacanjima 10x

i 200x Opciono lijevo ravnanje za rezultate AD konverzije Opseg napajanja 0-Vcc

Opcioni referentni napon 2.56V Početak konverzije izazvan automatskim okidanjem Prekidi

Uređaj podržava 8 naponskih ulaza i 16 diferencijalanih ulaznih

kombinacija. Dva diferencijalna ulaza (ADC1, ADC0 i ADC3, ADC2) su opremljena sa programabilnim pojačavačkim nivoom, omogućavajući pojačanja od 0dB (1x), 20dB (10x) ili 46dB (200x) prije AD konverzije. Sedam diferencijalnih analognih ulaznih kanala dijele zajednicki negativni priključak (ADC1), dok bilo koji drugi ulaz može biti postavljen na pozitivni ulazni terminal. Ako se koristi pojačanje 1x i 10x, očekujemo 8-bitnu rezoluciju. Ako je pojačanje 200x, rezolucija je 7-bitna.

Milica Orlandić 27/03 24

Page 25: Mikrokontroleri (Skripta)

Mikrokontroleri

AD Konvertor sadrži kolo za uzimanje i zadržavanje uzoraka („Sample and Hold”) koje omogućava da se ulaz AD konverzije održava konstantnim za vrijeme konverzije.

Blok dijagram arhitekture AD Konvertora dat je na slici 3.1.

Slika 3.1. Blok dijagram AD Konvertora

Milica Orlandić 27/03 25

Page 26: Mikrokontroleri (Skripta)

Mikrokontroleri

3.1 Način rada

AD Konvertor konvertuje analogni ulaz u 10-bitnu digitalnu vrijednost sukcesivnom aproksimacijom. Minimalna vrijednost je GRN(0) i maksimalna vrijednost je napon na pinu AREF minus 1LSB. Opciono, AVCC ili interni 2.56V referentni napon može biti povezan na AREF pin upisom odgovarajućih bita u ADMUX registru.

Analogni ulazni kanal i diferencijalno pojačanje je kontrolisano bitovima u ADMUX Registru.

Rad AD Konvertora je omogućen postavljanjem ADEN bita u ADCSRA. Odabir naponske reference i ulaznih kanala neće imati efekta dok se ADEN ne setuje. AD Konvertor ne posjeduje snagu dok je resetovan bit ADEN.

AD Konvertor generiše 10-bitni rezultat koji se prezentuje u Registrima podatka, ADCH i ADCL. Obično, rezultat je predstavljen desnim ravnanjem ali postavljanjem bita ADLAR u ADMUX Registru moguće je i lijevo ravnanje.

3.2 Početak konverzije

Konverzija počinje upisivanjem logičke jedinice na bit ADSC. Ovaj bit ostaje u tom stanju za vrijeme trajanja konverzije i hardver ga resetuje kada se konverzija završi.

Data je funkcija kojom se analogna vrijednost napona pretvara u digitalni ekvivalent. Parametar funkcije je ulaz koji predstavlja kombinaciju kontrolnih bita koji se dovode na multiplekser.

Milica Orlandić 27/03 26

unsigned int Adc(unsigned char ulaz){

unsigned int rez;

ADMUX=0x40+ulaz; /*”0100 0000”+ulaz,REGS1:0=“01”-Eksterni AVCC 5V,ADLAR=0- desno ravnanje*/

ADCSRA=0xD7; /* ADCSRA=”1101 0111” ADEN=”1”, ADSC=”1”, ADATE=”0”, ADIF=”1”, ADIE=”0”, ADPS2=”1”, ADPS1=”1”, ADPS0=”1”*/

/* Cekamo da se zavrsi konverzija*/while(!(ADCSRA & _BV(ADIF)));

/* Desno ravnanje, time i citanje prvo ADCL registra, zatim ADCH*/rez = ADCL + (ADCH<<8);return(rez);

}

Page 27: Mikrokontroleri (Skripta)

Mikrokontroleri

Kod konverzije može se izvršiti i automatsko okidanje. Ono je kontrolisano bitom ADATE u ADCSRA registru. Bitovi ADTS u SFIOR registru određuju izvor okidanja. Kada se pozitivna ivica desi na selektovanom signalu okidanja, preskaler AD Konvertora se resetuje i konverzija započinje. Ovo omogućava da konverzija započne u fiksiranim intervalima. Ako je signal okidanja jos uvijek setovan kada se konverzija završi, nova konverzija neće početi. Ako neka druga pozitivna ivica desi u signalu okidanja za vrijeme konverzije, ivica će biti ignorisana.

Slika 3.2. Logika automatskog okidanja

3.3 Preskaliranje i vrijeme konverzije

Kolo sukcesivne aproksimacije zahtjeva frekvenciju ulaznog takta između 50 kHz i 200kHz. Ako je potrebna niža rezolucija od 10 bita, frekvencija ulaznog takta može biti viša od 200kHz da bi se dobila veća frekvencija odabiranja.

AD Konvertor sadrži preskaler, koji generiše odgovarajuću frekvenciju takta. Preskaliranje se kontroliše bitovima ADPS u ADCSRA Registru. Preskaler počinje da broji od momenta kada se AD Konvertor uključi setovanjem bita ADEN.

Normalna konverzija traje 13 taktova. Prva konverzija pošto se konvertor uključi traje 25 taktnih ciklusa.

Milica Orlandić 27/03 27

Page 28: Mikrokontroleri (Skripta)

Mikrokontroleri

Slika 3.3. Preskaler AD Konvertora

3.4 Registri AD Konvertora

3.4.1 ADC Multiplexer Selection Register – ADMUX

Ovaj registar kontroliše izbor naponske reference, naponskih ulaza i ravnanja.

Slika 3.4. ADMUX Registar

Milica Orlandić 27/03 28

Page 29: Mikrokontroleri (Skripta)

Mikrokontroleri

Bitovi 7:6 – REFS1:0: Reference Selection BitsOvi bitovi selektuju naponsku referencu za AD Konvertor. Ako se promjene u toku konverzije, to neće uticati na konverziju dok se ona ne završi. Interna naponska referenca neće se koristiti ako je eksterna priključena na AREF pin.

Tabela 9.

Bit 5 – ADLAR: ADC Left Adjust ResultBit ADLAR utiče na prezentaciju rezultata AD konverzije u Data Registru.„1” – lijevo ravnanje„0” – desno ravnanjePromjena bita ADLAR uticaće odmah na Data Registar nezavisno od toga da li je konverzija u toku.

Bitovi 4:0 – MUX4:0: Analog Channel and Gain Selection BitsVrijednost ovih bitova određuje koja kombinacija analognih ulaza će se povezati na AD Konvertor. Ovi bitovi, takođe, određuju i vrijednost pojačanja kod diferencijalnog ulaza. Data je tabela sa selekcijom ulaznih kanala i pojačanja (Tabela 1).

3.4.2 ADC Control and Status Register A – ADCSRA

Bit 7 – ADEN: ADC Enable“1” – uključuje AD Konvertor“0” - isključuje AD Konvertor

Milica Orlandić 27/03 29

Page 30: Mikrokontroleri (Skripta)

Mikrokontroleri

Bit 6 – ADSC: ADC Start Conversion“1” – početak konverzije“0” – nema konverzijeADSC je setovan za vrijeme trajanja čitave konverzije. Kad se konverzija završi, postavlja se na nulu.

Bit 5 – ADATE: ADC Auto Trigger Enable“1” – omogućeno automatsko okidanje“0” – onemogućeno automatsko okidanje

Bit 4 – ADIF: ADC Interrupt Flag“1” – kraj konverzije i ažuriranje Data Registra“0” – izvršen prekidADIF se resetuje od strane hardvera kada se izvrši odgovarajući vektor prekida.

Bit 3 – ADIE: ADC Interrupt EnableKada su bit ADIE i I-bit u SREG registru setovani, ADC Conversion Complete Interrupt je aktiviran.

Milica Orlandić 27/03 30

Page 31: Mikrokontroleri (Skripta)

Mikrokontroleri

Tabela 10. Selekcija ulaznih kanala i pojačavača

Milica Orlandić 27/03 31

Page 32: Mikrokontroleri (Skripta)

Mikrokontroleri

Bit2:0 – ADPS2:0: ADC Prescaler Select BitsOvi bitovi određuju faktor dijeljenja između XTAL frekvencija i ulaznog takta AD Konvertora.

Tabela11. Selekcija Preskalera AD Konvertora

3.4.3 Registri podatka AD Konvertora (ADC Data Register) - ADCH I ADCH

Kada je bit ADLAR=0, bitovi podatka su raspoređeni na sledeći način:

Kada je bit ADLAR=1, izvršeno je lijevo ravnanje i time se prvo popunjava ADCH, pa tek onda ADCL.

Milica Orlandić 27/03 32

Page 33: Mikrokontroleri (Skripta)

Mikrokontroleri

Kada se izvrši AD konverzija, rezultat je nađen u ova dva registra. Ako je korišćeno lijevo ravnanje i nije zahtjevana preciznost veća od 8-

bitne, dovoljno je pročitati ADCH. U suprotnom, prvo se mora pročitati ADCL, onda ADCH. Kada se ADCL pročita, pristup Registrima podatka je zabranjen. Da nije tako, kad se ADCL pročita, a konverzija se završi prije nego što se pročitao ADCH, nijedan registar ne bi bio ažuriran i rezultat konverzije bi bio izgubljen. Kada se ADCH obradi, pristup je ponovo omogućen.

ADC9:0: ADC Conversion ResultReprezentuju rezultat konverzije .

3.4.4 Registar specijalnih funkcija (Special Function IO Register) SFIOR

Bitovi 7:5 – ADTS2:0: ADC Auto Trigger SourceAko je ADATE u ADCSRA setovan, vrijednost ovih bita selektuje koji izvor ce izvršiti okidanje AD konverzije. Ako je ADATE na nuli, ovi bitovi nemaju uticaja. Okidanje ce se izvršiti rastućom ivicom selektovanog indikatora prekida.

Tabela 12.

Milica Orlandić 27/03 33

Page 34: Mikrokontroleri (Skripta)

Mikrokontroleri

4. ANALOGNI KOMPARATOR

Analogni komparator poredi ulazne vrijednosti na pozitivnom pinu AIN0 i negativnom AIN1. Kada je napon na AIN0 veći od napona na AIN1, izlaz analognog komparatora (Analog Comparator Output – ACO) je setovan. Izlaz komparatora može biti podešen tako da poziva Timer/Counter1 Input Capture funkciju. Dodatno, komparator može da poziva poseban prekid (interrupt), koji pripada samo analognom komparatoru. Korisnik može izabrati pozivanje prekida na rastuću ivicu, opadajuću ivicu ili promjenu naponskog nivoa.

Slika 4.1. Blok dijagram analognog komparatora

Milica Orlandić 27/03 34

Page 35: Mikrokontroleri (Skripta)

Mikrokontroleri

Na slici se uočavaju pinovi koji predstavljaju ulaz analognog komparatora.

Slika 4.2. Rapored pinova na pločici

4.1 Registri AD Konvertora

4.1.1 Registar Specijalnih Funkcija -SFIOR

Bit 3 – ACME: Analog Comparator Multiplexer EnableKada je ovaj bit setovan i kada je AD Konvertor isključen (bit ADEN u ADCSRA Registru postavljen na nulu), multiplekser AD konvertora određuje negativni ulaz analgonog komparatora. Kada je ovaj bit ’0’, na negativni ulaz se dovodi AIN1.

Milica Orlandić 27/03 35

Page 36: Mikrokontroleri (Skripta)

Mikrokontroleri

4.1.2 Analog Comparator Control and Status Register – ACSR

Bit 7 – ADC: Analog Comparator Disable „1“ – napajanje analognog komparatora je isključeno„0“ – napajanje uključenoOvaj bit može biti postavljen na “1” u bilo kom trenutku da bi se analogni komparator isključio. Kada se mijenja ovaj bit, prekid analognog komparatora mora biti zabranjen upisivanjem nule u ACIE bit ACSR registra, inače se može desiti prekid za vrijeme promjene bita.

Bit 6 – ACBG: Analog Comparator Bandgap Select„1“ - fiksirani referentni napon zamjenjuje pozitivni ulaz u

analogni komparator„0“ – pin AIN0 se dovodi na pozitivan ulaz komparatora

Bit 5 – ACO: Analog Comparator OutputIzlaz analognog komparatora je sinhronizovan i direktno povezan na ACO. Sinhronizacija uvodi kašnjenje od 1-2 perioda takt impulsa.

Bit 4 – ACI: Analog Comparator Interrupt FlagOvaj bit na “1” postavlja hardver kada događaj na izlazu komparatora poziva “interrupt mode” definisan bitovima ACIS1 i ACIS0. Rutina prekida analognog komparatora se izvršava ako su bitovi ACIE i I-bit SREG registra na nivou logicke jedinice. ACI se hardverski postavlja na “0” kada se izvršava odgovarajući vektor prekida.

Bit 3 – ACIE: Analog Comparator Interrupt EnableKad je ovaj bit “1” i I-bit status ragistra takođe “1”, aktiviran je prekid analognog komparatora. Kad je ovaj bit “0” prekid analognog komparatora je zabranjen.

Bit 2 – ACIC: Analog Comparator Input Capture Enable

Milica Orlandić 27/03 36

Page 37: Mikrokontroleri (Skripta)

Mikrokontroleri

„1“ – omogućeno pozivanje Input Capture funkcije u Timer/Counter-u 1 od strane analognog komparatora„0“ – ne postoji veza između analognog komparatora i Input Capture funkcije.Da bi komparator pozivao Timer/Counter Input Capture prekid, TICIE1 bit TIMSK registra mora biti “1”.

Bit 1,0 – ACIS1,ACIS0: Analog Comparator Interrupt Mode SetupOvi bitovi određuju koji događaji na izlazu komparatora pozivaju prekid analognog komparatora

Tabela 13.

Prilikom promjena ACIS1 i ACIS0 bitova prekid analognog komparatora mora biti zabranjen upusivanjem “0” u ACIE bit ACSR registra. U suprotnom prekid se može desiti prilikom promjene bitova.

4.2 Multipleksirani ulaz analognog komparatora

Milica Orlandić 27/03 37

Page 38: Mikrokontroleri (Skripta)

Mikrokontroleri

Moguće je odabrati bilo koji od ulaza AD konvertora da zamijeni negativni ulaz analognog komparatora. ADC multiplekser se koristi da bi doveo napon na ovaj ulaz pri čemu AD Konvertor mora biti isključen. Ako je ACME bit u SFIOR registru “1” i ADC isključen (ADEN=’0’), bitovi MUX2..0 u ADMUX Registru selektuje ulazni pin koji će zamijeniti negativni ulaz analognog komparatora. Ako je ACME “0” ili ADEN “1”, na negativni ulaz analognog komparatora doveden je AIN1 pin.

Tabela 14.

Milica Orlandić 27/03 38

Page 39: Mikrokontroleri (Skripta)

Mikrokontroleri

5. TIMER/COUNTER

Brojač (timer) je obično najkomplikovaniji dio mikrokontrolera. Fizički timer je registar čija se vrijednost inkrementira/dekrementira. Ovaj

proces se obavlja u pozadini svega što mikrokontroler radi, na programeru je da iskoristi ovu pogodnost.

Može obavljati funkciju običnog sata, da jednostavno prati tok vremena.Može poslužiti za brojanje određenih događaja: koliko je bita poslato ili

primljeno, koliko je koraka obavljeno u određenoj operaciji...Svi procesori sadrže programski brojač – PC (Program Counter): postoji lista

instrukcija koje treba da se izvrše jedna za drugom, u svakom sljedećem taktu brojač se inkrementira i naredna instrukcija se može izvršiti. Tako je ostvarena sinhronizacija.

U okviru Atmega16 postoje tri fleksibilna tajmera/brojača koji rade u nekoliko režima:

8-bitni Timer/Counter 0 sa impulsno širinskom modulacijom 16-bitni Timer/Counter 1 8-bit Timer/Counter 2 sa impulsno širinskom modulacijom i

asinhronim režimom

5.1 8-bitni Timer/Counter0 sa PWM

Glavne osobine su: Jednokanalni brojač Resetovanje brojača u tački poređenja Fayno impulsno – širinski modulator Generator frekvencije Eksterni brojač dogadjaja 10-bitni taktni preskaler Izvori prekida prekoračenja i tačke poređenja

Pojednostavljenja blok šema je data na slici 5.1.

Milica Orlandić 27/03 39

Page 40: Mikrokontroleri (Skripta)

Mikrokontroleri

Slika 5.1. Blok šema 8-bitnog Timer-Counter-a

Postoje dva registra Timer/Counter(TCNT0) I Output Compare Register (OCRO). Oba su 8-bitna. Zahtjevi za prekid (skraćeno Int.Req. na slici) se nalaze u Registru Indikatora prekida tajmera (Timer Interrupt Flag Register - TIFR).

Timer-Counter može biti taktovan interno, pomoću preskalera, ili spoljašnjim taktom preko pina T0. Logički blok ’Izbor takta’ kontroliše bitovima CS02:0 smještenim u TCCR0 odabir izvora takta i ivice na koju Timer-Counter okida. On je neaktivan ako nije selektovan izvor takta.

Vrijednost iz Output Compare Registra(OCR0) se neprestano upoređuje sa rezultatom brojanja. Rezultat tog poređenja se može koristiti od strane Generatora funkcije za generisanje PWM signala na pinu OC0. Kada se izjednače sadržaji TCNT0 i OCR0 registara, setovaće se Compare Flag (OCF0) što može biti iskorišteno za generisanje izlaznog zahtjeva za prekidom (output compare interrupt request).

Mnogi registri i referentni bitovi su napisani u opštoj formi. Malo slovo ’n’ zamjenjuje broj Timer-Countera, koji je u ovom slučaju ’0’. Ipak, kada koristimo registre i pinove definisane u programu, moraju da se koriste tačne forme (npr. TCNT0 za pristupanje brojnoj vrijednosti Timer-Counter-a).

Na slici su definisane i sledeće konstante:

BOTTOM – Brojač dostiže BOTTOM kada je na 0x00 MAX – Brojač dostiže svoj MAXimum kada dostigne

vrijednost 0xFF

Milica Orlandić 27/03 40

Page 41: Mikrokontroleri (Skripta)

Mikrokontroleri

TOP – Brojač dostiže vrijednost TOP kada dostigne najveću vrijednost u brojećoj sekvenci. Može se podesiti da je TOP fiksna vrijednost jednaka MAX, ili vrijednost smještena u OCR0 registru, što zavisi od izabranog režima

5.1.1 Brojačka jedinica

Slika 5.2. Blok dijagram brojačke jedinice

Opis signala: Count – inkrementira ili dekrementira sadržaj TCNT0 Smjer – bira između inkrementiranja i dekrementiranja Clear – podešsava TCNT0 na nulu (podešava sve bite na 0) clktn – takt Timer-Counter-a TOP – signalizira da je TCNT0 dostigao maksimalnu

vrijednost BOTTOM – signalizira da je TCNT0 dostigao minimalnu

vrijednost (nula)

U zavisnosti od režima rada, brojač se resetuje, inkrementira ili dekrementira u svakom taktu tajmera (clkt0). Indikator Prekoračenja Timer-Counter-a je setovan u zavisnosti od režima (WGM01:0) a može biti korišten za generisanje CPU prekida.

5.1.2 Izlazna upoređivačka jedinica (Output Compare Unit)

8-bitni komparator vrši upoređivanje vrijednosti iz OCR0 i TCNT0 registara. Kada ove vrijednosti postanu jednake setuje se Output Compare Flag (OCF0) u sljedećem taktnom intervalu. Ako je OCIE0=1 i Global Interrupt Flag u SREG setovan, Output Compare Flag će generisati izlazni prekid (output compare interrupt). OCF0 se automatski resetuje kada se izvrši prekid.

Milica Orlandić 27/03 41

Page 42: Mikrokontroleri (Skripta)

Mikrokontroleri

Slika 5.3. Blok šema izlazna upoređivačka jedinica

Generator funkcije koristi izlazni signal komparatora da generiše izlaz u skladu sa podešavanjima koja su ostvarena posredstvom WGM01:0 i COM01:0

bita. OCR0 je duplo baferovan samo kada se koristi neki PWM mod, u ostalim slučajevima (Normal, Clear Timer on Compare (CTC)) nije. Ukoliko je duplo baferovan, CPU ima pristup OCR0 Buffer registru, ukoliko nije, CPU direktno pristupa OCR0.

5.1.3 Force Output Compare

Upisivanjem logičke jedinice na FOC0 (Force Output Compare) bitu, u non-PWM režimu, neće doći do setovanja OCF0 Flag, ali OC0 će se updatovati kao da je došlo do stvarnog izjednačavanja sadržaja registara TCNT0 i OCR0.

5.1.4 Blokiranje upoređivačkog usaglašavanja upisivanjem TCNT0(Compare Match Blocking by TCNT0 Write)

Sve CPU operacije upisivanja u TCNT0 registar će blokirati rezultate poređenja TCNT0 i OCR0 u narednom taktu. Ovo omogućava upisivanje u OCR0 registar iste vrijednosti kao u TCNT0 bez izazivanja prekida.

Milica Orlandić 27/03 42

Page 43: Mikrokontroleri (Skripta)

Mikrokontroleri

Slika 5.4. Blok dijagram izlazne upoređivačke jedinice

Compare Output Mode (COM01:0) bitovi služe za definisanje stanja na OC0 kad dođe do narednog upoređivačkog usaglašavanja (compare match-a).

Generalna I/O port funkcija je predefinisana od strane OC0 registra (na izlazu iz Generatora funkcija), ako je bilo koji od COM01:0 bitova setovan.

Orijentaciju (input/output) OC0 pina kontroliše DDR. DDR bit za OC0 pin (DDR_OC0) mora biti podešen kao izlazni prije nego što se vrijednost iz OC0 registra proslijedi na OC0 pin.

5.1.5 Režimi rada

Režim rada to jest ponašanje Timer/Counter-a i izlaznih pinova upoređivanja je definisano kombinacijom bitova WGM01:0 i COM01:0. Bitovi COM0 ne utiču na brojačku sekvencu, dok WGM0 utiču.

Postoje četiri režima rada: Normalni režim(Normal mode) Režim u kom se resetuje vrijeme pri upoređivačkom usaglašavanju

(Clear Time on Compare Match Mode(CTC)) Fast PWM Mode (Režim Brze Impulsno Širinske Modulacije) Phase Correct PWM Mode (Režim Impulasno Širinske Modulacije

sa ispravljanjem faze)

5.1.5.1 Normalni režim

Milica Orlandić 27/03 43

Page 44: Mikrokontroleri (Skripta)

Mikrokontroleri

Najjednostavniji režim rada je normalni režim. Njega određuje kombinacija bitova WGM01:0=0. U ovom režimu, brojački smjer je uvjek na gore (inkrementirajući) i onemogućeno je resetovanje. Brojač jednostavno kad izbroji

do maksimalne vrijednosti (8-bitni do 255), ponovo počinje da broji od nule. Timer/Counter Overflow Flag (TOV0) se setuje u istom taktu kada TCNT0 ima

vrijednost nula. Indikator TOV0 se u ovom slučaju ponaša kao deveti bit. Upotreba OC za generisanje talasnih oblika, u ovom modu, se ne preporučuje, jer zauzima mnogo procesorskog vremena.

5.1.5.2 Režim u kom se resetuje vrijeme pri upoređivačkom usaglašavanju (Clear Time on Compare Match

Mode(CTC))

U CTC režimu (WGN01:0=2), Registar OCR0 se koristi da manipuliše rezolucijom brojača. U CTC režimu brojač se postavlja na nulu kada se izbrojana vrijednost TCNT0 usaglasi sa OCR0. OCR0 definise najveću vrijednost za brojač, samim tim i njegovu rezoluciju. Ovaj režim dozvoljava veću kontrolu

izlazne frekvencije upoređivačkog usaglašavanja. Jednostavnije je brojanje eksternih događaja nego u Normalnom režimu.

Slika 5.5. Vremenski dijagram CTC Režima

Na dijagramu se vidi da se vrijednost TCNT0 uvećava dok se ne izjednači sa OCR0, kada se on ponovo postavlja na nulu. Prekid se može generisati svaki put kad brojač dostigne TOP vrijednost (MAX ili OCR0). Ukoliko je omogućen prekid, rutina za prekid može da se koristi za ažuriranje TOP vrijednosti. Ipak, promjenom TOP vrijednosti ka vrijednosti bliskoj BOTTOM kada brojač radi sa niskom vrijednošću preskalera mora se pažljivo odraditi jer CTC režim nema dvostruko baferovanje. Ukoliko se u OCR0 upiše manja vrijednost od tekuće vrijednosti u TCNT0 registru, brojač će nastaviti da broji do maksimuma, pa

Milica Orlandić 27/03 44

Page 45: Mikrokontroleri (Skripta)

Mikrokontroleri

ponovo od nule dok ne dostigne vrijednost u OCR0. TOV0 se setuje kad TCNT0 prelazi iz MAX na 0.

5.1.5.3 Fast PWM Mode

Brza Impulsno Širinska Modulacija ili Fast PWM Mode zahtijeva kombinaciju bita WGM01:0=3. Ostvaruje PWM generator visoke frekvencije. Brojač broji od BOTTOM do MAX a zatim se restartuje na BOTTOM. U neinvertujućem Compare Output režimu, OC0 se resetuje kad dostigne vrijednost upoređivačkog usaglašavanja (compare match) između TCNT0 i OCR0, i postavlja se na BOTTOM. U invertujućem režimu, izlaz se postavlja na ’compare match’ i resetuje na BOTTOM. Visoka frekvencija omogućava primijenu kod regulatora snage, ispravljača i DA konvertora. Ona omogućava fizički male spoljašnje komponente (kaleme i kondenzatore) i time redukuje ukupnu cijenu.

U Fast PWM režimu, brojač se uvećava dok se vrijednost brojanja ne poklopi sa vrijednošću MAX. Brojač se tada resetuje u sledećem taktnom ciklusu. Vremenski dijagram je dat na slici.

Slika 5.6. Vremenski dijagram Fast PWM Režima

Indikator Prekoračenja Tajmera/Brojača (Timer/Counter Overflow Flag-TOV0) se setuje svaki put kada brojač dostigne MAX.

Upoređivačka jedinica dozvoljava generisanje PWM talasnih oblika na pinu OC0. Postavljanjem bita COM01:0=2 prouzrokovaće neinvertovani PWM, odnosno postavljanjem COM01:0 na 3 invertovani PWM. Trenutna vrijednost OC0 biće vidljiva na pinu porta ako je smjer podatka za taj port postavljen kao izlazni.

Milica Orlandić 27/03 45

Page 46: Mikrokontroleri (Skripta)

Mikrokontroleri

Ekstremne vrijednosti za OCR0 Registar predstavljaju posebne slučajeve stvaranja talasnog oblika PWM u Fast PWM režimu. Ako se u OCR0 upiše BOTTOM vrijednost na izlazu će biti kratki impuls u MAX+1 taktu, a ako se upiše MAX, na izlazu će biti konstantna ‘0’ ili ‘1’ zavisno od COM01:0=2 ili COM01:0=3.

Izlazni talasni oblik sa jednakim trajanjem ‘1’ i ‘0’ i maksimalne frekvencije postiže se podešavanjem COM01:0=1 i OCR0 na nulu.

5.1.5.4 Phase Correct PWM Režim

Kod ovog režima kontrolni biti WGM01:0 imaju vrijednost 1. Ostvaren je PWM generator visoke rezolucije. Bazira se na dvostrukom nagibu pa samim tim i maksimalna moguća frekvencija je duplo manja nego u Fast PWM Režimu. Brojač broji od BOTTOM do MAX a zatim od MAX do BOTTOM. Zbog svoje simetrične karakteristike dvostrukog nagiba ovaj režim se koristi za upravljanje

analognim uređajima. TOV0 se setuje kad brojač dostigne BOTTOM. Ako OCR0 ima vrijednost BOTTOM, izlaz će biti konstantno nula, a ako ima vrijednost MAX, izlaz će biti konstantna jedinica, u neinvertujućem PWM režimu.

Slika 5.7. Vremenski dijagram Phase Correct PWM Režim

Milica Orlandić 27/03 46

Page 47: Mikrokontroleri (Skripta)

Mikrokontroleri

5.1.6 Registri 8-bitnog Tajmera/Brojača

5.1.6.1 Timer/Counter Control Register – TCCR0

Bit 7 – FOC0: Force Output Compare“1” – kada bit WGM00 specificira režim koji nije PWM“0” – kada je TCCR0 upisan da radi u PWM režimuČim se upiše logička jedinica na FOC0 bit, automatski se forsira ‘compare match’ na generatoru funckije. Ovaj bit ne generiše prekid.

Bit 6,3 – WGM01:0: Waveform Generation ModeOvi bitovi kontrolišu brojačku sekvencu brojača, ko određuje maksimalnu (TOP) vrijednost i koji tip generatora funkcije će se koristiti.

Tabela 15.

Bitovi 5:4 – COM01:0: Compare Match Output RežimOvi bitovi kontrolišu ponašanje pina OC0. Ako je jedan ili ova od ovih bitova setovan, OC0 izlaz predefiniše normalnu funkciju porta ulazno-izlaznog pina na koji je priključen. DDR mora biti postavljen tako da omogući izlaz. Kada je OC0 priljučen na pin, funkcija COM01:0 bita zavisi od vrijednosti WGM01:0 bitova. Tabela .. prikazuje kombinacije COM01:0 i njihove funkcije kada su bitovi WGM01:0 postavljeni u Normalnom ili CTC režimu.

Milica Orlandić 27/03 47

Page 48: Mikrokontroleri (Skripta)

Mikrokontroleri

Tabela 16. Compare Output Režim, non PWM Režim

Tabela 17. Compare Output Režim, Fast PWM Režim

Tabela 18. Compare Output Režim, Phase Correct PWM Režim

Bitovi 2:0 – CS02:0:Clock SelectTri bita za odabir tatka određuju izvor takta koji koristi Timer/Counter.

Milica Orlandić 27/03 48

Page 49: Mikrokontroleri (Skripta)

Mikrokontroleri

Tabela 19.

5.1.6.2 Timer/Counter Register – TCNT0

Timer/Counter Registar daje direktni pristup, i za operacije čitanja i pisanja

brojačkoj 8-bitnoj jedinici. Mijenjanjem vrijednosti u ovom registru, dok brojač broji, može doći do pogrešnih rezultata.

5.1.6.3 Output Compare Register – OCR0

Sadrži 8- bitnu vrijednost koja se konstantno poredi sa sadržajem TCNT0 registra. Rezultat poređenja može se koristiti za generisanje izlaznog prekida (output compare interrupt) ili za generisanje signala određenog talasnog oblika na OC0 pinu.

Milica Orlandić 27/03 49

Page 50: Mikrokontroleri (Skripta)

Mikrokontroleri

5.1.6.4 Timer/Counter Interrupt Mask – TIMSK

Bit 1 – OCIE0: Timer/Counter0 Output Compare Match Interrupt EnableKada su setovani bit OCIE0 i I – bit u Statusnom Registru, omogućen je prekid. Ovaj prekid se izvršava kada se desi poređivačko usaglašavanje to jest kada OCF0 se setuje u Registru TIFR

Bit 0 – TOIE0: Timer/Counter0 Overflow Interrupt EnableKada su setovani bit TOIE0 i I – bit u Statusnom Registru, omogučen je prekid. Prekid se izvrčava kada se desi prekoračenje u Timer/Counter-u 0, to jest, kada je bit TOV0 setovan u TIFR Registru.

5.1.6.5 Timer/Counter Interrupt Flag Register – TIFR

Bit 1 – OCF0: Output Compare Flag 0Bit OCF0 se setuje kada se desi upoređivačko usaglašavanje između Timer/Counter-a 0 i podatka u OCR0 – Output Compare Register 0. OCF0 resetuje hardver kada se izvrši odgovarajući vektor prekida. Moguće je resetovati OCF0 i setovanjem indikatora (flag). Kada su I-bit u Statusnom registru, OCIE0 I OCF0 setovani, izvršiće se prekid.

Bit 0 – TOV0: Timer/Counter0 Overflow FlagBit TOV0 se setuje kada se desi prekoračenje u Timer/Counter-u 0. TOV0 resetuje hardver kada se izvrši odgovarajući vektor prekida. Kada su I-bit, TOIE0 i TOV0 setovani, izvršava se prekid.

Milica Orlandić 27/03 50

Page 51: Mikrokontroleri (Skripta)

Mikrokontroleri

5.2 Preskaleri Timer/Counter-a 0 and Timer/Counter-a 1

Timer/Counter0 i Timer/Counter1 koriste isti preskaler, ali se mogu vršiti različita podešavanja. Ovdje će biti date karakteristike koje su zajedničke za oba brojača.

Timer/Counter može biti direktno taktovan sistemskim taktom (CSn2:0=1), tada je frekvencija brojanja maksimalana i jednaka sistemskoj frekvenciji: fclk_I/O .

Timer/Counter može biti taktovan preko preskalera, sa jednom od četiri frekvencije: fclk_I/O/8, fclk_I/O/64, fclk_I/O/256, fclk_I/O/1024 a može biti taktovan spoljašnjim taktom.

Prescaler Reset se može upotrijebiti za sinhronizaciju brojača u skladu sa izvršavanjem određenog programa. Međutim, ukoliko više brojača koristi preskaler istovremeno, resetovanje preskalera će se odraziti na svaki od brojača, o tome treba voditi računa.

Timer/Counter može koristiti spoljašnji takt preko pina Tn.Maksimalna frekvencija spoljašnjeg takta mora biti manja od polovine

frekvencije sistemskog takta, jedino tako je moguća ispravna sinhronizacija tj. pravilan oblik takt signala koji se prosljeđuje brojaču. Preporučuje se da frekvencija eksternog takta ne prelazi vrijednost fclk_I/O/2.5.

Eksterni takt ne može biti preskaliran.Sinhronization i Edge Detector logike (slika) izazivaju kašnjenje Tn_sync

signala u odnosu na Tn signal, i to kašnjenje iznosi 2.5- 3.5 perioda sistemskog takta.

Slika 5.8.Odabir pina T1/T0

5.2.1 Registar specijalnih funkcija – SFIOR

Bit 0- PSR10: Prescaler Reset Timer/Counter1 and Timer/Counter0

Milica Orlandić 27/03 51

Page 52: Mikrokontroleri (Skripta)

Mikrokontroleri

Kada je ovaj bit podešen na ‘1’, preskaler se resetuje. Bit se postavlja na ‘0’ hardverski po izvršavanju pomenute operacije. Upisivanje ‘0’ nema nikakvog efekta. Timer/Counter0 i Timer/Counter1 koriste isti preskaler, pa će se njegovo resetovanje odraziti na oba brojača.

5.3 Primjena Timer-a

5.3.1 Brojanje koliko je puta pritisnut taster korištenjem Timer-a kao brojača ( pritiskom na taster simulira se spoljašnji takt)

5.3.2 Brojanje koliko puta je pritisnut tastera korištenjem overflow prekida tajmera

Milica Orlandić 27/03 52

SIGNAL(SIG_OVERFLOW1){

/* Ocitavamo stanje tastera*/TasterULAZ=PINB & TASTER;

/* Perioda ponavljanja ~35ms */TCNT1-=0x04;

}int main(void) { .......

/* inicijalizacija portova, konfigurisanje UART-a*/................

/*Konfigurisanje TCNT0*/TCCR1B=0x04;

/*Normalni režim, Eksterni takt na rastućoj ivici*/

TIMSK=0x04; /* Timer 1 owerflow interrupt omogućen*/

TCNT1=0xFF-0x07;TasterULAZ=PINB & TASTER;pTU=TasterULAZ;

sei(); /* Dozvoljen prekid*/

while (1){

if(pTU==TasterULAZ)continue;pTU=TasterULAZ;

/* ocitavamo novo stanje*/if(TasterULAZ)continue;nPT++;

/* broji koliko je puta pritisnut taster*/FormatBroj(nPT, ADCFormat, 0);USART_puts(ADCFormat);delay_ms(300);

}; }

unsigned int TIM16_ReadTCNT1( void ){

unsigned char sreg;unsigned int i;sreg = SREG;cli();i = TCNT1;SREG = sreg;return i; /* vraca trenutnu vrijednost TCNT1 registra*/

}int main(void){........

TCCR1B=0x06; /*Normalni režim, Eksterni takt na rastućoj ivici*/

sei();while (1){

/*očitavamo novo stanje, tj. koliko je puta pritisnut taster*/

nPT=TIM16_ReadTCNT1(); if(pnPT==nPT)continue;pnPT=nPT; FormatBroj(nPT, ADCFormat, 0);USART_puts(ADCFormat);delay_ms(300);

};}