• No results found

Digital Termometer J10 B4 A4 GND GND GND B1 GND GND GND GND B3 A3 +5V +5V A3 +5V A2 +5V +5V A2. +5v B16 A16 UREG UREG B1 6 AC AC A1 6 A6 6

N/A
N/A
Protected

Academic year: 2022

Share "Digital Termometer J10 B4 A4 GND GND GND B1 GND GND GND GND B3 A3 +5V +5V A3 +5V A2 +5V +5V A2. +5v B16 A16 UREG UREG B1 6 AC AC A1 6 A6 6"

Copied!
6
0
0

Loading.... (view fulltext now)

Full text

(1)

Digital Termometer

I den här uppgiften skall vi mäta temperaturen på ditt kaffe. Vi använder en termistor som temperaturkänslig givare och timerkretsen 555 som A/D omvandlare.

Temperaturen presenterar vi sedan dels på en LCD display, men skickar den även till en PC och visar den på datorskärmen. Eftersom termistorn har ett olinjärt samband mellan temperatur och resistans måste vi göra en polynomanpassning av resistansen mot temperaturen.

Termistorn har en negativ temperaturkoefficient (NTC), dvs dess resistans sjunker (mycket olinjärt) med stigande temperatur. Ändringen är verkligen stor, resistansen ändrar sig med en tiopotens för en ändring av några tiotal grader. Det gör att vi kan använda termistorn som en enkel och billig temperaturgivare.

För att konvertera temperaturen till ett tal som enchipsdatorns program sedan kan behandla vidare låter vi först resistansen hos termistorn styra tiden hos en monostabil vippa.Denärbyggdmedtimerkretsen555.Tidenhosvippanmätervisedan genomatt räkna datorns klockpulser(K) i enchipsdatorns timer-del under den tid vippan är omställd.

Termometern använder timern 555 och ett NTC-motstånd.

Teori

Tiden ( t ) som vippan är omställd i sitt instabila läge ges av formeln:

t =1.1RC

där R är termistorns resistans och C är 0.33 mikrofarad. Vid rumstemperatur, c:a 25

RS23 2 Com mun ication

+5V +5V

+ 5V +5V 5V

to PC 5V

MC6 8HC9 08JL3 3 VSS

1 IRQ 2 8 RST

O SC1 4

A0 2 A1 6 A2 8 A3 9 A4 23 A5 27

B0 21 B1 20 B2 18 B3 17 B4 15 B5 12 B6 11 B7 10 D0 16 D1 19 D2 24 D3 22 D4 26 D5 25 D6 14 D7 13 O SC2

5 7 VDD

DS18 13 VCC

1

RST 2 G ND

3

OSC Out 8 Vc c

1 4

GND 7 0.1u

0.1u

J9

32PINJL3 B12 PD0 B11 PD1 B10 PD2 B9 PD3 B8 PD4 B7 PD5 B6 PD6 B13 PB7PB6 A13 PB5 B14 PB4 A14 PB3 B15 PB2 A12 PB1 A11 PB0 A10

A9 PA3PA2 A8 PA1 A7 PA0 A6

A5 PA5

B2 INT A15 PA4 A16 ACUREG B16

A2 +5v+5V A3 +5V B3 A1 G NDG ND B1 G ND A4 G ND B4

B5 PD7

J 10

3 2PINJL 3 PD0 B1 2 PD1 B11 PD2 B1 0 PD3 B9 PD4 B8 PD5 B7 PD6 B6 PB7 B1 3 PB6 A1 3 PB5 B1 4 PB4 A1 4 PB3 B1 5 PB2 A1 2 PB1 A11 PB0 A1 0 PA3 A9 PA2 A8 PA1 A7 PA0 A6

PA5 A5

INT B2 PA4 A1 5

AC A1 6 UREG B1 6 + 5v A2 +5V A3 +5V B3 GND A1 GND B1 GND A4 GND B4

PD7 B5

330 nF 0.1uF

TERMISTOR 555

R4

Q 3 DIS 7 THR 6 2 TRIG

5 CV

LCD

7 D0 8 D1 9 D2 10 D3 11 D4 12 D5 13 D6 14 D7 4 RS 5 R/W 6 E

3 C

(2)

