42
Универзитет у Крагујевцу Технички факултет – Чачак Дигитални обртомер (tachometer) - Управљачки рачунарски системи - семинарски рад Професор: Др. Александар Пеулић Студенти: Буљугић Милан бр. инд.

Obrtomer digitalni

  • Upload
    ciko82

  • View
    340

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Obrtomer digitalni

Универзитет у КрагујевцуТехнички факултет – Чачак

Дигитални обртомер (tachometer)- Управљачки рачунарски системи -

семинарски рад

Професор:Др. Александар Пеулић

Студенти:Буљугић Милан бр. инд. 3522/2002Јекнић Данило бр. инд. 3267/2001

Чачак – 2009.

Page 2: Obrtomer digitalni

Садржај

1. Увод ....................................................................................... 1.1 Разлике микроконтролера и микропроцесора1.2 Меморија1.3 Архитектуре1.4 Примена

2. Архитектура PIC16F628A ...................................................2.1 Регистри2.2 Прескалер2.3 Конфигурациони битови2.4 Pull-up и Pull-down отпорници2.5 Тајмер2.6 Прекиди (interrupt-и)2.7 Бројач2.8 Ресет

3. Осцилатор .............................................................................4. LCD ........................................................................................5. Reed switch ............................................................................6. Опис рада .............................................................................7. Код .........................................................................................8. Реализација хардвера ...........................................................9. Софтвер и литература ..........................................................

Page 3: Obrtomer digitalni

Увод

Напредак на пољу VLSI технологије довео је до производње микрорачунарских система код којих су сва неопходна кола била уграђена у релативно мали број пратећих интегрисаних кола. Као плод даље интеграције настају микроконтролери који су скоро без додатног хардвера у стању да обављају релативно сложене управљачке функције које се односе на рад система у реалном времену. Значи микроконтролере можемо схватити као “рачунаре на једном чипу”. Микроконтролере могу бити 4, 8, 16, и 32-битни. Ради лакшег разумевања принципа рада (архитектуре) микроконтролера као и самог пројекта у наредном тексту биће укратко појашњени неки основни појмови:

Разлике између микроконтролера и микропроцесора- Микропроцесори су најчешће CISC типа, тако да за копирање података из спољашње меморије користе већи број опкôдова, док микроконтролери један или два.- За манипулисање са подацима типа бит, микропроцесори користе један или два типа инструкција, док је код микроконтролера тај број већи.- Микропроцесори су пројектовани за брзи пренос података из програма са спољно адресираних локација у чип, док се код микроконтролера брзи пренос битова обавља у оквиру чипа.- Микроконтролер може да функционише као рачунар без додатака спољних градивних блокова (меморије и У/И уређаја), док оперативност микропроцесора без спољне меморије и У/И подсистема није могућа.

Меморија- DRAM меморија има више мана него предности. Пуњење и пражњење кондензатора захтева одређено време, тако да је време приступа (eng. access time) ћелијама спорије од осталих врста меморија. Меморија неће радити у случају покушаја очитавања или уписа већом брзином од дозвољене. Освежавање меморије троши доста микроконтролерског времена. Због тога се DRAM меморија све ређе користи и поред ниске цене.- Развојем електронике појављује се SRAM (статичка RAM меморија) по приступачној цени. У њој се меморијске ћелије састоје од неколико транзистора повезаних у форми Флип Флопа, тако да им освежавање није потребно, а једном уписан податак остаје у SRAM меморији све до уписа следећег или до губитка напона напајања.- EPROM меморија задржава своје стање и након нестанка напона напајања. Старије генерације на себи имају мали стаклени „прозор“ преко кога се могу брисати тако што се EPROM одређено време изложи ултраљубичастој светлости. Тај процес убрзава „цурење“ наелектрисања испрограмиране EPROM меморије, и на тај начин се EPROM обрише. Тек онда је могуће поновно програмирање. Код новијих генерација цео поступак (упис-брисање) се изводи електронски за

Page 4: Obrtomer digitalni

релативно кратко време. Већину ЕПРОМ меморија могуће је поставити у sleep mod, довођењем логичке 1 на њен CE (eng. Chip Enable) пин.

ВрстеархитектураМикроконтролери у општем случају могу припадати von-Neumann-овској или Harvard-ској архитектури. Harvard-ска архитектура је новија од von Neumann-ове и донела је убразање рада микроконтролера, код Harvard-ске архитектуре раздвојене су магистрале података и магистрала адресе. На тај начин се убрзава проток података. Микроконтролери Harvad-ске архитектуре имају мањи број инструкција и оне се обично извршавају у једном циклусу. На слици је дат блок приказ Harvard-ске и von Neumann-ове архитектуре.

Сл.1

ПрименаМикроконтролери се данас користе у embedded системима за управљање разним функцијама. Они се користе у ситуацијама када треба да се веома брзо реагује на сопољне сигнале (посебно ако се такви сигнали користе за рад у реалном времену). Микроконтролери су саставни делови многих врста електронске опреме. Они чине већину свих продатих микро-процесорских чипова. Преко 50% су ”једноставни” микроконтролери, а других 50% су специјализовани дигитални процесори сигнала (DSP). Микроконтролер је присутан у скоро сваком електричном уређају, веш машини, микроталасној пећници, телефону итд.

Произвођачи микроконтролераAMCC, Atmel, Cypress Microsystem, Freescale Semiconductor, Fujitsu, Holtek, Intel, Microchip, National Semiconductor, NEC, Philips Semiconductor, Renesas Tech. Corp,

Page 5: Obrtomer digitalni

ST Microelectronics, Texas Instruments, Toshiba, Western Design Center, Ubicom, Xilinx, ZiLog

Архитектура микроконтролера PIC16F628А

Овај микроконтролер је базиран на flash технологији што значи да у самом чипу постоји програмска меморија која се уписује и брише електричним путем, што је далеко напредније од брисања EPROM-а УВ зрацима. Микроконтролер PIC16F628A има RISC (Reduced Instruction Set Computer) архитектуру (рачунар са смањеним сетом инструкција). Све инструкције трају једнако (осим у случају гранања програма) и заврше се за четири циклуса осцилатора. Дакле, ако је осцилатор конfiгурисан на 4 MHz, добија се да циклус инструкције који износи 1 µs. Језгро микроконтролера PIC16F628A производи се у 18-пинском DIP18(Dual In Package) сл.2 или у SMD кућишту.

Сл.2

Page 6: Obrtomer digitalni

блок шема микроконтролера

Сл.3

Микроконтролер PIC16F628A има два одвојена меморијска блока, један за податке и други за програм. Блок за податке чини EEPROM и RAM меморија, а програмски блок чини FLASH меморија. Локације RAM меморије називају се још и GPR или General Purpose Registers.

Програмска меморија је изграђена у FLASH технологији што значи да се може више пута писати и брисати. Ова карактеристика убрзава развој уређаја. Капацитет програмске меморије је 1Kb 14-то битне речи тј. 1024 локације ширине 14 бита. Нулта и четврта локација резервисане су за ресет и прекидни вектор. EEPROM меморија је интерна меморија која се користи за смештање података које треба сачувати и по престанку деловања напајања. Капацитет меморије је 64 бајта. RAM моеморија је моморија за податаке и у њу се смештају привремени резултати аритметичких операција, или међурезултати. Након нестанка напајања ови подаци се губе.

Page 7: Obrtomer digitalni

TIMER је бројач који на сваки четврти такт осцилатора увећава своје стање. То је осмобитни регистар тако да се његова вредност увећава до 255 и затим креће од 0. CPU (Централно процесорска јединица) координира рад блокова микроконтролера и извршава кориснички програм.

PORTA и PORTB су физичке везе микроконтролера са спољним окружењем. PORTA је петопински, а PORTB је осмопински. Такт је покретач микроконтролера и добија се из спољног осцилатора преко ножица OSC1 и OSC2. Такт из осцилатора који долази на ножицу OSC1, инетрно се дели у микроконтролеру на четири подједнака такта Q1, Q2, Q3 i Q4. Ова четири такта чине инструкцијски циклус, а то је време за које се изврши једна инструкција. На сваки Q1 из програмске меморије узима се инструкција и уписује у инструкцијески регистар на Q4. Између Q1 i Q4 обавља се дешифровање и извршење инструкције. На слици 4 приказан је однос инструкцијског циклуса и такта осцилатора на пину OSC1. PC je програмски бројач или Program Counter.

Сл.4

Регистри

Регистар је RAM меморијска локација унутар микроконтролера у коју се може уписивати, са које се може читати или обављати обе ове функције. Следећа скица приказује распоред регистара унутар PIC16F628A микроконтролера.

Page 8: Obrtomer digitalni
Page 9: Obrtomer digitalni

/ Неимплементована меморијска локација (чита се као 0) (1) Није физички регистар

Сл.5

Регистри су подељени у две групе означене са BANK0 и BANK1 (Меморијске банке су подела меморије по ширини на две области које се зову Bank). BANK1 се углавном користи за конфигурисање тренутног хардверског стања микроконтролера. Углавном му је (за једноставније програме) довољно приступити само приликом почетне иницијализације микроконтролера.

- Како се најбитнији регистри (PORTA i PORTB) налазе у BANK0, програм ће углавном бити у њој.- Следећу специфичност представљају првих 12 регистара у банкама 0 и 1 (0x00 – 0x0B). Њима се директно управља радом микроконтролера што их чини повлашћеним (eng. SFR Special Function Registers - регистри специјалне намене), док је обична RAM меморија (eng. General Purpose Registers - регистри опште намене) доступна у регистрима од 0x0C до 0x4F, а истовремено јој се може приступити и преко 0x8C до 0xCF адреса.- TRIS (TRISA и TRISB) регистри се налазе на адресама 0x85 и 0x86, респективно. Да бисте програмирали жељени пин тако да буде улазни или излазни, пошаљете 1 или 0 на његов бит у одговарајућем TRIS регистру. При томе можете користити било који (бинарни, децимални или хексадецимални) формат бројева, међутим бинарним се сликовитије представља стање жељеног пина.- Сви RA (RA0 до RA4) и RB (RB0 до RB7) пинови микроконтролера имају двојаку фукнцију. Они могу бити улазни или излазни. Да ли ће бити улазни или излазни подешава се у одговарајућем TRIS регистру.- STATUS регистар се налази на адреси 0x03 (0x03 или h’03’ означава бројеве у хексадецималном формату. Бинарни формат се пише као b’00000011’, а децимални као .03 или d’03’).- W (eng. Working - радни) регистар је регистар опште намене у који можете сместити било коју бројчану вредност (у опсегу од .0 до .255) са којом желите радити. Након што сте придружили одређену вредност регистру W можете му придружити неку другу вредност (чиме се аутоматски брише претходна вредност) или запамћену вредност из њега преместити на неку другу меморијску локацију (регистар). За разлику од осталих регистара он нема своју адресу већ је интегрисан у склопу самог микроконтролера. У описима инструкција се могу срести ознаке f, k, b и d. При томе је са f (eng. file) означена адреса једног од регистра из табеле са почетка овог поглавља, kозначава константну вредност, b је редни број бита у регистру а d означава одредиште (eng. destination) резултата операције. Регистри коришћени у овом пројекту су детаљније објашњени у даљем тексту:

Page 10: Obrtomer digitalni

- Битови 7 и 6 не користе се у PIC16F628A. Требају да буду у стању логичке 0.- Бит 5 (RP0) користи се код директног адресирања за избор банке података (за пребацивање из банке 0 у банку 1 се сетује а за враћање ресетује) :

0 - BANK0 – 0x00-0x7F1 - BANK1 – 0x80-0xFF

- TO (eng. Time-Out) „прекорачење времена“ бит је на стању логичке 0 након истека WDT, а у стању логичке 1 по доласку напона напајања, и извршењу CLRWDT или SLEEP инструкције. На основу стања овог бита програм може детектовати да је ресет микроконтролера настао услед прекорачења WDT.- PD (eng. Power-Down) бит поставља се на 1 по доласку напона напајања или извршењу CLRWDT инструкције, а на 0 по извршењу SLEEP инструкције.- Логичка јединица на Zero “нултом” биту показује да је резултат задње аритметичке или логичке операције једнак 0. Логичка нула на овом биту указује да је резултат различит од 0.- DC (eng. Digit Carry/borrow) бит „бит прекорачења/позајмице цифре“ индикује прекорачење или позајмицу доњем ниблу насталу због извршавања инструкција сабирања или одузимања. - Логичка јединица на C (eng. Carry/borrow) биту „биту прекорачења/позајмице“ указује да је дошло до прекорачења или позајмице у бајту над којим су се извршиле операције сабирања, одузимања или ротације.

- NOT_RBPU (eng. Port B Pull Up) бит OPTION_REG регистра служи за повезивање интерних отпорника PORTB регистра на напон напајања. - INTEDG (eng. Interrupt edge) бит се подешава у OPTION_REG регистру на адреси 81h. Сетовање његовог бита проузроковаће interrapt (прекид) при растућој ивици, а ресетовање при силазној.

Page 11: Obrtomer digitalni

- T0CS (eng. Timer0 Clock Select) бит омогућава избор такта тајмера. Уколико је ресетован, бројање ће се одвијати синхронизовано са тактом извршавања инструкција који је четири пута мањи од такта осцилатора. Овај такт се може добити са CLKOUT пина микроконтролера. Уколико је T0CS бит сетован, бројање ће бити синхронизовано са спољним тактом који се треба довести на пин 3 (RA4/T0CKI). - T0SE (eng. Timer0 Source Edge) бит има смисла једино при употреби спољног такта. Њиме се бира хоће ли се бројање вршити при преласку са логичке 0 на 1 (ресетован T0SE) или са логичке 1 на 0 (сетован T0SE).- PSA (eng. Prescaller Assigment) бит се користи за селекцију придружености прескалера. Уколико је сетован, прескалер ће бити придружен WDT, а уколико је ресетован прескалер ће бити придружен тајмеру.

Регитар који контролише прекид назива се INTCON (eng. Interrupt Controller) и налази се на адреси 0Bh. Његова улога је да омогући или забрани прекиде и његов садржај је приказан на следећој слици:Сваки извор прекида има придружена два бита. Једним се омогућује појава прекида, а другим се детектује појава прекида. - GIE (eng. Global Interrupt Enable) омогућава или забрањује употребу свих прекида. Његовим сетовањем дозвољена је употреба прекида. Уколико је GIE ресетован, коришћење било ког интерапта није могуће.- Сетовањем EEIE (EEPROM Interrupt Enable) омогућен је завршетак снимања у EEPROM као извор прекида (прекид приликом завршетка уписа у EEPROM). Упис у једну локацију EEPROM-а траје 10ms, што је са становишта микроконтролера веома дуго време, тако да микроконтролер за то време може да ради неке друге задатке, а да када се заврши упис уђе у прекидну рутину. Сетовањем T0IE (eng. Timer0 Interrupt Enable) бита тајмер је употребљен као извор прекида. INTE (eng. RB0/INT INTerrupt Enable) бит сетовањем дозвољава коришћење RB0 пина микроконтролера као извора прекида. Сетовањем RBIE (eng. Port B Change Interrupt Enable) бита, омогућена је употреба PORTB регистра као извора прекида при промени логичког стања на RB4 до RB7 пиновима.- T0IF (eng. Timer0 Interrupt Flag) бит сетује се при прекорачењу тајмера. Прекид приликом прекорачења TMR0 бројача, сетује се бит TOIF када бројач пређе са FF на 00. Овим прекидом може се решити мерење реалног времена на пример и многи други реални проблеми- INTF (eng. Interrupt Flag) бит сетује се при доласку одговарајућег логичког нивоа (одабраног INTEDG битом OPTION_REG регистра) на RB0 пин микроконтролера.

Page 12: Obrtomer digitalni

- RBIF (eng. Port B Interrupt Flag) сетује се при промени логичког стања на пиновима RB4 до RB7.

Прескалер Унутар микроконтролера налази се тзв. прескалер (енг. пре поделити). Он се може програмирати за дељење WDT такта генерисаног интерним RC осцилатором. Што се већи однос дељења користи, такт WDT ће бити спорији. Прескалер се налази у OPTION_REG регистру (0x81) на месту од нултог до другог бита. У табели је приказан однос битова, однос дељења такта и време прекорачења вредности WDT. ова времена су независна од такта осцилатора микроконтролера.

Сл.6

Конфигурациони битовиУнутар микроконтролера налазе се такозвани конфигурациони битови. Њима се одређују хардверске специфичности микроконтролера. Иако су иницијално убачени у __CONFIG диирективу, неки програматори је игноришу и поступају по сопственим сетовањима. За PIC16F628A конфигурациони битови су: - Watchdog Timer (skraćeno WDT) – дозвољава односно забрањује употребу WDT у програму. Унутар микроконтролера налази се интерни RC осцилатор који обезбеђује јединствен такт, независтан од такта микроконтролера. Када се WDT укључи, његов бројач почиње са 0x00, и редом се инкрементује све док не достигне максималну вредност 0xFF. У тренутку преласка са 0xFF на 0x00 (што је 0xFF+1) PIC ће се ресетовати без обзира на његово стање. Једини начин на који се може спречити овај ресет је периодично ресетовање WDT на 0 кроз програм. Значи да у случају заглављивања микроконтролера у петљи WDT неће бити ресетован, што ће проузроковати ресет микроконтролера. WDT има време преласка са 0x00 на 0xFF од око 18mS. Ово време зависно је од неколико спољних фактора као што су напон напајања, температура микроконтролера итд. Ради лакшег рачунања ово време је заокружено на тачно 18mS.

Page 13: Obrtomer digitalni

Сл.6

- Power Up Timer Enable – проузрокује кашњење при довођењу напона напајања да би се осцилатор микроконтролера стабилизовао.- Code Protection – онемогућава ишчитавање кôда из PIC – копирање програма- Осциллатор – омогућује избор једног од 4 стандардна типа осцилатора, односно:1. RC – (eng. Resistor Condensator) 1 отпорник и 1 кондензатор2. LP – (eng. Low Power) За кристалне осцилаторе мале потрошње 32KHz-200KHz 3. XT – За класичне кристалне осцилаторе 100KHz-4MHz 4. HS – (eng. High Speed) За кристалне осцилаторе веће брзине 4MHz-10MHz

Pull-up и Pull-down отпорнициОчигледно је да ће при повезивању тастер прекидача на улазе PIC16F628A микроконтролера бити потребно да његови улази буду у сваком тренутку на тачно дефинисаном логичком нивоу. Ово се хардверски реализује Pull-up (повући нагоре) или Pull-down (повући надоле) отпорницима. Pull up отпорник је отпорник повезан између напона напајања микроконтролера и улазног пина, при чему се тастер прекидач везује између пина и масе. Када је тастер отпуштен, Pull up отпорник доводи напон напајања директно на пин, постављајући га тако у стање логичке јединице, све док се не притисне тастер. Без њега би напон на пину вероватно зашао у недефинисано стање. Овај отпорник не треба бити превише мале вредности због мање потрошње струје при притиснутом тастер прекидачу. Препоручене вредности су од 4,7кΩ до 10кΩ. На исти начин на жељени пин микроконтролера може се поставити Pull-down отпорник према маси, када би се прекидач поставио према напону напајања.

Page 14: Obrtomer digitalni

