Microprocessor / Microcontroller

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
Advertisements

void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
IE1206 Inbyggd Elektronik F1 F2
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Introduktion till C för enchipsdatorer
Många studenter använder en LCD-display till sin programmeringsuppgift
Funktioner och programorganisation
William Sandqvist Störskydd William Sandqvist
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
De fundamentala datatyperna
Operatorer.
William Sandqvist Varför använda en liten 8-bitars processor när det finns billiga kraftfulla 32-bitars? William Sandqvist
William Sandqvist PIC Comparator Tips 'n Tricks William Sandqvist
Komparatorn en 1 bits AD-omvandlare
Välkommen Vahid Mosavat
Programmeringsteknik K och Media
Att programmera i språket Java
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Kommunikation Först några nya PIC-instruktioner
Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar.
Pekare och speciell programstruktur i inbyggda system
Ali Ghodsi Variabler En variabel är en sorts behållare som man kan placera data i Man måste ange typ och namn för alla variabler.
Programmering B PHP Lektion 2
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
William Sandqvist AD-omvandling. William Sandqvist Ny processor med AD-omvandlare PIC16F628 saknar AD-omvandlare. När vi.
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
William Sandqvist Låskretsar och Vippor Låskretsar (latch) och vippor (flip-flop) är kretsar med minnesfunktion. De ingår i datorns minnen.
Objektorienterad Programmering i C++ I
William Sandqvist PIC PIC (Peripheral Interface Computer) är en datorkrets med ”allt i ett”. Prog Mem. Programminnet är 2048 instruktioner.
William Sandqvist PIC 16F628 Timers William Sandqvist
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
William Sandqvist Polling och Interrupt Antag att Du sitter i en skön fåtölj och läser en bok. Plötsligt blir Du avbruten av att telefonen.
Språket för inbyggda system 2
Digitalitet.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
William Sandqvist ReadModifyWrite-problemet PORTB = 0; PORTB.0 = 1; PORTB = PORTB; Vilket värde har portpinnen RB1 nu ? Förmodligen ”1”,
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
William Sandqvist DA-omvandling, oftast PWM.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
Kronljusströmställaren 0, 1, 2, 3
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 3 Operatorer Flödeskontroll Primitiva datatyperKlasser i API och egna klasser int double byte float char boolean short long String BufferedReader.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
DA-omvandling, oftast PWM William Sandqvist En DA-omvandlare tar stor plats på processor- chippet. Den vanligaste DA-lösningen är i stället.
IE1206 Inbyggd Elektronik Transienter PWM Visare j  PWM CCP KAP/IND-sensor F1 F3 F6 F8 F2 Ö1 F9 Ö4F7 tentamen William Sandqvist PIC-block.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
William Sandqvist Låskretsar och Vippor Låskretsar (latch) och vippor (flip-flop) är kretsar med minnesfunktion. De ingår i datorns minnen.
Roligt lärande! Varför? Vad ? Hur?.
Föreläsning 4: for, while, do-while
Iteration – Repetitionssats - while
Kombinatoriska byggblock
Digitalteknik 3p - DA- och AD-omvandling
Kombinatoriska byggblock
Kombinatoriska byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
GRNMATC – KAP 4 BRÅK.
Digitalteknik 3p - Kombinatoriska Byggblock
Presentationens avskrift:

Microprocessor / Microcontroller

Varför? Billiga Innehåller bara det nödvändigaste Kräver få kringkomponenter Enkla att programmera

PIC16F887

PIC16F887

In- och utgångar Saknas något?

Pinnar på PIC16F887

Exempel: pinne RA1 In / Ut väljs med TRIS Digital / Analog väljs med ANSEL Komparatoringång

Timer

Timer med prescaler

Timeravbrott

Avbrott

Avbrottsregister

Avbrottsregister GIE - Global Interrupt Enable bit PEIE - Peripheral Interrupt Enable bit T0IE - TMR0 Overflow Interrupt Enable bit INTE - RB0/INT External Interrupt Enable bit RBIE - RB Port Change Interrupt Enable bit. T0IF - TMR0 Overflow Interrupt Flag bit INTF - RB0/INT External Interrupt Flag bit RBIF - RB Port Change Interrupt Flag bit

Timer0

Port B Pull up Enable bit Interrupt Edge Select bit TMR0 Clock Source Select bit TMR0 Source Edge Select bit Prescaler Assignment bit Prescaler Rate Select bits

Generera avbrott varje ms med Timer0 //Fosc = 4 MHz static void interrupt isr(void){ if(T0IF){ // TIMER0 interrupt flag TMR0 = 6; // Ladda nytt värde till TMR0 isr_cnt++; T0IF = 0; // Nollställ TIMER0 interrupt flag } void main(void){ ... PSA = 0; // Prescaler till timer0 PS2 = 0; // 1:4 prescaler PS1 = 0; PS0 = 1; T0CS = 0; // välj Fosc/4 som insignal TMR0 = 6; // Timer värde för avbrott efter 1 ms T0IE = 1; // Enable timer0 avbrott GIE = 1; // Enable Global interrupt while(1){ if(isr_cnt > 0){ isr_cnt = 0; T0IF=1 256 TMR0 6