under c:a 3,6 ms. Timern i enchipsdatorn har en klockfrekvens på 2,4576 MHz eftersom vi använder 9,8304 MHz oscillator. Vi kommer alltså att räkna c:a 9000 klockpulser under denna tid, om vi sätter prescalern till ett.

Antalet räknade klockpulser (K) är alltså proportionellt mot tiden (t).

K=2457600*t eller K=0,892*R dvs R=1,12*K

Vidarevetviatt temperaturen(T) ärnågonokändfunktion(f)avtermistornsresistans (R).

T=f(R)

Kombinerar vi dessa uttryck får vi att temperaturen (T) är någon (matematiskt okänd) funktion av antalet klockpulser (K).

T=f(K)

Nu skall vi konvertera de räknade klockpulserna (K) till temperatur (T). Tyvärr råder det ju inte ett enkelt linjärt samband mellan termistorns resistans och temperaturen, utan det är något krokigt logaritmartat okänt samband. Har man ett olinjärt samband kan man alltid antaga att det gäller ett polynomsamband i ett delintervall. Går man till extremvärden spricker det, men det skall vi passa oss för. Vi antar alltså helt frankt att vi kan ange temperaturen T som ett polynom av de räknade klockpulserna K (dvs indirekt tiden t), dvs att:

T = A0+ A1* K1+ A2* K2+ A3* K3...

därA0,A1,A2osvärpolynometskoefficientersomgersambandetmellanklockpulser och temperatur.

Då gäller det att på något sätt bestämma koefficienterna i polynomet så att vi, när vi sedan känner antalet klockpulser, bara kan sätta in dem i polynomet och helt enkelt beräkna temperaturen. För att bestämma koefficienterna i polynomet använder vi oss av ett separat polynomanpassningsprogram kallat SENSOR. Det programmet vill som indata ha en tabell med temperaturen given för olika antal klockpulser.

Du måste alltså mäta upp givarens egenskaper genom att mäta antalet klockpulser vid någraolikatemperaturer.DugårsedaniniprogrammetSENSORochtalaromnamnet på den datafil där du kommer att lagra dina mätvärden. Där startar du editorn och skriver in dina mätvärden som en tvåkolumners tabell, med klockpulserna i den första kolumnen och temperaturen i den andra. Lämna editorn och spara dina mätvärden i en fil. Du kan nu prova att göra polynomanpassningen för några olika gradtal. Sannoligt blir det bra med tredje gradens polynom.

När du är nöjd med anpassningen sparar du koefficienterna som en ny fil i datorn.

Koefficienternakommerdåattsparaspåenformsomenchipsdatornsassemblatoroch

(3)

När du nu känner koefficienterna i polynomet är det enkelt för enchipsdatorn att utifrån ett uppmätt antal klockpulser beräkna temperaturen. Du använder subrutinen POLYNOM som ligger i biblioteksmodulen POLYNOM.LIB, som du helt enkelt kopierar in i ditt eget program. Nu gäller det att få ut den beräknade temperaturen på LCD-displayen. Du måste då först omvandla talformatet för temperaturen från flyttalsformat (dvs med taldel och exponent) till ett vanligt binärt heltal. Det finns det en biblioteks-rutin föri biblioteksmodulen MATH.LIB. Därefter skall talet omvandlas från binärt tal (talbasen två) till decimalt tal (talbasen tio). Det gör du med biblioteksrutinen BINBCD.LIB. Och slutligen skall BCD-talen göras om till ASCII tecken med BCDASCII.LIB och matas ut på displayen.

Kommunikation med PC.

Flash-systemets moderkort är bestyckat med kretsar som möjliggör kommunikation medenPCviaetts.k.serielltgränssnitt,kallatRS-232.Kommunikationenskermellan en av PC s.k. COM-portar och moderkortet. Den vanligaste användningen av denna kommunikation är vid programmeringen av enchipsdatorns Flash-minne, men vi kan också använda den för att låta PC och enchipsdatorn överföra kommandon och mätdata.

Enchipsdatorn använder bit 4 i A-porten för denna kommunikation, och PC använder någonavsinaCOM-portar.Överföringenskeri9600Baud,dvs9600bitarpersekund.

Eftersom varje tecken kräver totalt 11 bitar (inklusive en startbit och två stoppbitar) kan man överföra c:a 870 tecken per sekund.

För att underlätta programmeringen av enchipsdatorn finns en biblioteksfil, kallad RS232.LIB, som innehåller rutiner för sändning och mottagning av tecken, och för sändningaventextsträngtillPC.EftersomenchipsdatornanvänderbitfyraiA-porten både för sändning och mottagning, kan man naturligtvis inte både sända och mottaga samtidigt.

OmmanärduktigpåattprogrammeraenPCkanmanskrivaegnaprogramförPCsom sänder kommandon och tar emot och visar mätdata från enchipsdatorn. Annars följer det med ett litet program som man kan köra i sin PC. Det är bara att kopiera in EXE-filen på lämpligt ställe i datorn och dubbelklicka på programnamnet så går programmet igång. Det finns inget som man behöver “installera”.

Nu är det dags att börja skriva programmet.

Tilldinhjälpfinnsettflödesdiagramsomdukanutnyttjaförattfåensnyggstrukturpå ditt program.

I kopplingsschemat över kretsen ser du att det finns två förbindelser mellan enchipsdatorn och 555-kretsen. Den första går från bit 3 i A-porten till 555-kretsens trig-ingång. Den signalen används för att trigga 555 och därmed göra en mätning av tiden. 555 triggas av en negativt gående signal (en negativ flank). Omedelbart efter triggningen måste denna signal tas tillbaka till hög nivå för att inte 555 skall tvingas kvar i sitt instabila läge, utan tillåtas gå tillbaka till sitt stabila läge sedan RC-tiden förflutit.Denna signal skall alltså normalt ligga på hög nivå.

(4)

Den andra signalen går från 555-kretsens Q-utgång till Interrupt (IRQ) och bit 5 i A-porten på enchipsdatorn. Genom att signalen går till Interruptingången kan du avgöra när 555-kretsen tippar tillbaka till sitt stabila läge.

1.

Börja med att skriva ett program som gör en mätning med timerkretsen men bara skriver ut antalet klockpulser på displayen. Det programmet skall du ha för kalibreringen. Tänk på att innan du triggar 555 måste du ha stoppat timern, nollställt den och valt prescaler till ett.

Därefter triggar du 555-an och startar timern.

Sedan är det bara att vänta på att interruptpinnen, och därmed 555 Q-utgång, skall bli låg för att markera att 555 tippat tillbaka till sitt stabila läge. Då läser man av tidens 16 bitar i timerns räknarregister och lagrar talet i variablerna R1M och R1L.

Detta binära tal omvandlar du först till ett decimalt tal med hjälp av biblioteksrutinen BINBCD.LIB. Du får då talet på BCD-format. Slutligen omvandlar du de decimala BCD-talen till ASCII-tecken med biblioteksrutinen BCDASCII.LIB, för att därefter skriva ut ASCII-strängen på LCD-displayen med biblioteksrutinen LCDSTR.

2.

Mät upp antalet klockpulser för minst10 olika temperaturer i intervallet 60-20 grader. Tappa upp lite varmvatten och låt det svalna. Termisk jämvikt inträder så småningom,sådetgälleratttadetlitelungt.Användenvanligsprittermometer. Skriv in mätvärdena i en fil på datorn med hjälp av SENSOR-programmets editor. Tänk på om det är temperaturen eller antalet klockpulser som skall stå i första kolumnen.

3.

Gör sedan själva polynomanpassningen. Prova med olika gradtal. Kontrollera att ingen datapunkt avviker alltför kraftigt så att man kan befara en felmätning i den punkten. Spara de framräknade koefficienterna som en fil i datorn.

4. Utöka nu ditt program så att det tar antalet klockpulser och sätter in det i polynomet och räknar fram temperaturen. Så låter du programmet skriva ut temperaturen i stället för antalet klockpulser på displayen.

Observera att samma variabler kan uppträda i flera biblioteksrutiner. Det finns alltså en risk för dubbeldeklaration. Tänk även på att vissa variabler måste stå i den ordning som de är deklarerade i MATH.LIB modulen. Det beror på att man använder indexerad adressering, och därför förväntar sig variablerna i den deklarerade ordningen. Detta gäller exempelvis variablerna i matterutinerna. Titta efter i texten som inleder biblioteksmodulerna vad som gäller.

5. Utöka programmet med lite snygg text i displayen, t.ex. “TEMP=” .

