Beispielprogramm: Ansprechen der Sensoren sowie Senden der Daten an einen PC
Ein Minimalbeispiel für die wiederholte Messung des Druckes und der Feuchte sowie der Temperatur über die OneWire und I2C Sensoren und das Senden der Messergebnisse an einen PC etwa ein Mal pro Sekunde sähe unter Verwendung der programmierten Bibliotheken wie folgt aus.
#include <I2C_UCB0.h>
#include <MS5803clean.h>
#include <sleep.h>
#include <UARTusb.h>
#include <Si7021.h>
#include <DS1820own.h>
int Si_Temperature, OW_temperature[4], temp;
unsigned int Si_Humidity;
sensor_properties *P_sensor;
static unsigned long long OW_Adresses[4] = {0x10C1F9B3010800C2, 0x104CE0B3010800ED, 0x1056D7B3010800AC, 0x10D9FAB301080076};
void main(void) {
WDTCTL = WDTPW + WDTHOLD;
I2C0_Init(1, 0);
UART_Setup_PC(9600); // setup UCA1 Interface for USB Uart comunication, 9600 Baud
P_sensor = newPressureSensor(MS5803_ADRESS_B, 1);
Si_Setup();
while(1) {
MS_Measure(P_Sensor);
Si_Humidity = Si_MeasureHumidity();
Si_Temperature = Si_GetTemperatureOfLastMeasurement();
DS1820_ReadTemperatureMulti(PIN3, 4, (unsigned int*)OW_temperature, (unsigned char*) OW_Adresses);
temp = (Si_Temperature + P_sensor->T + 50 * (OW_temperature[0] + OW_temperature[1] + OW_temperature[2] +
OW_temperature[3])) / 6;
UART_SendDyn("T: %0°C; P: %1Pa; F: %2%\0", 3, (long)temp/100, (long)P_Sensor->P, (long)Si_Humidity);
sleep(4000);
}
}
Spektrometer und Geiger-Müller-Zählrohr, MSP430G2553
Das Spektrometer und das Geiger-Müller-Zählrohr verfügen jeweils über einen MSP430G2553. Bei beiden ‚Sensoren‘ übernimmt der jeweilige Mikrocontroller die gleiche Aufgabe: Das Zählen von Impulsen. Warum das so ist, lässt sich im Artikel zum Spektrometer bzw. Geiger-Müller-Zählrohr nachlesen. Der Zählvorgang ist Interrupt gesteuert, bei einem Wechsel von High auf Low an einem GPIO wird ein interner Zähler inkrementiert. Der Zählvorgang muss möglichst frei von Unterbrechungen sein, damit alle Pegelwechsel erfasst werden. Letzteres ist der Grund, weshalb die Funktionalitäten nicht direkt auf dem Haupt-MSP430 untergebracht wurden: OneWire sowie die Datenkommunikation mit dem RPi haben erhöhte Priorität und dürfen nicht unterbrochen werden, so dass die Impulszählungen für die entsprechenden Zeiträume deaktiviert werden müssten. Zudem liegt die Dauer der Spektrometer Messung im Bereich von mehreren 10 Sekunden und übersteigt damit die Dauer eines vom RPi vorgegebenen Messintervalls.
Als grobes Ablaufdiagramm dargestellt, unterscheidet sich die Firmware des Spektrometers kaum von der des MSP430F5529. Der Datenaustausch mit dem Geiger-Müller-Zählrohr ist identisch zum Spektrometer, der Mess- und Programmablauf unterscheidet sich jedoch.

Spektrometer
Das Spektrometer verfügt über einen Photosensor, der die gemessene Helligkeit in Impulse umwandelt. Zur Messung wird der Sensor über eine Messstrecke innerhalb eines lichtundurchlässigen, innen verspiegelten Gehäuses, von LEDs unterschiedlicher Wellenlänge beleuchtet. Diese werden bei der Messung der Reihe nach für definierte Zeiträume mit Hilfe eines Multiplexers durchgeschaltet und für jede LED die vom Photosensor ausgegebenen Impulse gezählt und gespeichert. Anschließend legt sich die CPU schlafen und kann vom zentralen MSP430F5529 durch Ansprechen über I2C aufgeweckt und die Daten ausgelesen werden. nach dem Ende der Kommunikation wird eine neue Messung gestartet.
Geiger-Müller-Zähler
Der Zählrohr-Mikrocontroller arbeitet eigenständig und wird nicht von dem zentralen Mikrocontroller gesteuert. Er zählt kontinuierlich Klicks, die von dem Zählrohr und der entsprechenden Elektronik generiert werden. Zusätzlich zu der Messung läuft ein Timer mit, der nach jedem kompletten Durchlauf die innerhalb des Durchlaufs gezählten Klicks in einem Vektor speichert und dann den Zählstand sowie den Timer zurücksetzt. Wird der Mikrocontroller über I2C angesprochen, antwortet er mit den gezählten Impulsen innerhalb der letzten Minute.