mikroprocessorer Elektronik DIGITALTEKNIK Logiska funktioner med



Relevanta dokument
Laboration D164. ELEKTRONIK Digitalteknik. Digitalteknik med enchipsdatorer

Programexempel 1 AND-funktionen

Moment 2 - Digital elektronik. Föreläsning 1 Binära tal och logiska grindar

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Tillståndsmaskiner. 1 Konvertering mellan Mealy och Moore. Ola Dahl och Mattias Krysander Linköpings tekniska högskola, ISY, Datorteknik

Övningsuppgifter i Mikrodatorteknik för U2

Snabbslumpade uppgifter från flera moment.

Vi skall skriva uppsats

Lathund, procent med bråk, åk 8

Avsikt På ett lekfullt sätt färdighetsträna, utveckla elevers känsla för hur vårt talsystem är uppbyggt samt hitta mönster som uppkommer.

Efter att du har installerat ExyPlus Office med tillhörande kartpaket börjar du med att göra följande inställningar:

Du ska nu skapa ett litet program som skriver ut Hello World.

Att komma igång. Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program

Lathund för överföring av rapporter och ljudfiler

Algebra, polynom & andragradsekvationer en pampig rubrik på ett annars relativt obetydligt dokument

T1-modulen Lektionerna Radioamatörkurs OH6AG OH6AG. Bearbetning och översättning: Thomas Anderssén, OH6NT Heikki Lahtivirta, OH2LH

Datorövning 2 Statistik med Excel (Office 2007, svenska)

Träning i bevisföring

'HOWHQWDPHQ 6\VWHPNRQVWUXNWLRQ

ANVÄND NAVIGATIONEN I CAPITEX SÄLJSTÖD

De grundläggande logiska grindarna

Manual för Min sida 1/ rev

Design by. Manual Jossan.exe. Manual. till programmet. Jossan.exe. E-post:

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

Menys webbaserade kurser manual för kursdeltagare. Utbildningsplattform: Fronter

Mätningar på op-förstärkare. Del 3, växelspänningsförstärkning med balanserad ingång.

FRÅN A TILL Ö LäraMera Ab / och Allemansdata Ab / FRÅN A TILL Ö

Laboration 3 i Digital- och Mikrodatorteknik. Utvecklingssystemet MPLAB IDE Grundläggande assemblerprogrammering för PIC

Lathund till Annonsportalen

4-6 Trianglar Namn:..

Skriva B gammalt nationellt prov

Handledning för digitala verktyg Talsyntes och rättstavningsprogram. Vital, StavaRex och SpellRight

Logga in. Gå in på: Klicka på Logga in. Klicka på den region, kommun eller organisation där din verksamhet finns

DATASAMORDNING NYHETERNA I CHAOS Utbildning Chaos/Handledning - Nyheterna i Chaos 3/

Individuellt Mjukvaruutvecklingsprojekt

Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Lösningsföslag till Exempel på tentamensuppgifter i Digitalteknik I

Grunderna i stegkodsprogrammering

TIMREDOVISNINGSSYSTEM

Praktisk programmering

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

Svenska Du kan med flyt läsa texter som handlar om saker du känner till. Du använder metoder som fungerar. Du kan förstå vad du läser.

912 Läsförståelse och matematik behöver man lära sig läsa matematik?

PROGRAMMERING A VB6 UTVECKLINGSVERKTYGET VISUAL BASIC

Guide till Wordpress text- och bildredskap

DIGITALTEKNIK. Laboration D164. Logiska funktioner med mikroprocessor Kombinatoriska funktioner med PIC16F84 Sekvensfunktioner med PIC16F84

ELEV- HANDLEDNING (Ansökan via webben)

Ekvationssystem, Matriser och Eliminationsmetoden

Administration Excelimport

Användarmanual och policy för Göteborgs Evenemangskalender på goteborg.com

F5 Introduktion till digitalteknik

ANVÄNDARHANDLEDNING FÖR

Manual för BPSD registret. Version 6 /

Väga paket och jämföra priser

Ext-14 (Ver ) Ext-14. FLEX-processorns styrenhet med fast logik

Office 365 Kompetens 2013 / MB

Laboration D184. ELEKTRONIK Digitalteknik. Sekvensnät beskrivna med VHDL och realiserade med PLD

LABORATIONSINSTRUKTION

Hjälp för digital röst. Mikro Værkstedet A/S

Att koda en magnetremsa i plastkortskrivare med inbyggd magnetkodare.

Det andra alternativet är att ladda upp filer genom att klicka på plustecknet nere till vänster. Man klickar sig in på den mapp som man vill att

Sammanfattning på lättläst svenska