6. Efter temperaturen skall du skriva ett gradtecken och C på displayen. Gradtecknet har ASCII-värdet $DF på LCD-displayen.

7. När programmet snurrar och visar temperaturen på LCD-displayen är det dags att bygga ut programmets mät-loop så att det först inväntar att det tar emot ett “T” från PC innan det gör en mätning. När programmet har gjort en mätning och skrivit ut temperaturen på LCD-displayen, skall det även skicka mätvärdet (bara siffrorna) som en textsträng till PC och avsluta överföringen med tecknet “Return” som har ASCII-värdet $0D.

(5)

8.Omduhinnerkanduutökaantaletsiffrortillattomfattaävenendecimal.Dåskalldu multiplicera temperaturen med 10 innan du omvandlar till binärt heltal, och sedan stoppa in decimalpunkten på rätt ställe när du skriver ut talet. Observera dock att det är lättattfåframenmassasiffrormedendator,medattdeskallhanånsignifikansockså!

PC-programmet.

Programmet är utvecklat i Delphi-5 från Borland och är på c:a 100 rader Pascal-kod. När programmet startas måste du ange vilken COM-port som Flash-systemet sitter anslutet till.

Därefter “öppnar” du kommunikationen medenchipsdatorn.Dukansedanskicka ut enstaka “T”-tecken genom att klicka på knappen “Sänd ett ‘T’”, eller skicka ett “T” i sekunden genom att klicka på

“Kör Kontinuerligt”.

PC-programmet läser av inkomna tecken 100 gånger i sekunden och när den får ett

“Return” skriver den ut alla inkomna tecknen i fönstret. Innan du får avsluta programmetmåstedu“stänga”kommunikationenmedCOM-porten.Därefterkandu avsluta programmet genom att klicka i krysset längst upp till höger.

(6)

Stoppa och nollställ Timern Välj prescaler Starta timern och trigga 555 Invänta att 555 tippar tillbaka

Flytta cursorn till början av raden på displayen Skriv ut texten "Temp=" på displayen

Skriv ut temperaturens ASCII-tecken Gör om från binärt heltal till decimalt tal (BCD)

Gör om BCD-talen till ASCII-tecken UTÖKNING FRÅN KALIBRERING TILL MÄTNING

Nollställ exponenten R1E Ladda IX med adressen till polynomet

Beräkna temperaturen ur polynomet Gör om temperaturen från flyttal till heltal

Stoppa timern Hämta timerns värde Invänta att 555 är klar att triggas

INITIERINGAR

Bit 3 i port A riktas utåt och sätts till 1 Hela port D riktas utåt (LCD) Bitarna 7,6,5 i port B utåt (LCD)

Initiera LCD-displayen

Flödesdiagram för termometern.

Invänta ett "T" från PC

Skicka mätvärdet till PC Skicka ett "Return" till PC

References

Related documents

I biblioteket i valdatasystem RKL 2018, under menyalternativet valdistrikt och GIS, finns en uppdaterad manual för valgeografi om arbetet med valdistrikt och valkretsar inför valen

ALC230A is a room temperature controller that controls a 0...10 V internal signal with a PI algorithm in direct or reverse action.. The controller also compares current CO 2

Ventilstyrning - modulerande 0-10V DC ut – Plint OUT1/GND Utgående styrsignal till modulerande ventilställdon 0-10V.

Konfigurering Indikator lampen blinker hurtigt AP mode Indikator lampen blinker langsomt Aktiveret Indikator lampen blinker Standby Indikator lampen er slukket Reset Hold reset

VGS och AUDI AG garanterar inte att informationen på dessa sidor är uppdaterad, korrekt, fullständig eller att tillgänglig vid

Please use a 5V/2A power adapter for charging the speaker The progressive white LED indicator indicates the battery charging status.. The LED will stop blinking once the speaker gets

A logic high at the A-side control input (ENA) causes the four A-side receivers and drivers to go into a three-state mode. Similarly, the B-side control input (ENB) causes the

NC 5V_SUPPLY TMDS_BYP LV_SUPPLY GND GND TMDS_D2+ TMDS_D2+ TMDS_GND TMDS_GND TMDS_D2TMDS_D2TMDS_D1+ TMDS_D1+ TMDS_GND TMDS_GND TMDS_D1TMDS_D1TMDS_D0+ TMDS_D0+ TMDS_GND