Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik - Inbyggda system Analog till digital signal Uppbyggnad av mikrokontroller Masinkod, assemblerkod Labutrustningen Högnivåkod Utvecklingssystem, målsystem Datorer och programvara i produkter som inte i sig är datorer kallas inbyggda system (embedded systems). ”Internet of things” alla inbyggda system skall även vara uppkopplade. Inbyggda system måste ibland vara säkerhetskritiska. Man talar om säkerhetskritiska system. http://news.bbc.co.uk/2/hi/programmes/click_online/9755210.stm MMK, KTH Elektroteknik Föreläsning 7 Exempel på olika ”koder” 1 byte = 8 bitar. 1 byte kan ha olika betydelse i olika sammanhang, Vi använder olika koder. Binärt Hexadecimalt Decimal 2-komplement Ascii 1111 1111 FF 255 -001 ÿ 1000 0000 80 128 -128 € 0111 1111 EF 127 127 Delete 0000 0000 00 000 000 NUL Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik http://courses.cs.vt.edu/~csonline/MachineArchitecture/Lessons/CPU/Lesson.html MMK, KTH Elektroteknik Föreläsning 7 Skriv ett program som ”läser” från ingång 14, adderar 2 till detta värde och ”skriver” till utgång 12 # Machine code Assembly code Description 0 LOAD 14 Kopiera heltalet i 14 till accumulatorn. (Heltalet är till exempel proportionellt mot en insignal) 1 2 ADD #2 Addera 2 till innehållet i accumulatorn och lägg i accumulatorn STORE 12 Kopiera heltalet i accumulatorn till 12 som är en utgång. Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik mbed-modulen som används i laborationen. Nedan ses MCU-lådan med mbed-modulen monterad i mitten. Diverse signaler till/från mbed-modulen är utdragna till 2mm-hylsor. De som är tillgängliga i denna laboration är indikerade nedan. MMK, KTH Elektroteknik Föreläsning 7 Högnivåprogrammet skrivs som vanlig text i en editor. Högnivåprogrammet som även kallas källkod. Kompilatorn översätter, genom så kallad kompilering, högnivåprogrammet till maskinkod som innehåller den sekvens av ettor och nollor som ska skrivas in i mikrokontrollerns minne, med början på minnesadress noll. Högnivåprogrammet är relativt oberoende av den aktuella processorn. Högnivåprogrammeringsspråket är ofta C då det gäller inbyggda system. En vits med att använda ett högnivåprogram är att programmeringen är relativt oberoende av vilken processor som används. Även så kallad assemblerprogrammering kan användas, men varje processortillverkare har sitt eget assemblerspråk. Assemblern är egentligen en läsbar variant av den maskinkod (ettor och nollor) som ska ligga i processorns minne. Nedan visas hur kompilering gör av programmeraren. Resultatet blir en ”maskinkodsfil.h” som med ”drag and drop” kan flyttas till den USB-anslutna mbed-modulen som om den vore ett USB-minne. För att starta programmet trycks på reset och programräknaren nollställs och exekveringen startar. Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik Här kan du köra ett C program för att testa: http://codepad.org Du kan till exempel klippa ut nedanstående C-program och exekvera det. #include <stdio.h> //deklarationer och initieringar int a=1, b=1, c, t=20; int main(void) { //Här börja tidsnedräkningen while (t>0) { if ((a==1)&&(b==1))c=1; else c=0; } // Beräkning av utsignal //i detta fall AND-funktion printf("tid kvar=%i c=%i \n",t,c); //skriv utsignal //tiden som är kvar minskas t=t-1; }//while slutar här //main slutar här När man arbetar med inbyggda system eller med styrsystem brukar begreppet tillstånd användas. Detta begrepp passar bra ihop med switch case i programmering För att träna på att skriva sådana program kan vi först titta på nedanstående program. #include <stdio.h> //deklarationer och initieringar int tillstand=1, t=7; int main(void) { while (t>0){ switch (tillstand) { case 1: printf("måndag\n"); break; case 2: } printf("tisdag\n"); break; } //switch slutar här t=t-1; } //while slutar här //main slutar här 1. Kör programmet och se vad det skriver ut. Använd följande länk: http://codepad.org/bwCsctL7 2. Ändra i programmet så att det skriver ut tisdag istället (går att göra i codepad genom att använda länken ovan och ändra i programmet). 3. Ändra i programmet så att godtycklig veckodag kan skrivas ut . MMK, KTH Elektroteknik #include <stdio.h> //deklarationer och initieringar int tillstand=1, t=7; int main(void) { while (t>0) { switch (tillstand) { case 1: if (t>6) { tillstand=2; } printf("måndag\n"); break; case 2: if (t>5) { tillstand=3; } } printf("tisdag\n"); break; } //switch slutar här t=t-1; } //while slutar här return 0; //main slutar här Föreläsning 7 Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik Nedanstående program kan inte köras i codepad. Det kan däremot ”fyllas med lämpligt innehåll” och köras på vår mikrokontroller. Skelettet nedan innehåller det som alltid skall vara med och som inte ändras från program till program. // Långlab Mikro, Kurs Elektroteknik #include "mik.h" char prog[] = "Mikro-lab"; int ver = 1; testkör! *** // Textsträng med programmets namn // *** ÖKA gärna numret för varje version ni int main(void) { init_mik(); // Själva programslingan move_cursor( 1, 5 ); dprintf( "%s v.%i", prog, ver ); // Initiera hårdvaran // Displaymarkören till rad 1, kolumn 5 // Skriv ut programmets namn och version /******************************************************************** ** ** ** Deklarera variabler här nedanför vartefter som ni behöver dem ** ** ** ********************************************************************/ int state = 0; /******************************************************************** ** ** ** Konfigurera GPIO som in- och utgångar här nedanför med init_pin ** ** ** ********************************************************************/ while( 1 ) { // Evighetsloop } } // Programslingans slut MMK, KTH // // // // Elektroteknik Föreläsning 7 grind.c, ett program för MET-kontrollern Långlab Mikro, Kurs Elektroteknik MG & TL 2002 Modifierad för ATmega128 PK 2009 och 2012 HJ #include "mik.h" // Infogar bibliotek medfunktioner char * prog = "Grind"; int ver = 0; // Textsträng med programmets namn // ÖKA numret för varje version ni // flashar! *** int a, b, c; // Deklaration av variablerna int main(void) { init_met(); // Själva programslingan move_cursor(1,1); dprintf("%s v.%i", prog, ver); // Initierar MET-kontrollern // Displaymarkören till rad 1, //kolumn 1 // Skriv ut programmets //namn/version init_pe(0,"in"); init_pe(1,"in"); init_pe(2,"out"); // Initierar pe.0 som inpinne // Initierar pe.1 som inpinne // Initierar pe.2 som utpinne while(1) { a = GET_BIT(pe,0); b = GET_BIT(pe,1); // Evighetsloop! if ((a==1)&&(b==1))c=1; // Läser av pe.0 // Läser av pe.1 // Beräkning av utsignal Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik else c=0; //i detta fall AND-funktion if(c == 1) SET_BIT(pe,2); else CLR_BIT(pe,2); // Utsignal beroende på c } } // Programslingans slut MMK, KTH Elektroteknik Föreläsning 7 Ofta ingår även editorn i utvecklingsystemet. På labben är det så. 2014-10-06/HJ
© Copyright 2024