Timer1

Timer som pulsräknare T0IF=1 256 TMR0 6 puls_cnt TMR1H&L static void interrupt isr(void){ if(TMR0IF){ TMR0 = 6; timer1H = TMR1H; timer1L = TMR1L; TMR1H = 0; TMR1L = 0; puls_cnt = (timer1H<<8)+timer1L; isr_cnt++; TMR0IF = 0; } void main(void) { ... while(1){ if(isr_cnt>0){ lcd_putint(puls_cnt,5); isr_cnt = 0; T0IF=1 256 TMR0 6 puls_cnt TMR1H&L

Timer för tidtagning static void interrupt isr(void){ if(CCP1IF){ capture_time = ((CCPR1H<<8)+CCPR1L) - capture_old; capture_old = (CCPR1H<<8)+CCPR1L; isr_cnt++; CCP1IF = 0; } void main(void){ ... if(isr_cnt>0){ lcd_putlong(capture_time,6); isr_cnt = 0; 65536 capture_time capture_old CCP1IF=1 CCP1IF=1

PWM PR2 CCPR TMR2

PWM

A/D omvandlare

Oscillator

#include <htc.h> #include "lcd.h" #pragma config IESO=ON, FCMEN=ON,OSC=INTIO7 #pragma config BOREN=SBORDIS, BORV=0, PWRT=OFF, WDT=OFF #pragma config CCP2MX=PORTC, PBADEN=OFF, LPT1OSC=ON, MCLRE=ON #pragma config DEBUG=OFF, STVREN=ON, XINST=OFF, LVP=OFF #pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPD=OFF, CPB=OFF #pragma config WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF,WRTD=OFF #pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF char avbrott = 0; //Globala variabler unsigned int counter = 0; static void interrupt isr(void) { ... } void main(void) OSCCON = 0x70; // Välj 8 Mhz intern klocka TRISA = 0x3D; // PORTA: RA1 utgång, resten ingångar TRISB = 0xFF; // PORTB: ingångar TRISC = 0xF7; // PORTC: RC3 utgång, resten in TRISD = 0xF0; // PORTD: RD0-3 utgångar, resten in TRISE = 0x04; // PORTE: RE0-1 utgångar ADCON1 = 0x0E; // AN0 (RA0) analog ingång isr_init(); // Initiera avbrott while(1)

Några datatyper i C char tecken, 8 bitar int heltal, 16 bitar (float reella tal ) (double reella tal med dubbel precision) signed med tecken unsigned utan tecken void uttrycket saknar typ

Några operatorer i C a++ a = a+1 a-- a = a-1 !a inte a ~ bitvis invers == lika med != inte lika med && OCH || ELLER & bitvis OCH | bitvis ELLER

Ändra enstaka bitar i ett register b = a | 0b00000100; // bitvis ELLER // b = 00010111 b = a & 0b11111110; // bitvis OCH // b = 00010010

Använd så mycket som möjligt! Skift a = 0x00000011; b = a<<2 // multiplikation med 4 //b = 00001100 b = a>>1 // division med 2 //b = 00000001 Använd så mycket som möjligt!

Olika sätt att skriva samma sak a = 23 // decimalt a = 0b00010111 // binärt b = 0x17 // hexadecimalt

”men Arduino är ju mycket roligare” Jaså…

Arduino eller PIC? Inte så mycket svårare! int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); #include <htc.h> __CONFIG(PWRTDIS & UNPROTECT & BORDIS & WDTDIS & INTIO); void main(void){ OSCCON=0x70; TRISC=0b00000001; while(1){ RC0=1; __delay_ms(100); RC0=0; } Inte så mycket svårare!

några rader extra men FULL KONTROLL OCH FULL FRIHET! Arduino eller PIC? int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); } void loop() { ... analogWrite(ledPin, 123); #include <htc.h> __CONFIG(PWRTDIS & UNPROTECT & BORDIS & WDTDIS & INTIO); void main(void){ OSCCON=0x70; TRISC=0b00000001; //PWM setup CCP1CON=0b00001100; T2CON=0b00000100; PR2=0xFF; //Välj PWM frekvens while(1){ ... CCPR1L = 123; } några rader extra men FULL KONTROLL OCH FULL FRIHET!

och vem har gjort bilderna då? www.microchip.com www.mikroe.com om man vill meta mer? Bates - Programming 8-bit PIC Microcontrollers in C LUBsearch Verle - PIC Microcontrollers - Programming in C http://www.mikroe.com/products/view/285/book-pic-microcontrollers-programming-in-c/