Praktikum DST (MRT – Teil) 4. Termin 25.11.2016 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 TemperaturRoutinen 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 Bei 10 Messungen wäre die Spannung Bei 20 Messungen wäre die Spannung 161125_Praktikum_4_DST_MRT.doc Erg/4 oder Erg>>2 ( 10 mV Auflösung)! Erg/4 oder Erg>>2 ( 1 mV Auflösung)! Erg/8 oder Erg>>3 ( 1 mV Auflösung)! usw. der Speicher hat einen 8 mal so großen Wert! 1 of 4 2012 .. 2016 © Zielinski 25.11.2016 Praktikum DST (MRT – Teil) 4. Termin 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_7 = +(dmy)+(dmy>>5)-(dmy>>6)+(dmy>>9); U(PA7) U(PA6) // ADC(V) < 20000 Faktor * 8 // 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) 2012 .. 2016 © Zielinski ADC6(o) 2 of 4 161125_Praktikum_4_DST_MRT.doc Praktikum DST (MRT – Teil) 4. Termin 25.11.2016 Falls innerhalb von 5 Sekunden keine Auswahl getroffen wurde, soll der Sekundentakt aktiv sein! Das math. Verhalten des NTC berechnet sich aus: ~Lin. Kennlinie für Raumtemperaturen R[T] = 10* EXP(3100*(1/(273+T(x)-1/298)) 11°C < T < 75°C Messung: 11,48° = 2,000V Mit einem Fehler, laut Hersteller, von bis zu 10%! T [*100] = 10732 – (ADC [*2000] * 4,792 / 8) = 10732 – ( 16000 * 0,599) = 10732 – 9584 = 1148 [*100] => 11,48 °C // ADC in .5mV // für 2V gilt also 11,48°C dmy = ADC_7; dmy = +(dmy>>1)+(dmy>>3)-(dmy>>5)+(dmy>>7)-(dmy>>8)+(dmy>>9)-(dmy>>10)+(dmy>>11)-(dmy>>13); Temp_7 = 10732 - (dmy); // ADCV max < 5000 * 2 // 0,599 = (0,598999) // 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). 161125_Praktikum_4_DST_MRT.doc 3 of 4 2012 .. 2016 © Zielinski 25.11.2016 Praktikum DST (MRT – Teil) 4. Termin 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_whileSchleife) 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 – 2012 .. 2016 © Zielinski 4 of 4 161125_Praktikum_4_DST_MRT.doc