ТајмерСе може користи се за постављање тачно дефинисане паузе у програму. PIC16F628A има у себи интегрисан тајмер. Импулси овог тајмера могу бити синхронизован са тактом извршавања инструкција микроконтролера или са тактом екстерног осцилатора чији импулси се доводе на пин 3 (RA4/T0CKI). Главна функција тајмера је бројање (.0-.255) које је за разлику од WDT синхронизовано са овим тактом. У тренутку прекорачења максималне вредности, flag-а тајмера се сетује, и циклус бројања опет почиње од нуле. Предност тајмера над обичном петљом за кашњење је у чињеници да је бројање интерни процес микроконтролера, и да ни на који начин не утиче на брзину извршавања главног програма. Довољно је повремено проверити стање flag-a тајмера, како би програм знао да је циклус бројања завршен. Како на овај начин није могуће добити веће периоде, тајмер исто као и WDT може користити прескалер.

Прекид (interrupt)Из разлога повећања ефикасности уређаја, сваки микрконтролер има дефинисане механизме који омогућавају да се на задате догађаје одговори практично у моменту, а када ти догађаји нису присутни, микроконтролер може да обавља неке друге задатке. Ти механизми зову се прекиди или interrupt-и. Сваки прекид мења ток програма, прекида га, извршава се прекидна рутина, а затим се враћа у главни програм. Микроконтролер PIC16F628A има четири извора прекида, два софтверска (1. и 2.) и два хардверска (3. и 4.): 1. Крај уписивања података у EEPROM2. TMR0 прекид узрокован прекорачењем бројача3. Прекид при промени на RB4, RB5, RB6 и RB7 ножицама порта B4. Спољашњи прекид са ножице RB0/INT микроконтролера Уколико желите користити више екстерних извора прекида, можете користити пинове RB4 до RB7. Они се разликују од RB0/INT пина у томе што се прекид јавља при промени стања на пиновима. То значи да ће се прекид јавити при преласку са логичке 0 на логичку 1, али и са логичке 1 на логичку 0. Како се код њих интерапт извршава при свакој промени стања пинови RB4 до RB7 немају свој бит за одређивање ивице сигнала при којој ће се изазивати интерапт.

Interrupt flag При наиласку на прекид на RB0/INT пину се сетује се бит 1 (INTF eng.Interrupt flag), односно бит 0 (RBIF eng. Port B Interrupt flag) при прекиду на RB4 до RB7 пиновима у INTCON регистру. Када прекида нема, interrupt flag је ресетован. То је цела његова функција. Уколико је interrupt flag сетован PIC не може и неће одговарати на друге прекиде. Interrupt flag -ови имају још једну функцију, а то је омогућавање прекидној рутини детекцију извора прекида (RB0/INT пин односно RB4 до RB7 пинови) у случају коришћења више извора прекида. Иако PIC аутоматски сетује interrupt flag -ове при наиласку прекида, он их не ресетује при повратку из рутине за обраду прекида. Interrupt flag -ови се не ресетују аутоматски

Page 15: Obrtomer digitalni

након очитавања. Да би се дозволили нови прекиди, неопходно је ресетовати жељени flag пре изласка из прекидне рутине. Да би се тајмер употребио као извор прекида, довољно је дозволити његово коришћење сетовањем GIE и TOIE битова, и ресетовањем његовог flag-а. Сва подешавања везана за обичан тајмер (прескалер, екстерни такт) важе и у овом случају.

Сл.7

Упрошћен приказ унутрашње прекидне логике

БројачКако можете бројали спољне сигнале? Један од могућих начина представља непрекидно тестирање пина на логичку 0 па на логичку 1 из главног програма (енг. pooling). Очигледно је да би овакај принцип бројања заузео највише ресурса микроконтролера. Други начин је прекидима. Њима је микроконтролеру остављено довољно времена за главни програм, а ипак може правовремено одговорити на спољне импулсе. У пракси се често јавља потреба за бројањем већих вредности, при чему се резолуција бројача заокружује на довољан број децимала Дакле, како бројати са заокружењем? Потребно је подесити тајмер тако да уместо инструкцијских циклуса броји импулсе са RA4/T0CKI пина, сетовањем T0CS бита OPTION_REG регистра. У случају односа прескалера 1:1, трајање логичке 0 и 1 екстерног такта мора бити дуже од 3 такта осцилатора PIC16F628A (тачније око 2 такта + 20nS), а у случају било ког другог односа дуже од 5 такова (тачније 4 такта + 40nS). Осим промене извора такта тајмера, све је остало исто. Прескалер се подешава као код тајмера, прекид се изазива као код тајмера, чак се и уписивањем у TMR0 регистар иницијализује тајмер и прескалер. На тај начин Timer0 има функцију бројача (eng. Counter) чиме се добија да уместо да се интерапт изазива приликом сваког импулса, изазиваће се тек приликом прекорачења бројача. За

Page 16: Obrtomer digitalni

однос прескалера од 1:1 то значи да ће се интерапт изазивати након сваког 255-ог импулса. Тако за главни програм остаје много више ресурса.