a n = A2 n + B4 n. { 2 = A + B 6 = 2A + 4B, S(5, 2) = S(4, 1) + 2S(4, 2) = 1 + 2(S(3, 1) + 2S(3, 2)) = 3 + 4(S(2, 1) + 2S(2, 2)) = = 15.

Hävarmen. Peter Kock

DIGITALTEKNIK. Laboration D172

En lönerevision görs i flera steg; Initiering - Lönerevision Attestering - Skapa förmån - Uppdatera lön.

Gruppenkät. Lycka till! Kommun: Stadsdel: (Gäller endast Göteborg)

Erfarenheter från ett pilotprojekt med barn i åldrarna 1 5 år och deras lärare

Webb-bidrag. Sök bidrag på webben Gäller från

Programmera en NXT Robot

Styrteknik 7.5 hp distans: SFC med GX IEC

Utveckla arbetsmiljö och verksamhet genom samverkan

Handbok Blinken. Danny Allen Översättare: Stefan Asserhäll

Manual Ledningskollen i mobilen

Matematiken har alltid funnits omkring

Datorövning 2 Statistik med Excel (Office 2003, engelska)

Partnerskapsförord. giftorättsgods görs till enskild egendom 1, 2. Parter 3. Partnerskapsförordets innehåll: 4

Programmerbar logik (PLD) Programmeringsspråket VHDL Kombinatoriska funktioner i VHDL för PLD Sekvensfunktioner i VHDL för PLD

När du som vårdpersonal vill ta del av information som finns hos en annan vårdgivare krävs det att:

Laganmälan & Laghantering

4-3 Vinklar Namn: Inledning. Vad är en vinkel?

Samtals- och dokumentationsunderlag Språk och erfarenheter

Texturbild. Lagerpaletten du kommer arbeta med ser du till höger. 1. Kopiera bakgrunden till ett nytt lager och gör den svartvit.

F2 Datarepresentation talbaser, dataformat och teckenkodning

Föreningen Nordens lokala hemsidor

Del A Frågor om deltagande i tillsynskampanjen och dess resultat, från april 2009 t.o.m. att enkäten besvaras

L(9/G)MA10 Kombinatorik och geometri Gruppövning 1

Sammanfatta era aktiviteter och effekten av dem i rutorna under punkt 1 på arbetsbladet.

Instruktioner för beställning och kontoadministration för abonnenter av inlästa läromedel

Laboration 1. I. Matlabs fönster, hjälp, variabler och enkla beräkningar. Introduktion

Hur du arbetar med VFU-portfölj i Mondo. en lathund för student

Elektronen och laddning

Bruksanvisning UCR-100

Något om permutationer

Distribuerade Informationssystem VT-04

Användarmanual VX-webben

Manual HSB Webb brf

Vad är WordPress? Medlemmar

Det är bra om även distriktsstyrelsen gör en presentation av sig själva på samma sätt som de andra.

Transkript:

UMEÅ UNIVERSITET Tillämpad fysik och elektronik Digitalteknik Lars Wållberg Björne Lindberg Håkan Joëlson --6 v. Elektronik DIGITALTEKNIK Logiska funktioner med mikroprocessorer Introduktion till utvecklingsprogamvaran MPLAB Kombinatoriska funktioner med PIC6F84 Sekvensfunktioner med PIC6F84 LAB_D63.DOC

Innehåll INNEHÅLL INLEDNING 3 TALSYSTEM 4 LOGISK ALGEBRA (BOOLESK ALGEBRA) 4 NOT-FUNKTIONEN 5 AND-FUNKTIONEN 5 OR-FUNKTIONEN 6 GRIND-SYMBOLER 6 PIC6F84 7 UPPBYGGNAD 7 INBYGGDA ENHETER 8 ATT SKRIVA PROGRAM 8 PROGRAMEXEMPEL AND-FUNKTIONEN AND-FUNKTIONEN SOM MIKROPROCESSORINSTRUKTION. 4 PROGRAMEXEMPEL OR-FUNKTIONEN 4 DIGITALA KRETSAR 6 KOMBINATORISKA FUNKTIONER (KOMBINATORIK) 6 EXOR. 6 EXNOR 7 PROGRAMEXEMPEL 3 EXOR-FUNKTIONEN 7 PROGRAMMERINGSTIPS 8 SUBRUTIN 8 SÖKA VÄRDEN I EN TABELL MED HJÄLP AV INDEX 9 SEKVENSFUNKTIONER PROGRAMEXEMPEL 4 SEKVENSFUNKTION mikroprocessorer Innehåll

Inledning Att realisera en logisk funktion betyder att konstruera någonting som förverkligar den funktion man i teorin har funderat ut. Detta kan göras på en mängd olika sätt: pneumatiskt, hydraliskt, mekaniskt, genetiskt, elektriskt, elektroniskt för att nämna några exempel. Att realisera logiska funktioner elektroniskt har kommit att kallas Digitalteknik. Elektroniska kretsar som realiserar digitala funktioner finns i en mängd varianter. Olika teknologier vid tillverkningen och deras speciella elektriska egenskaper har fått ge namn åt olika kretsfamiljer. TTL- (Transistor - Transistor - Logik) och HCMOS-komponenter (High Speed Complementary Metal Oxid Semiconduktor) är vanliga alternativ. En stor mängd olika funktioner finns i de så kallade TTL och HCMOS biblioteken. Under digitalteknikens första år användes digitala grindar och specialkretsar ur TTL-och CMOSfamiljerna för att bygga olika slags digitala konstruktioner. Genom åren har successivt nät med sådana kretsar i många fall kommit att ersättas med speciella avancerade integrerade kretsar (ASIC, Application Specific Integrated Circuits). För stora produktionsserier kan det klart löna sig att göra så. För små serier kan det bli alltför dyrt. Parallellt har det då uppstått andra typer av avancerade digitala kretsar, som är standardiserade i sin konstruktion, med vars hjälp man med olika metoder och teknologier kan åstadkomma specialiserade funktioner i små serier eller rentav enstaka exemplar. Två exempel på sådana kretsar är PLD (Programmable Logik Devices) och mikroprocessorer. Båda dessa är programmerbara och därför mycket mångsidiga. De kan användas till en mängd olika digitala funktioner och finns i många varianter. En mikroprocessor med inbyggda periferienheter (tex olika slags in- och utenheter) och minnen kallas ofta enchipsprocessor - i stort sett allt som behövs för att bygga en fungerande mikrodator finns i en enda kapsel, på samma kiselskiva (chip). Detta kompendium behandlar hur man kan förverkliga logiska funktioner m.h.a. en enkel mikroprocessor. Den processor som förutsätts är PIC6F84. Den har integrerade minnen och funktioner för tidhållning och kommunikation. Den förtjänar därför att benämnas enchipsprocessor. Vissa mikroprocessorer kallas mikrokontrollers. I detta häfte kommer begreppen mikroprocessor, mikrokontroller och enchipsdator att användas omvartannat utan större distinktion. Först något om grunderna i digitaltekniken. mikroprocessorer Inledning 3

Talsystem Det decimala talsystemet, som används i vår vardag, har tio tecken (symboler). Symbolerna,,,...,9 placeras sedan på ett speciellt sätt för att ange tal större än 9. Detta sätt kallas för positionssystem. Symbolens position anger dess "värdeområde" eller vikt. I den talkultur vi växer upp i anger talet "ett tiotal + ett ental". Barn i förskoleåldern skulle lika gärna kunna tolka som d.v.s. +. 7=x + x + x + 7x Positionernas vikt anges som ental, tiotal, hundratal, tusental o.s v. Matematiskt skrivs positionernas vikt som n där n anger positionen.positionen noll () är den längst till höger alltså entalen. = ental = tiotal = hundratal o.s.v Binära talsystemet är i princip uppbyggt på likartat sätt. Bi betyder två, och anger att talsystemet har två symboler, nämligen och, Hur kan man då ange att ett tal är större än? Ja, på samma sätt som i det decimala talsystemet. Tecknens position i talet anger deras vikt. Positionsvikterna bestämmes på likartat sätt som i det decimala talsystemet. Matematiskt beskrivs positionsvikterna som n. = = = 4 3 = 8 4 = 6 5 = 3 = x8 + x4 + x + x = De små siffrorna till höger om talen (så kallade index) anger vilket talsystem som använts. resp. kallas talsystemens baser. Digitaltekniken liksom datortekniken utnyttjar det binära talsystemet, då de digitala elektriska komponenterna endast entydigt kan tolka två tillstånd. Dessa tillstånd representeras ofta av eller som i den logiska matematiken = till (eller hög nivå) = från (eller låg nivå) = sant (eller ja) = falskt (eller nej) Logisk algebra (Boolesk algebra) I den logiska algebran finns tre grundfunktioner nämligen: NOT (ICKE) AND (OCH) OR (ELLER) Dessa funktioner kan jämföras med den numeriska algebrans + addition - subtraktion x multiplikation o.s.v mikroprocessorer Talsystem 4

För att illustrera logisa funktioner användes bl.a sanningstabeller. (Jämför med multiplikationstabellen). Tänk dig följande exempel på sanningstabell: Du ska göra en smörgås och har tillgång till följande pålägg: Gurka: G Smör: S Ost: O Paprika: P Smörgås betecknas med M. För att illustrera hur många olika slags kombinationer av smörgåsar med pålägg som är tänkbara görs därför en tabell. I kolummerna står för ja och för nej. I M-kolummen visas " sanningen ". Ettorna anger vilka påläggskombinationer som kan accepteras. (Du kan ju givetvis ha en helt annan uppfattning om påläggskombinationer!!) G S O P M NOT-funktionen Sanningstabell: a f Tabellen ska läsas så att: om a = (falsk, från) så är f = (sann, till) om a = (sann,till) så är f = (falsk, från). Funktionen kan tecknas f = a (läses: funktionen f lika med NOT a) a kallas variabel och f funktion. Strecket ovanför a är beteckning för NOT-funktionen. AND-funktionen Sanningstabell a b f Funktionen tecknas f = a b Punkten är operatorsymbol för ANDfunktionen mikroprocessorer Logisk algebra (Boolesk algebra) 5

OR-funktionen Sanningstabell a b f Funktionen tecknas f = a + b + -tecknet är operatorsymbol för ORfunktionen. I de funtioner som visats ovan har endast två variabler använts. Naturligtvis kan man ha ett godtyckligt antal variabler, men för att visa funktionernas egenskaper räcker det med att ta med två Funktionerna NOT, AND och OR har, liksom en mängd andra digitala funktioner, egna symboler. Symbolen för funktionerna och dess elektriska motsvarighet kallas grind. När man konstruerar en elektrisk krets som ska generera den logiska funktion säger man att funktionen realiseras. Grind-symboler NOT-grinden " NOT-ring" a f a är insignal och, f utsignal. AND-grinden a b & f a och b insignaler, f utsignal. OR-grinden a b > f mikroprocessorer Grind-symboler 6

PIC6F84 Den mikrokontroller som får stå som exempel på hur man kan förverkliga logiska funktioner med mikroprocessorer är alltså PIC6F84. Den tillverkas av Microchip och kostar i dag () under 5 kr. Först några viktiga saker om dess elektriska, fysiska egenskaper samt något om hur man programmerar den. Vi ska inte i detalj fördjupa oss i alla mikroprocessortermer utan enbart gå igenom de som är nödvändiga för denna kurs i digitalteknik. Uppbyggnad Kapseln har 8 ben, 9 på varje sida. Tretton ben används för kommunikation med omvärlden (I/O). Dessa tretton ben är uppdelade på två grupper; Port A med 5 ben och Port B med 8 ben. Portarna kan man med enkla programmeringsinstruktioner själv bestämma om de ska vara digitala in- eller utgångar. Mycket praktiskt och användbart!! Fem ben (4, 5, 4, 5 & 6) används för processorns elektriska grundfunktioner. (Se följande figur.) Två ben (3, 6) har dubbla funktioner som både I/O och andra funktioner. En port är en grupp anslutningar som alla kan nås med en enda programinstruktion. Det finns även instruktioner som berör endast ett ben på en port. Portarna har beteckningarna RA och RB. Portarna har något olika elektriska egenskaper som vi ännu inte behöver sätta oss in i. Vi ska i huvudsak använda : PortB till Ingångar och PortA till Utgångar För de inledande exemplena ska nedanstående grundkopplingsschema användas. RA RA 8 R3 VCC 5Vdc VCC 5Vdc 33 33 3 RA3 PIC6F84 RA 7 6 33 R4 33 R5 5 k 4 5 C 33n 5 4 U4 6 RB 3 U3 7 RB U 8 RB U 9 RB3 R6 Endast fyra av PortB s anslutningar används inledningsvis. De ska programmeras till ingångar. Med switcharna SW - SW3 ska ingångarna RB-RB3 kunna - eller -ställas. Fyra av PortA s ben ska användas till utgångar. Lysdioder ska visa om utgångarna är höga (- ställda) eller låga. (-ställda) Siffrorna utanför kapselsymbolen är bennummer. mikroprocessorer PIC6F84 7

Inbyggda enheter Internt i kapseln, i själva processorchipset, finns ett flertal olika enheter. Här ska nu ges korta beskrivningar av några: Processorenhet (CPU): Styrenhet (CPU-control): Beräkningsenhet (ALU): Register: Till varje instruktion hör ett mikroprogram som lagras i CPU. PIC6F84 har 35 olika instruktioner och varje instruktion kan dessutom ha ett antal s.k. adresseringsmoder. CPU innehåller alltså en mängd olika mikroprogram. Allt arbete i mikroprocessorn måste samordnas tidsmässigt. Styrenheten synkroniserar med hjälp av systemklockan det interna arbetet i processorn. Sköter numeriska och logiska beräkningar-dessa beräkningar sker alltid så att resultatet lagras i arbetsregistret. Tillfällig plats för lagring av olika data. t.e.x arbetsregistret W (Working Register) som används vid beräkningar, och programräknaren PC som ordnar så att instruktionerna kommer i rätt ordning Datariktningsregister (DDR): Innehållet i dessa register styr om en anslutning ska vara ineller utgång. RAM: FLASHROM: Att skriva program LABEL OPKOD Skriv/Läs-minne som används av programmet. Här kan tillfälliga resultat av olika operationer lagras. Läsminne där programmet lagras. Här kan inte information lagras under programkörningen. För att skriva program, (editering av källkod), konvertering av program till operator och binärkod (assemblering), testa program (simulering) samt själva överföringen av kod till kapseln (programmering), finns en utvecklingsprogramvara som heter MPLAB. Källkoden måste skrivas efter bestämda regler (syntax) En källkodsrad ska se ut så här: LABEL OPKOD OPERAND,OPERAND ;KOMMENTAR Label är ett namn som refererar till ett läge, till en specifik rad i källkoden. (Sett ur processorn synpunkt fungerar en Label som ett namn på en cell i programminnet.) Första positionen (kolumnen) i raden är reserverad för LÄGESnamnet. Man kan använda upp till sju tecken för Label. Om inget lägesnamn ska anges eller namnet är kortare än sju tecken hoppar man ändå till den åttonde teckenpositionen för inskrivning av operatorkoden. Använd TAB-tangenten. OPKOD eller operator är en mikroprocessorsinstruktion. Den består av tre till fem bokstäver konstruerade som ett slags förkortning för operationen. En sådan förkortning försöker vara ett stöd för minnet om vad instruktionen utför. Därför kallas opkoderna för MNEMONICS på engelska (= "minneskrycka"). mikroprocessorer Inbyggda enheter 8

Ett viktigt register som används i princip hela tiden är W, Working register. Det är ett 8 bitar stort lagringsområde där processorn snabbt och enkelt kan manipulera data. Resultatet av de flesta operationer lagras i W, ex vid addition, subtraktion, logiska operationer m.m. Här följer nu exempel på några vanliga instruktioner, med mnemonic och en kort beskrivning av instruktionen.. MOVLW k Move Literal k to W Laddar ett värde till W. Värde som ska hämtas finns som operand. Exempel. MOVLW xff ;Lagrar värdet xff i W MOVWF f Move W to f Laddar värdet i W till register f Exempel MOVWF PORTA ;Laddar det värde som finns i W till port A ANDLW k And literal k with W ANDar ihop värdet I W med k och resultatet hamnar i W Exempel ANDLW x5f ;fore operation: W = xa3 ;efter operation: W = x3 SUBWF f,d Subtract W from f Subtraherar register f med värdet i W-registret. Reultatet läggs i W om d= eller i f om d= Exempel SUBWF REG ;före operation: REG = x6 W = X ;efter operation: REG = x4 W = x GOTO k Goto address k Programräknaren PC får det nya värdet k, dvs programmet hoppar till den instruktion som finns vid adressen k och börjar exekvera koden från det stället. K kan vara en adress i hexadecimal form eller en label. Exempel GOTO x ;Programmet startar om från adressen x eller GOTO HITVILLJAG ;Programmet hoppar till det ställe ;där etiketten HITVILLJAG finns ;och börjar exekvera koden från det stället. BTFSC f,b Bit test, skip if clear Testar bit b i register f. Om b = Nästa instruktion verkställs Om b = Nästa instruktion hoppas över Exempel LOOP BTFSC STATUS, ;Testar om bit i STATUS-reg = GOTO LOOP ;Hoppar isåfall över denna rad BCF PORTA,3 ;och verkställer denna instruktion ;Om bit i STATUS var =, ;verkställs GOTO LOOP BTFSS f,b Bit test, skip if set Testar bit b i register f. Om b = Nästa instruktion verkställs Om b = Nästa instruktion hoppas över Exempel BTFSS STATUS, ;Testar om bit i STATUS-reg = BCF PORTA, ;Denna instr verställs bara om ;bit =, men inte om b = BCF PORTA,3 ;Denna instruktion verkställs alltid De sex ovan nämnda instruktionerna är några av de vanligaste. Precis som i ett vanligt språk så utgör % av dess ord 9% av språket. Totalt finns 35 olika instruktioner till PIC6F84 processorn. Med ovanstående instruktioner bör Du kunna skriva det mesta av programkoden. OPERAND Operander kan vara av flera slag: mikroprocessorer Inbyggda enheter 9

beskriva var data ska hämtas/lagras: i minnet, i en fördefinierad variabel/konstant eller i ett register utgöra data som ska hanteras. KOMMENTAR För att göra assemblerprogam enklare att följa och förstå, kan i varje rad en kort kommentar skrivas. Semikolon (;) inleder alltid en kommentar. Här är nu fem rader som exempel på programkod. START BSF PORTA, ;Ettställer bit på port A CALL wait ;Anropar subfunktion wait BCF PORTA, ;Nollställer bit på port A CALL wait ;Anropar subfunktion wait GOTO START Assemblerdirektiv ;Gå tillbaka till instruktionen vid START ;och fortsätt exekvera kod from den positionen Förutom de 35 processorinstruktionerna finns ett antal Assemblerdirektiv. Dessa direktiv måste finnas för att assemblerprogramvaran ska få viktig information som den behöver när källkoden ska översättas (konverteras) till kod för enchipsprocessorn. Assemblerdirektiven är lika oavsett vilken mikroprocessor som källkoden skrivs för. Tre viktiga assemblerdirektiv ska nämnas här. ORG Används för att assemblerprogrammet ska ge programkoden en viss adress. Exempel: ORG x ;Ger programkoden den ;hexadecimala adressen EQU Betyder lika med.ger namn åt ett tal, kod eller en adress. Exempel: KONST EQU xc ;hexkoden xc ges namnet KONST. Källkod inleds ofta med en lista med deklarationer där man ger namn åt ofta förekommande koder och värden. Detta underlättar programkonstruktionen och gör källkoden mera lättläst. END Anger att källkoden är slut. Alla dessa tre assemblerdirektiv placeras i "instruktionskolumnen" i källkoden. Programexempel AND-funktionen Uppgift: Realisera en -ingångars AND-grind med PIC6F84. I detta exempel ska varje moment i en lämplig arbetsmetodik och utformning av dokumentation gås igenom.. SPECIFICERA UPPGIFTEN Realisera en två-ingångars AND-grind. Sanningstabell a b f Schemasymbol a b & f mikroprocessorer Programexempel AND-funktionen

. RITA ETT FULLSTÄNDIGT KOPPLINGSSCHEMA RA RA 8 R3 VCC 5Vdc VCC 5Vdc 33 33 3 RA3 PIC6F84 RA 7 6 33 R4 33 R5 5 k 4 5 C 33n 5 4 U4 6 RB 3 U3 7 RB 8 RB 9 RB3 R6 I samtliga exempel och övningar kopplas utsignalerna via lysdioder till jord. I ett kopplingsschema behöver endast de anslutningar som används i uppgiften redovisas. 3. SKRIV KÄLLKOD Här följer ett exempel på hur utvecklingsprogrammet MPLAB används. Följ exemplet punkt för punkt så kommer Du att möta de delar du främst behöver av detta utvecklingshjälpmedel. Skapa en katalog där du vill ha dina filer Starta MPLAB. START/PROGRAM/Mikrochip MPLAB/MPLAB. Välj Options/Development Mode//Tools, stall in MPLAB SIM, PIC6F84 och tryck på Apply och sedan på OK. Välj Project/New Project, bläddra till din katalog, skriv UPPGIFT.PJT i File Name, tryck OK, OK. Editorn är en slags enkel ordbehandlare, med speciella egenskaper, som kan accepteras av assemblerprogrammet. Det finns en mängd finesser såsom förgmärkning av reserverade ord och debughjälp. Välj File/New och mata in följande kod i editor fönstret: LIST P=6F84 ;Väljer processor #INCLUDE P6F84.INC ;Inkluderar en fil som innehåller alla ;vanliga registerdefinitioner (EQU). ;Bl.a. definieras att ;PORTA ligger på adress x5. ;Include-filen kan uteslutas men då måste man ;definiera all använda "registernamn" själv ;eller använda den rätta adressen i koden. ORG ;Startar på vid reset BSF STATUS, RP ;Väljer minnesbank CLRF TRISA ;Hela Port A utgång MOVLW xff MOVWF TRISB ;Hela Port B ingång BCF STATUS,RP ;Åter till Bank mikroprocessorer Programexempel AND-funktionen

;Huvudprogram MAIN MOVLW x3 ;Ladda W med x3 SUBWF PORTB, W ;Subtrahera PORTB med W:s innehåll X3 BTFSC STATUS, ;Testa om result eller GOTO ETTST ;Om testet gav => Ettställ PortA, bit BCF PORTA, ;Om testet gav => Nollställ PortA, bit GOTO MAIN ;Kolla en gång till ETTST BSF PORTA, ;Ettställ PortA, bit GOTO MAIN ;Kolla en gång till END Välj File/Save as, bläddra fram till din katalog (Borde vara där redan), fyll I UPPGIFT.ASM i rutan File Name, OK. Några kommentarer till källkoden på föregående sida x LIST P=6F84 betyder att data är skrivet som hexadecimal kod Väljer processor #INCLUDE P6F84.INC Inkluderar en fil som innehåller alla vanliga registerdefinitioner (EQU). Bl.a. definieras att PORTA ligger på adress x5. Include-filen kan uteslutas men då måste definiera all använda "registernamn" själv eller använda den rätta adressen i koden. ORG Programkoden programmeras in i kapseln med start på adressen efter ORG dvs x. Det är praktiskt att göra så eftersom resetvektorn (något som pekar dit där processorn ska börja köra efter strömpåslag) pekar på adressen. BSF STATUS,RP Väljer minnesbank där porta s datariktningsregister finns. BCF STATUS,RP Åter till bank där det mesta vi behöver finns MAIN * * /div programkodrader/ * GOTO MAIN END 4. Editera Projektet Detta skapar en evig slinga som processorn kör i all evinnerlig tid (till vi stänger av den) Måste finnas i slutet i varje källkodsfil. Här sätter man parametrar för projektet; Vilken processor, vilka källkodsfiler ska ingå osv Välj Project/Edit Project, tryck på Uppgift(.hex) I rutan Project Files, klicka på Add Node och markera UPPGIFT.ASM, OK I Development Mode ska det stå MPLAB-SIM, 6F84, om inte, tryck på Change och ändra det. Tryck OK i Edit Project -fönstret. 5. Assemblera koden Assemblering kallas det steg då vi gör om assemblerkoden till maskinkod, dvs de kombinationer av :or och :or som datorn kan förstå. Dessutom bestäms var olika delar såsom programkod, funktioner och variabler ska läggas i minnet. Verktygsknappen längst till vänster används för att bläddra mellan olika verktygslådor. Blädra fram simuleringsverktygen (kännetecknas av att näst sista knappen har glasögon). mikroprocessorer Programexempel AND-funktionen

Tryck på Grön tratt som det rinner blått ur (sista knappen) för att assemblera koden. Om allt är bra ska du få en varning som ber dig kontrollera att Banks bits are correct. Om du i Build results -fönstret dubbelklickar på en varning eller felmeddelande så hamnar man i källkoden på den rad som genererade felmeddelandet. Om du fick ett felmeddelande, dubbelklicka på det och korrigera ffelet i källkoden och tryck på trattknappen igen. 6. Simulering Simulering kallas det när man testkör programmet i datorn. Ingångarnas nivåer kan styras med Debug/Simulator stimulus/asyncronous Stimuli. Då får man upp ett fönster med knappar. För att kunna använda en knapp måste man först definiera vad den ska göra genom att högerklicka på den och välja vilken ingång den ska påverka och vad som ska göras med den ingången. Definiera upp två knappar för att sätta RB och RB höga, samt två knappar till för att sätta dem låga. Ett tyck på SFR verktyget öppnar ett fönster som visar registren. Ett tryck på reset-verktyget (Bild av kretsen) återställer programmet. Ett tryck på steg-verktyget (två skosulor) utför en instruktion i programmet. I editor-fönstret syns vilken instruktion som står näst i tur att utföras. Stega igenom programmet och studera hur W och portarna ändras vid olika värden på RB och RB. Observera också hur programpekaren PC pekar på nästa instruktion som ska verktällas. Vi ska använda PC senare så det är viktigt att ni förstår dess funktion. 7. Programmering av krets Det finns lite olika kapselprogrammerare i omlopp. Här hänvisas till två. a. PICSTART Denna programmerare kommer från Microchip och sköts direkt från programvaran MPLAB. Anslut programmeraren till en serieport på datorn, samt spänning. Sätt in en PIC6F84 i nollkraftsockeln på programmeraren. OBS! Var noga med att placera den rätt och vända den så att pin vid gropen på kreten placeras vid på programmeraren! Välj Picstart plus/enable programmer så söker MPLAB kontakt med programmeraren. Justera följande: Device 6F84 Oscillator(Vanligen RC) Watchdog timer (vanligen OFF) Power up timer(säkrast med ON) Code Protect (OFF) Tryck på program -knappen Ta loss kapseln, koppla upp och testkör. b. "PIC Programmer" Detta är en programmerare från en fristående källa. Särskild programvara används. (Finns i regel att ladda ner från kursens hemsida.) Starta prgrammet NTPicprog.exe Anslut programmeraren till en serieport på datorn. Sätt in en PIC6F84 i sockeln på programmeraren. OBS! Var noga med att vända den rätt! /Programmera kapseln/ mikroprocessorer Programexempel AND-funktionen 3

Ta loss kapseln, koppla upp och testkör. 8. Inkoppling +5 Volt till Vdd och MCLR (Kolla MCLR i databladet sid 4). Volt till Vss 47 el. 5 kω motstånd mellan Osc och Vdd. När man kommit igenom alla stegen en första gång utan att misslyckas med något så känner man sig väldigt nöjd. Diverse misslyckanden i början hör till vanligheterna vid programmering. Utvecklingsprogrammet MPLAB förenklar dock felsökning och ändring av källkoden. AND-funktionen som mikroprocessorinstruktion. Maskning I kopplingsschemat anslöts RB RB7 till noll (jord) för att signaler från dessa inte skulle störa signaler från RB och RB när vi skulle göra en jämförelse med %. (OBS! de binära bitarna grupperas fyra och fyra för att göra binärkoden mera lättläst). Ett annat sätt att sålla bort ointressanta signaler är att maskera dem. Vid denna maskering används den digitala funktionen AND. Antag att W innehåller och man vill nollställa fyra bitar längst till vänster och ha de fyra bitarna längst till höger orörda.. En AND-operation med kan ordna detta. I ett räkneschema (algoritm) kan det se ut så här: W före ANDLW ANDLW med W efter ANDLW AND-operationen utförs för varje bit. Endast där det finns två ettor i samma bitposition kommer det nya accumulatorinnehållet att bli en etta. Ett praktiskt sätt att nollställa signaler som för tillfället är ointressanta, som fått ett eget namn: Maskning. Programexempel OR-funktionen Uppgift: att realisera en -ingångars OR-grind med PIC6F84. Specifikation Sanningstabell a b f Schemasymbol mikroprocessorer Programexempel OR-funktionen 4

Kopplingsschema VCC 5Vdc 33 33 3 RA RA3 PIC6F84 RA RA 8 7 6 R3 33 R4 33 R5 C VCC 5Vdc 5 k 4 5 33n 5 4 U4 6 RB 3 U3 7 RB U 8 RB U 9 RB3 R6 Källkod LIST P=6F84 ;Väljer processor #INCLUDE P6F84.INC ;Inkluderar en fil med reg.defin. ORG ;Startar på vid reset BSF STATUS, RP ;Väljer minnesbank CLRF TRISA ;Hela Port A utgång MOVLW xff MOVWF TRISB ;Hela Port B ingång BCF STATUS,RP ;Åter till Bank ;Huvudprogram MAIN MOVF PORTB, ;Flytta portb's innehåll till W-registret ANDLW X3 ;Maska fram de två bitarna vi är intresserade av MOVWF XE ;Flytta resultatet till adress xe MOVLW x ;Ladda W med x SUBWF xe, W ;Subtrahera det som tidigare låg på PORTB och nu ;ligger på xe med W:s innehåll x BTFSS STATUS, ;Testa om result eller GOTO ETTST ;Om testet gav => Ettställ PortA, bit BCF PORTA, ;Om testet gav => Nollställ PortA, bit GOTO MAIN ;Kolla en gång till ETTST BSF PORTA, ;Ettställ PortA, bit GOTO MAIN ;Kolla en gång till END Pröva gärna att ettställa övriga ingångar på RB. Funktionen ska inte påverkas, då vi maskat bort dessa bitar. mikroprocessorer Programexempel OR-funktionen 5

Digitala kretsar Digitala kretsar och nät kan sorteras in i två grupper: kombinatoriska kretsar sekvenskretsar. För dessa två grupper av digitala funktioner gäller följande definitioner: KOMBINATORISK KRETS: Utsignalerna bestämmes enbart av insignalernas värden. SEKVENSKRETS: tillstånd. Utsignalerna bestämmes av insignalerna och kretsens tidigare De två typerna av funktioner kan illustreras med nedanstående bilder: KOMBINATORISK KRETS SEKVENSKRETS i i insignaler TORISK u u utsignaler In KOMBINA- Kombinatorisk Ut in KRETS un krets Minne för tidigare tillstånd Kombinatoriska funktioner (Kombinatorik) Digitala system är ofta sådana att funktionen inte kan beskrivas med enkla AND,NAND, OR, NOR-grindar, utan man måste kombinera ett flertal grindar. En del av dessa enkla, vanligt förekommande, digitala system har fått egna namn och symboler. EXOR oxh EXNOR är sådana digitala funktioner EXOR. Sanningstabell a b f Schemasymbol a b = Det boolska funktionsuttrycket blir: f = ab + ab "Ettorna" i kolumnen för funktionen i tabellen (de tillfällen då funktionen är sann) plockas ut och bildar en summa av produkter. Första tillfället där f= ser vi att a= och b=. Detta skrivs som ab. f mikroprocessorer Digitala kretsar 6

EXOR-grinden är så vanlig att den har fått en egen operatorsymbol. Den kallas ibland XOR. Den sammansatta funktionen f = ab + ab kan då skrivas som f = a b är en icke Booelsk operator., det vill säga de logiska lagarna gäller i allmännhet inte för EXORfunktionen. EXNOR Sanningstabell a b f Schemasymbol a b EXNOR är den inverterande EXOR-funktionen. EXNOR kallas ibland XNOR. = f Programexempel 3 EXOR-funktionen Kopplingsschema VCC 5Vdc 33 33 3 RA RA3 PIC6F84 RA RA 8 7 6 R3 33 R4 33 R5 C VCC 5Vdc 5 k 4 5 33n 5 4 U4 6 RB 3 U3 7 RB U 8 RB U 9 RB3 R6 Källkod LIST P=6F84 #INCLUDE P6F84.INC ORG ;Väljer processor ;Startar på vid reset BSF STATUS, RP ;Väljer minnesbank CLRF TRISA ;Hela Port A utgång MOVLW xf MOVWF TRISB ;Hela Port B ingång mikroprocessorer Programexempel 3 EXOR-funktionen 7

BCF STATUS,RP ;Åter till Bank ;Huvudprogram MAIN MOVLW x ;Ladda W med x SUBWF PORTB, W ;Subtrahera PORTB med W:s innehåll X BTFSC STATUS, ;Testa om result eller GOTO ETTST ;Om testet gav => Ettställ PortA, bit MOVLW x ;Ladda W med x () SUBWF PORTB, W ;Subtrahera PORTB med W:s innehåll X BTFSC STATUS, ;Testa om result eller GOTO ETTST ;Om testet gav => Ettställ PortA, bit BCF PORTA, ;Om testet gav => Nollställ PortA, bit GOTO MAIN ;Kolla en gång till ETTST BSF PORTA, ;Ettställ PortA, bit GOTO MAIN ;Kolla en gång till END Källkodsbeskrivning Här jämför vi med de insignalskombinationer som ska ge en etta ut. När vi jämfört med alla signaler som ska ge ett ut och inte hittar någon kombination som medför uthopp till SET så ska PB nollställas. OBS!! I koden finns ingen maskning av insignalerna. Infoga själv maskning i källkoden ovan. Programmeringstips Subrutin Väldigt ofta behöver man samma programrutin vid flera tillfällen. Då är det bra att kunna anropa samma programrutin upprepade gånger istället för att måsta skriva om den helt och hållet gång på gång. Vid assemblerprogrammering finns, liksom i övrig programmering, möjlighet att anropa programrutiner genom att använda särskilda hopp -instruktioner. Den instruktion som används för PIC6F84 är: CALL k ;JUMP TO SUBROUTINE k Då görs ett uthopp i programmet till det ställe som anges efter CALL. Exempel CALL RUTIN Subrutinen måste då ges namnet RUTIN och skall avslutas med RETURN RETURN ;RETURN FROM SUBROUTINE Denna instruktion medför ett återhopp till instruktionen efter uthoppsinstruktionen. Exempel RUTIN MOVWF PORTA RETURN ;Lägg ut utsignalen på port A Man kan anropa subrutiner i subrutiner i subrutiner... - Detta kallas nästlade subrutinanrop. I många processorer är det tillgängligt minne som begränsar antalet nästlade subrutinanrop. I PIC6F84 är det begränsat till åtta nästlade anrop. mikroprocessorer Programmeringstips 8

Ett exempel på nästlade anrop i två nivåer: PROGRAMKOD * CALL RUTIN * RUTIN PROGRAMKOD * * CALL RUTIN * RETURN RUTIN PROGRAMKOD * * RETURN 3 4 Observera att CALL inte kan ersättas av GOTO. Vid instruktionen CALL lagras nämligen återhoppsadressen på stacken, så att programmet kan hitta tillbaka vid RETURN. Vid GOTO lagras ingen återhoppsadress, så programmet kan inte hitta tillbaka. GOTO används bara när man vill flytta till ett annat ställe i koden och sedan fortsätta exekvera koden där utan att återvända till anropsstället. Söka värden i en tabell med hjälp av index Ett vanligt sätt att hitta värden för en funktion är att samla dem i en tabell. När man vill hämta värden ur en sådan tabell till W-registret kallas det för att man laddar W-registret indexerat. Att söka värden i en i förväg upprättad tabell med data, är mycket vanligt rutin för en mikrorocessor. I många processorer finns ett speciellt register, indexregistret, som används för hitta rätt värde i den tabell man upprättat. Hos PIC6F84 finns dock inget sådant register så man måste hitta ett annat sätt att lösa det hela. Vi använder ett indirekt sätt att indexera genom att påverka programpekaren PC. Vi använder den ngt speciella instruktionen RETLW k ;Return with Literal k in W som används så här: CALL TABLE ;W contains table offset value ;W now has table value TABLE ADDWF PC ;W = offset RETLW k ;Begin table RETLW k ; RETLW k3 ; RETLW k4 ; RETLW kn ; End of table. Vi anropar TABLE någonstans I vårt huvudprogram med ett bestämt värde i i W-registret. Det är detta värde som vi senare ska använda som index i vår sökning i tabellen. Det första vi gör i TABLE är att vi adderar vårt index som finns i W-registret med programpekarens innehåll och lägger innehållet i PC. Hade vi tex siffran i=3 kommer mikroprocessorer Programmeringstips 9

programpekaren nu att peka på RETLW k3 som kommer att återvända till huvudprogrammet med k3 s värde i W-registret Följande källkodsexempel (som läser in ett tal på port B och lägger ut så många :or på port A) visar på användningen av en tabell.. Läser av port B. Låt oss anta att där stod det, dvs 4.. Anropar kodavsnittet vid TABLE 3. Återvänder från TABLE med det värde i W-registret som finns på den plats i tabellen som motsvarar värdet på port B. 4. Skriver ut värdet på port A MAINTAB MOVF PORTB, ; CALL TABLE ; MOVWF PORTA ;4 GOTO MAINTAB TABLE ADDWF PCL ;W = offset RETLW x ;Begin table RETLW x RETLW x3 RETLW x7 RETLW xf ;3 RETLW xf RETLW x3f RETLW x7f RETLW xff END Här kan vi nu riktigt se den uppenbara fördelen med att använda enchipsprocessorn för att realisera digitala funktioner. Vi behöver endast en krets. Även om funktionen är mycket komplicerad klarar vi oss med en enda kapsel, nämligen enchipsdatorn. Sekvensfunktioner Tillståndsdiagram. (Automat, State Machine) För att illustrera och beskriva en sekvensfunktion är det mycket lämpligt att använda tillståndsdiagram. tillstånd med tillståndsbeteckning (tillstånds-) övergång S S S3 S mikroprocessorer Sekvensfunktioner

Denna sekvenskrets har fyra tillstånd, S, S, S, S3. Tillståndsdiagrammet visar hur en övergång från ett tillstånd till ett annat kan ske. I detta exempel finns inga egentliga insignaler eller utsignaler. - Funktionen är ganska meningslös. Genom att komplettera diagrammet något kan en mera meningsfull sekvenskretsfunktion åstadkommas. Programexempel 4 Sekvensfunktion S3/Z3 S/Z S/Z S/Z Z, Z, Z, Z3 anger vilka utsignaler som ska genereras av de olika tillstånden. Denna typ av tillståndsdiagram där utsignalerna är knutna till tillstånden kallas för en MOORE-automat. För att realiseras digitalt måste tillståndsdiagrammet kodas - åtminstone vissa delar av det. Vi väljer att koda utsignalerna såhär: Utsignal Kod Z Z Z Z3 I detta exempel är ordningen på tillstånden given. Z, Z, Z, Z3,Z, Z,Z, o s v. Inga insignaler kan påverka ordningen. Kopplingsschema. 33 33 3 RA RA3 PIC6F84 RA RA 8 7 6 R3 33 R4 33 R5 C VCC 5Vdc 5 k 4 5 33n 5 4 6 RB 3 7 RB 8 RB 9 RB3 Utsignalerna på port A kopplas till lysdioder för att indikera utsignaler. mikroprocessorer Programexempel 4 Sekvensfunktion

Källkod. Observera att denna tillståndsmaskin inte klockas med en klockingång på det sätt som är vanligt. Tillståndsmaskinen går av sig själv från tillstånd till tillstånd med en tidsintervall som bestäms av en tidsfördröjningsrutin (WAIT). Tidsfördröjningen kan ändras genom att ändra några värden i WAITrutinen. LIST P=6F84 ;Väljer processor #INCLUDE P6F84.INC ;Inkluderar fil med reg.definitioner VAR EQU xc VAR EQU xd VAR3 EQU xe TILLST EQU x3c ;Variabel för nuv. tillstånd ORG ;Startar på vid reset BSF STATUS, RP ;Väljer minnesbank CLRF TRISA ;Hela Port A utgång MOVLW xf MOVWF TRISB ;Hela Port B ingång BCF STATUS,RP ;Åter till Bank ;Huvudprogram MAIN S CALL WAIT ;Anropar subrutin WAIT CLRF TILLST ;Nollställer variabeln TILLST som repr. nuv. tillstånd MOVF TILLST, ;Flyttar tillståndets värde till W-reg. CALL UT ;Anropar UT med nuv. tillståndet i W S CALL WAIT INCF TILLST ;Går till nästa tillstånd MOVF TILLST, CALL UT S CALL WAIT INCF TILLST MOVF TILLST, CALL UT S3 CALL WAIT INCF TILLST MOVF TILLST, CALL UT GOTO MAIN ; *** SUBRUTIN WAIT *** WAIT MOVLW X ;(Ändra Literal för att justera fördröjningen) MOVWF VAR3 ;Lagra W i VAR3 LOOP3 MOVLW x77 (Ändra Literal för att justera fördröjningen) MOVWF VAR ;Lagra W i VAR LOOP MOVLW xaa (Ändra Literal för att justera fördröjningen) MOVWF VAR ;Lagra W i VAR LOOP DECFSZ VAR, ;Räkna ner VAR med ett tills VAR = ;Går sen vidare GOTO LOOP DECFSZ VAR, ;Räkna ner VAR med ett till VAR = GOTO LOOP DECFSZ VAR3, ;Räkna ner VAR3 med ett till VAR3 = GOTO LOOP3 RETURN mikroprocessorer Programexempel 4 Sekvensfunktion

;*** HÄR FÖLJER NU DEN SUBRUTIN SOM GER UTSIGNALER FÖR VARJE TILLSTÅND. *** UT CALL TABLE ;Se tidigare exempel MOVWF PORTA ;Lägg ut utsignalen på port A RETURN TABLE ADDWF PCL RETLW x3 RETLW x6 RETLW xc RETLW x9 ;Ger utsignalerna;,, ;el beroende på nuv. tillstånd. END Kommentarer till källkoden Inledningen är som tidigare i huvudsak ett standardsätt att starta ett PIC-program. Några nya definitioner av namn har tillkommit: VAR EQU xc VAR EQU xd VAR3 EQU xe TILLST EQU x3c Dessa adresser är minnesceller i den så kallade LÄS/SKRIV -delen av minnet. Vi definierar en positioner (adresser) i minnet som vi kan skriva till och läsa från. - Perfekt om vi vill lagra undan värden i variabler och sedan kunna ändra när vi vill. Sedan ger vi alla dessa adresser varsin etikett så att vi lätt kan känna igen dem i koden. Ger lättare programmering. TILLST är en variabel som används i huvudprogrammet och VAR, VAR och VAR3 används i en subrutin som kallas WAIT. Efter VAR EQU xc hänvisar vi till adressen xc varje gång vi använder VAR Ex.vis är: MOVWF VAR3 och MOVWF xe exakt samma instruktion i vårt program (Flyttar värdet som finns i adressen xe till W-registret). Subrutinen WAIT Genom sin konstruktion har nästan alla instruktioner i PIC6F84 har en exekveringstid på, µs (om den klockas med MHz), dvs det tar, µs att utföra en instruktion. Med denna hastighet hinner vi aldrig med att se vad som händer med våra utsignaler. Därför skriver man ganska ofta fördröjningsrutiner ofta med enda syftet att fördröja exekveringen. En eller flera minnesceller laddas med tal, för att sedan i så kallade nästlade loopar räknas ned till noll. Studera gärna mera i detalj hur WAIT-rutinen är konstruerad. Denna programrutin är en standardkonstruktion. OBSERVERA! Under utveckling och simulering av källkoden är det lämpligt att ladda "nedräkningscellerna" med små tal, ofta ett (). I annat fall blir simuleringstiden onödigt lång. Programkod simuleras nämligen inte lika snabbt som den exekveras i den riktiga processorn. Övriga subrutiner Huvudprogrammet är konstruerat så att i varje tillstånd anropas subrutiner för de uppgifter som ska utföras. I subrutinen UT hämtas värdet på utsignalen i en tabell. mikroprocessorer Programexempel 4 Sekvensfunktion 3