Verständnisfrage Frequenz(Clock) ADC-Timer

Gast #311586
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
Gast #311588
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
Gast #311589
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
#311590
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.
Gast #311591
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren