• No results found

Styrprogram till PIC-processorer för fjärrmanövrerad relämatris

N/A
N/A
Protected

Academic year: 2022

Share "Styrprogram till PIC-processorer för fjärrmanövrerad relämatris"

Copied!
31
0
0

Loading.... (view fulltext now)

Full text

(1)

Styrprogram till PIC- processorer för

fjärrmanövrerad relämatris

i distanslaboratorier

Eric Eskilsson

(2)
(3)

Examensarbete BEE08:05

Styrprogram till PIC- processorer för

fjärrmanövrerad relämatris i

distanslaboratorier

Eric Eskilsson

This thesis is presented as part of Degree of Bachelor of Science in Electrical Engineering

Blekinge Institute of Technology Augusti 2008

Blekinge Institute of Technology School of Engineering

Department of Applied Signal Processing Supervisor: Anders Johansson

Examiner: Anders Johansson

(4)
(5)

Abstract

The aims with this report are to document the upgrade and development of new software for the distance laboratory at Blekinge Tekniska Högskola. The work has been focused on implementing the identification number in a microcontroller, to read its data from a so called look-up table and to be able to control digital components through a serial bus (SPI). The look-up table is a list of data from which the software reads data for the different types of printed circuit boards in the hardware component of the distance laboratory is in focus.

The results of the report are an implemented, upgraded version of the software and all three aims has been accomplished.

Sammanfattning

Syftet med detta arbete har varit att utveckla och uppgradera en ny mjukvara till distanslaboaratoriet på Blekinge Tekniska Högskola, genom att implementera adressen till en microcontroller, att läsa dess data från en så kallad look-up table, samt att kunna styra digitala komponenter med en seriell buss (SPI). Fokus i programmeringen har legat på look-up table, vilket är en datalista som mjukvaran läser funktionsdata från för de olika korttyperna i matrisen.

Resultatet är en implementerad, uppgraderad version av mjukvaran och alla tre målen har gått att genomföra.

(6)

Innehållsförteckning

1. Inledning 1

1.1 Bakgrund ………...….1

1.2 Syfte ...2

1.3 Metod ……….…………...…...…...2

2. Funktionsbeskrivning 3

2.1 Kommunikationsprotokoll ...6

2.2 Den primära styrenheten ...8

2.3 Den sekundära styrenheten ...9

2.4 Digital potentiometer...10

3. Programmet till PIC16F767 11

4. Slutsats/Diskussion 12

Källförteckning ...13

Bilaga 1 ...14

Bilaga 2 ...15

Bilaga 3 ...16

Bilaga 4 ...17

Tabell ...25

(7)

1 Inledning

1.1 Bakgrund

Laborationer ingår vanligtvis i elektronikkurser på högskolor och universitet. Laborationerna utförs i övningslaboratorier utrustade med instrument och nödvändig utrustning. Med en utveckling av ett allt snabbare Internet ges nya möjligheter att fjärrstyra experiment och dessa beprövade undervisningsmetoder kan implementeras på nytt sätt i så kallade distanslaboratorier. Lärosäten utan tillgång till övningslaboratorier kan via ett distanslaboratorium erbjuda utbildningar, där laborationer ingår. Erbjudandet kan också riktas till studenter som vill experimentera utanför kontorstid eller personer som har svårt att ta sig till önskat lärosäte.

Vid Blekinge Tekniska Högskola, BTH finns ett distanslaboratorium. I laboratoriet ingår bland annat en kopplingsmatris, se figur 1 (s 1). Denna rapport beskriver en ny version av programvaran i matrisen. Användaren ser en bild på ett kopplingsdeck på sin dator och kan bygga upp olika kopplingar på detta. Informationen om kopplingen lagras i en databas, som i sin tur sänder vidare informationen till en mät- och utrustningserver, där de mätinstrument, komponenter och signalkällor som angetts av användaren kopplas in.

Figur 1. En övergripande bild av distanslaboratoriet.

(8)

1. 2 Syfte

Syftet med arbetet är att utveckla en ny mjukvara till de PIC-kretsar som styr den relämatris vilken sköter inkoppling av olika komponenter och instrument i distanslaboratoriet på Blekinge Tekniska Högskola i Ronneby. Den nya programvaran kommer även att kunna styra nya digitala komponenter med SPI, såsom en digital potentiometer för mätning av operationsförstärkare och en AD/DA-omvandlare. SPI är ett sätt att seriellt skicka data för att styra digitala komponenter. Detta gör att laboratoriet i framtiden kommer att ha möjlighet att kunna utvidga sitt utbud av olika typer av laborationer. I denna nya version, version 4.1, ska mjukvaran läsa data från en datalista, en så kallad ”look-up table” (se bilaga 1, s 14).

