Forum: Mikrocontroller und Digitale Elektronik ADC im mega8 will nicht


von ingo (Gast)


Lesenswert?

Wer kann mir helfen? Ich habe schon ADC zum laufen gekriegt, aber der im
mega8 weigert sich strikt. Mit folgendem Code möchte ich den ADC0 im
single conversion mode laufen lassen und den Interrupt benutzen, aber
es geht nicht:

;in  der Reset Routine hab ich für die konfiguration:
  ldi tmp,0b11000000
  out ADMUX,tmp    ;Int Ref & ext Cap; Adj Right; ADC0
  ldi tmp,0b10001000
  out ADCSR,tmp

;und in einem Timer-interrupt steht zum starten der Wandlung:
  sbi ADCSR,ADSC

der Timer-interrupt findet auch statt, aber der ADC-Interrupt wird
nicht ausgelöst.
Weiss jemand warum?
Bin dankbar für jede Hilfe!

Ingo

von Joerg Wunsch (Gast)


Lesenswert?

> Weiss jemand warum?

Weil Du den ADC übertaktest?  Du hast einen Teilerfaktor von 2
eingestellt, die ADC-Taktfrequenz soll aber zwischen 50 und 200 kHz
liegen.  Ich bezweifle, daß Dein Prozessor mit 100...400 kHz Takt
arbeitet...

von ingo (Gast)


Lesenswert?

Danke, ich habs grad gefunden, was schief läuft: der Simulator vom
AVRStudio 4.08 macht einfach nicht was ich will, der mega8 schon.
Ich habs auch ohne prescaler getestet, ich glaub man hat dann nur eine
schlechtere als 10-Bit-Genauigkeit oder?

von thkais (Gast)


Lesenswert?

Hättest Du nicht gleich schreiben können, daß das im AVRStudio passiert?
Ist ein altbekanntes Problem, daß da ADC-Interrupts nicht ausgelöst
werden. TWI funzt im Simulator auch nicht.

von Joerg Wunsch (Gast)


Lesenswert?

> Ich habs auch ohne prescaler getestet, ich glaub man hat dann nur
> eine schlechtere als 10-Bit-Genauigkeit oder?

Wie kommst Du auf diesen Dampfer?

Nein, wenn Du die 200 kHz überschreitest, läßt die Genauigkeit nach.
Das steht so irgendwo im Datenblatt.  Wenn Du sie heftig
überschreitest, wird er sicher irgendwann nicht mehr vernünftig
wandeln.

Was passiert, wenn man die 50 kHz unterschreitet, steht glaub ich
nirgends geschrieben, ich kann mir vorstellen, daß die S&H Logik dann
vielleicht zu viel nachläßt, so daß die Wandlung ebenfalls ungenau
wird.  Aber im Allgemeinen will man ja ohnehin kürzestmögliche
Wandlungszeiten erzielen.

von Bernd Walter (Gast)


Lesenswert?

Die S&H Schaltung könnte auch die obere Schranke bestimmen.
Es dauert halt einige Zeit, bis sich der Kondensator auf den
Eingangswert aufgeladen hat.
Müsste man mal ausprobieren, wie weit der Meßung bei hoher Rate
verfälscht wird.
Vermutlich wird es dabei aber auch einiges an Streung in der Fertigung
geben.
Wie der eingebaute DA Wandler arbeitet ist ja nicht definiert - finde
ich sowieso schade, daß der nicht per S&H ausgeführt wird, wie es bei
anderen Bausteinen der Fall ist.

von Joerg Wunsch (Gast)


Lesenswert?

> Wie der eingebaute DA Wandler arbeitet ist ja nicht definiert -
> finde ich sowieso schade, daß der nicht per S&H ausgeführt wird, wie
> es bei anderen Bausteinen der Fall ist.

Doch, ich glaube mich schon zu erinnern, daß irgendwo beschrieben ist,
daß es sich um einen Wandler mit sukkzessiver Approximation handelt,
und auch der S&H ist implizit erwähnt: der Meßwert/-kanal zum
Zeitpunkt des Starts der Messung bleibt während der Konvertierung
erhalten.  Man kann den ADMUX sofort nach dem Start der Messung auf
einen anderen Kanal umschalten, diese Umschaltung wird erst für die
nächste Messung wirksam.

von Michael (Gast)


Lesenswert?

In einer speziellen Anwendung betreibe ich den ADC mit 1MHz. Dabei kann
man ca. 6-7 Bits verwenden. Wenn man weniger Bits braucht kann man noch
mehr MHz nehmen.

von Joerg Wunsch (Gast)


Lesenswert?

Interessante Aussage.  Beschreib' mal, wie Du das ermittelt hast,
damit man sich ein Bild machen kann, wie gut das reproduzierbar ist.
(Welcher Controller?  Meßverfahren?  Über wie viele Chips ermittelt?)

Kann ja zuweilen gut sein, daß man sowas mal gebrauchen kann.

von Bernd Walter (Gast)


Lesenswert?

@Joerg: richtig das alles ist beschrieben - nur eben nicht der
verwendete DA Wandler.
Man kann aber wohl annehmen, daß es ein Wandler ist, welcher mit einem
Widerstandsnetzwerk arbeitet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.