Zitat Zitat von White_Fox Beitrag anzeigen
...Und das oben erwähnte millis() ist, wenn ich das richtig verstanden habe, keine Zeitmessung. Sondern man wartet eine Zeitspanne ab. Beides ist nicht dasselbe, auch wenn es manche für dasselbe halten.
Das hast du falsch verstanden: millis()
Die Begeisterung war genauso schnell wieder weg als ich ihn fragte, wie man mit dieser Bibliothek denn jetzt eine Samplerate einstellen kann. Oder ob überhaupt sichergestellt ist, daß man nicht zweimal hintereinander denselben Wert im Speicher ausliest.
Natürlich hat eine allgemeine Bibliothek / Framework seine Grenzen. Aber das heißt nicht, dass es nicht geht [Beispiel], sondern vielmehr, dass man für spezielle Anwendungen wieder LowLevel gehen kann / muss, falls das nicht jemand anderes z.B. in Form einer Bibliothek entwickelt hat.

Ansonsten: Arduino ist dafür gemacht daß jeder Idiot etwas programmieren kann. Und daraus folgt, daß auch in der Industrie jeder Idiot programmiert, auch solche, die davon definitiv besser die Finger gelassen hätten. Das Ergebnis ist in vielen Alltagsprodukten zu beklag...bewundern.
Das würde ich eher der Qualitätssicherung eines Unternehmens zuschreiben als einer sehr gut getesteten HighLevel-Bibliothek, mit der man viele Fehler gar nicht erst machen kann. Auch hier das [obige Beispiel]. Im ersten Fall sieht das Setup der Analogsignalmessung so aus:
Code:
  pinMode(A0, INPUT);
im zeitoptimierten so:
Code:
 ADCSRA = 0;             // clear ADCSRA register
  ADCSRB = 0;             // clear ADCSRB register
  ADMUX |= (0 & 0x07);    // set A0 analog input pin
  ADMUX |= (1 << REFS0);  // set reference voltage
  ADMUX |= (1 << ADLAR);  // left align ADC value to 8 bits from ADCH register

  // sampling rate is [ADC clock] / [prescaler] / [conversion clock cycles]
  // for Arduino Uno ADC clock is 16 MHz and a conversion takes 13 clock cycles
  //ADCSRA |= (1 << ADPS2) | (1 << ADPS0);    // 32 prescaler for 38.5 KHz
  ADCSRA |= (1 << ADPS2);                     // 16 prescaler for 76.9 KHz
  //ADCSRA |= (1 << ADPS1) | (1 << ADPS0);    // 8 prescaler for 153.8 KHz

  ADCSRA |= (1 << ADATE); // enable auto trigger
  ADCSRA |= (1 << ADIE);  // enable interrupts when measurement complete
  ADCSRA |= (1 << ADEN);  // enable ADC
  ADCSRA |= (1 << ADSC);  // start ADC measurements
Falls ein Fehler vorliegt, wo finde ich ihn schneller?