Datalistans data beskriver de funktioner varje korttyp i matrisen har. I systemet finns två olika typer av processorer. För att skilja på de båda typerna kallas här den processor som fungerar som master den primära styrenheten och övriga som är slavar de sekundära styrenheterna (se Figur 6, s 8). I en tidigare version av programvaran bestämdes identiteten för slavarna med en dip-switch, men i den nya versionen kommer identiteten implementeras i chipet vid programmeringen. En 7-bitars adresskod bestämmer vilken identitet varje processor har.

1. 3 Metod

Den metod som här används är att utgå från tidigare version av mjukvaran till matrisen och sedan med hjälp av lämpliga datablad, för bland annat processorkretsarna, Internet och diskussioner med handledare ta fram vilka funktioner de olika PIC-processorerna i matrisen ska ha och implementera dem. Därefter testas funktionerna, modifieras och testas på nytt tills önskvärt resultat nås.

(9)

2 Funktionsbeskrivning

Matrisens uppgift, i distanslaboratoriet, är att utföra de kopplingar som görs manuellt på en kopplingsplatta i ett elektriskt laboratorium under en laboration, som att göra uppkopplingar med komponenter, till exempel resistorer och utföra mätningar med digitalmultimeter eller oscilloskop när en spänningskälla och signalgenerator har kopplats in i kretsen. För inkopplingen av dessa komponenter och instrument i matrisen används reläer.

För att dela upp de olika funktionerna i matrisen, innehåller den tre olika korttyper, (figur 2, s 3). Första korttypen heter huvudkort (Control Board) och sköter inkopplingen av en funktionsgenerator. Följande korrtyp kallas instrumentkort (Connection Board) och kopplar in antingen en digitalmultimeter eller ett oscilloskop, för att få båda funktionerna behövs alltså två instrumentkort. Den tredje korttypen heter komponentkort (Component Board) och ansluter de elektriska komponenter, som man bygger upp kretsar med för att mäta på.

Komponentkortet kan ha upp till 10 stycken inkopplingsbara komponenter per kort.

Matrisen är skalbar, det vill säga att den kan byggas ut genom att sätta dit ytterligare komponentkort. Alla korten har varsin egen identitet som definieras av en adressbyte (7 bitar).

Maximalt 127 kort kan anslutas till matriskopplingen, eftersom 7 digitala bitar används till adressen och adress 000 inte används(27 -1). Kommunikationen mellan korten sker via I2C (se bilaga 4, s17).

Figur 2. Matrisen med de tre olika typerna av kort i matrisen.

(10)

Det finns bara ett huvudkort i hela matrisen. Huvudkortet får information från servern via en USB-port och skickar informationen vidare till de övriga korten i matrisen. På huvudkortet sitter den så kallade primära styrenheten, som är en PIC-processor med modellbeteckning PIC18F4550 (se 2.2, s 8). Dess uppgift är att omvandla USB-information till I2C i matriskopplingen. På varje kort sitter en sekundär styrenhet, med modellbeteckning PIC16F767, som styr matrisreläer eller styrbara IC-kretsar, till exempel digitala potentiometrar eller AD/DA-omvandlare, vilka kopplas in för de olika mätningarna. På huvudkortet sköter den sekundära styrenheten inkoppling av funktionsgeneratorn och andra spänningskällor.

Instrumentkorten finns det två av i denna version, men de kan utökas till flera, då på bekostnad av det maximala antalet komponentkort som kan anslutas. Totalt är det maximalt, som ovan nämnts 127 kort, varav ett är huvudkort och övriga kan antingen vara instrumentkort eller komponentkort. Detta är teoretiska beräkningar för att påvisa möjligheterna. Med många kort i matrisen krävs dock både förstärkning och avstörning för att enheten ska fungera driftsäkert. Instrumentkortens sekundära styrenhet kopplar in ett oscilloskop och en digitalmultimeter (här med BNC-ingångar).

Komponentkortet kopplar in komponenter för att kunna mäta och göra olika uppkopplingar.

Både komponentkorten och instrumentkorten saknar den primära styrenheten men har den sekundära. På komponentkorten väljer den sekundära styrenheten vilket styrobjekt som ska styras. För det mesta är styrobjekten reläer som ska slå till eller från, men i vissa fall kan det också röra sig om att styra vissa digitala kretsar som exempelvis en digital potentiometer eller en AD/DA-omvandlare.

Figur 3. Blockschema för signalvägarna i matrisen.

(11)

Figur 3 (s 4) visar ett blockschema över alla signalvägar. Den primära styrenheten får en digital sträng av bytes från servern i USB-format. Dessa omvandlas i den primära styrenheten till I2C och skickas ut till de sekundära styrenheterna som i sin tur styr sina objekt. I detta fallet är det I2C-utgången på den primära styrenheten som är ihopkopplad med I2C-ingångarna på alla processorer i den sekundära styrenheten. För att välja vilken processor informationen gäller har varje processor en egen adress.

(12)

2.1 Kommunikationsprotokoll

Informationen som kommer via USB från servern är uppdelad i bytes och sänds med en adressbyte på 7 bitar. Den 8:e biten är alltid låg eftersom kommunikationen bara går från mastern till slavarna (se bilaga 2, s 15). Efter adressbyten följer datainformationen i två eller tre bytes. Instrumentkorten behöver 3x7 databitar för att styra sina 21 reläer. Tre databytes behöver även de komponentkort, som har digitala komponenter och då skickar SPI-värdet i sista byten.

Adressen gäller för det kort där styrobjektet sitter. Varje kort har en specifik identitet, processorns adress i ”I2C-bussen”, mellan 0000 0001 och 0111 1111 (01h – 7Fh).

Figur 4. Mastern sänder till slavarna.

I tabellen nedan visas de tre olika korttyperna, huvud- , instrument- och komponentkort och hur många databyte korttypen behöver. Tabellen (Figur 5, s 7) visar också vilka reläer som är knutna till fälten.

(13)

Figur 5. Tabell för vilka reläer som aktiveras på de tre olika korten.

Huvudkort

Byte

no. Bit 07 Bit 06 Bit 05 Bit 04 Bit 03 Bit 02 Bit 01 Bit 00

Notes

0 I2C adress 0

1 0 7 6 5 4 3 2 1 Relänummer, satt bit 2 0 14 13 12 11 10 9 8 betyder slutet relä 3 0 0 0 0 0 0 0 0 Används ej

Instrumentkort

Byte

no. Bit 07 Bit 06 Bit 05 Bit 04 Bit 03 Bit 02 Bit 01 Bit 00

Notes

0 I2C adress 0

1 0 7 6 5 4 3 2 1 Relänummer, satt bit 2 0 14 13 12 11 10 9 8 betyder slutet relä 3 0 21 20 19 18 17 16 15 Används ej

Komponentkort

Byte

no. Bit 07 Bit 06 Bit 05 Bit 04 Bit 03 Bit 02 Bit 01 Bit 00

Notes

0 I2C adress 0

1 0 7 6 5 4 3 2 1 Relänummer, satt bit 2 0 14 13 12 11 10 9 8 betyder slutet relä

3 1 Potentiometervärde Används ej

(14)

2.2 Den primära styrenheten

Den primära styrenheten består av en processor med typbeteckning PIC18F4550. Det är en ganska stor processor med 40 ben. Den kan samtidigt hantera både USB och I2C (ben 23, 24 respektive 34,35 se figur 6 s 8), eftersom detta finns implementerat i hårdvaran inuti processorn. Full-speed USB (12 Mbs, mega bit per sekund) tas emot på USB-ingången och utgångarna SCL och SDA sänder vidare informationen i ”I2C-bussen”.

I denna nya version har den primära styrenheten uppdaterats så att alla utgångar hos den sekundära styrenheten (se 2.3, s 9) nu kan styras, vissa utgångar användes inte tidigare.

Kommunikationen mellan USB och I2C, som i tidigare version har varit korskopplad, är numera rakkopplad.

Figur 6 Den primära styrenheten och två processorer från den sekundära styrenheten.

(15)

2.3 Den sekundära styrenheten

Den sekundära styrenheten består av en processor av typen PIC16F767. Det är en 28-bens processor med 24 in- eller utgångar. Två av dessa är anslutna till ”I2C-bussen” (ben 14,15 i figur 6 s 8). De övriga används som utgångar och är kopplade till varsitt relä. Utgång RA4 används ej. Olika många utgångar används beroende på vilka kort reläerna sitter på (huvud-, komponent- eller instrumentkort) och vad kortet gör.

Varje PIC16F767 har egen identitet lagrad i processorn, dess egna adress. Är identiteten i första byten rätt läses följande tre bytes in, de två första har värde 0-127 och den sista 0-255.

Den sista byten används till att styra de sju sista reläerna på instrumentkorten (0-127) eller för att lagra ett SPI-värde (se bilaga 3, s16) för en digital komponent (128-255). Bit 7 styr bytens funktion. Byte 4 kan också vara utan värde på komponentkort utan digital potentiometer och på huvudkortet.

De båda första bytens värden jämförs med en Look-up table (se bilaga 1, s 14), en lista som är individuell för de tre olika korten.

Vissa komponentkort har en digital potentiometer som används vid speciella kopplingar.

