Arduino Uno 16/12 -Bit ADC DIL28

Einen schönen guten Abend zusammen,

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 :slight_smile:

Danke

MfG
Ingrimmel

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 ...

Heyho,

die letzten stellen kann ich gerne vergessen,wie gesagt, zur not hätten auch 12-bit gereicht reicht :slight_smile:

Bevor ich lange suche noch schnell: funktioniert die programmierung auch genau wie beim uno? (also abgesehen vom analogread command natürlich)

Dankeschön :slight_smile:

Was ist ein "mikroconti".

Für 12 oder 16 Bit auflösung brauchst Du einen externen AD-Wandler.
Grüße Uwe

Mikroconti ist in der uni der Spitzname für den Mikrocontroller, dachte das wäre was geläufiges :smiley:

Ich schau mir die platine von Klausj mal an, ansonsten wirds wohl doch ne externe lösung werden.

MfG
Ingrimmel

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 :slight_smile:
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 :slight_smile:

Danke dafür :wink:

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?

Moin zusammen,

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 :smiley:

dann hab ich von beidem etwas :stuck_out_tongue:

danke euch zwei :slight_smile: