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


von Peter M. (Gast)


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

von Ich weiss (ichweiss) (Gast)


Lesenswert?

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

von johnny.m (Gast)


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

von Peter M. (Gast)


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

von Thomas P. (pototschnig)


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.

von Rolf Magnus (Gast)


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.

von Thomas P. (pototschnig)


Lesenswert?

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

von Rolf Magnus (Gast)


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?

von Thomas P. (pototschnig)


Angehängte Dateien:

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.

von Rolf Magnus (Gast)


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.

von Thomas P. (pototschnig)


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 ^^

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.