PIC mikrokonrollerek alkalmazásechnikája Gyors uasíásvégrehajás OTP rugalmasság Perifériák széles köre PIC16CXX Gyors perifériák, órajel Uasíás-ciklusidő I/O válás üeme Komparálási idõ Inpu Capure Resoluion (wih divide by 16 prescaler) Kis fogyaszás Szabad és sok forráskód Kódvédelem @ 20 MHz 200 ns 200 ns 200 ns 200 ns 50 ns PWM felbonás (8- és 10-bi) 50 ns PWM frekvencia 8-bi 80 KHz 10-bi 20 KHz SCI (USART) Aszinkron sebesség 312.5-KBaud Szinkron sebesség 5000-KBaud SPI Maser adasebesség 5 MHz Slave adasebesség 2.27 MHz A/D konverziós sebesség 16-20 µsec Ada EEPROM Írási idő 10 ms Irási szám 1 M E/W (Typical) Konrollerek alkalmazásechnikája
PIC -mikrokonrollerek Rese áramkör Órageneráor Uasíásszámláló Arimeikai - logikai egység (ALU) Vezérlő egység Közponi egység (CPU) Időzíő/számláló egység Soros I/O Párhuzamos I/O Egyéb Cimzés Programároló Ada ároló PERIFÉRIÁK A mikrokonroller belső felépíése EPROM 512 x 12 12 Uasás regiszer 12 Uasíás dekódoló 8 Lierals 9-11 w PC (f2) Közvelen cím 9 STATUS (f3) 9-11 8 STACK1 STACK2 WDT ki RTCC (f1) RTCC láb Konfigurációs EPROM Oscilláor WATCHDOG kiválszás 2 WDT/RTCC Előoszó CLKOUT Oscilláor vezérlő regiszer Opciós Opció SLEEP regiszer 6 w regiszeről Álalános célú Közvelen RAM cím regiszer 5 FSR (f4) 5-7 4 Ada BUSZ ALU TRIS 5 8 TRIS 6 4 8 w regiszeről w regiszeről TRISA f5 TRISB f6 OSC1 OSC2 MCLR PIC16C56 FELÉPÍTÉSE RA0-RA3 4 RB0-RB7 8 U4 16C54/56 1 RA2 RA1 18 2 RA3 RA0 17 3 RTCC OSC1 16 4 MCLR OSC2/CLKOUT 15 5 VSS (GND) VDD 14 6 RBO RB7 13 7 RB1 RB6 12 8 RB2 RB5 11 9 RB3 RB4 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 U5 RTCC VDD NC VSS NC RA0 RA1 RA2 RA3 RB0 RB1 RB2 RB3 RB4 16C55/57 MCLR 28 OSC 1 27 OSC 2 26 C7 25 C6 24 C5 23 C4 22 C3 21 C2 20 C1 19 C0 18 RB7 17 RB6 16 RB5 15 4 16 15 U2 MCLR OSC1 OSC2 16C84 RA0 RA1 RA2 RA3 RA4 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 17 18 1 2 3 6 7 8 9 10 11 12 13 4 16 15 U1 MCLR OSC1 OSC2 VSS - 5. LÁB, VSS - 14 LÁB 16C71 RA0 RA1 RA2 RA3 RA4 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 17 18 1 2 3 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 PIC 16/17CXX CSALÁD U3 VDD RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 VSS RB0/CAP1 RB1/CAP2 RB2/PWM1 RB3/PWM2 RB4/TCLK12 RB5/TCLK3 RB6 RB7 OSC1 OSC2/CLKOUT 17C42 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 MCLR/VPP VSS RE0/ALE RE1/OE RE2/WR TEST RA0/INT RA1/RT RA2 RA3 RA4/RX/DT RA5/TX/CK 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 Konrollerek alkalmazásechnikája
UTASÍTÁSCIKLUS Az uasíásciklus az órafrekvencia 1/4-e A cikluidõ 200 ns 20 MHz-es óránál, 1 mikrosec 4 MHz-nél Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 OSC1 Q1 Q2 Q3 Q4 OSC2 1 insrucion cycle Megjegyzés:: álalában: Q1 = Dekódolás Q2 = Olvas Q3 = Végrehaj Q4 = Írás Számos 8 bies mikrokonrollernél, az uasiások lehívása és végrehajása sorban egymás uán örénik PIC16CXX pipeline felépíésű, a lehívás és végrehajás álapolja egymás és ezér egyciklusos uasíások vannak 1. MOVLW 55h Fech 1 Execue 1 2. MOVWF PORTB Fech 2 Execue 2 3. CALL SUB_1 Fech 3 Execue 3 4. BSF PORTA,BIT3 Fech 4 Fech SUB_1 Bármelyik program elágazás (pl. GOTO, CALL vagy a PC-be írás) ké ciklusos! Konrollerek alkalmazásechnikája
PIC működeés ÓRAJEL - RESET - PROGRAMOZÁS PIC Uáp PIC Külső órajel PIC OSC1 OSC1 OSC1 OSC2 fosc/4 OSC2 OSC2 LP, XT, HS órajel kialakíás RC órajel kialakíás Külső órajel használaa Órajel generálás PIC konrollereknél RESET kezelés Tápfesz (VDD) V DD Inernal Rese 72 ms BV DD Max BV DD Min MCLR TPWRT V DD BV DD Max BV DD Min Power-up Timer OSC Sar-up Timer TOST Inernal Rese V DD <72ms 72 ms BV DD Max BV DD Min Rese Működés Inernal Rese Brown-Ou védelem 72 ms Ez majdnem mindig elegendő! VDD MCLR PIC Soros programozás Csak 2 láb kell a programozáshoz MCLR/VPP VPP RB6 az órajel bemene VDD VSS RB6 RB7 PIC16CXX VDD VSS Clock Daa/in/ou Command in RB7 az ada be/ki- vagy a parancs bemene Parancsok: - Load daa (adaírás) - Read daa (adaolvasás) - Begin programming (programozás indul) - End programming (programozás vége) - Incremen address (memóriacím növelése) Konrollerek alkalmazásechnikája
PIC16CXX Archiekúra: RISC-ulajdonságú A nagy eljesímény okai: Harvard archiekúra Regiszer fájl szervezés Minden uasíás egyszavas LWI (Long Word Insrucion) Uasíás csõvonal (pipelining) Egyciklusos uasíások Csökkene uasíáskészle Orogonális uasíáskészle 2 4 uasíáslehívás operandus lehívás C P U Program és Ada Memória MAR cím - dekódoló MBR program adaok operandus beírás 7 ALU Neumann felépíésben az uasíások és az adaok közös memóriában helyezkednek el Az áereszőképesség korláozo MBR MBR=Memory Buffer Reg. operandus olvasás uasíás olvasás AC 3 5 6 műv. vezérlés MAR=Memory Address Reg. CU op. PC cím IR 1 (Daa) Memory CPU 8 14 (Program) Memory Harvard felépíés ké külön ároló: egy ada és egy programároló használ Nagyobb aereszőképesség Elérő szélességű ada és programbusz leheséges Veremkezelés PIC16CXX-nél külön 8 x 14 bies hardver verem Verembe rakunk : CALL vagy megszakíás Veremből veszünk: RETURN, RETLW, RETFIE A verem körkörös (las in firs ou) - LIFO Belsõ ada busz <8> 5 8 PCLATH 5 PCH PCL 16 VEREM 8 x 14 Konrollerek alkalmazásechnikája
Miér jó? PIC PROGRAM és ADAT MEMÓRIA HARVARD ARCHITEKTÚRA: különálló ada memória (8 bi) program memória (12-14-16 bi) op code <7> direc daa adr <7> PC (f2) A09 A08 A07-A00 1 8 RETLW STACK1 STACK2 RETLW 0 1 Elsõ lap Második lap 000 0FF 100 1FF 200 2FF 300 3FF 0.5K 1K A PIC 16C56 EPROM memóriája lapozásos echnika! A regiszermező ké részre agozódik. 1.működeő file regiszerek ( belső működéshez és I/O-hoz ) A valósidejű óra / számláló regiszere ( RTCC ) programszámláló ( PC, Program Couner ) állaporegiszer ( Saus Regiser ) I/O regiszer ( I/O Regisers, PORTs ) file regiszer válaszó regiszer ( FSR, File Selec Regiser ) álalános célú regiszerek ( General Purpose Regisers ). 2.További speciális regiszerek szolgálnak az I/O PORT konfigurálására és az előoszó kezelésére. A mikrovezérlő 512 szavas memóriá képes közvelenül megcímezni, ami EPROM-kén alakíoak ki Fájl cím 00 01 02 03 04 05 06 07 0F 10 9 8 7 6 5 4 3 2 1 0 Indirek cím. reg. RTCC PC STATUS FSR PORT A PORT B Álalános célú fájl reg.-ek * Az ALU-n kereszül -a fájl regiszerekből -a fájl regiszerekhez RAM FELÉPÍTÉSE RETLW 10 9 8 7 6 5 4 3 2 1 0 10 9 8 7 6 5 4 3 2 1 0 STACK 1 STACK 2 Álalános 7 6 5 4 3 2 1 0 TRISA TRISB * 10 célú fájl 17 regiszerek (BANK 0) 1F w 5 4 3 2 1 0 OPTION A program memórából Konrollerek alkalmazásechnikája
UTASÍTÁSKÉSZLET Uasíások közvelen címzéssel op-code d f f f f f f f 6-bi művelei kód 1 cél 7-bies regiszer cím = 128 bájos adamemória lap Uasíások állandóval lierál = konsans op-code x x k k k k k k k k 4-bi művelei kód 8-bi lieral érék GOTO, CALL op-code k k k k k k k k k k k 3-bi művelei kód 11-bies célcím = 2K program memória lapmére Speciális uasíások NOP, SLEEP, CLRW OPTIONS, TRIS, CLRWDT 00 0000 x x op-code 8-bi op-code Hogyan árolhaók a program memóriában adaok (állandók)? RETLW uasíás használhaó állandó éréknek W regiszerbe ölésére Nagyon hasznos áblázaoknál CALL TABLE ; W-ben az elolás (able offse) MOVWF PORTA ; W now has able value TABLE ADDWF PC ; W = offse, PC=PC+offse RETLW k0 ; A ábla kezdee RETLW k1 ; RETLW kn ; A ábla vége Konrollerek alkalmazásechnikája
Uasiáskészle - Összefoglaló PIC16CXX Uasíáskészle - Összefoglaló Bye-Oriened Operaion - bájos uasíások No Operaion NOP - Move W o f MOVWF f Clear W CLRW - Clear f CLRF f Subrac W from f SUBWF f,d Decremen f DECF f,d Inclusive OR W and f IORWF f,d AND W and f ANDWF f,d Exclusive OR W and f XORWF f,d Add W and f ADDWF f,d Move f MOVF f,d Complemen f COMF f,d Incremen f INCF f,d Decremen f, skip if zero DECFSZ f,d Roae righ f RRF f,d Roae lef f RLF f,d Swap halves f SWAPF f,d Incremen f, skip if zero INCFSZ f,d Bi-Oriened Operaions - bi uasíások Bi clear f BCF f,b Bi se f BSF f,b Bi es f, skip if clear BTFSC f,b Bi es f, skip if se BTFSS f,b Lieral and Conrol Operaions Konsanskezelő és vezérlő uasíások Go ino sandby mode SLEEP - Clear Wachdog Timer CLRWDT - Reurn, place Lieral in W RETLW k Reurn from inerrup RETFIE - Reurn RETURN - Call Subrouine CALL k Go o address (k is 9 bi) GOTO k Move Lieral o W MOVLW k Inclusive OR Lieral and W IORLW k Add Lieral o W ADDLW k Subrac Lieral from W SUBLW k AND Lieral W ANDLW k Exclusive OR Lieral W XORLW k Jelölések:: Megjegyzés: f = a RAM (file) regiszer címe d = a művele eredménye hova kerül; 0 = W regiszer, 1 = RAM (file) regiszer k = egy 8 bies fix érék (konsans) vagy egy uasíásra muaó cím (ez hoszabb min 8 bi!) A szürkével jelöl uasíások a 16CXX ípusok "új" uasíásai a PIC16C5X ípushoz képes W regiszer Indirec Addr 00h RTCC PC Saus FSR PorA PorB PorC Indirek címre hivakozásnál használ Időzíő/számláló regiszer Uasíásszámláló Program sáusz regiszer Indirek címe aralmaz A por B por C por (ha van) ALU Álalánosan felhasználhaó regiszerek (File regisers) (RAM) (24-72) STATUS WORD REGISZTER (f3) (7) (6) (5) (4) (3) (2) (1) (0) PA2 PA1 PA0 T0 PD Z DC C RESET feléelek: = PA2, PA1, PA0 örlődnek, érékük."0" = Jelzik a RESET oká. = Z, DC, C éréke nem válozik meg. PA0-PA2: lmemória lapválaszás TO: ime ou (wachdog) PD: power down (sleep) Z: zéró bi DC: half carry (4. bien úlcsord.) C: carry Konrollerek alkalmazásechnikája
Illuszráció: PIC program részleek A kivonások (SUBWF and SUBLW) a PIC-eknél egy kicsi másképp használhaók min ahogy megszokuk más 8 bies konrollereknél. A számíás a PIC-eknél (memória - W) módon örénik a (W - memória helye). Pl. Ha W-ből 3-a ki akarunk vonni, és az írjuk: SUBLW 3 valójában 3-ból vonjuk ki a W aralmá A jó megoldás az ADDLW uasíással érjük el a kees komplemens felhasználásával: ADDLW 256-3 vagy ADDLW 253 eseleg ADDLW -3 Emia a W regiszer aralma kees komplemensének képzése: SUBLW 0 uasíással örénhe a szokásos XORLW 0ffh ADDLW 1 uasíások helye. A másik fonos dolog: kivonáskor a carry "nincs kölcsönvéel bikén működik ("NOT borrow"). Azaz ha egy kivonási művele kölcsönvée okoz a carry örlődik!!! (egyébkén 1) Felada: egy báj bijeinek megfordíása ;pl.: 11000000 -ből 00000011 legyen MOVLW 0 ; eredményregiszer (W) = 0 BTFSC NORMAL, 7 IORLW 00000001B BTFSC NORMAL, 6 IORLW 00000010B BTFSC NORMAL, 5 IORLW 00000100B BTFSC NORMAL, 4 IORLW 00001000B BTFSC NORMAL, 3 IORLW 00010000B BTFSC NORMAL, 2 IORLW 00100000B BTFSC NORMAL, 1 IORLW 01000000B BTFSC NORMAL, 0 IORLW 10000000B ; MSb se? ; Se LSb ; bi se? ; Se bi ; bi se? ; Se bi ; bi se? ; Se bi ; bi se? ; Se bi ; bi se? ; Se bi ; bi se? ; Se bi ; bi se? ; Se bi ; az eredmény W-ben, NORMAL válozalan. ; 32 bies regiszer (hh:mh:ml:ll) elolása jobbra 4 biel cblock 0x20 hh ;legmagasabb helyiérékű báj mh ml ll endc shr4 MOVLW 0xf0 ANDWF ll,f SWAPF ll,f SWAPF ml,f ;alsó-felső 4bi csere ANDWF ml,w ;felső (alsó vol) XORWF ml,f ;ml-ben örölni IORWF ll,f ;ll-hez hozzáadni MOVLW 0xf0 SWAPF mh,f ANDWF mh,w XORWF mh,f IORWF ml,f MOVLW 0xf0 SWAPF hh,f ANDWF hh,w XORWF hh,f IORWF mh,f RETURN Konrollerek alkalmazásechnikája
I/O PORT FELÉPÍTÉSE Adabuszról írás Az adabuszhoz W regiszerbõl "TRIS 1" D Q Ada lach CK Q I/O Q Vezérlõ lach Q RESET Olvasás PIC PERIFÉRIÁK Q1 Q2 VDD P N Vss I/O láb - I/O -RTCC -A/D - soros I/O -PWM - capure/ compare - párh.( slave) por -időzíők Az RTCC egyszerűsíe rajza Ada Busz RTCC láb fosc/4 0 (8) RTE 1 Programozhaó előoszó PS2, PS1, PS0 0 1 Belső szinkron órával ( 2 ciklusos késleleés ) RTCC (8) RTS PSA SLEEP (Power-Down) Mód SLEEP uasíással kerül a PIC16CXX SLEEP (power-down) állapoba. Ilyenkor: Minden belső óra és oszcilláor lekapcsol Wachdog Timer, ha engedélyeze, ovább fu a kimenenek konfigurál I/O lábak ovább vezérelnek A/D konverál, ha A/D órajele RC oszc. Ébredés (Wake up): Külső rese (MCLR lába L-re, majd H-ra) Wachdog Timer időúllépése Megszakíás Fogyaszás: 1.5 µa ypical @ 4V Konrollerek alkalmazásechnikája
Példa: Soros adaáviel Clock Daa Csak 11 szó a program!!! 74 uasíás ciklus = 14.6 μs @ 20 MHz Ez megfelel 540 Kbi/sec-nek Egy egyszerű szinkron soros adaávieli program: XMIT MOVLW 08h ; Bi coun MOVWF bi_coun ; XM_LOOP BCF PORTB, bi0 ; 0 Daa pin BCF PORTB, bi1 ; 0 Clock pin RRF XDATA ; Ro righ hrough carry ; XDATA = xmi daa BTFSC STATUS, CARRY ; es carry bi BSF PORTB, bi0 ; 1 Daa pin BSF PORTB, bi1 ; 1 Clock pin DECFSZ bi_coun ; GOTO XM_LOOP ; No done ye BCF PORTB, bi1 ; Clear clock pin Megszakíás - áekinés Akár 12 megszakíás forrás Csak egy megszakíási vekorcím (04H), prioriás programból Megszakíás engedélyezés: globális és egyedi Több megszakíás szundiból ébreszi a konroller Hardver megszakíás késleleés - 3 uasíás ciklus Konrollerek alkalmazásechnikája
Wachdog Timer (WDT) & TMR0 Segí, ha a program elkószál Sajá szabadonfuó RC oszcilláors van WDT programból nem kezelheõ, csak a CLRWDT uasíással, ami örli WDT úlcsordulás reszeeli és újraindíja a konroller Programozhaó időaram (ime-ou period): 18 ms-ól 2.5 sec-ig SLEEP-ben is működik. A úlcsordulás felébreszi a CPU- RC oscillaor "CLRWDT" Rese 8 bies számláló Uóoszó Túlcsordulás reseeli a chip-e WDT egedélyezés/ilása a programozhaó bizosíékkal (WDT_ON/OFF) Egyszerű 8 bies számláló Mivel sajá belső RC oszcilláor működei, ezér krisályhibá is jelez Olvashaó és írhaó TMR0 (or RTCC) Túlcsordulásakor megszakíás generál Az előoszója programozhaó Időzíőkén: Számlálókén: Az órajel frekvencia: OSC/4 (5 MHz @ 20 MHz-es konroller órajelnél inkremenálódik, programozhaó az élválás, amire lép (fel- vagy lefuó Elõoszóval a külsõ órajel 50 Mhz-ig mehe külső órajel bemene belsõ órajel 8-bies előoszó megszakíás úlcsorduláskor 8-bies idõzíõ/száml. Konrollerek alkalmazásechnikája
16-bies szaámláló/időzíő, 3 bies előszó ( 1, 2,4,8) Aszinkron számláló mód Sleep ideje ala is működik Ha TMR1 úlcsordul, ébreszi a processzor (külső órajel lépei) LP oszcilláor TMR1&2 Timer 1 (TMR1) Direk 32 KHz - 200 KHz kvarc működés RC0 és RC1-en kereszül SLEEP módban is fu az idő A CCP capure és comparáor (CCP) modul(ok) időalapja Overflow inerrup RC0/ T1OSO/ T1CKI RC1/ T1OSI/ CCP2 TMR1H T1OSC TMR1L T10SCEN OSC/4 Enable Inernal Oscillaor Clock TMR10N on/off 1 0 TMR1CS T1INSYNC Prescaler 1, 2, 4, 8 2 TICKPS <10> Synchronized clock inpu Synchronize de Sleep inpu Ha T1OSCEN örölve van, akkor az inverer és az ellenállás kikapcsolódik. (Nincs fogyaszás) 0 1 8 bies időzíő 4 bies előoszó ( 1, 4, 16) Timer 2 (TMR2) 4 bies uóoszó ( 1 o 16) - Az uóoszó úlcsordulása megszakíás okoz A Szinkron Soros Por (SSP) modul baud-rae generáora Timer2 oupu* Timer2 inerrup TMR2IF OSC/4 Prescaler 1, 4, 16 TMR2 2 Comparaor EQ Posscaler 1:1 1:16 Period 4 * TMR2 oupu can be sofware seleced by he SSP module as baud clock. Konrollerek alkalmazásechnikája
A/D konverer modul: A/D - Max 8 analog bemene muliplexelődik egy A/D konvererre - Minavevő-aró aralmaz - 11 µs-os minavéeli idő (10K forrás impedanciánál) - 16 µsec konverziós idõ csaornánkén (20 µsec PIC16C71-nél) - 8 bies felbonás (±1 LSB accuracy (±2 LSB @ VDD=3V - A/D konverzió sleep ala. A/D kész ébreszhei a processzor -Külső referencia bemene, VREF - Bemenő feszülség aromány: VSS-VREF A por lábai programból konfigurálhaók (analóg vagy digiális bemene Az analóg bemeneeknek konfigurál lábak digiális kimenekén is működhenek ha a TRIS bijeike öröljük Digiális bemenekén konfigurál lábra analóg feszülsége éve, a bemenei puffer árama mia úlerhelődhe CSH<2:0> A/D Converer Vref (Reference volage) Vin (Inpu volage) PCFG<2:0> VDD 000 or 010 or 100 001 or 011 or 101 111 110 101 000 001 010 011 100 Inpu channel mux RE2/AIN7 RE1/AIN6 RE0/AIN5 RA0/AIN0 RA1/AIN1 RA2/AIN2 RA3/AIN3/V REF RA5/AIN4 V DD Sampling swich R S RA x V T = 0.6V Ric = 1Kž SS R SS V A Cpin 5 pf V T = 0.6V I leakage ±500nA Chold = DAC capaciance 51.2 pf V SS Konrollerek alkalmazásechnikája
ANALÓG KOMPARÁTOR 2 analóg komparáor van egy okban Programozhaó referencia feszülség 8 programozhaó működési mód (rese komparáor, kikapcsolva, ké függelen komparáor, közös referenciájú, sb.) Komparáor I/O muliplexelve van a digial I/O-val Komparáor kimene megszakíás okozha, és ez ébreszhei a oko sleep-ből 16 agból áll V REN 8R R R R R 8R V RR V REF 16:1 analog mux V R3 V R0 V REF 16 lépésből álló feszülsége ad ki V REN kapcsolja (ON/OFF) a feszülsége a referencia áramkörre D/A áalakíónak használhaó Konrollerek alkalmazásechnikája
EEPROM SSP DOUT DIN CLK CS Serial EEPROM 93LCXX PIC16CXX 93LCXX család 3(4)-vezeékes SPI inerfészű Max. 16Kbi EEPROM Egyszerű ruin 20 sor!!! SSP SCL SDA I 2 C Bus Serial EEPROM PIC16CXX 24LCXX 24LCXX család 2-vezeékes 2 IC busz használ Maximum 64 Kbi EEPROM Program: 100 sor Több periféria eseén jó válaszás Konrollerek alkalmazásechnikája
Capure/Compare/PWM (CCP) Modul I. Capure: ado feléel eljesülése eseén egy számláló érékének beírása egy regiszerbe TMR1 és TMR2 számlálóka használják Capure mód: TMR1 16 bies éréke a capure regiszerbe íródha: - Minden lefuó élnél - Minden felfuó élnél - Minden 4.-edik felfuó élnél - Minden 16.-adik felfuó élnél Komparáor mód: egy 16-bies éréke TMR1-hez hasonlí, és egyezéskor generálha: - CCPX lábon magas szine, - CCPX lábon alacsony szine, - Szofver megszakíás, vagy - kiválha speciális esemény (TMR1 örlésé, vagy A/D GO bi-jé 1-be) PWM Mód 8 vagy 10-bi felbonás: 80 KHz frekvencia 8-bies felbonásnál 20 KHz frekvencia 10-bies felbonásnál max. 50 nsec-os felbonás (@ 20 MHz, 10 bies felbonás) DIG - BE R R C AN - KI = Uk LP SZŰRŐ Fbw Fpwm Nem kiván harmonikusok Uk=Ub*W/T Ub DC 1/T 3/T 5/T W T FOURIER SPEKTRUM Konrollerek alkalmazásechnikája
Capure/Compare/PWM (CCP) Modul II. Capure Mód RCy/CCPx Prescaler 1, 4, 16 Se CCPxIF inerrup PIR<2> CCPRxH CCPRxL and edge deec Capure Enable TMR1H TMR1L Q's CCPCONx <3:0> Compare Mód Trigger Special even Se CCPxIF inerrup PIR<2> CCPRxH CCPRxL RCy/CCPx Q S R Oupu Logic mach Comparaor TRISC<y> Oupu Enable CCPxCON<3:0> Mode Selec TMR1H TMR1L For CCP1 (if enabled), rese Timer1. For CCP2 (if enabled), rese Timer1 one se GO bi (ADCON0<2>). PWM Mód Duy cycle regisers CCPxCON<5:4> CCPRxL CCPRxH (Slave) Comparaor R Q TMR2 (Noe 1) Comparaor Rese Timer S TRISC<y> RCy/CCPx PR2 Noe: 8-bi imer is concaenaed wih 2-bi inernal Q clock or 2 bis of he prescaler o creae 10-bi ime base. Konrollerek alkalmazásechnikája
SSP modul Képes vagy SPI vagy I 2 C /ACCESS.bus módban működni SPI Mód Max baud üem (20 MHz)-nél Meser 5 MHz SDI Szolga 2.27 MHz Programozhaó baud üem. (OSC 4, 16, 64, vagy TMR2 oupu 2) Programozhaó órajel polariás adás/véelnél SDO SS SCK TRISA<5> Read bi0 Edge Selec SSPM<3:0> I 2 C /ACCESS.bus Mód SSPBUF SSPSR Prescaler 4, 16, 64 Clock selec (SSPM<3:0>) Daa o TX/RX in SSPSR TRISC<3> Inernal daa bus Wrie Shif clock Timer2 oupu 2 Tcy 7 vagy 10 bies cím Sandard (100 KHz) gyors (400 KHz) mód ámogaás Rea d SSPBUF Inernal daa bus Wrie RC3/SCK RC4/SDA A szolga funkciók eljes HW kialakíása HW segíi a meser és a muli-meser funkcióka Shif clock SSPSR MSB Mach deec SSPADD Sar and Sop bi deec Addr Mach Se, Rese S, P bis (SSPSTAT Reg) Konrollerek alkalmazásechnikája
I2C busz Az adaforgalom ké vezeéken örénik. Az SCL vezeék az órajele szolgálaja, az SDA jelű végzi az adaforgalmazás. A közös poenciál a GND összeköés bizosíja. Az SCL és SDA vonalak kimeneei nyio kollekoros megoldásúak, így a vonalak alaphelyzeben magas állapoban vannak. Ennek elônye ebben rejlik, hogy nem csupán ké, hanem számos eszköz köheünk össze. Minden egység lehe Adó ill Vevô. Ezen felül megkülönbözeünk Maser és Slave eszközöke.: A funkciók: TRX = Transmier (adó): Az az egység amelyik adao küld a buszra. RCV = Recevier (vevô): Az az egység amelyik adao fogad a buszról. A szerepek: MST = Maser (meser): Az az egység amelyik kezdeményezi az áviel, az ávielhez az órajele generálja, és be is fejezi az áviel. SLV = Slave (szolga): A meser álal megcímze egység. VCC SDA SCL SDA1 KI SCL1 KI SDA2 KI SCL2 KI SDA1 BE SCL1 BE SDA2 BE SCL2 BE SDA SCL SDA SCL SDA SCL ADAT sabil BIT áviel az I2C buszon S P START STOP START és STOP feléelek S SLAVE KÜLDI AZ ADATOT SLAVE VESZI AZ ACK- OT 1 2 8 9 MASTER ADJA ACK BÁJT áviel az I2C buszon EGYSÉG I. EGYSÉG II. Bi szinű áviel: az eredeileg magas szinen lévő SDA vonalra kerül a 0 vagy 1 szin. Az SCL vonal magas szinje ala érvényes az ada. Az ada csak az SCL vonal alacsony szinje ala válozha. A busz akív és inakív állapoá a START és STOP feléelekkel udjuk definiálni. START feléel akkor lép fel és a busz akív lesz amikor SCL magas állapoában az SDA vonalon egy H-L ámene van. STOP feléel akkor lép fel, amikor SCL magas állapoában az SDA vonalon egy L-H ámene van. A START és STOP állapooka csak a meser generálhaja. A busz akív a START és STOP állapo közö. Konrollerek alkalmazásechnikája
Párhuzamos szolga por Parallel Slave Por Blokkvázlaa Daa bus "WR Por" D CK Q RDx pin Q D One bi of PorD "RD Por" CK Se inerrup flag PSPIF (PIR1<7>) Read TTL RD Chip Selec CS Noe: I/O pins have proecion diodes o V DD and VSS. Wrie WR 8 bies mikroprocesszor adabuszához direk köheő Aszinkron működés (a külvilág felé) A párhuzamos por külső írásakor vagy olvasásakor megszakíás generálódik A Por D és Por E poroka használja Por D Adabusz Por E vezérlő jelek (read, wrie, és chip selec) Konrollerek alkalmazásechnikája
SCI blokkvázlaa SCI modul Inerrup TXIE TX8/9 TXD8 TXREG TXEN SYNC SREN CSRC CREN SPEN TXIF TSR TXDATA RC6/TX/CK TXCLK OERR FERR RC7/RX/DT RSR RXDATA RCCLK TO RC6, RC7 I/O Por Logic RCIF RC8/9 RCD8 RCREG Baud Rae Clock RCIE SPBRG Tcy SCI Aszinkron Mód SCI Szinkron Mód Adás Adó regiszer keős pufferelésű Ha az adó kész az adaávielre, megszakíás generál 8/9 bies adás Véel Vevő regiszer keős pufferelésű Felülírási hiba jelzőbi Kereezési hiba deekálása Minden adabi öbbségi deekálása (zajvédelem) Ha bejö egy eljes ada, megszakíás generál Adás Adó regiszer keős pufferelésű Egymás köveõ bájoka úgy viszi á, hogy leheséges 16 bies szavak áviele, vagy akár hosszabbaka is 8/9 bies adás Véel Vevő regiszer keős pufferelésű 8/9 bies véel Egymás köveõ bájoka úgy veszi, hogy leheséges 16 bies szavak véele, vagy akár hosszabbaké is Konrollerek alkalmazásechnikája
PIC RENDSZERFEJLESZTÉS Parallax-féle uasíáskészle ADD fr,#li ADD fr1,fr2 ADD fr,w ADD W,fr ADDB* fr,bi AND fr,#li AND fr1,fr2 AND fr,w AND W,#li AND W,fr CALL addr8 CJA fr,#li,addr9 CJA fr1,fr2,addr9 CJAE fr,#li,addr9 CJAE fr1,fr2,addr9 CJB fr,#li,addr9 CJB fr1,fr2,addr9 CJBE fr,#li,addr9 CJBE fr1,fr2,addr9 \CJE fr,#li,addr9 CJE fr1,fr2,addr9 CJNE fr,#li,addr9 CJNE fr1,fr2,addr9 CLC CLR fr CLR W CLR WDT CLRB bi CLZ CSA fr,#li CSA fr1,fr2 CSAE fr,#li CSAE fr1,fr2 CSB fr,#li CSB fr1,fr2 CSBE fr,#li CSBE fr1,fr2 CSE fr,#li CSE fr1,fr2 CSNE fr,#li CSNE fr1,fr2 DEC fr DECSZ fr DJNZ fr,addr9 IJNZ fr,addr9 INC fr INCSZ fr JB bi,addr9 JC addr9 JMP addr9 JMP PC+W JMP W JNB bi,addr9 JNC addr9 JNZ addr9 JZ addr9 LCALL* addrll LJMP* addrll LSET* addrll MOV fr,#li MOV fr1,fr2 MOV fr,w MOV OPTION,#li MOV OPTION,fr MOV OPTION,W MOV!por fr,#li MOV!por fr,fr MOV!por fr,w MOV W,#li MOV W,fr MOV W,/fr MOV W,fr-W MOV W,++fr MOV W,--fr MOV W,<<fr MOV W,>>fr MOV W,<>fr MOVB bi1,bi2 MOVB bil,/bi2 MOVSZ W,++fr MOVSZ W,--fr NEG* fr NOP NOT fr NOT W OR fr,#li OR fr1,fr2 OR fr,w OR W,#li OR W,fr RET RETW li,1i,... RL fr RR fr SB bi SC SETB bi SKIP SLEEP SNB bi SNC SNZ STC STZ SUB fr,#li SUB fr1,fr2 SUB fr,w SUBB* fr,bi SWAP fr SZ TEST fr XOR fr,#li XOR fr1,fr2 XOR fr,w XOR W,#li XOR W,fr RENDSZERFEJLESZTÉS.. A KÖVETELMÉNYEK ALAPJÁN A RENDSZERTERV ELKÉSZÍTÉSE A HARDVER KIALAKITÁSA PROGRAMTERVEZÉS KÓDOLÁS A PROGRAM MEGIRÁSA (EDITOR) A PROGRAM FORDITÁSA (ASSEMBLER) RÉSZEK KIPROBÁLÁSA (SZIMULÁTOR) A GÉPI KÓDÚ PROGRAM ÁTVITELE A FEJLESZTENDŐ RENDSZERBE KIPRÓBÁLÁS, TESZTELÉS HIBAKERESÉS VÉGE Jelölések: fr - file regiszer, #li - konsans, W - w regiszer, addr8-8 bies cím, (Aki ismeri a 51-es uasíáskészlee, annak nagyon szembeűnő a hasonlóság.) Parallax szimuláor A RENDSZERFEJLESZTÉS BLOKKVÁZLATA PIC 16C84 Simulaor v2.09 HEX BINARY 0 1 2 3 4 5 6 7 8 9 A B C D E F STACK 1 0000 0000000000000 0 00 00 00 18 00 1F FF 00 00 00 00 00 00 00 00 00 STACK 2 0000 0000000000000 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 OPTION FF 11111111 2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 W 00 00000000 8 00 FF 00 18 00 1F FF 00 00 00 00 00 00 00 00 00 RTCC 00 00000000 9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 PC 0000 0000000000000 LATCH PIN TRI-STATE STATUS 18 00011000 PORT A 1F 00011111 00 00000000 1F 00011111 FSR 00 00000000 PORT B FF 11111111 00 00000000 FF 11111111 INTCON 00 00000000 MCLR RTCC IRP RP1 PR0 TO PD Z DC C WD CYCLES TIME XTAL 1 0 0 0 0 1 1 0 0 0 0.0180 00000000 0.0000000 4mhz 000 mov!ra, #00000000b ;inicializalas 001 002 mov!rb, #0 ;kimene 003 004 inc rb 005 mov szaml,#0ffh F1-HELP F2-BRKPT F3-CLEAR F4-HERE F5-TIME F6-GO F7-STEP F8-NEXT F9-RUN F10-RST Konrollerek alkalmazásechnikája
PARALLAX *.SRC PIC fejleszés és a család PASM MICROCHIP *.ASM MPASM Szövegszerkeszővel forráskód megírása Assemblálás *.LST - szimuláornak PSIM program Clearview ICE *.OBJ - programozónak PIC16Cxx Programmer TrueFligh *.OBJ - szimuláornak MPSIM program PICMASTER ICE *.HEX - programozónak PRO MATE Programmer A fordíás eredménye PIC CSALÁD - Összefoglaló TIPUSOK PIC16C5X PIC16CXX PIC17CXX Uasíáshossz (bi): 12 14 16 Jellemzők 54 54A R54 55 56 57 57A 58A 61 64 71 74 84 42 SEBESSÉG 20 20 20 20 20 20 20 20 20 20 20 20 10 20 EPROM 512 512 512 1K 2K 2K 1K 2K 1K 4K 2K ROM 512 2K EEPROM 1K RAM 25 25 25 25 25 72 72 72 36 128 36 192 36 232 EEPROM 64 IDŐZÍTŐK 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 1+WDT 3+WDT 1+WDT 3+WDT 1+WDT 4+WDT CAPTURE/COM- PARE/PWM 1 2 2 SOROS PORT SPI/I2C SCI PÁRHUZAMOS SLAVE PORT IGEN IGEN 8 bies A/D 4 8 MEGSZAKÍTÁ- SOK 3 8 4 12 4 11 I/O vonalak 12 12 12 20 12 20 20 12 13 33 13 33 13 33 Tápfesz (V) 2.5-6.2 2.5-6.2 2.0-6.2 2.5-6.2 2.5-6.2 2.5-6.2 2.5-6.2 2.5-6.2 3.0-6.0 2.5-6.0 3.0-6.0 3.0-6.0 2.0-6.0 4.5-5.5 Uasíásszám 33 33 33 33 33 33 33 33 35 35 35 35 35 55 Konrollerek alkalmazásechnikája
PIC alkalmazások I. Bizonsági rendszer Keypad PIC16CXX Opional LED Saus Indicaors LCD 88:88 I/O PorB SSP I/O SE 2 Pulse/ Tone Dialer Nonvolaile Parameer Sorage Phone Line Zone Devices Zone Conrol Relays Sae I/O I/O I/O I/O I/O I/O Beacon Freq Piezo Pulse RF XMT/ RCV Xenon/ Halogen Flasher Alarm RF Comms o all peripheral devices via addressable proocol Soros EEPROM illeszése BASIC STAMP I. SSP PIC16CXX DOUT DIN CLK CS Serial EEPROM 93LCXX 93LCXX EEPROM 3-vezeékes inerfész 16K-64k bies EEPROM Egyszerű szofver 20 kódsor Vcc Ada 4.7K Foglalság jelzõ 1 8 CS Vcc 2 7 CLK NC 3 6 DI ORG 4 5 DO Vss 93LC56 1 18 RA2 RA1 4.7K 2 17 RA3 RA0 3 16 RTCC OSC1 RESET 4 15 áramkör MCLR OSC2 5 14 GND Vss PIC Vdd +5V 6 16C56 13 RB0 RB7 7 XT 12 RB1 RB6 8 11 RB2 RB5 9 10 RB3 RB4 I/O PORT-ok 1 2 3 PC felé Konrollerek alkalmazásechnikája
PIC alkalmazások II. BASIC STAMP II TCS1 TELCSAT P1 1 6 2 7 3 8 4 9 5 PC-SOROS J1 DC BE 5V-15V DC 1 2 3 4 23 21 24 22 U1 SOUT SIN ATN VSS VSS VDD VIN RES BS2 P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 I/O CSATLAKOZO JP1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 10*2 BERG Vdd 4 JELCSOPORT: SOROS PORT0 TAP PORT1 PIC16C62X Tölheő elep L O A D - + V REF - + FESZÜLTSÉG FIGYELÉS TÖLTÉS FIGYELÉS I/O TÖLTÉS ENGEDÉLYEZÉS TÖLTŐ Alkalmazás: akkuölő Konrollerek alkalmazásechnikája
PIC16/17 mikrokonrollerek Hardver áekinés Harvard archiekúra, külön program és adamemória Kis áramfelvéel (15 ma ipikusan 3V, 32 KHz-nél) Teljes saikus kialakíás Kisfogyaszású SLEEP (szundi) üzemmód (< 1 ma 3V-nál) Minden uasíás egyszavas Minden uasíás (kivéve az ugrások) egy ciklusú Wachdog időzíő belső RC oszcilláorral Kódvédelem A digiális I/O vonalak nagy meghajó/nyelő árama (25 ma) Beépíe resze, feszülségcsökkenés figyelő (brown-ou) P E R I F É R I Á K 4 Duál 10-bi / 20 KHz, 8-bi / 80 KHz PWM 4 8-bies max 8 csaornás, 26 msec konverziós idejű SAR A/D 4 16-bies 16 csaornás inegráló A/D 4 Duál 5 mv-os ofszeű komparáor 4 8-bies DAC 4 Belső hőmérésékle érzékelő 4 Belső feszülség referencia 4 Belső oszcilláor 4 116 pixeles 32 X 4 muliplexel LCD meghajó 4 8/9-bies soros USART 4 Telepes óra 4 Duál 16-bies 200 nsec-os capure regiszer 4 Duál 16-bies 200 nsec-os komparáor kimene 4 SPI / I 2 C busz illeszés 4 Párhuzamos slave por 4 64 bájos EEPROM adamemória Konrollerek alkalmazásechnikája
MPLAB fejlesző rendszer Compile Assemble MPASM / MP-C 2 Simulae MPLAB-Sim 1 Program PRO MATE PICSTART Edi Projec MPLAB 4 3 Emulae PICMASTER Fejleszés lépései o o o o Hardver és szofver ervezés Programírás (ediálás) (forráskód készíése) Gépi kód (árgykód) előállíása assembler, compiler program jóságának ellenőrzése szimuláor (program) emuláor (hardver) programozó Konrollerek alkalmazásechnikája
MPASM univerzális assembler Jellemzői l l l l l l l Univerzális assembler minden PIC16/17 ípushoz Windows ala fuahaó Makrózási leheőség l Szring helyeesíő makró (C sílusú #define) l Kód makró Feléeles assemblálás Include fájlok használaa C sílusú kifejezés kezelés Több szabványos Inel hex formáum generálása o o o o Fájlok lérehozása Auomaikus assemblálás a MAKE projek módszerrel (MPLAB) Gépi kód generálása a programozók és emuláorok számára A bemene: *.ASM forrásfájl A kimene: *.HEX fájl (programozó, emuláor, szimuláor számára) *.LST fájl lisához *.ERR hibafájl *.COD fájl a szimuláor, emuláor szimbólumokhoz Konrollerek alkalmazásechnikája
P MPASM univerzális assembler Lis Direkívák Minden parancssorban megadhaó direkíva az.asm fájl LIST kulcsszava uán is megadhaó Szinakszis: LIST <OPTION>=<VALUE>,... Opció Defaul érék Leírás Nincs Processzor ípus-megadni köelező! 16C54, 17C42, ec.. E ON Eng./Tilás Hiba fájl generálás L ON Eng./Tilás Lisa fájl generálás M ON Eng./Tilás Makró kierjeszés C ON Eng./Tilás Kis/nagybeű megkülönb. Q OFF Eng./Tilás hibaüzeneek kijelzése R HEX Radix definiálása (HEX,DEC,OCT) X OFF Eng./Tilás kereszreferencia fájl generálás F INHX8M HEX oupu fájl formáum INHX8M használ a MCHIP-nél Példa: LIST P=16C74... END Megj.: Processzor P=<proc> mindig az első sor END mindig az uolsó sor Konrollerek alkalmazásechnikája
MPASM univerzális assembler Include direkíva Speciális funkcóju regiszereke, (STATUS, PORTok, sb.) a Processor Definiion include fájlokban kell megadni, pl.: P16C74A.INC P17C44.INC A felhasználói könyvárak, szubruinok szinén include fájlba helyezheők Assembler az include fájloka úgy kezeli, min forráskódo Szinakika: #include <pah><filename.inc> #include C:\MPLAB\P16C74.INC A proceszor az #include elő kell definiálni ORG, CBLOCK, EQU direkívák ORG: Beállíja a program kezdőcímé ORG 0x04 ; a köveekező uasíás 4H címen lesz EQU: Érékhez szimbólumo rendel, adamemória címek helye szimbólumok használhaók COUNT EQU 0x020 ; COUNT használhaó 20H című regiszer helye INPULSES EQU 0x021 ; INPULSES használhaó 21H című reg. helye CBLOCK: Szimbólumömbö definiál, jól használhaó regiszerek megadására CBLOCK 0x20 COUNT INPULSES ENDC ; A definíció a 20H című regiszernél kezdődik ; COUNT a 20H cimű fájlregiszer használja ; INPULSES pedig a 21H- Konrollerek alkalmazásechnikája
MPASM univerzális assembler Konfigurációs biek direkíva Oszcilláor ípus, kódvédelem, WDT beállíása CONFIG direkíva állíja be a bieke, mikor Processzor definíció - pl. P16C74.INC használjuk Csak az eszközben megalálhaó biek definiálása A konfigurációs biek közö a & karaker kell használni Például: PIC16C54 - XT oszcilláor, WDT off, CP on, IDLOCS = 1234 #include P16C5X.INC CONFIG _XT_OSC & _WDT_OFF & _CP_ON IDLOCS 1234 Példaprogram: ADVGENIC.ASM Szöveg árolása Az alkalmazásokban sokszor kell szövegeke megjeleníeni A szövegeke RETLW uasíásoka aralmazó áblázaokban ároljuk DT direkíva (define able) minden szövegkaraker elé eszi a RETLW uasíás: DT Hello ; Hello szöveg árolása Ami azonos a kövekezővel: RETLW H RETLW e RETLW l RETLW l RETLW o Konrollerek alkalmazásechnikája
MPASM univerzális assembler MACRO, ENDM direkívák l l 6 Felhasználó álal definiál uasíás soroza forrásszövegbe illeszése 6 Makrók előnyei: 6 Gyakran használ megoldások kövekezees alkalmazása 6 A forráskód egyszerűbb módosíhaósága 6 Könyebb eszelheőség 6 Használa elő kell definiálni!!! Szinakszis: Definíció: <macro_name> MACRO [<arg1>,...,<argn>]... ENDM Használa: <macro_name> [<arg1>,..., <argn>] l Pl.: LEDon MACRO ; ledon makró megadása BSF PORTA,1 ; LED világí ENDM... LEDon ; LED be, makróhívás Feléeles assemblálás A forráskód feléelől függően fordíhaó Moduláris programírás esz leheővé Szimuláoros hibakeresés IF - Ezzel kezdődika feléeles blokk Szinakszis: IF <expr> ENDIF - a feléeles blokk vége ENDIF Konrollerek alkalmazásechnikája
MPLAB-SIM o Univerzális szimuláor PIC16/17 családhoz o PC Windows és MPLAB-kompaibilis o Diszkré esemény, uasíás alapú szimuláció o Teljes forrásszinű hibakeresés (debugging) o Korláok nélküli összee örésponok o Megszakíás és perifériaműködés szimulációja (A/D és soros I/O nem!) o Simulus fájlok o A DOS alapú MPSIM-e helyeesíi Simulus Fájl 6 Simulus fájlban adhaó meg bármelyik bemene ado időponba örénő gerjeszése 6 Uasíás szinen szimulálja a láb bemenei feléelei 6 MPLAB-ban <FILENAME>.STI fájl szerkeszése 6 Meg kell adni a poro, idő, állapoo 6 Szinakszis: 6 STEP <PORT#> <PORT#> 6 <TIME> <VALUE> <VALUE> 6 Például: STEP RA0 RA1! Pordefiniálás 3 0 1! 3. lépésnél, RA0=0, RA1=1 12 1 1! 12. lépésnél, RA0=1, RA1=1 Konrollerek alkalmazásechnikája
MPLAB-SIM Billenyű és időpon bemenei gerjeszés Aszinkron, billenyű megnyomáshoz rendel bemene Funkcióbillenyű I/O láb állapohoz rendelése Mikor a Simulus Dialog dobozban egy gombo megnyomunk, az I/O láb állapoo vál, az állapook: High - magas Low - alacsony Pulse - impulzus Toggle - ellenéére vál Szinkron ismélődő órajel esemény bemene I/O lábhoz óra rendelheő Frekvenciája, periódusideje válaszhaó Állapoválás regiszer fájllal Regiser Simulus új regiszeréréke öl a regiszerekbe, mikor egy ado címe elérünk Perifériamodulok szimulálásakor hasznos Pl. az A/D áalakíás eredményé aralmazó ADRES reigszer aralmá egy fájlból öljük, mikor kiolvassuk a aralmá Példaprogram: ADVAL.INJ: 0x16 Első híváskor 16 HEX-e öl 0x84 Másodikra 84 HEX... sb. Konrollerek alkalmazásechnikája
MPLAB-SIM Trace (nyomköveés) fájl A nyomköveés során fájlban árolhajuk el az uasíásoka és a regiszerek állapoá A fájl a szimuláor hozza lére és öbbek közö aralmazza: Lépésszám A sopper álal muao időpono Megválozo regiszer érékeke A nyomköveés adaai a képernyőn fognak megjelenni és egy generál ASCII szövegfájlba kerülnek Példaprogram: ADVSTIM.ASM Konrollerek alkalmazásechnikája
Programozás Archiekúra A nagy eljesímény okai: Harvard archiekúra Minden uasíás egyszavas (Long word) Egyciklusos uasíások Uasíás vonal (pipelining ) Redukál uasíáskészle Szofver archiekúra: Program memórai lapozása (paging) nagy programoknál Fájlregiszer bankválás (banking) nagy SRAM eseén Ugró uasíások 2 ciklus hosszúak Művelei kód és operandus egy program-szóban Programszó hossza ípusfüggő: 16C5XX = 12 bi, 16CXXX = 14 bi, 17CXXX = 16 bi Bennfoglal uasíásra példa: MOVLW #imm<8> 1100XX imm<8> Közvelen címzésre példa: MOVWF #faddr<7> 0000001 faddr<7> Programvezérlő uasíásra példa: GOTO #locaion<11> 101 locaion<11> Konrollerek alkalmazásechnikája
Programozás Lap / Bank haárok PIC16/17 Family Word Size (Bis) Code Page Boundary (Words) Curren Max code Size (Words) Regiser Bank Boundary (Byes) Curren Max RAM Size (Byes) 16C5XX 12 512 2K 32 73 16CXXX 14 2048 4K 128 192 17CXXX 16 8192 8K 256 454 Program memória lapozás (Paging) o A lapozó biek éréke haározza meg az akív lapo o A lapozásra CSAK akkor kell figyelni, ha CALL vagy GOTO uasíás hajunk végre o A lapozó bieke CSAK akkor kell módosíanai, ha más lapra ugrunk o Lap biek definiálják az akuális lapo o Uasíások, amelyeknél a lapozó biekre ekineel kell lenni: o GOTO <address (0...8 bi) > o CALL <address (PC8=0)> o <Uasíás> PCL,F ; e.g. ADDWF PCL,F (PC8=0) o Verembe csak PC alsó 8 bije kerül Konrollerek alkalmazásechnikája
Programozás ADDWF PCL címzés ADDWF PCL F nyolc bies (256 szavas) címaromány fog á, és mivel PC8=0, ezér csak a program memória lapok első 256 szavas részére hivakozhaunk PIC16C5XX-nél PA0, PA1 haározza meg az akuális lapo, de CALL és számío PC eseén: PC 8- bije örlődik A célcím a lap első 256 címe lehe PIC16CXXX/17CXXX-nél, PCLATH használhaó a felső címekre Célcím akárhol lehe Olyan ábláknál amelyek álépik a 256 szavas laphaár PCLATH-o állíani kell Konrollerek alkalmazásechnikája
Programozás PIC16CXXX Program-memória érkép PCLATH<4:3>=00 RESET 0 INTERRUPT 4 Page 0 7FFh PCLATH<4:3>=01 800h PCLATH<4:3>=10 1000h Page 2 17FFh l l l PCLATH<4:3>=11 l 1800h l Maximum 8K szó (13 bi) program memória. Jelenlegi ípusok kapacíása: 4K 4 darab 2K szavas lap (11 bi) Lap válás: PCLATH<4:3> Rese vekor: 0000h Megszakíás vekor: 0004h Page 1 Page 3 FFFh 1FFFh Példaprogram: ADVPAGE.ASM Konrollerek alkalmazásechnikája
Programozás Adamemória lapjai: a bankok RP1,0 Opkódból 8 7 6 0 Bank Selec 0 0 0 1 1 0 1 1 0 4 darab 128 bájos adamemória bank Speciális Funkcióju Regiszerek (SFR) ebben a RAM-ban vannak Bankok kiválaszása a Sáusz Regiszer RP0 és RP1 bijeivel örénik Bank 0 Bank 1 Bank 2 Bank 3 Cím válaszás 7F Konrollerek alkalmazásechnikája
Programozás Közvee memória bank kezelés Indirek címzés IRP FSR-bõl Az indirek címzendő banko a Saus regiszer IRP bije haározza meg INDF 0 8 7 Bank Selec 0 0 1 Az INDF regiszerrel végze műveleeke az FSR regiszer álal muao adaokkal hajjuk végre Bank 0 & 1 Bank 2 & 3 kiválaszo cím 7F Példaprogram:ADVBANK.ASM Konrollerek alkalmazásechnikája
Programozás RAM kioszás (Allokáció) A közvelenül címze regiszereke a 0-ás Bankban célszerű arani Adasrukúráka, szofver verme, és más közveeen (FSR-en) kereszül címze regiszereke az 1-es Bank-ba célszerű árolni Más ovábbi bankválás nem szükséges (kivéve a perifériák inicializálásá) ; Bank 0 Direk regiszerek CBLOCK 0x20 COUNTLO COUNTHI SWSTACKPTR... ENDC ; Bank 1 Indirek regiszerek SWSTACKSTART EQU 0xA0 Példa szofver veremre Bejövő, vagy kimenő adaok árolására használhaó Lérehozhaó egy szofver sack ada srukúra iniswsack MOVLW SWSTACKSTART ; SW verem kezdőcím W-be MOVWF FSR ; FSR regiszer inicializálása... pushswsack MOVWF INDF ; ada az SW verembe (Push) INCF FSR,F ; FIFO muaó növelése RETURN ; PUSH vége... popswsack DECF FSR,F ; SW verem muaó csökken. MOVF INDF,W ; Ada W-be RETURN ; POP vége Konrollerek alkalmazásechnikája
Programozás PIC16CXXX Tábla kezelés Táblák az ADDWF PCL and RETLW uasíásokkal kezelheők ORG 0x10 ; Page 0 MOVF offse,w ; w = ofsze (elolás) CALL Table... ORG 0x20 ; Page 0 Table ADDWF PCL,F ; hely=tábla kcim + ofsze DT ABCD TableEnd ; Page 0 ; RETLW soroza def. Ugróáblák Különféle bemenő feléelől függő ruinra való ugrásra használhaó Hasonló az előbbi áblához GOTO uasíás van a CALL és RETLW helye Használaával a veremszinek száma csökkenheő MOVF GOTO... jump_able ADDWF PCL, F GOTO GOTO GOTO Szabályok: NEXT_STATE,W jump_able ; PC felső felé inicializáni kell sae0_rouine sae1_rouine sae2_rouine PCL- az ADDWF PCL uasíással módosíjuk ADDWF PCL eredménye nem léphei á a 8-bies címhaár (lapok mia!) PIC16C5XX - PA0 és PA1 inicializálandó PIC16CXXX - PCLATH inicializálandó PIC17CXXX - PCLATH inicializálhaó a MOVFP PCL,PCL uasíással Példa: ADVJUMP.ASM Konrollerek alkalmazásechnikája
Period D.C. Programozás Period D.C. Uál=U*(D.C./Period) CCP PWM mód Pédaprogram: ADVPWM.ASM l l l A periódus végén a kimene magas lesz A kiölési ciklus (Duy Cycle (D.C.)) végén a kimene alacsony szíinű lesz A periódus végén egy új kiölési ényező ölheő PWM min D/A áalakíó V ou PIC16 CXXX R C V ou org CLRF MOVF CALL MOVWF GOTO OupuVolage ADDWF RETLW 0x10 PCLATH Vou,W OupuVolage CCPR1L Coninue PCL,F 0x00 ; Vss RETLW 0x3F ; (Vdd*255) / 64 RETLW 0x7F ; (Vdd*255) / 127 RETLW 0xBF ; (Vdd*255) / 191 RETLW 0xFF ; Vdd f JEL Frekvencia f PWM Konrollerek alkalmazásechnikája
Programozás Paraméer áadás l Szubruinoknál szükséges a válozók érékeinek az áadása l Maemaikai ruinoknál, pl. szorzás és oszás l Soros adó és vevő ruinoknál pl. PUTCHAR vagy GETCHAR l Globális válozók l Közvelen címzésű regiszerek használaa l A legjobb néhány paraméer eseén l W regiszer l Egy paraméer áadásához a W- használjuk l A paraméer W-be esszük l Meghívjuk a szubruin. PÉLDA: MOVLW M ; ASCII M karaker W-be CALL puchar ; Karaker a kijelzőre l FSR - összee adasrukúrákhoz l Nagyszámú paraméer eseén l Csak a kezdőcíme kell áadni l FSR használhaó az első adaelemre muaónak. Példa: CLK_MIN_LD EQU 0x0C ALM_MIN_LD EQU 0x10 CLK_MIN_HD EQU 0x0D ALM_MIN_HD EQU 0x11 CLK_HOUR_LD EQU 0x0E ALM_HOUR_LD EQU 0x12 CLK_HOUR_HD EQU 0x0F ALM_HOUR_HD EQU 0x13 MOVLW MOVWF CALL MOVLW MOVWF CALL CLK_MIN_LD FSR inc_ime ALM_MIN_LD FSR inc_ime Konrollerek alkalmazásechnikája
Programozás PIC16CXXX megszakíások Több belső és külső megszakíás forrás A megszakíásoknak csak egy vekorcíme van (04h) A prioriás és azonosíás programból leheséges Globális és egyedi megszakíás engedélyezés Több megszakíás a processzor a szundi (sleep módból ébreszi Megszakíás felismerés 3 uasíásciklus, illeve 4 ciklus külső megszakíásoknál A megszakíás kiszolgálásakor fonos megőrizni a STATUS a W regiszer (valamin PCLATH regiszer ha 4K-s vagy nagyobb memóriájú oko használunk) aralmá. Ruinok a push (menés) és pop (visszaölésre): empw equ 0x20 ;W menése bank 0 & 1-be empsaus equ 0x21 ;STATUS menése bank 0-ba emppclah equ 0x22 ;PCLATH menése bank 0-ba (16c74) ORG 0x04 push movwf empw swapf STATUS,W bcf STATUS,RP0 movwf empsaus movf PCLATH,W movwf emppclah bcf PCLATH,3 pop movf emppclah,w movwf PCLATH bcf STATUS,RP0 swapf empsaus,w movwf STATUS swapf empw,f swapf empw,w refie Konrollerek alkalmazásechnikája
Programozás Megszakíások összhasonlíása PIC16CXXX @ 12MHz 1 vagy 2 ciklusú uasíások u.cikl = órajel / 4 ; szó / cikl In_Srv ; 0 / 3 MOVWF empw ; 1 / 1 SWAPF STATUS,W ; 1 / 1 BCF STATUS,RP0 ; 1 / 1 MOVWF empsaus ; 1 / 1... 4 szó a programmemóriában In késl = 3 cikl = 1.0 µs (laency is same for 1 or 2 cycle ins) In adminiszr. = 4 cikl = 1.3 µs Teljes idő = 7 cikl = 2.3 µs MCS-8X51 @ 12 MHz 1...4 ciklusú uasíások u.cikl = órajel / 12 ; báj / cikl In_Srv ; 0 / 3 o 9 PUSH PSW ; 2 / 2 PUSH ACC ; 2 / 2 MOV PSW,#08h ; 3 / 2... 7 báj a programmemóriában In késl (min) = 3 cikl = 3 µs In késl (max) = 9 cikl = 9 µs In adminiszr = 6 cikl = 6 µs Teljes idõ = 9-15 cikl.=9-15µs Többszörös megszakíások kezelése l Az egyes megszakíásforrások engedélyezése/ilása az INTCON, PIE1 és PIE2 regiszerek segíségével leheséges l A megszakíások globális engedélyezése/ilása GIE biel leheséges l A megszakíás kiszolgálásának kezdeekor a hardver örli a GIE bie és a visszaérési címe a verembe rakja l A megszakíási esemény az INTCON, PIR1 és PIR2 regiszerek bijei állíja be l Ezeke programból kell örölni! l RETFIE uasíás GIE- 1 be állíja és verem eején lévő címe a PC-be öli Konrollerek alkalmazásechnikája
Programozás Taszk kezelés Szubruinok ado időközönkéni fuaására használhaó Gyakran a TMR0 imer használják üemadókén Vagy a lekérdezéses (polling) (PIC16C5XX) vagy megszakíásos (PIC16CXXX / PIC17CXXX) echniká lehe használni Taszk kezelés lekérdezéssel PIC16C5XX TMR0 regiszerének olvasása TMR0 akuális és az előző érékének az összehasonlíása Annak meghaározása, hogy melyik bi válozo A válozo bi eszelése alapján a megfelelő aszk (szubruin) hívása MOVF TMR0,W ; TMR0 akuális éréke W-be XORWF PrevTMR0,W ; Nézzük melyik bi válozo... MOVWF ChaTMR0 ; Minden megválozo bi ChaTMR0- ba XORWF PrevTMR0,F ; Az akuális lesz az előző érék... Példaprogram: ADVPOLL.ASM Konrollerek alkalmazásechnikája
Programozás Taszk kezelés megszakíással TMR0 felhasználása periodikus megszakíásra A kövekező aszk számonarása Az időszeleelés felhasználhaó a soros kommunikációra, sb. Ké megvalósíási leheőség: Taszk muaó növelése a megszakíási programban (ISR-Inerrup Service Rouine) A aszk végrehajása az ISR-ben VAGY: Jelzőbiek állíása a aszkmuaó alapján Egy fő programbeli hurokban figyeljük a jelzőbieke és fuajuk a aszko ha kell Ha a imer megszakí, a aszkok az ISR-ben funak Ponos és precíz időzíés bizosí a valós idejű aszkok számára A megszakíási ruin hosszú lesz, ezér rövid aszkok eseén előnyös a használaa Példa: TMR0 megszakí 4 msec-én Billenyűze figyelése 52 mse.-kén Forgaási aszk 1 mp-kén Példaprogram: ADVTASKI.ASM Konrollerek alkalmazásechnikája
Programozás Adabeviel az I/O forgaással Az adabemene az I/O porok LSB (bi 0) vagy az MSB (bi 7) kivezeése RRF uasíás (LSB) vagy RLF uasíás (MSB) a bemene éréké a carry-be olja Ugyanezen RRF vagy RLF uasíások a bieke egy fájl regiszerbe olják RB0 Ada be RRF PORTB,W ; RB0 bi Carrybe RRF DReg,F ; Adabi menése DReg-be Adakiviel forgaással Adakimene az I/O por LSB (bi 0) vagy MSB (bi 7) bije A por öbbi bije csak bemene lehe!!! RRF vagy RLF -el a kimenei bie carry-be RRF ( MSB) vagy RLF (LSB) uasíással a carry-ből a kimenere mozgajuk a bie RB7 RB6 RB5 RB4 RB3 RB2 RB1 bemeneek RRF RLF DReg,F ; Kimenei bi Carry-be PORTB,F; Onnan a kimenere RB0 kimene Konrollerek alkalmazásechnikája
Programozás Soros adaáviel - UART-al A haékony bikezelő és forgaó uasíásokkal egyszerűn valósíhaó meg a szofver UART Fél duplex ruinok a bieke időzíve olják Az ADÓ és VEVŐ ruin összesen csak 50 szó hosszúságú! Az adaávieli sebesség max. 115Kbi/sec lehe Példaprogram: ADVUART.ASM Soros adaáviel - SPI-vel Számos perifériaáramkör használja a 4 vezeékes SPI szinkron soros prookoll A haékony bikezelő és forgaó uasíásokkal egyszerűn valósíhaó meg a szofver SPI A eljes duplex ruinban a kimenei biek egyszerű kiolásával egyszerre örénik a bemenei biek beolása Az ADÓ és VEVŐ ruin összesen csak 17 szó hosszúságú! Az adaávieli sebesség max. 373Kbi/sec lehe Példaprogram: ADVSPI.ASM Konrollerek alkalmazásechnikája
l l Programozás Uasíásszám csökkenése I. Egy uasíás megakaríhaó ké egymásuáni NOP eseén GOTO kövekező uasíás - használjuk NOP GOTO $+1 NOP 2 uasíás, 2 ciklus 1 uasíás, 2 ciklus A célbi meghaározza, hogy az eredmény a W vagy az F(ájl) regiszerbe kerüljön Célszerű az adamozgaás ágondolni Példa: A + B -> A MOVF A,W MOVF B,W ADDWF B,W ADDWF A,F MOVWF A 3 uasíás 2 uasíás Egy bi áviel ké regiszer közö (REGA-ból REGB-be) REGB bi előzees beállíása REGA bi-je eszelése alapján a bie eseleg megválozajuk Porok eseén, ké ciklus hosszúságú válás (glich) leheséges!!! BTFSS REGA,2 BCF REGB,5 BCF REGB,5 BTFSC REGA,2 BTFSC REGA,2 BSF REGB,5 BSF REGB,5 4 uasíás 3 uasíás Konrollerek alkalmazásechnikája
Programozás Uasíásszám csökkenése II. A kimenei bi állíása egyforma ideig arson (szinkronizálás), ha ez fonos LSB vagy MSB eseén a ROTATE uasíás használhaó BTFSC OuBi,0 ; Álépés ha kimene nulla GOTO kim1 ; Ugrás 1-be állíásra NOP ; Egy cikl. késl. a szink. mia BCF PORTA,1 ; Kimenei bi örlése GOTO kimkesz ; végére ugrás kim1 BSF PORTA,1 ; kimenei bi 1 GOTO kimkesz ; Végrehajási idõ szink. mia kimkesz l l Regiszerek hasonlíása A ké folyaás egy GOTO-val Equal.. NoEqual.. MOVF REGB,W ;W aralma REGB-be XORWF REGA,W ; REGA & REGB hasonlíása BTFSS STATUS,Z ; Álép ha REGA=REGB GOTO NoEqual ; Ugrik ha nem egyenlõ További öleek a programok anulmányozása alapján! Konrollerek alkalmazásechnikája
Bombabizos ervezés Wachdog hardver "CLRWDT" RC oszcill. Rese 8-bies számláló Uóoszó Túlcsordulás reszeeli a oko Programelérülés eseén segíhe Sajá belső RC oszcilláor használ WDT programból nem ílhaó! WDT úlcsordulása reszeeli a oko CLRWDT uasíás örli WDT- Programozhaó ime-ou periódus: 18 ms-ól 2.5 másodpercig SLEEP üzemmódban is működik Túlcsorduláskor a CPU felébred Wachdog szofver A wachdog haékonysága függ a felhasználói program jól megírságáól Az egész programban csak egy CLRWDT uasíás használjunk! A CLRWDT uasíás a főhurokba együk Ne együk a CLRWDT- ISR( megszakíási) vagy egyéb szubruinba Olyan minimális WDT úlcsordulási idő válasszunk, ami a fő hurok végrehajási ideje megenged A nem használ memórá ölsük fel a GOTO wdrese uasíás kódjával Konrollerek alkalmazásechnikája
n n n n Bombabizos ervezés Nem használ memória felölése A nem használ memórá ölsük fel a GOTO wdrese uasíás kódjával, ami normál eseben soha nem kerül végrehajásra Ha a PC éréke elromlik, akkor valószínűleg ez az uasíás végrehajódik, és újra indíja a konroller FILL direkíva használhaó a felölésre: FILL (GOTO wdrese), (400h-$) ORG 3FFh wdrese WDT rese örlése Bekapcsoláskor a WDT végrehajaása: n a RAM memória mina ellenőrzése ápfesz. bekapcsoláskor n Ha a mina nincs a RAM-ban: n RAM mina felölése n WDT rese végrehajása Szubruin számlálás n Ké számláló: szubruin hívó és végrehajó számláló n Hívó számláló inkremenálása minden ruinhíváskor n Végrehajó számláló inkremenálása minden szubruin kezdeén n A fő hurok elején a ké számláló egyezőségének a vizsgálaa, ha nem egyformák, akkor WDT rese Példaprogram: ADVRELSW.ASM Konrollerek alkalmazásechnikája
EGY ÉLES FELADAT - DEFINIÁLÁS DIESEL AUTÓKNÁL A MOTOR TÚLPÖRGETÉSE KÁROS A MOTORRA. A FELADAT EGY OLYAN FORDULATSZÁM MÉRŐ KÉSZÍTÉSE, AMELY 1000-5000 FORD/PERC KÖZÖTT 500-AS LÉPÉSENKÉNT EGY LED KIGYUJTÁSÁVAL JELZI AZ AKTUÁLIS FORDULATSZÁMOT. 4000-ES FORDULAT TÚLLÉPÉSE ESETÉN A MEGFELELŐ LEDEKET BEKAPCSOLVA ÉGVE HAGYJA, JELEZVE A TÚLLÉPÉST. AZ ÍGY KIGYÚJTOTT LEDEK TÖRLÉSE CSAK EGY SPECIÁLIS ELEKTRONIKUS KULCCSAL LEHETSÉGES. (Tápfesz. kikapcsolása uán is megőrzi az állapoá!) A KULCS ZÖLD SÁRGA PIROS 1000 1500 2000 2500 3000 3500 4000 4500 5000 KIMENETEK SZÁMA: 9 LED + 2 KULCS BEMENETEK SZÁMA: 1 FORD.SZÁM IMPULZUS, 1 KULCS BEM. EEPROM KELL A TÚLLÉPÉS TÁROLÁSA MIATT 13 I/0 + EEPROM => PIC16C84 REZONATOR +12V 4 MHz C2 C VCC 4 16 15 IC1 7812 5. LAB = GND 14. LAB = VCC U1 RA0 17 RA1 18 MCLR RA2 1 RA3 2 RA4 3 OSC1 OSC2 PIC16C84 RB0 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 VCC C1 C R1 470 R2 470 R3 470 R4 470 R5 470 R6 470 R7 D1 D2 D3 D4 D5 D6 D7 imp. be kodbe kodaki kodbki A B 1 2 U2A 7400 3 4 5 9 10 VCC R10 VCC A + B TÖRLŐ KULCS U2B 6 U2D 12 7400 11 13 U2C 8 7400 7400 470 R8 D8 470 R9 D9 470 Konrollerek alkalmazásechnikája
EGY ÉLES FELADAT - TERVEZÉS MILYEN RÉSZFELADATOKAT KELL MEGOLDANI: ÜZEMKÉPESSÉG ELLENŐRZÉSE FORDULATSZÁM MÉRÉS MÉRT ADATOK ALAPJÁN LED KIJELZÉS TÚLLÉPÉS TÁROLÁSA ÉS KIJELZÉSE TÚLLÉPÉS TÖRLÉSE KULCCSAL INICIALIZÁLÁS PORTOK BEÁLLÍTÁSA ÖSSZES LED KIGYUJTÁSA EGYENKÉNT EEPROMBÓL RAM-BA ÍRÁS FORDULATSZÁM MÉRÉS MÉRÉS ALAPJÁN KIJELZÉS I KÓDSOROZAT KI-BE TÖRLÉS? OK? N N I TÖRLÉS >4000? N I I RAM-BAN? EEPROM KEZELÉSRE VIGYÁZNI!!! NEM RAM!!! N RAM TÁROLÓBA ÍRNI EEPROM-BA ÍRNI JEL ELŐBB (régi) JEL (új) régi XOR új T ÉLFIGYELÉS POZITIV ÉL NEGATÍV ÉL (régi XOR új) AND új figyel mov w,ra and w,#01 ;ra.0.bije a JEL mov uj,w ;első mina elvar mov regi,uj ;uj := regi nop nop mov w,ra and w,#01 ;0.bi a fordszám mov uj,w xor w,regi jz elvar ;regi=uj, nincs válás valas and w,uj ;élválás jó? jz elvar ;nem ;ÉL FELDOLGOZÁSA Konrollerek alkalmazásechnikája