C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 1

Like dokumenter
1: { 2: Display functions 3: ============================================================= 4: Instruction DB5 DB4 DB3 DB2 DB1 DB0 5:

C:\My Documents\Fagprove\Flashlite V25+\LED_Link.pas Printed at 16:06 on 17 Feb 2000 Page 1 of 6

File: C:\My Documents\fagprove\tp\klokke.txt , 08:42:20

C:\My Documents\FP2000\PulsRespons med FFT\Main.pas Printed at 07:48 on 18 Feb 2000 Page 1 of 3

TDT4110 IT Grunnkurs Høst 2015

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

C:\My Documents\FP2000\Forvrengning med FFT\ADDA.pas Printed at 07:42 on 18 Feb 2000 Page 1 of 2

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

MAT1030 Diskret Matematikk

Velkommen til plenumsregning for MAT1030. MAT1030 Diskret matematikk. Repetisjon: Algoritmer og pseudokode. Eksempel fra boka. Eksempel

Øvingsforelesning 5 Python (TDT4110)

Programmering Høst 2017

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

Erik Grindheim - fagprøve Kildekode til mikrokontroller << led_ctrl.asm >> side 1/6.

Øvingsforelesning 5 Python (TDT4110)

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

MAT1030 Plenumsregning 1

Hangman. Level. Introduksjon

CodevisionAVR. Start CodevisionAVR. Velg Settings Terminal og sett opp kommunikasjonsparametrene som figur 1 viser. avrlab07a.doc HVE RI Arnfinn Lunde

Oppsummering fra sist

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Øvingsforelesning 3 Python (TDT4110)

Løsningsforslag til 2. del av Del - EKSAMEN

DM6814/DM5814 User s Manual

Rapport Øving 2 TDT4258 Mikrokontroller Systemdesign

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

TwidoSuite kommunikasjon

Løsningsforslag Eksamen i Programmering i Visual Basic høsten 2003 Laget av Runar Munkhaug

TDT4110 IT Grunnkurs Høst 2016

UTVIDET TEST AV PROGRAM

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Løsningsforslag Øving 7

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Del 1 En oversikt over C-programmering

Bruk av interrupt og Timer i Arduino-program.

TELE2010A Digital Systemkonstruksjon

Dagens tema: Sjekking

Innhold. 2 Kompilatorer. 3 Datamaskiner og tallsystemer. 4 Oppsummering. 1 Skjerm (monitor) 2 Hovedkort (motherboard) 3 Prosessor (CPU)

Oppgave 1 - Linux kommandolinje (%)

Læringsmål og pensum. if (be): else (not_to_be):

Kapittel 1 En oversikt over C-språket

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Digitalstyring sammendrag

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Repetisjon Novice Videregående Python PDF

MAT1030 Diskret matematikk

TDT4110 IT Grunnkurs Høst 2012

TDT4110 IT Grunnkurs Høst 2014

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

INF1000 (Uke 4) Mer om forgreninger, While-løkker

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

FYS3240/4240 Forslag til prosjektoppgave for Lab 4: DAQ-øvelse med LabVIEW

HØGSKOLEN I SØR-TRØNDELAG

Løsningsforslag til eksamen i INF2270

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

MAT1030 Plenumsregning 3

løsningsforslag-uke5.txt

INF2100. Oppgaver 23. og 24. september 2010

Del 4 Noen spesielle C-elementer

Visual Basic. Repetisjon fra mandag

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

UNIVERSITETET I OSLO

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

LabVIEW seriekommunikasjon med mikrokontroller

UNIVERSITETET I OSLO

Tell sekunder. Introduksjon. Skrevet av: Teodor Heggelund. I denne oppgaven skal vi lage vårt eget spill!

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Obligatorisk oppgave 1 INF1020 h2005

KONTROLLSTRUKTURER. MAT1030 Diskret matematikk. Kontrollstrukturer. Kontrollstrukturer. Eksempel (Ubegrenset while-løkke)

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Forelesning inf Java 5

Forelesning Instruksjonstyper Kap 5.5

UNIVERSITETET I OSLO

Øvingsforelesning 1 Python (TDT4110)

Forelesning inf Java 5

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

EKSAMEN (Del 2, våren 2015) Løsningsforslag

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

UNIVERSITETET I OSLO

Læringsmål og pensum. Oversikt

Fasit til eksamen høst 2002, applikasjonsutvikling

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Vi skal se på lambda-uttrykk. Følgende er definerte og vil bli brukt gjennom oppgaven

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

Vi som skal undervise. MAT1030 Diskret matematikk. Hva er diskret matematikk? Hva er innholdet i MAT1030?

Transkript:

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 1 { F A G P R Ø V E N V Å R E N 1 9 9 9 Universitetet i Bergen Institutt for den Faste Jords Fysikk A D - K O R T P R O G R A M Skrevet av Anders... Beskrivelse : Programmet skal kjøres på et Flashlite kort med V25+ prosessor. produsert av JKMicro. Det skal kommunisere med en RS-232 linje og et AD-kort. Når <SPACE> mottas serielt skal AD-kortet sample en gang i sekundet og sende dataene fortløpende ut serielt. Denne rutinen avsluttes når vilkårlig karakter mottas. Når 'B' eller 'b' mottas skal AD-kortet sample 2048 ganger med en samplingsrate på 500Hz. Så skal alle dataene sendes ut serielt i en blokk. I tillegg avsluttes programmet når 'Q' eller 'q' mottas serielt. CopyRight : Universitetet i Bergen, Institutt for den Faste Jords Fysikk (1999) Språk : Turbo Pascal 7.0 * T I M E R C O N S T A N T S * * 10MHz Klokke: 12.8us timer resolution. * * 0.1ms = 7.8125 tics -> 8 tics = 0.1024ms * * 1.0ms = 78.125 tics -> 78 tics = 0.9984ms * * 10.0ms = 781.25 tics -> 781 tics = 9.9968ms * * 100.0ms = 7812.5 tics -> 7813 tics = 100.0064ms * * C O N T R O L B Y T E - A D K O R T * * D7 D6 D5 D4 D3 D2 D1 D0 * *---------------------------------------------------------------* * 0 1 0 RNG BIP A2 A1 A0 * * R A N G E T A B L E - A D K O R T * * RNG BIP INPUT RANGE (V) * *---------------------------------------------------------------* * 0 0 0-5 * * 1 0 0-10 * * 0 1 ñ5 * * 1 1 ñ10 * * C H A N N E L T A B L E - A D K O R T * * A2 A1 A0 CH0 CH1 CH2 CH3 CH4 CH5 CH6 CH7 * *---------------------------------------------------------------* * 0 0 0 X * * 0 0 1 X *

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 2 * 0 1 0 X * * 0 1 1 X * * 1 0 0 X * * 1 0 1 X * * 1 1 0 X * * 1 1 1 X * } {$N-} {Ingen numerisk co-prosessor} Program AD_kort; Uses Dos; {Unit som inneholder de mest brukte rutinene} Const consttimerinterval = 1; {Timer interval i ms} constnumbofsamples = 2048; {Antall samplinger ved rate 500HZ} constsampleinterval = 2; {Samplingsinterval i ms ved rate 500Hz} constcontsampleinterval = 1000; {Samplingsinterval i ms ved rate 1Hz} constadch0 = 0; {Konstant for å velge AD kanal 0} constad_uni5volts = 0; {Konstant for å velge AD input range 0-5V} constad_uni10volts = 2; {Konstant for å velge AD input range 0-10V} constad_bip5volts = 1; {Konstant for å velge AD input range ñ5v} constad_bip10volts = 3; {Konstant for å velge AD input range ñ10v} Seg = $F000; {Segment adresse for CPU special registers} SRIC0 = $FF6D; {Receive completion interrupt request register, port 0} RxB0 = $FF60; {Receive buffer} MD1 = $FF8A; {Modulo/Timer register for timer 1} TMC1 = $FF91; {Timer control register for timer 1} TMIC2 = $FF9E; {Timer unit interrupt controll register, timer 1} AD_Base = $2B0; {Base adresse til AD-konverter kort} TimerLimit : Word; {Verdi timertelleren ikke må overstige} TimerCounter : Word; {iabel timeren øker} NumberOfSamples : Word; {Antall samplinger} {Her lagres 2048 samplinger når samplingsraten er 500Hz} AD_values : Array [1..constNumbOfSamples] of Integer; Int13Vector : Pointer; {Peker til gammel serieport 0 receive interrupt rutine} Int30Vector : Pointer; {Peker til gammel timer 1 interrupt rutine} EndProgram Serial0Interrupt : Boolean; {Flagg som indikerer om programmet skal avsluttes} : Boolean; {Flagg som indikerer at serielle data er mottatt} ContinuousSampling : Boolean; {Flagg som indikerer 1Hz kontinuerlig sampling}

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 3 Sampling : Boolean; {Flagg som indikerer at sampling skal utføres} (***************************************************** I N I T I A L I S E R I N G ******************************************************) Procedure Initialize; {Beregner øvre grense for timer teller} TimerLimit := (65536 - consttimerinterval); {initialiserer noen variabler} TimerCounter := 0; EndProgram Serial0Interrupt := False; := False; ContinuousSampling := False; Sampling := False; NumberOfSamples := 1; Procedure InitTimers; MD1_Number: Word; {Initialiserer Timer 1 til 1ms interval} MD1_Number:= Round(constTimerInterval * 78.125); memw[seg:md1]:= MD1_Number; {Starter timer} mem[seg:tmc1]:= $C0; (**************************************************** U T I L S *****************************************************) Procedure VeiledningsText; {Instruksjonstekst som sendes ut serielt} Writeln('Trykk "SPACE" for kontinuerlig sampling, 1Hz samplingfrekvens.'); Writeln('Trykk "B" eller "b" for 2048 samplinger, 500Hz samplingfrekvens.'); Writeln('Trykk paa en vilkaarlig bokstav for aa stoppe kontinuerlig sampling'); Writeln('Trykk "Q" eller "q" for aa avslutte'); Procedure SampleADCard(Chan: Byte; Gain: Byte; SampleInterval,NumbOfSamples: Word); ADControlValue : Byte; {Inneholder kontrolverdien til AD kort} I,CounterOffset : Word; ADDataValue : Integer; {Inneholder dataverdier fra AD kort}

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 4 Sampling := False; TimerCounter := 0; {Initialize AD-card control value} ADControlValue := ((Gain Shl 3) And $18); ADControlValue := (ADControlValue Or (Chan And $07) Or $40); {Utføres ved 500Hz samplingsrate (ikke kontinuerlig sampling)} If Not(ContinuousSampling) Then {Synkroniserer} CounterOffset := TimerCounter; While (TimerCounter < (CounterOffset + 1)) Do; {Start sampling} For I:= 1 To NumbOfSamples Do CounterOffset := TimerCounter; {Sampler} Port[AD_Base] := ADControlValue; {Vent 1ms} While (TimerCounter < (CounterOffset + 1)) Do; {Leser data} ADDataValue := PortW[AD_Base]; {Skriver data til serieport 0 ved kontinuerlig sampling, hvis ikke lagres data i et array som senere skrives til serieport 0} If ContinuousSampling Then Writeln(ADDataValue:5) Else {Lagrer data i et array} AD_values[I] := ADDataValue; {Vent} While (TimerCounter < (CounterOffset + SampleInterval)) Do; {Skriver ut data til serieport 0 ved 500Hz samplingsrate (ikke kontinuerlig sampling} If Not(ContinuousSampling) Then {Sender data til serieport} For I:= 1 To NumbOfSamples Do Writeln(AD_Values[I]:5); {Sender veiledningstekst til serieport} VeiledningsText; Procedure CheckChar; {Tester hvilken bokstav som mottas serielt} RawData : Byte; TestChar: Char; Serial0Interrupt:= False; {Leser seriell data fra receive buffer} RawData:= mem[seg:rxb0];

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 5 {Konverterer data til ASCII tekst, store bokstaver} TestChar:= UpCase(Chr(RawData)); {Sjekker bokstav} Case TestChar of ' ': {Starter 1Hz sampling} ContinuousSampling := True; NumberOfSamples := 1; 'B': 'Q': {Starter 500Hz sampling, stopper 1Hz sampling} Sampling := True; ContinuousSampling := False; NumberOfSamples := constnumbofsamples; {Avslutter program} EndProgram:= True; Else {Stopper 1Hz sampling} ContinuousSampling := False; VeiledningsText; (*********************************************** I N T E R R U P T S ************************************************) Procedure HandleSerial0; Interrupt; {Resetter interuppt flagg og disabler interrupt} mem[seg:sric0]:= $47; {Klarsignal for å lese data} Serial0Interrupt:= True; {Enabler interrupt} mem[seg:sric0]:= $7; {Slutt på interrupt} Inline($0F/$92); Procedure HandleTimer1; Interrupt; {Resetter interupt flagg og disabler interrupt} mem[seg:tmic2]:= $47; { ker teller} If TimerCounter>= TimerLimit Then TimerCounter:= 0; Inc(TimerCounter, consttimerinterval); {Enabler interrupt} mem[seg:tmic2]:= $7; {Slutt på interrupt}

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 6 Inline($0F/$92); Procedure EnableSerialsInterrupt; {Lagrer DOS interrupt vector} GetIntVec(13, Int13Vector); {Setter interrupt vector til 'HandleSerial0'} SetIntVec(13, @HandleSerial0); {Enabler seriell 0 receive interrupt} mem[seg:sric0]:= $7; Procedure EnableTimersInterrupt; {Lagrer DOS interrupt vector} GetIntVec(30, Int30Vector); {Setter interrupt vector til 'HandleTimer0'} SetIntVec(30, @HandleTimer1); {Enabler timer 1 interrupt} mem[seg:tmic2]:= $7; (********************************************************* A V S L U T N I N G S P R O S E D Y R E R **********************************************************) Procedure DisableSerialsInterrupt; {Disabler seriell 0 receive interrupt} mem[seg:sric0]:= $47; {Setter interruptvektor tilbake til DOS rutine} SetIntVec(13, Int13Vector); Procedure DisableTimersInterrupt; {Disabler timer 1 interrupt} mem[seg:tmic2]:= $47; {Setter interruptvektor tilbake til DOS rutine} SetIntVec(30, Int30Vector); Procedure StopTimers; {Stopper timer 1} mem[seg:tmc1]:= $0; (************************************************ M A I N P R O C E D U R E *************************************************)

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 7 Initialize; EnableSerialsInterrupt; EnableTimersInterrupt; InitTimers; {Initaliserer variabler} {Oppretter handle for interrupt fra seriell 0 receiver} {Oppretter handle for interrupt fra timer 1} {Setter opp timer interval} Writeln('****************************************************'); Writeln('* F A G P R 0 V E N V A A R E N 1 9 9 9 *'); Writeln('* *'); Writeln('* Universitetet i Bergen *'); Writeln('* Institutt for den Faste Jords Fysikk *'); Writeln('* *'); Writeln('* A D - K O R T P R O G R A M *'); Writeln('* Skrevet av Anders... *'); Writeln('****************************************************'); VeiledningsText; {Skriver veiledningstekst} {Program loop, går helt til programmet avsluttes} Repeat {Sjekker mottatt bokstav ved seriell 0 receive interrupt} If Serial0Interrupt Then CheckChar; {Starter 1Hz sampling hvis flagg er satt} If ContinuousSampling Then If (TimerCounter >= 1000) Then SampleADCard(constADCh0, constad_bip5volts, constsampleinterval, NumberOfSamples); {Starter 500Hz sampling hvis flagg er satt} If Sampling Then SampleADCard(constADCh0, constad_bip5volts, constsampleinterval, NumberOfSamples); Until EndProgram; DisableSerialsInterrupt; DisableTimersInterrupt; {Setter handle for seriell 0 receive interrupt tilbake til DOS} {Setter handle for timer 1 interrupt tilbake til DOS} StopTimers; {Stopper timer 1} End.