Der verwendete Mikrocontroller auf dem Funkmodul Preon32 stellt eine Vielzahl von internen ADCs (Analog-To-Digital-Convertern) zur Verfügung. Nach einer entsprechenden Konfiguration können analoge Spannungswerte an den Verbindungskontakten des Mikrocontrollers erfasst werden.
In diesem Beispiel wird 1 von 2 Instanzen des ADCs im Mikrocontroller auf dem Funkmodul Preon32 verwendet.
Jeder ADC verfügt über mehrere Kanäle, wobei an dieser Stelle von 6 von 16 Kanälen Daten erfasst werden.
Der zur Verfügung gestellte Speicherplatz von 1024 Byte wird kontinuierlich mit Messdaten gefüllt.
Der ADCSamplerListener erzeugt Events zu bestimmten Füllständen des Speichers. Die TriggeredADCSampler setzt nebenläufig die Erfassung der Messwerte um. Dazu wird die Kanalliste, der Speicherbereich und das Zeitintervall für die Abtastung
übergeben.
ADC - analoge Werte erfassen zeitgesteuert im Block
/*
* Copyright (c) 2011., Virtenio GmbH
* All rights reserved.
*/
package com.virtenio.webdemo;
import com.virtenio.drivers.adc.*;
import com.virtenio.drivers.timer.NativeTimer;
import com.virtenio.drivers.timer.PeriodicTimer;
import java.io.IOException;
public class multiAdc {
public static void main() throws IOException, InterruptedException {
// ADC-Instanz aus dem Mikrocontroller
com.virtenio.drivers.adc.ADC adc = NativeADC.getInstance(0);
// Kennung der ADC-Kanäle
short[] channels = {0, 1, 2, 3, 4, 5};
ADCChannelList channelList = new ADCChannelList(adc, channels);
// Speicherplatz für Messwerte
short[] buffer = new short[1024];
// Ereignis-Listener für Buffer-Füllstand
ADCSamplerListener listener = new ADCSamplerListener() {
public void adcSamplerNotify(int event) {
if (event == ADCSamplerListener.HALF_FULL) {
System.out.println("HALF FULL");
} else {
System.out.println("FULL");
}
}
};
channelList.openChannels();
// zeitgesteuerte Datenerfassung
TriggeredADCSampler triggerSampler
= new TriggeredADCSampler(channelList, buffer, listener);
int millis = 50;
PeriodicTimer timer = new PeriodicTimer(NativeTimer.getInstance(0), millis, 0);
TimerADCSampler timerSampler = new TimerADCSampler(triggerSampler, timer);
timerSampler.start();
// Datenerfassung läuft nebenläufig, so dass das Hauptprogramm andere Funktionen
// durchführen kann
while (true) {
System.out.println(triggerSampler.getOffset());
Thread.sleep(500);
}
}
}