Denna potentiometer styrs med SPI-kommunikation. PIC16 har både I2C-kommunikation och SPI-kommunikation implementerat i hårdvaran inuti kretsen (se bilaga 3, s16). Tyvärr sker denna kommunikation på samma ben och man får därför välja att antingen använda I2C eller SPI. Eftersom I2C-kommunikationen är mer omfattande används den på de nämnda benen på PIC-kretsen (ben 14 och 15 se figur 6, s 8). SPI-kommunikationen emuleras istället i mjukvara. Ben 26, 27 och 28 på den sekundära styrenheten används för SPI-kommunikation.

CS-signalen tas ut på ben 28 (RB7). Den är låg då potentiometern ställs in och hög annars.

Ben 27 (RB6) är CLK på potentiometern, SPI´ns klocka. På ben 26 kommer det nya digitala värdet som ska ställas in, till ingång SDI på den digitala potentiometern (se 2.4, s 10).

(16)

2.4 Digital potentiometer

Den digitala potentiometern har typbeteckningen AD7376. Det är en digital potentiometer med dubbla matningar ( 15V). Det innebär att man kan mata in 30 volt mellan potentiometerns ytterändar (anslutning A och B, figur 7, s 10) och ta ut 0-30 V på mittbenet (W).

Figur 7. Den digitala potentiometern.

AD7376 finns i fyra olika utföranden, beroende på vilken maxresistans man vill ha.

Resistanserna är 10 kohm, 50 kohm, 100 kohm (se tabell s 25) (eller 1 Mohm). Resistansen ställs sedan in med 128 steg med formeln:

Figur 8. Formel för uträkning av potentiometerns värden.

D är det inställda bitvärdet (0-127) och RAB totalresistansen för potentiometern (10 kohm, 50 kohm, 100 kohm eller 1Mohm). RW är en inre resistans som är ungefär 120 ohm (se tabell, s 25).

Potentiometern styrs via ett 3-tråds SPI-gränssnitt (se Bilaga 3, s 16). Ett dataord till potentiometern består av 7 bitar. Datan skickas seriellt med den mest signifikanta biten (MSB) först.

(17)

3. Programmet till PIC16F767

Programmet till den sekundära styrenheten är uppdelat i följande delar:

• Initialisering

• Huvudprogrammet

• Interrupt

• Läsa buffert

• Koda av och sätta utgångar

• Look-up table

• SPI

Flödesschemat nedan (figur 9, s 11) visar att programmet börjar med att initialisera. I initialiseringen bestäms vilka utgångar som ska användas. I detta programmet används alla.

Här ställs också in vilken typ av avbrottsrutin som ska användas, vilken klockfrekvens processorn ska jobba med samt övrig data som behövs för att processorn ska fungera riktigt. I initialiseringen finns också den specifika adress som PIC16F767 svarar på i ”I2C-bussen”

implementerad.

Start

Start Initialisering

Spara i BUF A-C

Ny data i J Koda av data i BUF A-C? look-up table Stop

N Sätt utgång

Figur 9. Flödesschema över programmet för PIC16F767

Huvudprogrammet går i en oändlig loop så länge ingen data kommer i ”I2C-bussen”, det vill säga nej i alternativrutan i flödesschemat. Kommer det data känner avbrottsrutinen av det och sparar, om adressen stämmer, första databyten i BUFA, andra i BUFB och tredje sparas i BUFC. Denna data kodas av med hjälp av en look-up table, en datalista (se bilaga 1, s 14) och utgångarna RA-RC bestäms. SPI-data läses bit för bit från BUFC och skickas seriellt med mest signifikanta bit först (se 2.3, s 9).

(18)

4. Slutsats/Diskussion

Syftet med arbetet har varit att utveckla och uppgradera en ny mjukvara genom att implementera identiteten i processorerna som finns i matrisen. Man ska också kunna läsa dess data från en så kallad look-up table, ett register varifrån data kan hämtas, samt kunna styra digitala komponenter med SPI, ett sätt att styra och ändra värde på digitala komponenter, med den. Man kan lätt byta till en ny look-up table för att ge en processor nya funktioner. SPI- funktionen har testats på en digital potentiometer (AD7376), där den fungerade mycket bra.

Skillnaden gentemot andra SPI-styrda komponenter ligger inte i själva styrningen utan vad de i övrigt används till. Att implementera identitet i mjukvara har fördelen att det inte behövs några extra ingångar för att sätta en ny identitet, som i tidigare version. Benen för dessa ingångar blir nu lediga att kunna användas som utgångar istället. Det behövs också färre kringkomponenter. Nackdelen kan vara att det inte syns på kretsen vilken identitet den har.

