Dagens föreläsning Inbyggnadsprocessorer - och programmering ❾ Översikt PIC-processorn ❿ Familj ❿ Flash / EPROM ❿ Introduktion: 16F84 ❾ ❿ Harvard / von Neumann ❿ CISC / RISC ❿ Pipelining ❾ Programmering ❿ PIC-assembler ❿ ANSI-C ❿ C för inbyggda system 1 2 Nästa vecka ❾ Strukturerad programmering ❾ Timing ❾ Realtid ❾ Interrupt Programmeringsprojekt LED-matris ❾Mål ❿ Träna projektform ❿ Färdigheter i C ❿ Färdigheter i realtid ❿ Träna databladsökning ❾Metoder ❿ Blod ❿ Svett ❿ Tårar 3 4 PIC-processorn Hämta information PIC-processorn Koncept Datablad, programexempel, utvecklingsverktyg, applikationsnötter www.microchip.com C-kompilator, FAQ, programexempel www.htsoft.com 5 6 1
PIC-familjen Flash vs EPROM t ex PIC16F84 ❾ Flash ❾ Low-end, 12Cxxx ❿ 15:- 8 18 pin Periferi: t ex A/D, EEPROM ❿ 0,5 1 k programminne ❾ Mid-range, 16Cxxx, 16Fxxx ❿ 30:- 18 40 pin Periferi: t ex A/D, PWM, USART ❿ 1 8 k programminne ❾ High-end, 17Cxxx, 18Cxxx ❿ 60:- 40 84 pin Kärnan innefattar 8*8 multiplikator ❿ 2 32 k programminne ❿ Omprogrammerbar 100 10 000 ggr ❿ Billigare än fönsterkrets ❿ Programmerbar på kortet ❿ Vissa kan skriva i eget programminne ❾ EPROM ❿ Fönsterversion omprogrammerbar ❿ OTP (One time programable) billigare än Flash 7 8 Harvard / von Neumann CISC / RISC ❾ von Neumann (Motorola 705) ❿ Spar transistorer på chippet ❿ Ett minne för program och data ❾ CISC (Motorola 705, 61 instruktioner) ❿ Complex Instruction Set Computer ❿ En instruktion utför flera saker ❿ Instruktioner har olika längd ❾ Harvard (PIC) ❿ Snabbare ❿ Möjliggör pipelining ❿ Möjliggör olika instruktionsbredd ❾ RISC (PIC, 35 instruktioner) ❿ Reduced Instruction Set Computer ❿ Fler rader kod för samma funktion ❿ Långa instruktioner (Harvard) 9 10 Pipelining PIC-specifik maskinvara ❾ Möjligt vid Harvardarkitektur ❾ Ökar hastighet ❾ Möjlig fortsättning: Superskalär ❾ ❾ Watchdog ❾ EEPROM 11 12 2
Tidmätning ❾ ❿ 8 bitar, räknar ständigt upp ❾ Kan slöas ner av prescaler ❿ max 256 ggr => upp till 65536 cykler ❾ Använder intern klocka eller extern pinne ❿ Kan fungera som räknare Se option_reg (option, i C) för konfigurering 13 14 Exempelkod Felhantering Watchdog void init_timer(void) PSA = 0; // Koppla prescaler till TMR0 PS0 = 0; // Prescaler satt till PS1 = 1; // dela med 128 PS2 = 1; T0CS = 0; // Väljer intern oscillator till timer void start_timer(void) // Laddar om timer TMR0 = timervalue; // (256-timervalue)*prescaler*1us + omladdningstid T0IF = 0; void wait_timer(void) // Väntar på att timer räknar ut while(!t0if) ❿ Räknar ständigt upp (med egen oscillator) Resettar processorn när timern räknat ut ❿ Total återstart och initiering Såvida programmet inte resettar watchdogen först ❿ #define WatchDogClear() asm("clrwdt") ❿ Görs ej vid evig loop eller urspårning 15 16 Watchdog EEPROM Räknar ut på ca 18 ms (min 7) * 2 PS 17 18 3
Programmering av inbyggda system Assembler Vad är det? 19 20 Varför assembler? Varför C? P16F84: MOVF LEFT,W ; Flytta LEFT till W-registret 1 cykel 1 word XORWF RIGHT,W ; Jämför LEFT med RIGHT 1 cykel 1 word BTFSC STATUS,Z ; Om LEFT=RIGHT blir Z=1 1(2) cykel 1 word GOTO PLATTAN 2 cykler 1 word CLRF MOTORHASTIGHET 1 cykel 1 word GOTO SLUT 2 cykler 1 word PLATTAN: MOVLW 0xFF 1 cykel 1 word MOVWF MOTORHASTIGHET 1 cykel 1 word SLUT: GOTO SLUT 2 cykler 1 word void main(void) if (LEFT == RIGHT) MOTORHASTIGHET = 0xFF; else MOTORHASTIGHET = 0; while(1) 21 22 Vårt val: Kombinera! HI-TECH C ANSI-C void main(void) PORTA = 0; TRISA = 0; // Port A, ingång #asm BCF _STATUS,5 // Garantera bank 0 BSF _PORTA,0 // 4 µs puls BCF _PORTA,0 #endasm while(1) 23 24 4
MPLAB Anpassa MPLAB till HI-TECH 25 26 Torsdagens laboration: Programstruktur Initiering Tips från coachen ❾ Ju simplare, desto enklare ❿ Vänj er vid en skrivstil (indrag, måsvingar mm) ❿ Lär er få skrivsätt bra (C kryllar av varianter) ❿ Den som använder pekare får skylla sig själv Huvudprogram ISR ❾ Tänk på RAM-minnet ❿ Använd Char ❿ Små arrayer i RAM, hellre stora konstanter i ROM 27 28 5