Mich würde interessieren warum das so ist. Wenn ich den Takt von 16MHz mit den Prescaler Bits auf 62500Hz runterbreche müsste das System doch langsamer reagieren und nicht schneller?
Muss irgendetwas Beachtet werden bei verwendung eines Prescaler?
Ich nutze micors(), analogRead(), digitalRead() und die timerOne library
DrThunderhell:
Mich würde interessieren warum das so ist. Wenn ich den Takt von 16MHz mit den Prescaler Bits auf 62500Hz runterbreche müsste das System doch langsamer reagieren und nicht schneller?
Die ADC clock tickt immer mit "Systemtakt durch Prescaler", und der normale Prescaler-Wert ist 128.
16 MHz Systemtakt / 128 = 125 kHz ADC clock
Wenn Du den Prescaler auf 16 verkleinerst, dann gilt:
16 MHz Systemtakt / 16 = 1 MHz = 1000 kHz ADC clock
Mit Prescaler 16 statt 128 taktet die ADC clock achtmal schneller.
Aber mit mehr als 200 kHz ADC clock liefert der ADC keine 10 bit Auflösung mehr, sondern es geht Genauigkeit verloren.
In jedem Fall benötigt eine ADC-Wandlung 13 ADC clock Takte.
das würde ja bedeuten, dass schon ab einem Prescaler von 32 ~ 500KHz Genauigkeit verloren ginge.
In wie fern macht sich das bemerkbar bzw wie kann ich mir das vorstellen?
Wieviel Genauigkeit geht verloren?
Hat die ADC clock auswirkungen auf die Funktionen?
micors(), analogRead(), digitalRead() und die timerOne library
If ADC resolution of less than 10 bits
required, then the ADC clock frequency can be higher than 200kHz. At 1MHz it is
possible to achieve eight bits of resolution maximum.
Ob es bei der geringeren Auflösung so ist, dass bestimmte Messwerte überhaupt nicht mehr gemessen werden, so dass es nicht jeden Wert zwischen 0 und 1023 auch als Messwert gibt, oder ob die Messwerte bei gleichbleibender Messspannung schwanken und bei direkt nacheinander ausgeführten Messungen leicht springende Werte zurückgeliefert werden, kann ich Dir nicht sagen. Aber wenn Du es aufgebaut und programmiert hast, kannst Du das natürlich selbst mal austesten, indem Du mal ein feinfühlig einstellbares 10-Gang Poti verbaust und verschiedene nebeneinander liegende Einstellungen ausmißt, einmal mit normalem Prescaler und einmal mit gedoptem Prescaler.
hmm, ja aber wenn ich nacher sowiso nur Werte zwischen 0 und 1023 erhalte (8bit) is doch egal ob das Analogsignal mit 8 oder 10 bit auflösung eingelesen wird oder nicht?
hab jetzt ein bisschen rumgespielt mir ist in der hinsicht aber nichts aufgefallen.
Was mir aber aufgefallen ist:
ich hab am Anfang meines Programms ein einmaliges einleses des aktuellen Analogwertes als Referenz für den Offset.
Mit prescaler wird dieser erst falsch eingelesen und normalisiert sich nur nach weiterer Analogwert Nutzung mit der Zeit.
Ich bin es so umgangen, dass ich ihn einfach 3 mal hintereinander einlese, da ich beim initialisieren die Zeit dazu habe.
DrThunderhell:
hmm, ja aber wenn ich nacher sowiso nur Werte zwischen 0 und 1023 erhalte (8bit) is doch egal ob das Analogsignal mit 8 oder 10 bit auflösung eingelesen wird oder nicht?
hab jetzt ein bisschen rumgespielt mir ist in der hinsicht aber nichts aufgefallen.
Was mir aber aufgefallen ist:
ich hab am Anfang meines Programms ein einmaliges einleses des aktuellen Analogwertes als Referenz für den Offset.
Mit prescaler wird dieser erst falsch eingelesen und normalisiert sich nur nach weiterer Analogwert Nutzung mit der Zeit.
Ich bin es so umgangen, dass ich ihn einfach 3 mal hintereinander einlese, da ich beim initialisieren die Zeit dazu habe.
0 bis 1023 sind 10 Bit nicht 8.
0 bis 255 sind 8 Bit
Wenn Du schneller konvetierst, aber mehrere Messungen brauchst, damit der Wert richtig ist hast Du keinen Geschwindigkeitsvorteil.
Auflösung und Genauigkeit werden gern verwechselt
Einen konstanten Wert zu messen und nach mehreren Messungen nur ein Flattern von 1/1024 zu haben, kann dir auch bei schnellerem Messen gelingen.
Den Fehler merkst du bei schnell wechselnden Werten und wenn du mehrere Kanäle "gleichzeitig" misst.
ich brauch ja nur am Anfang die Zeit, ich denk das es mit der initialisierung des Analogeingangs zu tun hat.
Atmel schreibt im Atmega 2560 Handbuch S. 281 Redirect Notice
Das bei der ersten conversation des AD Converters der Sample&Hold 13,5 Takte und die conversation 25 Takte braucht. alle weiteren normalen conversationen dauern 1,5 bzw. 13 Takte (bei single ended).
also gut das 2,5 fache am Start als Normal. Oder seh ich das falsch?