РесетНајједноставније речено, ресет служи да извршавање програма почне из почетка. PIC16F628A има 3 извора ресета:1. Први је ресет приликом довођења напона напајања (eng. POR – Power-on Reset). Унутар микроконтролера налази се мало електрично коло које детектује пораст напона напајања до напона довољног за рад микроконтролера. У тренутку достизања номиналног напона, микроконтролер се ресетује. Овим се спречава рад микроконтролера при прениском напону напајања. Уколико је потребно, може се укључити PWRTE (eng. Power-up Timer Enable) конфигурациони бит који држи микроконтролер у стању ресета око 72mS од довођења напона напајања. Ово кашњење реализовано је интерним RC осцилатором независним од такта осцилатора. То је довољно да се напон напајања подигне на номиналну вредност и да осцилатор микроконтролера почне производити чисте непригушене осцилације. Након што се ово кашњење заврши, микроконтролер (за сваки случај) чека још 1024 такта осцилатора пре него што почне извршавати програм. 2. Други извор ресета је MCLR пин микроконтролера. Он мора увек бити држан на логичкој јединици. Обично се то реализује повезивањем са напоном напајања преко отпорника од 10kΩ. При довођењу логичке 0 на овај пин (спајање са масом), микроконтролер се ресетује. За сваки случај у улазном степену овог пина постављен је Шмитов окидач који има улогу филтрирања слабих импулса, који би могли проузроковати нехотични ресет микроконтролера. 3. Последњи извор ресета је поменут у делу са WDT.

Page 17: Obrtomer digitalni

ОсцилаторМикроконтролер за свој правилан рад мора имати тачно подешене тактне импулсе. Они се добијају из осцилатора.

1.

Сл.8Најјефтинији је RC осцилатор, коришћен у досадашњим шемама. Састоји се

само од кондензатора и отпорника. У таблици су дате вредности отпорности и капацитивности за добијање жељених фреквенција.

2. Уколико је битна стабилна фреквенција а и цена PIC16F628A, добар избор би био кристални осцилатор до 4MHz.

Сл.9

Page 18: Obrtomer digitalni

Отпорник је потребан само за ретке типове кристала. За изузетно стабилну

фреквенцију могу се уместо обичних користити OCXO (eng. Oven Controlled Xtal Oscillator) кристали који у истом кућишту имају кристал, грејач и термостат. За напајање грејача потребно је довести спољни извор.

3.

Сл.10

Керамички осцилатор обично је заједно са кондензаторима спакован у заједничко тропинско кућиште. Такви елементи називају се керамички резонатори.

LCD – појамLCD (Liquid Crystal Display). Цифре на LCD-у састоје се (као и код LED дисплеја) од сегмената. Постоје две опште врсте ових дисплеја. Алфанумерички и графички. На алфанумеричким се могу приказати једино слова и бројеви а на графичким било шта. Иако се дисплеји могу разликовати по броју и распореду ћелија, употребљеним фонтовима за карактере, врсти, начину и боји позадинског осветљења, њихово повезивање на микроконтролер је прилично стандардизовано. 14 пина користи се за управљање LCD-ом, а још 2 пина за позадинско осветљење. Она могу бити у истом реду са осталим пиновима, или посебно издвојена. Могуће је наћи и LCD без позадинског осветљења, али са 16 пинова. При томе задња два пина (15. и 16.) нису повезана.

Сл.11

Page 19: Obrtomer digitalni

Пинови LCD-а могу бити постављени у једном (16*1) или у два (8*2) реда. Обично су бројевима обележени бар крајњи пинови. На LCD-у на слици видите један ред пинова. Пинови 15 и 16 повезани су (одоздо) на LED као извор позадинског светла (бели правоугаоник са десне стране).

Enable (стартни) пин можете сматрати пином за искључење LCD-а. Док је на њемуприсутна логичка 1, LCD неће реаговати на остале сигнале.

Reed switchОсновни Reed прекидач се састоји од две феромагнетне жице које су херметички затворене унутар стаклене капсуле капсуле. Када су изложене спољном магнетном пољу (било од стране сталног магнета или електромагнетних завојница) под дејством силе магнетног поља се спајају и затварају контакт као на слици.

Page 20: Obrtomer digitalni

Сл.12

Сл.13

Page 21: Obrtomer digitalni

Сл.14Животни век се мери милионима операција при напонима 10-120 V и струјама 10-250 mA. Веома су практични и представљају идеално решење у случајевима када није потребна велика прецизност и када су новчане ограничене.

Сл.15Са дијаграма карактеристике Reed Switc-а се види да након успостављања контакта они настају да осцилују још 2 - 2.5 mS до потпуног успостављања стационарног стања. Међутим најбитнији је период од првих 0.5 mS (Bounce time) јер присуство магнетног поља у том периоду сензор неће правилно регистровати. Период од 0.5 – 2.5 mS утиче једино на животни век прекидача јер осцилације утичу на слабљење сила затезања жица. Значи да избором сензора можемо утицати на проширење опсега мерене величине тј об/мин

Page 22: Obrtomer digitalni

Опис рада

