4
Praktikum DST (MRT Teil) 4. Termin 25.11.2016 161125_Praktikum_4_DST_MRT.doc 1 of 4 2012 .. 2016 © Zielinski Praktikum DST MRT 4.Termin Inhalt Praktikum HSMT MRT 4.Termin .......................................................................................................... 1 4.1. ADU (Analog Digital Umsetzer) ( 4_01_ADC) .................................................................. 1 4.2. Temperaturmessung mit NTC 10k (2-fach) ( 4_02_Temperatur) .............................................. 2 4.3. Temperaturmessung mit TiefPass u. Trend-Anzeige ( 4_03_Temp_TP_T)............................... 4 ! ADC-, LCD- und V24- Software ist noch nicht auf Statemachines umgestellt => Aufrufe also nur von main() also nicht in Timerinterrupts benutzen ! 4.1. ADU (Analog – Digital – Umsetzer) ( 4_01_ADC) Neues Projekt 4.01_ADC aus 3.2. Als Umsetzerkanäle stehen die 8 Eingänge von PORTA zur Verfügung. Wird benutzen in diesem Praktikum die beiden Eingänge an PA7 und PA6. Fügen Sie die Analog-Digital-Umsetzerdateien ADC.h und ADC.c in Ihr Projekt ein. Es gibt nur zwei relevante Funktionen: void ADC_init(void); Init ADC Hardware / Software unsigned int ADC_get(unsigned char kanal_nr, unsigned char no_of_mes); Liest den Analogwert von kanal_nr, no_of_mes mal als Summe ein. Ist no_of_mes auf eins, wird ein digitalwert zwischen 0 (0Volt) und 1023 (2,55Volt) zurückgegeben (10-Bit ADC). Ist z.B. no_of_mes 10, werden 10 Messungen gemacht, und so der 10-fache Wert zurückgegeben! Die Umsetzung der Analogdaten sollte, da die ADC-Software noch immer im Aufbau ist, nicht mit dem Timer-Interrupt, sondern als Aufruf über die Endlosschleife in main() jede Sekunde, erfolgen! Scheiben Sie, da wir letztendlich Temperaturen messen möchten, sofort alle ADC- und Temperatur- Routinen in Temp.c und Temp.h. Die ADC-Werte sollten als int in ADC_7 und ADC_6 gespeichert werden. Für nur eine Messung wäre die Spannung Erg/4 oder Erg>>2 ( 10 mV Auflösung)! Bei 10 Messungen wäre die Spannung Erg/4 oder Erg>>2 ( 1 mV Auflösung)! Bei 20 Messungen wäre die Spannung Erg/8 oder Erg>>3 ( 1 mV Auflösung)! usw. der Speicher hat einen 8 mal so großen Wert!

Praktikum DST MRT 4.Termin...diesem Praktikum die beiden Eingänge an PA7 und PA6. Fügen Sie die Analog-Digital-Umsetzerdateien ADC.h und ADC.c in Ihr Projekt ein. Es gibt nur zwei

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Praktikum DST MRT 4.Termin...diesem Praktikum die beiden Eingänge an PA7 und PA6. Fügen Sie die Analog-Digital-Umsetzerdateien ADC.h und ADC.c in Ihr Projekt ein. Es gibt nur zwei

Praktikum DST (MRT – Teil) 4. Termin 25.11.2016

161125_Praktikum_4_DST_MRT.doc 1 of 4 2012 .. 2016 © Zielinski

Praktikum DST – MRT – 4.Termin

Inhalt Praktikum HSMT – MRT – 4.Termin .......................................................................................................... 1

4.1. ADU (Analog – Digital – Umsetzer) ( 4_01_ADC) .................................................................. 1 4.2. Temperaturmessung mit NTC 10k (2-fach) ( 4_02_Temperatur) .............................................. 2 4.3. Temperaturmessung mit TiefPass u. Trend-Anzeige ( 4_03_Temp_TP_T) ............................... 4

! ADC-, LCD- und V24- Software ist noch nicht auf Statemachines umgestellt =>

Aufrufe also nur von main() also nicht in Timerinterrupts benutzen !

4.1. ADU (Analog – Digital – Umsetzer) ( 4_01_ADC) Neues Projekt 4.01_ADC aus 3.2.

Als Umsetzerkanäle stehen die 8 – Eingänge von PORTA zur Verfügung. Wird benutzen in

diesem Praktikum die beiden Eingänge an PA7 und PA6.

