-
-
Erfahrener Benutzer
Robotik Visionär
Der AD Wandler wandelt immer 10 Bit, aber man kann einstellen wie die Bits auf ADCL und ADCH aufgeteilt werden. Wenn das Bit ADLAR im Register ADMUX gestezt ist, enthält ADCH die obernen 8 Bits und ADCL die unteren 2. Dann kann man also aus ADCH die werte mit 8 Bis auflösung auslesen.
Entschuldigung wenn ich zu sehr vom Thema abgewichen bin.
Ohne Kommentare ist so ein programm schwer zu verstehen, und die Verzögerung ist schon etwas ungewöhnlich.
Die wartezeiten sind ja nur in der ISR wenn nicht gemessen wird. Ich weiss nicht wie gut GCC beim optimieren ist, aber das ADC/16 könnte relativ lange dauern wenn es nicht vom optimierer durch (ADC >>4) ersetzt wird. Immerhin ist der Prescaler nur bei 8 d.h. maximal 8*13 Zyklen für die AD ISR routine. Das kann immerhin schon mal erhlären wieso keine kleinerer Teiler geht, denn dann reicht offensichtlich die Zeit nicht mehr für die ISR und es werden werte ausgelassen.
Wenn der Controller mit 16 MHz läuft ist das auch schon reichlich schnell für den AD, da sollte eher ein Teiler von 32 oder so hin.
Die Schwebungen können auch bei gleichem Quarz noch vorkommen die PWM Frequenz ist 8 MHz / 99 (oder 100 ?). Die AD Frequenz 16 MHz / 8 / 13 = 16 MHz / 104 = ca. 153 kHz. Da kann es immernoch zu einer Art schwebung kommen, denn der AD Eingang wird ja nur ganz kurz für ca. 1 µs abgefragt. Jenachdem ob da gerade das PWM Signal H oder L ist kann das schon einen Unterschied machen. Selbst auf eine geätzten Platine ist es nicht leicht da kleine Störungen zu vermeiden.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen