ich bin gerade nicht sehr erfolgreich bei meiner suche, gibt es einen DIL28 mikroconti fürs arduino uno bei dem der ADC 16-bit oder zumindest 12-bit unterstützt?
Würde mich sehr über eine Antwort freuen, würde gerne eine periphere lösung umgehen
Ja, sowas ähnliches gibt es: http://www.inhaos.com/product_info.php?products_id=156
Ist jedoch nicht DIL-28, sondern kommt als Arduino-Clone mit SMD und Micro-USB.
Die dort angegebene Samplerate
analogRead_16bits() // 16bit ADC , 125 sps
kann ich bestätigen.
Von den 16 bits würde ich allerdings die untersten wegwerfen ...
Hallo Ingrimmel,
um den Massduino unter der Aduino-IDE benutzen zu können, muss man das entsprechende ZIP-File von INHAOS installieren.
Dann kann man auch so schöne Sachen wie digitalToggle(13); benutzen.
Jetzt wollte ich doch mal genauer wissen, wie viele Bits man wegschmeißen muss.
const byte adcPin = A0;
const int N = 500;
void setup() {
Serial.begin(9600);
Serial.println(__FILE__);
word min = 0xFFFF;
word v;
Serial.println("get min");
for (int i = 0; i < 1000; i++) {
v = analogRead_16bits(adcPin);
if (v < min) min = v;
}
min = min - 15;
Serial.println(min);
word freq[N]; // uses 1 kByte
for (int i = 0; i < N; i++) freq[i] = 0;
boolean cont = true;
Serial.println(millis());
Serial.println("get frequencies");
byte c;
pinMode(13,OUTPUT);
while (cont) {
v = analogRead_16bits(adcPin) - min;
if (v > 0) freq[v]++;
cont = freq[v] < 0xFFFF;
if (++c == 0) digitalToggle(13);
}
word f = N - 1;
// find max value:
while (f >= 0 && freq[f] == 0) f--;
Serial.println(millis());
Serial.println("value\tfrequency");
for (int i = 0; i <= f+1; i++) {
Serial.print(min + i);
Serial.print("\t");
Serial.println(freq[i]);
}
}
void loop() {}
Ein 50 kOhm-Poti in Mittelstellung an A0 angeschlossen. Dann kriege ich nach knapp einer Stunde die folgende Häufigkeitstabelle:
value frequency
39459 0
39460 0
39461 0
39462 0
39463 0
39464 0
39465 3
39466 4
39467 57
39468 276
39469 1230
39470 3916
39471 9970
39472 19638
39473 31616
39474 43600
39475 55401
39476 64874
39477 65535
39478 52964
39479 34014
39480 17556
39481 8056
39482 3678
39483 1733
39484 702
39485 286
39486 88
39487 28
39488 7
39489 1
39490 0
(linke Spalte: Messwert, rechte Spalte: wie oft er vorkommt)
Du kannst die Tabelle leicht in Excel einfügen und eine Grafik daraus machen. Dann siehst du, dass über 66% der Daten um weniger als 2 vom Mittelwert abweichen.
Mit dem Bits-wegschmeißen ist es also weniger schlimm als ich angenommen hatte.
Damit ist das Rauschen geringer als das der billigen Soundkarten. Die sind allerdings auch 350 mal schneller, können dafür aber mit Gleichspannung nichts anfangen.
PS: die Linearität des Wandlers habe ich nicht getestet.
Heyho,
danke für die Tabelle
reicht mir von der genauigkeit leicht, aber die liste hintelege ich gleich mal, falls ich später mal eine höhere genauigkeit brauche und nen vergleich benötige
Klausj:
Ja, sowas ähnliches gibt es: MassDuino UNO LC MD-328D R3 5V 3.3V Development Board
Ist jedoch nicht DIL-28, sondern kommt als Arduino-Clone mit SMD und Micro-USB.
Die dort angegebene Samplerate
analogRead_16bits() // 16bit ADC , 125 sps
kann ich bestätigen.
Von den 16 bits würde ich allerdings die untersten wegwerfen ...
Der hat auch nur einen 10Bit ADC
Die 16 Bit werden durch Oversampling erreicht.
Das geht mit dem AVR auch.
Aber ob sinnvoll?
aaalso, nachdem ich die info von combie im netz nochmal validiert habe, hab ich schnell mit ien paar zeilen oversampling in mein arduino geworfen und mir im nächsten atemzug dann zwei 16-bit adc's für je 2,50€ bestellt