www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC im mega8 will nicht


Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.