Füvesi Viktor Elektrotechnikai és Elektronikai Tanszék 2008. április 24.
Rövid történeti áttekintés Mikroprocesszor és mikrovezérlő PIC, mint mikrovezérlő Programfejlesztés PIC 16F628 Architektúra Tulajdonságok Regiszterek
1969: a BUSICOM cég segítséget kér az Inteltől a számológép projektűkhöz Martian Hoff ötletére az integrált áramkör feladatát a benne tárolt program határozza meg Federico Faggin játszott nagy szerepet az ötlet gyakorlati megvalósításába 1971: Intel elnyeri a jogot az integrált blokkok árusítására
1971: 4004-es mikroprocesszor (µp) megjelenése Első 4 bites µp 6000 művelet / s 1972: 8008-as µp 8 bites 16 kb memória 45 parancs 300 000 művelet /s
1974: 8080 64kB memória $360 /db 1974: Motorola beszáll a µp üzletbe 8 bites 6800-as processzora főmérnök: Chuck Peddle 1975: WESCON kiállítás MOS Technology $25 árulja 6502-es µp-ait (Intel és Motorola $179)
6502 nagyon népszerű lesz az alacsony árnak köszönhetően 8 bit, 64 kb, 56 utasítás Több számítógépben felhasználják: Apple-1, Atari, Commodore 1976: Zilog kiadja a Z80-at Kompatibilis a 8080-al, nagy számú regiszter, magas órajel
µp = mikroprocesszor µc = mikrovezérlő általános célú FELHASZNÁLÁS vezérlési feladatok bonyolult FELÉPÍTÉS egyszerű sok UTASÍTÁSSZÁM kevés igen BONYOLULT SZÁMÍTÁSOKRA KÉPES nem
Az egy tokban elhelyezett központi egységet, memóriát, ki- és bemeneti egységet és más járulékos áramköröket (perifériákat) is tartalmazó rendszert, egytokos mikroszámítógépnek vagy mikrokontrollernek nevezzük.
Vezérlőjelek Utasításbusz Adatbusz Programmemória (Flash) Óragenerátor CPU Adat sin Cím sin Vezérlő sin Adatmemória I/O elemek Időzítő / számláló RAM Regiszterek SIO PIO Soros portok Párhuzamos portok Számláló bemenetek
8 bitesek: Atmel AVR (ATtiny, ATmega) PIC (16Fxxxx, 18Fxxxx, 30Fxxxx) Silicon Labs (C8051Fxxx) 16 bitesek: főleg a dsp-k (Digitális jelfeldolgozó processzorok) 32 bitesek: ARM magos processzorok PIC32 általában operációs rendszerrel
Programmable Intelligent Computer Microchip Technology Inc. gyártja az egyik legnépszerűbb mikrovezérlő 120 millió eladás évente Vezérlő: 6 80 láb 384b 128kB program memória Viszonylag olcsó és könnyen beszerezhető
RISC (Reduced Instruction Set Computer) Digitális I/O portok Beépített időzítő előosztóval Reset funkció Watchdog Sleep mód Nagy áram leadás és felvétel képessége Külső óra kapcsolási lehetőség RAM (Random Access Memory) EPROM vagy Flash alapú program memória
Harvard architektúra Módisított Harvard architektúra Neumann architektúra Statikus adatokat képes a program memóriában tárolni. (olvasás és írni)
RISC: Reduced Instruction Set Computer Csökkentett utasításkészletű számítógép 35 utasítás tud (PIC esetén) => felfelé kompatibilis memóriaelérés csak load és store műveletek segítségével (aritmetika csak regisztereken végezhető) egyszerű utasítások => egyszerű áramkör egyszerűsített címzési módok minden utasítás ugyanolyan hosszúságú nagyszámú általános célú regiszter az utasításokat lehetőleg 1 órajelciklus alatt hajtsa végre gyors
CISC: Complex Instruction Set Computer Bonyolult utasításkészletű számítógép PRO Minden ASM-ben megírt sor egy utasítás, kisebb programkódok Sokat bíz a hardverra Könnyű programozhatóság Jó memória kezelés CONTRA Bonyolult hardware felépítés Nagyobb átfutási az új architektúra esetén
Know-how Szükséges I/O szám Szükséges perifériák (USART, USB, stb.) Program memória nagysága RAM nagysága EEPROM adatmemória léte Sebesség Fizikai méret Ár
A programfejlesztés célja olyan gépikód és adatsorozat létrehozása, amely alapján az adott mikrokontroller a kívántfeladatot végrehajtja. Feladat egyértelmű megfogalmazása Programszerkezet kialakítása Főprogram Szubrutinok Adatstruktúra
Programozás lépései Magasszintű programnyelven írt program Fordítóprogram (Compiler) Gépi kódba fordított program (Hex) Gépközeli kódba megírt program Fordítóprogram (Assembler) Égető (programmer)
Program tesztelés Program szimuláció Program működésének ellenőrzése számítógépes környezetben Ellenőrzés és tesztelés a gépi utasítások szintjén Nincs szükség a hardver jelenlétére Valós idejű ellenőrzés In-Ciruit-Debugger (ICD) segítségével Lehetőség van a valós időben futó program futásának megállítására Aktuális állapot ellenőrizhető (regisztertartalom)
Valós idejű ellenőrzés emulátorral Utasítások egy speciális áramköri egységgel történik Az egység közvetlenül a fejlesztendő rendszer mikrokontrollerének helyére van dugva ICE In-Circuit-Emulator Valós idejű ellenőrzés a végleges hardveren Monitorprogram használata
ICD használata (soros programozás)
PIC16f84 nagytestvére Nagyobb memória Lábkompatibilitás Max. 20 MHz en üzemel Memória Flash: 2048 x 14bit RAM: 224 x 8 bit EEPROM: 128 x 8 bit
16 I/O pin (2 port) 3 időzítő/számláló 2 db 8-bites (Timer0, Timer2) 1 db 16-bites (Timer1) Analóg komparátor Programozható referencia feszültség PWM modul USART
DIL (dual-in-line) kivitel 3 féle tokozás PDIP SOIC SSOP
Port A Port B
Pin szám Funkció Bemenet típusa Kimenet típusa Leírás 17 18 1 2 RA0 ST CMOS Kétirányú I/O port AN0 AN Analóg komparátor bemenet RA1 ST CMOS Kétirányú I/O port AN1 AN Analóg komparátor bemenet RA2 ST CMOS Kétirányú I/O port AN2 AN Analóg komparátor bemenet VREF AN Szoftveresen vezérlehető VREF kimenet RA3 ST CMOS Kétirányú I/O port AN3 AN Analóg komparátor bemenet CMP1 CMOS Komparátor 1 kimenet ST : Schmitt trigger bement AN: Analóg
Pin szám Funkció Bemenet típusa Kimenet típusa Leírás RA4 ST OD Kétirányú I/O port 3 T0CKI ST TMR0 külső órájának csatlakozója és komparátor kimenet CMP2 OD Komparátor 2 kimenete RA5 ST Bementi vonal 4 MCLR ST Master clear. Alacsony jelszintet kapcsolva a újraindítja az eszközt. VPP HV Programozható feszültség bement RA6 ST CMOS Kétirányú I/O port OSC2 XTAL Oszcillátor kristály csatlakoztatási pont 15 Belső oszcillátor használata esetén az OSC1 láb CLKOUT CMOS frekvenciájának negyedével oszcillál RA7 ST CMOS Kétirányú I/O port 16 OSC1 XTAL Oszcillátor kristály csatlakoztatási pont CLKIN ST Külső óraforrásnak szánt bement
Háromállapotú FET meghajtás Programozható gyenge belső felhúzás (10kΩ ellenállással) Pin szám Funkció Bement típusa Kimenet típusa Leírás 6 RB0 TTL CMOS Kétirányú I/O port INT ST Külső megszakítás lehetséges RB1 TTL CMOS Kétirányúl I/O port. 7 RX ST USART Receive Pin (Fogadó - Olvas) DT ST CMOS Szinkron adat I/O RB2 TTL CMOS Kétirányúl I/O port 8 TX CMOS USART Transmit Pin (Adó - Ír) CK ST CMOS Szinkron órai/o. 9 RB3 TTL CMOS Kétirányúl I/O port CCP1 ST CMOS Capture/Compare/PWM/I/O
Pin szám Funkció Bement típusa Kimenet típusa Leírás 10 RB4 TTL CMOS Kétirányú I/O port. Megszakítás logikai szint változása esetén. PGM ST Alacsony feszültségű programozáshoz. (megszakítás és felhúzó ellenállás letiltva) 11 RB5 TTL CMOS Kétirányú I/O port. Megszakítás logikai szint változása esetén. RB6 TTL CMOS Kétirányú I/O port. Megszakítás logikai szint változása esetén. 12 T1OSO XTAL Timer1 Oszcillátor kimenet T1CKI ST Timer1 óra bement PGC ST Őrajel az ICSP-hez RB7 TTL CMOS Kétirányú I/O port. Megszakítás logikai szint változása esetén. 13 T1OSI XTAL Timer1 óra bement PGD ST CMOS ICSP adatvezetéke
Timer0 Timer1 Timer2 Vref RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7 CCP modul Komparátor USART EEPROM mem Szinkron soros port FSR regiszter STATUS regiszter Cím MUX PCLATH regiszter FLASH Programmemória (2k x 14 bit) Utasítás regiszter Verem PC Programszámláló RAM Adatmemória (224 x 8 bit) Utasítás dekóder Reset áramkörök ALU MUX Belső RC oszcillátor Órajel generátor W regiszter Port B Port A
Timer0 Timer1 Timer2 Vref RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7 CCP modul Komparátor USART EEPROM mem Szinkron soros port FSR regiszter STATUS regiszter Cím MUX FLASH Programmemória (2k x 14 bit) Utasítás regiszter Utasítás dekóder Reset áramkörök Verem PCLATH regiszter PC Programszámláló RAM Adatmemória (224 x 8 bit) ALU MUX ALU Aritmetikai - logikai egység 7 matematikai műveletre képes In/dekrementálás Összedás/kivonás Negáció Logikai ÉS (AND) Belső RC oszcillátor Órajel generátor W regiszter Logikai VAGY (OR) XOR Bitforgatás jobbra/ balra Port B Port A
Timer0 Timer1 Timer2 Vref RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7 CCP modul Komparátor USART EEPROM mem Szinkron soros port FSR regiszter STATUS regiszter Cím MUX FLASH Programmemória (2k x 14 bit) Utasítás regiszter Utasítás dekóder Verem PCLATH regiszter PC Programszámláló RAM Adatmemória (224 x 8 bit) W regiszter Munka regiszter 8 bites Paraméterezett utasításokhoz Reset áramkörök ALU MUX Belső RC oszcillátor Órajel generátor W regiszter Port B Port A
Timer0 Timer1 Timer2 Vref RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7 CCP modul Komparátor USART EEPROM mem Szinkron soros port FSR regiszter STATUS regiszter Cím MUX FLASH Programmemória (2k x 14 bit) Utasítás regiszter Utasítás dekóder Reset áramkörök Verem PCLATH regiszter PC Programszámláló RAM Adatmemória (224 x 8 bit) ALU MUX Fájl regiszterek Port állopotot befolyásoló regiszterek Periféria kezelő regiszterek Belső RC oszcillátor Órajel generátor W regiszter Port B Port A
Timer0 Timer1 Timer2 Vref RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7 CCP modul Komparátor USART EEPROM mem Szinkron soros port FSR regiszter STATUS regiszter Cím MUX FLASH Programmemória (2k x 14 bit) Utasítás regiszter Verem PCLATH regiszter PC Programszámláló RAM Adatmemória (224 x 8 bit) Adatmemória Random Access Memory Átmeneti adatok tárolására Byte felépítésű szerkezet Belső RC oszcillátor Port B Utasítás dekóder Reset áramkörök Órajel generátor Port A W regiszter ALU MUX Programmemória Programkód tárolása Innen lehet kiolvasni a programszámláló által mutatott címről az aktuális utasítást újraprogramozható 14 bit -> nagy program tároló
Timer0 Timer1 Timer2 Vref RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7 CCP modul Komparátor USART EEPROM mem Szinkron soros port FSR regiszter STATUS regiszter Cím MUX FLASH Programmemória (2k x 14 bit) Utasítás regiszter Verem PCLATH regiszter PC Programszámláló RAM Adatmemória (224 x 8 bit) Programszámláló a helyes utasítás kiolvasásához Utasítás dekóder Belső RC oszcillátor Port B Reset áramkörök Órajel generátor Port A W regiszter ALU MUX Verem Megszakítás/szubrutin esetén a programszámláló címének elmentése 8 egymásba ágyazás lehetséges
Timer0 Timer1 Timer2 Vref RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7 CCP modul Komparátor USART EEPROM mem Szinkron soros port FSR regiszter STATUS regiszter Cím MUX Belső RC oszcillátor Port B FLASH Programmemória (2k x 14 bit) Utasítás regiszter Utasítás dekóder Reset áramkörök Órajel generátor Port A Verem W regiszter PCLATH regiszter PC Programszámláló RAM Adatmemória (224 x 8 bit) ALU MUX Működést kiszolgáló áramkörök Oszcillátor Belső 4MHz 37kHz Külső Reset Max 20MHz (5Millió utasítás /s) Külső forrás Belső forrás POR Watchdog BOR
OSC1 Dekódolás (Q1) Olvasás (Q2) Végrehajtás (Q3) Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Pipe-line Végrehajtás gyorsítása érdekében átlapolt utasításciklusok használata Utasítás végrehajtása alatt lehetséges a következő utasítás lehívása és dekódolása Írás (Q4) CLOCKOUT N. utasítás lekérés N-1. utasítás végrehajtás N+1. utasítás lekérés N. utasítás végrehajtás 1 instrukciós ciklus 1 instrukciós ciklus
Logikai utasítások AND, OR, XOR, stb Aritmetikai és shift utasítások ADD, SUB, CLR,DEC INC,RLF,RRF,stb Bit utasítások BSF, BCF,BTFSC,BTFSS,stb Adatmozgató utasítások MOV Programvezérlő, ugró és szubrutinkezelő utasítások CALL, GOTO,stb Rendszervezérlő utasítások SLEEP, CLRWDT, stb
Program memória (FLASH) Regiszterek (SRAM) Adat (EEPROM)
Verem Felhasználható memória Feltöltetlen memória terület (címezhető)
Watchdog Időzítő A/D átalakítók Belső feszültség referencia Sleep üzemmód Oszcillátor típusok Reset áramkör Megszakításkezelés
A program lefagyása esetén újraindítja a vezérlőt és programot Kontroller belső részétől leválasztott RC oszcillátor Nagy tápfesz és hőmérsékletfüggés Nem nagy frekvenciastabilitás 18ms-es ciklusidő (128-as utóosztóval max. 128*18ms = 2.3s) RC oszcillátor 8 bites számláló Utóosztó (8 bit) Chip reset CLRWDT
3 egymástól független időzítő 2 db 8-bites (Timer0, Timer2) 1 db 16-bites (Timer1) osztásviszony Bináris számláló... Multiplexer
8 bites időzítő / számláló (0 255) 8 bites előosztó Külső v. belső óraforrás Túlcsordulás esetén megszakítás generálás Él választási lehetőség
16 bites időzítő / számláló 8 bites előosztó használható Külső v. belső óraforrás Túlcsordulás esetén megszakítás generálás
8 bites Elő- és utóosztási lehetőség TMR2: a számláló állapotát tárolása T2CON: számláló beállításai
Szundi üzemmód Alacsony fogyasztású állapot (0.5 μa) hosszú várakozási idők Holtidőkben történő áramfogyasztás csökkentésére +5V tápfeszültség mellett 4MHz-es órajelen 2mA áramot vesz fel
Szundi üzemmód Belső órák lekapcsolnak WDT tovább fut (ha engedélyezett) Kimeneti I/O lábak tovább vezérelnek A/D konvertál Ébredés Külső reset ( MCLR 0 -> 1 ) WDT időtúllépés Megszakítások
Szukcessziv approximációs konverter (fokozatos közelítéses átalkító) CSH<2:0> 16 11 RA0/AN0 Ux Vin 10 01 RA1/AN1 RA2/AN2 8 A/D átalakító 00 RA3/AN3 Vref 2 PCFG<2:0> 1 0 1 1
Egy komparátor áramkör a kimenetén, attól függően ad ki L vagy H feszültséget, hogy a melyik bementén van nagyobb beszültség. IN1: Vref IN2: mérendő feszültség
Vref programból állítható a VRCON regiszter segítségével D/A átalakító
3 működési mód (CCP1CON) Capture Compare (reseteli TMR1-et) PWM Eredmény, vagy változók CCPR1L CCPR1H TMR-ekkel összekötve
Capture mód: A TMR1 16bites regiszter értékét elmenti a CCPR1 regiszterbe ha RB3-on változás következik be Választható élvezérlés (felfutó/lefutó élre) Választható osztó 4,16 TMR1 használata
Compare mód: A CCP modul CCPR1L és CCPR1H regisztereit hasonlítja össze TMR1-el. Mikor egyeznek RC2-n le/fel-futás generálható és CCP1IF jelzőbit 1-be (törölni kell)
10 bites finomság
Reset folyamat: A tápfeszültség bekapcsolásakor a µp belső áramköreit, regisztereit a megfelelő működés miatt jól meghatározott alaphelyzetbe kell állítani.
Oszcillátor lassú berezgése miatt beépített számláló POR - tápfesz bekapcsolása BOR tápfesz csökkenése miatt MCLR alacsony szintre húzása WDT okozta reset Lassú tápfesz növekedésének kompenzálása Belső órajel stabilitás
Ütemező órajel előállításának módjai: Alap kvarc bekötés PIC Kerámia rezonátor bekötése PIC C1 C2 Kerámia rezonátor
RC oszcillátor Vdd Beépített oszcillátor PIC C R PIC R C [pf] R [kω] f [khz] 5 4610 20 10 2660 100 311 5 1340 100 10 756 100 82.8 5 428 300 10 243 100 26.2 R [kω] f [MHz] 0 10.4 1 10 10 7.4 20 5.3 47 3 100 1.6 220 0.8 470 0.3 1000 0.2
Megszakítás Valamely rövid, vagy nem ismétlődő jel fogadására A megszakítás kizökkenti a processzort a főprogram futtatásából és egy külön erre a célra írt szubrutin végrehajtására kényszeríti. A rutin lefutása utána processzor visszatér oda ahol a futás abba maradt. Főprogram Megszakítás rutin GIE=0 GIE=1
TMR1E & T0IE & TMR2IE CCP1IE & & INTE RBIE & & 1 & ÉBRESZTÉS Megszakítás a CPU felé CMIE & 1 PEIE & TXIE & GIE RCIE & EEIE &
GIE: megszakítások engedélyezése PEIE: Periféria megszakítások (IT) engedélyezése T0IE :TMR0 túlcsordulás IT engedélyezése INTE: Külső IT engedélyezése RBIE: PortB változás IT engedélyezése T0IF :TMR0 túlcsordulást jelzőbit INTF: Külső IT-t jelzőbit RBIF: RB7-RB4 változott
EEIE: EEPROM IT engedélyezés CMIE: Komparátor IT engedélyezés RCIE: Soros port vétel IT engedélyezése TXIE: Soros port adás IT engedélyezése CCP1IE: Komparátor IT engedélyezés TMR2IE: TMR2=PR2 IT engedélyezés TMR1IE: TMR1 túlcsordulás IT engedélyezés
EEIF: EEPROM IT jelzőbit CMIF: Komparátor IT jelzőbit RCIF: Soros port vételt jelzőbit TXIF: Soros port adás jelzőbit CCP1IF: CCP1 IT jelzőbit TMR2IF: TMR2=PR2 IT jelzőbit TMR1IF: TMR1 túlcsordulás IT jelzőbit
IRP: Indirekt címzéshez RP1 és RP0: általános célú regiszterek címzéséhez TO: Time out (Watchdog) PD: Power Down (Sleep) Z: eredmény nulla C: Carry (maradék) DC: Digit Carry (nibble átlépésnél)
PBPU: felhúzó ellenállások engedélyezése INTEDG: Interrupt él kiválasztása T0CS: TMR0 forrás kiválasztó T0SE: TMR0 külső jel él kiválasztása PSA: előosztó WDT-hez vagy TMR0-hoz PS2-PS0: előosztás értéke
OSCF: belső oszcillátor beállító bit (4MHz v. 48kHz) POR: Power-on Reset státusz bit BOR: Tápfesz csökkenés miatt bekövetkezett Reset státusz bit
PORTx x: A v. B pl: PORTA = 100 => 01100100 TRISx x: A v. B 1: Input 0: Output pl: TRISTB = 45 => 00101101
T1CKPS1-0: 1. időzítő előosztójának beállítása (11=1:8;10=1:4;01=1:2;00=1:1) T1OSCEN: sajat oszcillátor engedélyezése T1SYNC: időzítő oszcillátor szinkronizálása TMR1CS: órajel forrásának kiválasztása (int. v. ext.) TMR1ON: időzítő be (1) v. ki(0) kapcsolása
Alapkapcsolások Kommunikáció uc k közti Programozási példák, egyszerű progik
Köszönöm a figyelmet!
A B A AND B 0 0 0 0 1 0 1 0 0 1 1 1 A B A OR B 0 0 0 0 1 1 1 0 1 1 1 1 A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0
WR PORTA: port logikai szintkének beállítás RD PORTA: port logikai szintjének lekérés WRTRIST: portirány beállítás RDTRIST: portirány lekérés Analog Input Mode: komparátor bekapcsolás