Eftersom det handlar om en uppgradering av mjukvaran, visste jag att den i grundutförande skulle fungera. Look-up table var den punkt jag från början trodde skulle vara svårast att genomföra, eftersom jag aldrig tidigare hade jobbat med en sådan och därför inte visste hur jag läste data från den. Därför är det den av punkterna som har ägnats mest tid. Naturligtvis kommer det hela tiden ny teknik och nya lösningar, men idagsläget tycker jag att matrisen är fullt utvecklad.

(19)

Källförteckning Internetlänkar:

Bilder till framsidan och collage av författaren samt från

http://distanslabserver.its.bth.se/ (5/3-08, 10.00)

Datablad från Microchip för PIC18F4550 USB Microcontrollers

ww1.microchip.com/downloads/en/DeviceDoc/39632b.pdf (18/4-08, 14.00)

Datablad från Microchip för PIC16F767 8-Bit CMOS Flash Microcontrollers ww1.microchip.com/downloads/en/devicedoc/30498c.pdf(18/4-08, 14.00)

Datablad från Analog Devices för AD7373 8-Bit digital potentiometer www.analog.com/UploadedFiles/Data_Sheets/AD7376.pdf (18/4-08, 14.00)

Bild från

http://www.esacademy.com/faq/i2c/general/i2cproto.htm (7/5-08, 18.00)

(20)

Bilaga 1 Look-up table

En så kallad look-up table är ett register eller tabell med data där man kan hämta information.

En sådan tabell kan ses i vänster nederkant på Figur 10, nedan. Bitarna i varje byte motsvarar reläer, bit 0 i byte 1 är relä 1, bit1 är relä 2 och så vidare (se övre delen på bilden). I exemplet på bilden är bit 0, 2 och 5 ”ettor” i byte 1, vilket betyder att relä 1, 3 och 6 ska slutas. På platserna 0, 2 och 5 i tabellen läses först de två värdena A och 3, för position 0 (relä1) och sedan A1 och A7. Det betyder att utgång A3, A1 och A7 ska vara höga. Till höger på bilden ser man att det motsvarar utgångarna för relä1, relä3 och relä6, vilka enligt exemplet var ämnade till att dras.

Figur 10. Look-up table, en bit detekteras och ett relä dras.

Listan komponeras speciellt till den korttyp den används till. Det är lätt att ändra funktioner för PIC16F767 genom att bara justeras värdena i listan. Listan är alltid lika lång. De platser som inte nyttjas markeras med ”NULL”, så ignoreras den.

För mjukvaran är det denna lista som skiljer de olika kortens funktioner åt och där deklareras vilka utgångar som ska aktiveras. På instrumentkorten används sista byten i denna Look-up table för att styra SPI-porten.

(21)

Bilaga 2 I2C-Protokoll

Inter-Integrated Circuit (I2C) är ett sätt att kommunicera med två aktiva trådar, SCL (serial clock line) och SDA (serial data line), i en buss mellan en master, den ic-krets som styr kommunikationen, och en eller flera slavar, övriga kretsar som är parallellkopplade till

”bussen” se bild nedan. Kommunikationen kan ske både i riktning från master till slav och tvärtom. I denna applikation sänder endast mastern.

Figur 11. SPI-buss med en master längst till höger och övriga slavar.

Sändningen börjar med en startbit, SDA går låg och SCL är hög. Därefter sänds 7 adressbitar för att specificera vilken slav informationen är ämnad för. Om sista biten i adressen är ”0”

sänder mastern och är den ”1” tar mastern emot från slavarna. Sedan följer databytes. I vårt fall 2 eller 3 stycken, men allmänt tills en stoppbit sänds. Stoppbiten avslutar sändningen och detekteras av att SDA går hög och SCL är hög, se bild.

Figur 12. Start- och stopp-pulser för SPI.

Både adressbyte och databyte sänds med mest signifikanta biten först (MSB).

(22)

Bilaga 3 SPI-Protokoll

Serial Peripheral Interface (SPI) är en defactostandard för att styra digitala komponenter. För att styra komponenterna krävs tre trådar, CLK (clock), CS (chip select) och SDI (serial data in). Informationen skickas seriellt i en grupp om 7 bitar. Under sändningen är CS låg och datan skickas med den mest signifikanta biten (MSB) först in på SDI och läses av på CLK´s positiva flank. Det innebär att klockan styr avläsningen av data och gör kommunikationen okännslig för osynkroniserad klockning. När de 7 bitarna har sänts går CS hög igen och komponenten intar det nya värdet.

Figur 12

Figur 13. Klockpuls(CLK), Data(SPI) och manöver(CS).

För att styra flera komponenter med SPI kan man koppla ihop dem i en så kallad ”daisy chain”. Då är CLK och CS parallellt kopplade till varje komponent och utgången (SDO) från första komponenten är kopplad till ingången (SDI) på nästa komponent och så vidare.