Fügen Sie die Analog-Digital-Umsetzerdateien ADC.h und ADC.c in Ihr Projekt ein.

Es gibt nur zwei relevante Funktionen:

void ADC_init(void);

Init ADC – Hardware / Software

unsigned int ADC_get(unsigned char kanal_nr, unsigned char no_of_mes);

Liest den Analogwert von kanal_nr, no_of_mes mal als Summe ein. Ist no_of_mes auf eins,

wird ein digitalwert zwischen 0 (0Volt) und 1023 (2,55Volt) zurückgegeben (10-Bit ADC). Ist

z.B. no_of_mes 10, werden 10 Messungen gemacht, und so der 10-fache Wert zurückgegeben!

Die Umsetzung der Analogdaten sollte, da die ADC-Software noch immer im Aufbau ist, nicht mit dem

Timer-Interrupt, sondern als Aufruf über die Endlosschleife in main() jede Sekunde, erfolgen!

Scheiben Sie, da wir letztendlich Temperaturen messen möchten, sofort alle ADC- und Temperatur-

Routinen in Temp.c und Temp.h. Die ADC-Werte sollten als int in ADC_7 und ADC_6 gespeichert

werden.

Für nur eine Messung wäre die Spannung Erg/4 oder Erg>>2 ( 10 mV Auflösung)!

Bei 10 Messungen wäre die Spannung Erg/4 oder Erg>>2 ( 1 mV Auflösung)!

Bei 20 Messungen wäre die Spannung Erg/8 oder Erg>>3 ( 1 mV Auflösung)! usw.

der Speicher hat einen 8 mal so großen Wert!

Page 2: Praktikum DST MRT 4.Termin...diesem Praktikum die beiden Eingänge an PA7 und PA6. Fügen Sie die Analog-Digital-Umsetzerdateien ADC.h und ADC.c in Ihr Projekt ein. Es gibt nur zwei

25.11.2016 4. Termin Praktikum DST (MRT – Teil)

2012 .. 2016 © Zielinski 2 of 4 161125_Praktikum_4_DST_MRT.doc

Schalten Sie die internen Pullup-Widerstände, von PORTA der beiden Analog-Ports PA7 und PA6, aus

(siehe 1. Aufgabe: Initialisierung von PORTA – müsste schon so sein!).