Обртометар је микропроцесорски уређај којим се врши мерење и приказ броја и брзине обртаја. Може се применити и за контролу броја обртаја, детекцију да је погон достигао одређену брзину или да је стао. Уређај користи микроконтролер што омогућава велику прилагодљивост конкрентним потребама. За улаз бројача се може користити микропрекидач или разне врсте сонди: индуктивне, капацитивне, оптички прекидач, оптокаплер. За овај пројекат коришћена је reed switch (жичасти прекидач). Задавање вредности (подешавање полупречника обртог дела мереног уређаја) се врши тастерима на предњој страни уређаја а за приказ се користи LCD дисплеј. Уређај има 3 тастера и један потенциометар:

1. мени – улазак у подешавања 2. (+) – увећање подешаване вредности за 13. (–) – умањење подешаване вредности за 14. контраст – подешавање контраста дисплеја

Сл.16

Page 23: Obrtomer digitalni

Код

////////////***Конфигурација LCD дисплеја***///////////// sbit LCD_RS at RB2_bit; sbit LCD_EN at RB3_bit; sbit LCD_D7 at RB7_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D4 at RB4_bit; // Pin direction sbit LCD_RS_Direction at TRISB2_bit; sbit LCD_EN_Direction at TRISB3_bit; sbit LCD_D7_Direction at TRISB7_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB4_bit; //////////////////////////////////////////////////////////////////////***Definisanje promenljivih***//////////////unsigned V, RPM, x; unsigned short t, tt, m, p, i, ii, oldstate, prekidac; char txt[7]; float k; /////////////////////////////////////////////////////////

void upisi() // Funkcija koja upisuje promenljivu t (vreme) u EEPROM memoriju. { EEPROM_Write(0x00,t); }

void upisi1() // Funkcija koja upisuje promenljivu m (broj magneta) u EEPROM //memoriju. { EEPROM_Write(0x01,m); } void ispisi() // Funkcija koja ispisuje vreme merenja u meniju za podesavanja. { Lcd_Cmd(_Lcd_CLEAR); Lcd_Out(1, 1, "VremeMerenja[s]:"); ByteToStr(t, txt);

Page 24: Obrtomer digitalni

Lcd_Out(2, 1, txt); }

void ispisi1() // Funkcija koja ispisuje broj magneta u meniju za podesavanja. { Lcd_Cmd(_Lcd_CLEAR); Lcd_Out(1, 1, "Broj magneta:"); ByteToStr(m, txt); Lcd_Out(2, 1, txt); }

void ispisi2() // Funkcija koja ispisuje na pocetnom ekranu koje je vreme // izabrano i koliko je postavljeno magneta. { Wordtostr(t, txt); Lcd_Out(2, 4, txt); Lcd_Out(2, 1, "t[s]="); Wordtostr(m, txt); Lcd_Out(2, 12, txt); Lcd_Out(2, 12, "m="); }

void ispisi_brojac() // Funkcija koja ispisuje broj obrtaja na ekranu. { INTCON.GIE=0; Lcd_Out(1, 1, "RPM:"); WordToStr(RPM, txt); Lcd_Out(1, 12, txt); INTCON.GIE=1; }

//////////////////***Interapt rutina***////////////////////////////////////////////void interrupt() { INTCON.GIE=0; //Onemoguci sve prekide. if (INTCON.T0IF==1) //Da li je setovana T0IF zastavica? { //Ako jeste udji u petlju. INTCON.T0IF=0; //"Spusti" T0IF zastavicu. p++; if (p==tt) //Da li je brojac izbrojao potrebno veme? { //Ako jeste udji u petlju. RPM=x*k; //Izracunaj RPM. p=0; x=0; prekidac=1;

Page 25: Obrtomer digitalni

} } if (INTCON.INTF==1) //Da li je rid zica napravila prekid? { //Ako jeste udji u petlju. x++; //Uvecaj x za jedan. INTCON.INTF=0; //"Spusti" INTF zastavicu. DELAY_MS(20); //Sacekaj da se reed switch primi. } INTCON.GIE=1; //Omoguci sve prekide. } ///////////////////////////////////////////////////////////////////////////////////

////////////////***Glavni program***////////////////////void main(){ TRISA = 0xff; // Pinovi 1, 2 i 3 porta A su definisani kao ulazni. TRISB = 0x01; // Pin RBO je definisan kao ulazni. CMCON = 7; // Iskljuci komparatore.

Lcd_Init(); // Inicijalizuj LCD.Lcd_Cmd(_LCD_CURSOR_OFF); // Iskljuci kursor na LCD-u.Lcd_Cmd(_LCD_CLEAR); // Obrisi sve sa LCD-a.OPTION_REG=0b00000111; // ***Konfigurisanje OPTION registra:

// bitovi 0-2: definisanje faktora deljenja preskalera, vremenska konstanta 65,536 ms. // bit 3: preskaler dodeljen slobodnom brojacu TMR0. // bit 5: TMR0 se okida impulsima iz internog oscilatora na svakih 1/4 takta oscilatora. // bit 6: prekid na RBO/INT se okida opadajucom ivicom. // bit 7: ukljuceni pull-up otpornici na portu B.