Datasträngen kommer då att addereas med 7 bitar för varje extra komponent. Styr man till exempel 3 stycken digitala reistorer så blir datasträngen 21 bitar lång. De 7 första bitarna gäller den komponent som är längst bort i kedjan och de 7 sista för den närmast.

(23)

Bilaga 4

Detaljerad programvarubeskrivning

2.1 IOINIT

2.1.1 Funktioner

Reset av registerna PORTA, PORTB, PORTC, TRISA, TRISB och FLAGS. PORTA, PORTB och PORTC är portanslutningar till processorn. TRISA och TRISB gör alla ben i PORTA och PORTB till utgångar. FLAGS är en markör för vilka byte som kommit in från I2C-bussen och vilka som har lästs.

• PORTA = 0

• PORTB = 0

• PORTC = 0

• TRISA = 0

• TRISB = 0

• FLAGS = 0 Parametrar:

PORTA PORTB PORTC TRISA TRISB FLAGS

2.1.2 Funktioner

Alla anslutningar till PORTA och PORTB sätts här till digitala in- och utgångar (bit 0-3). Det finns 16 valmöjlighet (0-F) att välja antal analoga ingångar istället för digitala I/O. Bit 4-7 (här 0000) säger att de 6 minst signifikanta bitarna i ADRESL läses som ´0´, A/D Clock divideras inte med 2, VREF- är anluten till VSS och VREF+ till VDD.

• ADCON1 = 0Fh Parametrar:

ADCON1

2.1.3 Funktioner

Komparatormodulen i processorn används inte och är avstängd.

(24)

• CMCON = 07h Parametrar:

CMCON 2.1.4 Funktioner

Anslutningarna till PORTC är alla utgångar utom de 2 ingångarna till I2C (ben 14, 15).

• TRISC = 18h Parametrar:

TRISC

2.1.5 Funktioner

Anslutning RE3 är ingång. Register TRISE är i övrigt satt i defaultläge.

• TRISE = 08h Parametrar:

TRISE

2.1.6 Funktioner

MatrixLevel bestämmer processoradressen. Processorns verkliga adress är 2x(Matrixlevel + 32), vilket ger jämna adresser mellan 64 och 126 (40h-7Eh), 32 möjliga adresser.

• MatrixLevel = 00h – 1Fh Parametrar:

MatrixLevel

2.1.7 Funktioner

Bit 6-4 (här 7) visar att sändningshastigheten är max 8MHz. Systemet drivs inte från den primära systemklockan utan från oscillator TIMER1 eller INTRC som en sekundär systemklocka. Frekvensen är stabiliserad. Oscillator mode definieras av FOSV<2:0>.

• OSCCON = 74h

(25)

2.1.8 Funktioner

Stödjer; Synchronous Serial Port Interrupt (SSP). Stödjer ej; Parallell Slave Port Interrupt (PSP) read/write interrupt, A/D Converter interrupt, AUSART receive interrupt, CCP1 interrupt, TMR2 to PR2 interrupt, TMR1 overflow interrupt.

• PIE1 = 08h Parametrar:

PIE1

2.1.9 Funktioner

Inget skydd för collision och overflow. Serieporten är konfigurerad för I2C och klockas från mastern. Processorn är en slav med 7-bitars adress.

• SSPCON = 36h Parametrar:

SSPCON

2.1.10 Funktioner

Global Interrupt och Peripfheral Interrupt används.

• INTCON = C0h Parametrar:

INTCON

2.1.11 Funktioner

I2CADD är den valda adressen (Matrixlevel) + 32 (20h). Multipliceras med 2 för att bli processorns adress (SSPADD).

• I2CADD = Matrixlevel + 20h Parametrar:

I2CADD Matrixlevel

2.1.12 Funktioner

(26)

Processorns adress

• SSPADD = 2* I2CADD

Parametrar:

SSPADD I2CADD

2.2 I2CMGR

2.2.1 Funktioner

I2CMGR och MAIN är den default-slinga som programmet normalt går i när det inte är avbrott eller programmet exikverar volka utgångar som ska sättas. Då avbrott skett känner I2CMGR av om något mer är på gång i I2C-bussen och fäller annars den satta flaggan FLAG,7.

• Om SSPSTAT, P = 1 FLAGS,7 = 0 Parametrar:

SSPSTAT, P FLAGS,7

2.3 T1

2.3.1 Funktioner

Första databyten DPA läses av bit för bit och avkodas. Sätter en ”etta” i registrer BUFA, BUFB eller BUFC, enligt Lookup_Table[n] (0 <= n <= 6) i positionerna Lookup_Table[n+15] (Lookup_Table[n+21] för instrumentkortet). Övriga positioner i BUFA, BUFB och BUFC är ”noll”. Bit 4 i register FLAGS nollställs som indikering att byten har lästs och ny data kan sparas i register DPA.