Deaktivieren Sie in der LCD_Ausgabe(); die letzten 3 Zeilen (nur mit //) *PI* und *Tasten*.

Fügen Sie die Funktion LCD_Ausgabe_ADC_Volt(); stattdessen ein.

Eine Spannungsausgabe (z.B. 2,0345 V) wäre mit (LCD_putif((ADC_7>>3),4,3); möglich.

Zur Kalibrierung der A/D-Umsetzer bitte den

2-Volt-Adapter an PORTA anschließen.

Geben Sie die beiden Spannungswerte

ADC_7 und ADC_6 in Volt auf der LCD-Anzeige

Zeile 3 aus (siehe rechts). Falls der Fehler > ± 2 mV

ist sollten wir eine Korrektur vornahmen.

Der Fehler, hier bei mir ~-34mV liegt hauptsächlich

an der Referenzspannung (Versorgungsspannung

(+5V)). Wir gehen jetzt einfach davon aus, dass am

ADC-Eingang 2V anliegen. Um diesen für mein System auszugleichen,

musste ich alle Werte mit 1,017 multiplizieren (wieso?).

Dazu steht das Programm C_Faktor_durch_schieben.vbs zur

Verfügung. Eingabe des Variablen-Namen dmy (für Dummy), Faktor

1,017 (nur positive Faktoren) und die gewünschte Genauigkeit 0,0005.

Das Ergebnis liegt in der Zwischenablage (hier blau inkl. Kommentar)

und kann sofort in den Code eingefügt werden.

dmy = (ADC_get(7,20)); // ADC(V) < 20000 Faktor * 8

ADC_7 = +(dmy)+(dmy>>5)-(dmy>>6)+(dmy>>9); // 1,017 = (1,017578)

Für Kanal 7 ergibt sich dann (bei mir) eine Spannung zwischen 1,999V und 2,001 V.

Realisieren Sie die Korrekturen für beide Kanäle mit einer Genauigkeit von ~ ±1 mV.

4.2. Temperaturmessung mit NTC 10k (2-fach) ( 4_02_Temperatur) Neues Projekt aus 4.1: Schließen Sie die beiden

NTC-Temperatur-Widerstände an PORTA des

Microcontrollers an (Abb rechts). An den

Analogeingängen von PORTA sind

PA7 als interner (Ti) und

PA6 als externer (To) Temperatur-Sensor

angeschlossen.

Geben Sie die beiden Temperaturen in °C auf

dem LCD-Display (Abb. Links) jede Sekunde, und über

die V24_Schnittstelle, wahlweise jede Sekunde (Eingabe ‚s‘

oder Taste0) oder jede Minute (Eingabe ’m‘ oder Taste1),

aus.

ADC7(i) ADC6(o)

U(PA7) U(PA6)

Page 3: Praktikum DST MRT 4.Termin...diesem Praktikum die beiden Eingänge an PA7 und PA6. Fügen Sie die Analog-Digital-Umsetzerdateien ADC.h und ADC.c in Ihr Projekt ein. Es gibt nur zwei

Praktikum DST (MRT – Teil) 4. Termin 25.11.2016

161125_Praktikum_4_DST_MRT.doc 3 of 4 2012 .. 2016 © Zielinski

Falls innerhalb von 5 Sekunden keine Auswahl getroffen wurde, soll der Sekundentakt aktiv sein!

Das math. Verhalten des NTC berechnet sich aus:

R[T] = 10* EXP(3100*(1/(273+T(x)-1/298))

Mit einem Fehler, laut Hersteller, von bis zu 10%!

T [*100] = 10732 – (ADC [*2000] * 4,792 / 8) // ADC in .5mV = 10732 – ( 16000 * 0,599) = 10732 – 9584 // für 2V gilt also 11,48°C = 1148 [*100] => 11,48 °C dmy = ADC_7; // ADCV max < 5000 * 2

dmy = +(dmy>>1)+(dmy>>3)-(dmy>>5)+(dmy>>7)-(dmy>>8)+(dmy>>9)-(dmy>>10)+(dmy>>11)-(dmy>>13); // 0,599 = (0,598999)

Temp_7 = 10732 - (dmy); // Temp * 100

Die Schaltung: Durch die hardware-mäßig realisierte Schaltung (Abb. rechts)

ist der Spannungsverlauf fast proportional zur Temperatur (violette Kennlinie

s.o.).

Schreiben Sie nun die Umrechnung (s.o.) für die Temperaturanzeige

mit einer Ausgabe von 1/100 °C.

Das ° Zeichen hat auf dem LCD-Display den Code (223).

~Lin. Kennlinie für

Raumtemperaturen

11°C < T < 75°C

Messung: 11,48° = 2,000V

Page 4: Praktikum DST MRT 4.Termin...diesem Praktikum die beiden Eingänge an PA7 und PA6. Fügen Sie die Analog-Digital-Umsetzerdateien ADC.h und ADC.c in Ihr Projekt ein. Es gibt nur zwei

25.11.2016 4. Termin Praktikum DST (MRT – Teil)

2012 .. 2016 © Zielinski 4 of 4 161125_Praktikum_4_DST_MRT.doc

4.3. Temperaturmessung mit TiefPass u. Trend-Anzeige ( 4_03_Temp_TP_T) Schicken Sie die gemessenen Temperaturen, je nach

Meß-Takt, durch einen Tiefpass von 64 = 26

Messungen.

long Temp_7_TP, Temp_6_TP;

Bei der Initialisierung (also vor der main_while-

Schleife) oder der ersten Messung muss der 64-fache

Temperaturwert (Temp << 6) in die Speicher geschrieben werden.

Bei jeder neuen Temperaturmessung muss nun von Temp_x_TP 1/64 abgezogen, und der

neue Temperaturwert aufaddiert werden.

LCD_Anzeige (o.r.)! Der Mittelwert über die letzten 64 Messungen steht links (LCD_putlf();), der Trend

wird durch „+“, „=“ oder „-“ und dann der aktuelle Wert rechts angezeigt.

Die Ausgabe über die serielle Schnittstelle (nur der TP_Wert) könnte z.B. so aussehen:

A4.3 Di 03.12.2013 13:40:50 Ti= 27,81 °C + To= 24,905 °C -

Speichern sie über 1 - 2 Minuten die V24 Sekundendaten in eine Datei (mit Winterm

[Datei][Upload]) Messdaten.txt (in [utils]) und geben Sie in Excel den Temperaturverlauf

aus!

– Ende des Mikrorechnerpraktikums für das WS 2016 / 2017 –