Navigation |
Ein Funk-Thermometer:
Auf der letzten Seite haben wir ja die Hardware betrachtet, nun geht es wie immer mit der Software weiter. Den Code, den ich hierzu geschrieben habe, gibt es hier. Der Übersichtlichkeit halber habe ich auch angefangen, meine Programme mal ein wenig modularer zu gestalten. Daher benötigt ihr noch zwei weitere Dateien, nämlich lcd.c und usart.c, die vom Hauptprogramm in Zeile 2 und 3 eingebunden werden. Die anschließende Konfiguration der I/O-Ports, des 8 Mhz-Oszillators und der beiden USART-Module kennen wir bereits aus den letzten Kapiteln. Ein kleiner Unterschied besteht lediglich in der Konfiguration des A/D-Wandlers. Da wir ja mittlerweile zwei Signale an dem A/D-Wandler anliegen haben (das Poti an P6.0 und der NTC an P6.1), müssen wir dem MSP430 auch mitteilen, dass er mehrere Kanäle (nämlich genau zwei) wandeln soll. Machen wir dies nicht, so konvertiert er weiter fleißig nur seinen ersten Kanal (P6.0) und wir können den NTC nicht nutzen, auch wenn er hardware-mäßig korrekt angeschlossen ist. Nach diesem Fehler habe ich übrigens eine Stunde gesucht ... ;-) Konkret geschieht diese Konfiguration ab Zeile 52: ADC12CTL0 = ADC12ON+SHT0_0+MSC+REFON+REF2_5V; beinhaltet nun auch das Bit MSC, was für multiple sample and convert steht, also mehrfaches Abtasten und Konvertieren. Was wir konkret planen, steht in der nächsten Zeile: ADC12CTL1 = SHP+CONSEQ_1; teilt dem MSP430 mit, dass wir eine Sequenz von Kanälen genau ein mal konvertieren möchten -- der MSP430 kennt ja alle möglichen Kombinationen: Einen Kanal ein mal abtasten, mehrere Kanäle jeweils ein mal, mehrere Kanäle mehrfach hintereinander usw. Die nächsten beiden Zeilen geben an, dass wir Kanal 0 und 1 (dies sind P6.0 und P6.1) benutzen möchten, und zwar mit der Referenzspannung 2,5 Volt. Man beachte das EOS-Bit beim zweiten Kanal, welches dem MSP430 mitteilt, dass er beim Konvertieren des zweiten Kanals mit seiner Sequenz fertig ist. Das eigentliche Hauptprogramm sollte weitestgehend selbsterklärend sein, da dort nichts passiert, was ich nicht schon mal irgendwo vorher erläutert habe. Neu sind einzig die Funktionen SendUSART1() und SendUASRT1c(), die ganze Strings bzw. einzelne Zeichen über die serielle Schnittstelle des USARTs des MSP430 senden können. Beide Funktionen sind in der oben erwähnten Bibliothek usart.c enthalten. Nicht ganz trivial ist weiterhin die Umrechnung der gemessenen Spannung in einen Temperatur-Wert. Hierzu habe ich durch Messungen im Kühlschrank und vor dem Fön herausgefunden, dass bei meinem Aufbau ungefähr eine Spannungsänderung von -46,35 mV/K auftritt. Dies habe ich grob vereinfachend erst mal als gültig für den gesamten Temperaturbereich angenommen. Da ich aber selten 130°C in meinem Zimmer haben werde, kann ich ganz gut damit leben, dass mein Sensor in den Extrembereichen nicht ganz so genau ist. :-) |