www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage Frequenz(Clock) ADC-Timer


Autor: Peter M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich würde gerne alle 20ms die Wandlung des Eingangssignales am ADC
beginnen. DAmit dies tatsächlich alle 20ms erfolgt, habe ich diese Zeit
mit Hilfe des Timers0 ermittelt (gibt Interrupt bei Overflow und setzt
dann das ADC enable bit).
ADC ist im "single conversion mode".

Muss nun der Clock des Timers oder der des ADC größer sein, oder müssen
die Frequenzen annähernd gleich sein?

mfg Peter

Autor: Ich weiss (ichweiss) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Clock des ADC muss höher sein, damit der ADC bis zur nächsten
Wandlung fertig ist.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hängt doch von den anderen Einstellungen ab! Der "Clock" an sich
hat damit nix zu tun. Timer 0 braucht (Wenn es sich denn um einen
AVR-µC und damit um einen 8-Bit-Timer handelt) je nach Einstellung bis
zu 256 Zyklen (TCNT0-Anfangswert 0x00) für nen Überlauf, der ADC im
Normalfall 13 Zyklen bis er fertig ist! Solange Du nicht mitteilst, wie
Du Timer und ADC konfiguriert hast, kann dir da keiner sinnvolle Infos
liefern. Ansonsten einfach im Datenblatt nachlesen. Da steht drin, wie
viele Taktzyklen wofür gebraucht werden. Abgesehen davon sollte die
Wandlung nicht mit zu niedrigem Takt durchgeführt werden. Also ruhig
versuchen, den ADC so zu konfigurieren, dass der Takt im Bereich
100-200 kHz liegt. Die 20 ms Abstand zwischen den Wandlungen sind für
den Controller ne verdammt lange Zeit. Das ist völlig unkritisch.

Vielleicht kannste es Dir noch einfacher machen, wenn Du den ADC im
Auto Trigger Mode betreibst. Kannst Dir dann u.U. ne ISR sparen!

Gruß

Johnny

Autor: Peter M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define ADC_VREF_TYPE 0x60

void init_ADC() {
  // ADC initialization
  // ADC Clock frequency: 62,500 kHz
  // ADC Voltage Reference: AVCC pin
  // ADC High Speed Mode: Off
  // ADC Single Conversion
  ADMUX=ADC_VREF_TYPE;
      ADCSRA=0x8E;
      SFIOR&=0xEF;
}

void init_Timer0() {
  // Timer/Counter 0 initialization
  // Clock source: System Clock
  // Clock value: 1000,000 kHz
  // Mode: CTC top=OCR0
  // OC0 output: Disconnected
  ASSR=0x00;
  TCCR0=0x02;
  TCNT0=0x05;
  OCR0=0x00;

  // Timer(s)/Counter(s) Interrupt(s) initialization
  TIMSK=0x03;
  ETIMSK=0x00;
}

ich verwende den Atmega128 (ist nicht im atmega103
kompatibilitätsmodus)

mfg Peter

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>>
Ich würde gerne alle 20ms die Wandlung des Eingangssignales am ADC
beginnen. DAmit dies tatsächlich alle 20ms erfolgt, habe ich diese
Zeit
mit Hilfe des Timers0 ermittelt (gibt Interrupt bei Overflow und setzt
dann das ADC enable bit).
ADC ist im "single conversion mode".
<<<

Wenn du automatische Triggerung aktivierst, kann der ADC automatisch
eine Umwandlung machen, wenn der Timer-Interrupt kommt. Du bräuchtest
den Timer also nur auf die 20ms einstellen und auto-conversion
aktivieren. Wenn du dann noch den Interrupt für die beendete Umwandlung
aktiviert hast, hast du im sauberen Raster von 20ms in der ISR vom
ADC-Interrupt deine neuen Werte.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn du automatische Triggerung aktivierst, kann der ADC
> automatisch eine Umwandlung machen, wenn der Timer-Interrupt
> kommt.

Nein, das hat mit dem Timer-Interrupt nichts zu tun. Bei automatischer
Triggerung wird einfach immer, sobald der ADC mit einer Wandlung fertig
ist, die nächste gestartet.

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die ADC-Auto-Conversion kann an den Timer-Interrupt gehängt werden. Hab
ich bereits gemacht, daher weiß ich das.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, bei welchem µC? Ich hab sowas bisher nicht gesehen, aber villeicht
ist das ein Feature, das nur die neueren oder größeren können?

Autor: Thomas Pototschnig (pototschnig)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der ATMEGA32 kann das zB. Vermutlich kann das dann fast jeder AVR.

Hab noch einen Screenshot angehängt, damit du siehst nach was du suchen
musst im Datenblatt.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahja, cool. Ich hab bisher nur mit AVRs gearbeitet, die das alle nicht
zu haben scheinen.
Gut zu wissen, daß es sowas gibt. Danke.

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
You are welcome :-)

Das geht mir in letzter Zeit aber auch ständig so, dass ich auf
irgendwelche Features stoße von denen ich noch nie was gehört habe.
Irgendwie verwende ich auch immer nur die AVRs, mit denen ich am
meisten Erfahrung habe ^^

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.