Forum: Compiler & IDEs ADC Vorteiler berechnen lassen


von adc (Gast)


Lesenswert?

Gibt es eine möglichkeit den ADC Vorteiler vom Präprosessor berechnen zu 
lassen und dann entsprechend des Ergebnisses den Vorteiler zu setzen.
Ene Warning würde ja auch schon reichen.

: Gesperrt durch Moderator
von Martin (Gast)


Lesenswert?

... ADC Vorteiler ...

Bitte etwas genauer.

von adc (Gast)


Lesenswert?

bei einem ADC muss doch der Frequenzvorteiler zwischen 50kHz und 200KHz 
sein. Je nach Frequenz des µC (z.b. ATmega32 mit 16MHz --> Vorteiler 
128) muss dieser doch angepasst werden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Naja, du könntest es mit einer Kette von #if #elif #else machen,
etwa so:
1
#ifndef F_ADC_MAX
2
#  define F_ADC_MAX 200000
3
#endif
4
5
#if (F_CPU) / 2ul <= F_ADC_MAX
6
#  define ADPSCALE (_BV(ADPS0))
7
#elif (F_CPU) / 4ul <= F_ADC_MAX
8
#  define ADPSCALE (_BV(ADPS1))
9
#elif (F_CPU) / 8ul <= F_ADC_MAX
10
#  define ADPSCALE (_BV(ADPS1) | _BV(ADPS0))
11
#elif (F_CPU) / 16ul <= F_ADC_MAX
12
#  define ADPSCALE (_BV(ADPS2))
13
#elif (F_CPU) / 32ul <= F_ADC_MAX
14
#  define ADPSCALE (_BV(ADPS2) | _BV(ADPS0))
15
#elif (F_CPU) / 64ul <= F_ADC_MAX
16
#  define ADPSCALE (_BV(ADPS2) | _BV(ADPS1))
17
#elif (F_CPU) / 128ul <= F_ADC_MAX
18
#  define ADPSCALE (_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0))
19
#else
20
#  warning "No suitable value for ADPSCALE found."
21
#  define ADPSCALE (_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0))
22
#endif

von temp (Gast)


Lesenswert?

thx, genau sowas hab ich gesucht, hab mit dem präprozessor noch nicht so 
viel gemacht (außer ein paar #define)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Du kannst übrigens damit auch den ADC schneller betreiben (wenn
man bspw. nur 8 Bit Auflösung braucht):
1
#define F_ADC_MAX 1000000
2
#include "adpscale.h"
3
4
static void
5
adc_init(void)
6
{
7
  ADCSRA = _BV(ADEN) | ADPSCALE;
8
}

von Dirk aus NRW (Gast)


Lesenswert?

Hallo alle miteinander,

wie erhalte ich meinen Frequenzvorteiler  um eine maximale Auflösung zu 
erhalten.

Ich habe einen Systemtakt von 8 MHz.
(Der Arbeitsfrequenzbereich liegt bei 50kHZ bis 200kHZ)

Teilungsfaktor vorhanden 2,4,8,16,2,64,128.

Meine Vermutung 8000000hz/64 =125 kHZ

oder doch  : 8000000hz/128 =62,5 kHZ

Welcher Wert ist besser um eine maximale Auflösung mit dem AD-Wandler zu 
erhalten ?

DIRK

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dirk aus NRW schrieb:
> Welcher Wert ist besser um eine maximale Auflösung mit dem AD-Wandler zu
> erhalten ?

Ist egal, denn der Takt soll zwischen 50 und 200 kHz liegen.

Dafür musstest du extra einen 10 Jahre alten Thread ausgraben?

von Dirk aus NRW (Gast)


Lesenswert?

Jörg W. schrieb:

> Dafür musstest du extra einen 10 Jahre alten Thread ausgraben?

sry dachte der passt gut zu dem Thema....

Eine Frage zum Thema AD Wandler hätte ich dann doch noch :

Welchen Nutzen hat die Interne Referenzspannung von 2,56 V ?

VIELEN DANK
DIRK

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bitte in einem neuen Thread.

Wenn wir alle Fragen zu "ADC" in einem Thread sammeln würden, könnte den
keiner mehr lesen.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.