www.mikrocontroller.net

Forum: Compiler & IDEs ADC Vorteiler berechnen lassen


Autor: adc (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... ADC Vorteiler ...

Bitte etwas genauer.

Autor: adc (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, du könntest es mit einer Kette von #if #elif #else machen,
etwa so:
#ifndef F_ADC_MAX
#  define F_ADC_MAX 200000
#endif

#if (F_CPU) / 2ul <= F_ADC_MAX
#  define ADPSCALE (_BV(ADPS0))
#elif (F_CPU) / 4ul <= F_ADC_MAX
#  define ADPSCALE (_BV(ADPS1))
#elif (F_CPU) / 8ul <= F_ADC_MAX
#  define ADPSCALE (_BV(ADPS1) | _BV(ADPS0))
#elif (F_CPU) / 16ul <= F_ADC_MAX
#  define ADPSCALE (_BV(ADPS2))
#elif (F_CPU) / 32ul <= F_ADC_MAX
#  define ADPSCALE (_BV(ADPS2) | _BV(ADPS0))
#elif (F_CPU) / 64ul <= F_ADC_MAX
#  define ADPSCALE (_BV(ADPS2) | _BV(ADPS1))
#elif (F_CPU) / 128ul <= F_ADC_MAX
#  define ADPSCALE (_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0))
#else
#  warning "No suitable value for ADPSCALE found."
#  define ADPSCALE (_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0))
#endif

Autor: temp (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst übrigens damit auch den ADC schneller betreiben (wenn
man bspw. nur 8 Bit Auflösung braucht):
#define F_ADC_MAX 1000000
#include "adpscale.h"

static void
adc_init(void)
{
  ADCSRA = _BV(ADEN) | ADPSCALE;
}

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.