Om FLAGS,4 =1 0 <= n <= 6

• Lookup_Table[n], Lookup_Table[n+15] (Gäller Source & Component)

• Lookup_Table[n], Lookup_Table[n+21] (Gäller Instrument)

(27)

Lookup_Table[n]

FLAGS,4 n

2.4 T2

2.4.1 Funktioner

Andra databyten DPB läses av bit för bit och avkodas. Sätter en ”etta” i registrer BUFA, BUFB eller BUFC, enligt Lookup_Table[n] (0 <= n <= 6) i positionerna Lookup_Table[n+15] (Lookup_Table[n+21] för instrumentkortet). Övriga positioner i BUFA, BUFB och BUFC är ”noll”. Bit 5 i register FLAGS nollställs som indikering att byten har lästs och ny data kan sparas i register DPB.

Om FLAGS,5 =1 7 <= n <= 13

• Lookup_Table[n], Lookup_Table[n+15] (Gäller Source & Component)

• Lookup_Table[n], Lookup_Table[n+21] (Gäller Instrument)

• FLAGS,5 = 0 Parametrar:

Lookup_Table[n]

FLAGS,5 n

2.5 T3

2.5.1 Funktioner

Tredje databyten DPC läses av bit 7. Är bit 7 en ”etta” läses övriga 7 bitar (6-0)som SPI- data (se 2.6 SPI). Är bit 7 ”nolla” läses övriga 7 bitar bit för bit och avkodas. Sätter en

”etta” i registrer BUFA, BUFB eller BUFC, enligt Lookup_Table[n] (0 <= n <= 6) i positionerna Lookup_Table[n+15] (Lookup_Table[n+21] för instrumentkortet). Övriga positioner i BUFA, BUFB och BUFC är ”noll”. Bit 6 i register FLAGS nollställs som indikering att byten har lästs och ny data kan sparas i register DPC.

Om FLAGS,6 =1 14 <= n <= 20

(28)

• Lookup_Table[n], Lookup_Table[n+21] (Om DPC,7 = 0)

Se 2.6 SPI (Om DPC,7 = 1)

• FLAGS,6 = 0

• PORTA = BUFA

• PORTB = BUFB

• PORTC = BUFC

Parametrar:

Lookup_Table[n]

FLAGS,6 n

PORTA PORTB PORTC BUFA BUFB BUFC 2.6 SPI

2.6.1 Funktioner

Utgångarna 5, 6 och 7 i PORTB sätts till noll (reset för SPI-utgångarna). Bitarna i register DPC (tredje databyten från I2C-bussen) skickas, med mest signifikanta biten först (bit 6), seriellt på utgång 5 i PORTB (SDI dataingång) och klockas med utgång 6 i PORTB (CLK).

Under hela sändningen av byten är utgång 7 (CS) ”nolla”. Då hela byten har sänts går utgång 7 i PORTB hög igen och först då antar den digitala komponenten sitt nya värde.

• PORTB = PORTB && 1Fh 0 <= n <= 6

Om DPC,(6-n) = 0

• PORTB = PORTB || 5Fh

• PORTB = PORTB && 3Fh Om DPC,(6-n) = 1

• PORTB = PORTB || 3Fh

• PORTB = PORTB || 7Fh

• PORTB = PORTB && 3Fh

• PORTB = PORTB || 9Fh (När n=6)

(29)

DPC PORTB

2.7 ISR

2.7.1 Funktioner

När interrupt (avbrott) sker lagras datan som finns i arbetsregistret W i register WSAVE tills avbrottsrutinen är klar och arbetsregistret hämtar tillbaka datan i WSAVE och programmet fortsätter där det var innan avbrottet. INTCON,GIE sätts till ”noll” för att blockera fler avbrott från Global Interrupt och SSP Interrupt. Flaggan FLAGS,7 sätts när adressbiten från I2C- bussen har lästs. Därefter sätts flagga bit 0 och 4 i register FLAGS då första databyten har lästs och FLAGS,1 och FLAGS,5 för andra databyten. Efter tredje databyten nollställs FLAGS,0 och FLAGS,1 och bit 6 i FLAGS sätts. Avbrottsrutinen är klar nu.

• WSAVE = W

• STATSAV .swapf. STATUS

• INTCON,GIE = 0

• PIR1,3 = 0

Om FLAGS,7 = 0

• FLAGS,7 = 1

• SSPCON,6 = 0

Om FLAGS,7 = 1

• BUF = SSPBUF

• SSPCON,6 = 0

• FLAGS,0 = 1 (Om FLAGS,0 = 0)

• FLAGS,4 = 1 (Om FLAGS,0 = 0)

• DPA = BUF (Om FLAGS,0 = 0)

• FLAGS,1 = 1 (Om FLAGS,1 = 0)

• FLAGS,5 = 1 (Om FLAGS,1 = 0)

• DPB = BUF (Om FLAGS,1 = 0)

• FLAGS,0 = 0 (Om FLAGS,1 = 1)

• FLAGS,1 = 0 (Om FLAGS,1 = 1)

• FLAGS,6 = 1 (Om FLAGS,1 = 1)

• DPA = BUF (Om FLAGS,1 = 1)

(30)

• STATUS .swapf. STATSAV

• INTCON,GIE = 1

Parametrar:

WSAVE W

STATSAV STATUS INTCON,GIE PIR1,3

SSPCON,6 BUF SSPBUF DPA

SSPSTAT, P FLAGS,0 FLAGS,4 FLAGS,7

(31)

Tabell

Värde RAB=10 kohm, RW=120 ohm, D=0-127.

Digitalt Analogt Digitalt Analogt Digitalt Analogt

0 120 50 4026,25 100 7932,5

1 198,125 51 4104,375 101 8010,625

2 276,25 52 4182,5 102 8088,75

3 354,375 53 4260,625 103 8166,875

4 432,5 54 4338,75 104 8245

5 510,625 55 4416,875 105 8323,125

6 588,75 56 4495 106 8401,25

7 666,875 57 4573,125 107 8479,375

8 745 58 4651,25 108 8557,5

9 823,125 59 4729,375 109 8635,625

10 901,25 60 4807,5 110 8713,75

11 979,375 61 4885,625 111 8791,875

12 1057,5 62 4963,75 112 8870

13 1135,625 63 5041,875 113 8948,125

14 1213,75 64 5120 114 9026,25

15 1291,875 65 5198,125 115 9104,375

16 1370 66 5276,25 116 9182,5

17 1448,125 67 5354,375 117 9260,625

18 1526,25 68 5432,5 118 9338,75

19 1604,375 69 5510,625 119 9416,875

20 1682,5 70 5588,75 120 9495

21 1760,625 71 5666,875 121 9573,125

22 1838,75 72 5745 122 9651,25

23 1916,875 73 5823,125 123 9729,375

24 1995 74 5901,25 124 9807,5

25 2073,125 75 5979,375 125 9885,625

26 2151,25 76 6057,5 126 9963,75

27 2229,375 77 6135,625 127 10041,87

28 2307,5 78 6213,75

29 2385,625 79 6291,875

30 2463,75 80 6370

31 2541,875 81 6448,125

32 2620 82 6526,25

33 2698,125 83 6604,375

34 2776,25 84 6682,5

35 2854,375 85 6760,625

36 2932,5 86 6838,75

37 3010,625 87 6916,875

38 3088,75 88 6995

39 3166,875 89 7073,125

40 3245 90 7151,25

41 3323,125 91 7229,375

42 3401,25 92 7307,5

43 3479,375 93 7385,625

44 3557,5 94 7463,75

45 3635,625 95 7541,875

46 3713,75 96 7620

47 3791,875 97 7698,125

48 3870 98 7776,25

49 3948,125 99 7854,375

References

Related documents

Resultat: Det framkom att även om patienterna upplevde missnöje med väntetiderna så var det främst bristen på information som låg till grund för missnöjet, däremot

Skuld och dålig självkänsla över att inte kunna ta hand om sitt barn och dess hälsa, gör att mammorna känner misslyckande gentemot barnet och den nya föräldrarollen.. Detta kan

Sårbarhetsfaktorerna, som bland annat kan kopplas till den bristande hjälpen från omgivning och vårdpersonal, samt tidigare trauma, som i detta fall kan härledas till de kvinnor

Alla de artiklar som analyserats i denna studie pekar på hur viktigt det är att ha en nära relation till vårdtagaren för att på ett adekvat sätt kunna identifiera de tecken

Vi anser ändå att dessa studier visar hur vårdpersonal som möter överviktiga eller obesa i deras ögon och hur vårdtagare som anser sig vara överviktiga eller obesa har upplevt

Andra deltagare berättar om sina upplevelser gällande utifrån tvingande krav på dem som kan vara att tvingas söka arbeten i hela Sverige vilket blir ett problem genom flytt

Om du har några frågor om enkäten kan Du höra av dig till Katrin Andersson, Blekinge Tekniska Högskola 0457 - 38 50 00 eller via mail till katrin.andersson@bth.se. Tack för

Ovissheten om framtiden gjorde att många kvinnor upplevde förlust över att inte kunna planera sin kommande tid eller vara delaktiga när deras barn växte upp