Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7

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