Arduino Due, ein erster Test    

Elektronik-Labor   Projekte   AVR    




Schon länger schiele ich auf 32-Bit-Controller, speziell einen ARM-Controller wie den ATSAM3. Was mich daran besonders interessiert ist das große RAM zusammen mit dem 12-Bit-AD-Wandler und dem echten 12-Bit-DA-Wandler. Wenn man auch noch die hohe Taktfrequenz bedenkt ergibt sich damit die Chance solche Aufgaben zu lösen, die sonst einem DSP zugeordnet werden, also Signalverarbeitung, Filter usw. Das Abschreckende daran waren aber bisher die verwendeten C-Compiler, die eine erhebliche Einarbeitungszeit erfordern. Und da kommt der Arduino Due gerade recht, denn er verspricht mit seiner vereinfachten Programmierumgebung einen Zugang ohne viel Stress.

Jetzt hat mein Sohn Fabian den Arduino Due in die Hände bekommen. Schreib mir mal ein Programm, das die beiden Analogwandler ausprobiert, habe ich ihn gebeten. Was dabei herauskam war eine ganz einfache Schleife: Immer wieder A0 messen und das Ergebnis an DAC1 ausgeben.  Damit sollte sich alles testen lassen.


int adcValue;

void setup() {
 Serial.begin(9600);
 analogReadResolution(12);
 analogWriteResolution(12);
}

void loop() {
   adcValue = analogRead(A0);
   analogWrite(DAC1,adcValue);



Erste Beobachtung: Wenn man den analogen Eingang an GND legt kommt am analogen Ausgang nicht Null Volt heraus sondern ca. 0,5 V. Umgekehrt bringt eine Eingangsspannung von 3,3 V nur etwa 2,8 V am Ausgang. Der DA-Wandler arbeitet also nicht Rail to Rail, sondern mit einem Abstand von 0,5 V von beiden Seiten. Das erinnert mich an PC-Soundkarten. Auch da wird nicht eine definierte Spannung ausgegeben sondern es geht um eine Variation um einen Mittelwert.



Die zweite wichtige Frage ist: Wie schnell ist denn nun diese Schleife? Also einen Sinusgenerator über einen Schutzwiderstand von 47 kOhm angeschlossen (Strombegrenzung, weil auch negative Spannungen rauskommen) und den Oszi an den Ausgang gelegt. Der Sinusgenerator wurde auf 1 kHz eingestellt, das Oszi auf 50 µs/Skt. Und damit kann man die Geschwindigkeit erkennen: Etwa 50 µs pro Schleifendurchlauf, Abtastrate 20 kHz. Laut Datenblatt sollte der AD-Wandler im Extremfall mit einer Mikrosekunde auskommen. Dass es im ersten Versuch sehr viel langsamer geht, könnte an der Arduino-Umgebung und einem erheblichen Programm-Überhang liegen. Vielleicht findet man aber auch noch passende Einstellungen um die Sache etwas zu beschleunigen.
 


Elektronik-Labor   Projekte   AVR