t = EEPROM_Read(0x00); // Zapamcena vrednost vremena merenja t se cita iz // EEPROM memorije. m = EEPROM_Read(0x01); // Zapamcena vrednost broja magneta m se cita iz // EEPROM memorije.i = 1;ii = 1;prekidac=1;RPM=0;x=0;p=0;k=60/(m*t);tt=t*15;ispisi2();INTCON=0b10110000; //***** Konfigurisanje INTCON registra:

Page 26: Obrtomer digitalni

// bit 4: spoljni prekid na RBO/INT omogucen. // bit 5: omogucen prekid na slobodnom brojacu TMR0. // bit 7: svi prekidi omoguceni.

while (1) //Beskonacna petlja, program ostaje u petlji. { if (porta.f3==0) // Da li je pritisnut taster MENI? Ako jeste udji u petlju. { INTCON.GIE=0; //Onemoguci sve prekide. ISPISI(); //Pozovi funkciju za ispisivanje teksta na displeju. i = 1; ii = 1; DELAY_MS(500); // Sacekaj pola sekunde da se kontakt tastera stabilizije. while(i==1) { if (porta.f1==0) // Da li je pritisnut taster + ? { t++; // Uvecaj vreme merenja za 1. ISPISI(); // Ispisi promenu na displeju. DELAY_MS(200); // Sacekaj 200ms. } if (porta.f2==0) // Da li je pritisnut taster - ? { t--; // Umanji vreme merenja za 1. ISPISI(); // Ispisi promenu na displeju. DELAY_MS(200); // Sacekaj 200ms. } if (porta.f3==0) // Da li je ponovo pritisnut taster MENI? Ako // jeste udji u petlju. { ISPISI1(); // Ispisi novi meni na displeju. DELAY_MS(500); // Sacekaj pola sekunde. while(ii==1) { if (porta.f1==0) // Da li je pritisnut taster + ? { m++; // Uvecaj br. magneta za 1. ISPISI1(); // Ispisi promenu na // displeju. DELAY_MS(200); // Sacekaj 200ms. } if (porta.f2==0) // Da li je pritisnut taster - ? { m--; // Umanji br. magneta za 1. ISPISI1(); // Ispisi promenu na

Page 27: Obrtomer digitalni

// displeju. DELAY_MS(200); // Sacekaj 200ms. } if (porta.f3==0) // Da li je ponovo pritisnut // taster MENI? Ako jeste izadji iz petlje. { ii=0; i=0; DELAY_MS(200); } }

} } i=1; ii=1; upisi(); //Upisi vrednost promenljive t u EEPROM memoriju. upisi1(); //Upisi vrednost promenljive m u EEPROM memoriju. Lcd_Cmd(_LCD_CLEAR); // Obrisi sve sa displeja. prekidac=1; p=0; x=0; k=60/(m*t); tt=t*15; ispisi2(); //Ispisi broj obrtaja i podesavanja na displeju. INTCON.GIE=1; //Omoguci sve prekide. }

if (prekidac==1) //Ako je promenljiva prekidac jednaka jedinici ispisi { //vrednost brojaca na displeju. ISPISI_BROJAC(); PREKIDAC=0; }}}

Page 28: Obrtomer digitalni

Реализација хардвера

Уређај се састоји из следећих елемената:

1.плочице2.електричних елемената неопходних за рад3.кућишта за заштиту и лакше руковање уређајем

1. PCB плочице је приказана на слици испод (са и без елек. елемената):

Сл.17

Израђена је од пертинакса и једнослојна је (проводни водови су само са једне стране) а елек. везе су нанете фото поступком.

Page 29: Obrtomer digitalni

2. На следећој слици је дата електрична шема на којој се виде коришћени елементи:

Сл.18

О микроконтролеру је било речи у претходном тексту, осцилатор је керамички, LCD дисплеј је.... Pull up отпорници су вредности 10K и њихова улога је такође већ објашњена , потенциометар се користи за подешавање контраста дисплеја а као

Page 30: Obrtomer digitalni

детектор спољног прекида употревљена је реед жица. Она успоставља кратак спој када се нађе у близини магнетног поља.

3. На следећим сликама је приказана плочица са елементима унутар кућишта:

Page 31: Obrtomer digitalni

Сл.19 и 20

Софтвер:

- Као програматор је коришћено развојно окружење easy pic5 са пратећим софтвером- Програм је писан у програмском језику mikroC pro

Литература:

- PIC16F628A архитектура http://www.microchip.com/wwwproducts/Devices

- Текстови Воје Антонића обављњни у часопису PC Press http :// www . pcpress . co . rs /

- PIC Tutorial http://www.mstracey.btinternet.co.uk/pictutorial/picmain.htm

-Техничке карактеристике Reed switch-a и принцип рада: http :// www . standexelectronics . com /

http :// www . reed - sensor . com /

http://www.meder.com