AVR32 ADC richtig verwenden

OP #3179889
Lesenswert?
• ▲
▼
Hallo,

bin gerade dabei mich in den ADC des AT32UC3A einzulesen.
Dazu habe ich mir schon das Musterbeispiel für das EVK1100 angesehen.

In diesem Beispiel sind alle ADC_CHANNEL's in einem File.
Ich möchte dies aber gerne trennen da ich einmal einen Wert eines 
Potentiometers und einmal einen Motorstrom einlesen möchte.

Kann ich jetzt die Inititialisierung des ADC zweimal ausführen?
Also zb im Musterbeispiel:
GPIO_MAP
1
/** GPIO pin/adc-function map. */
2
const gpio_map_t ADC_GPIO_MAP = {
3
#if defined(EXAMPLE_ADC_TEMPERATURE_CHANNEL)
4
  {EXAMPLE_ADC_TEMPERATURE_PIN, EXAMPLE_ADC_TEMPERATURE_FUNCTION},
5
#endif
6
#if defined(EXAMPLE_ADC_LIGHT_CHANNEL)
7
  {EXAMPLE_ADC_LIGHT_PIN, EXAMPLE_ADC_LIGHT_FUNCTION},
8
#endif
9
#if defined(EXAMPLE_ADC_POTENTIOMETER_CHANNEL)
10
  {EXAMPLE_ADC_POTENTIOMETER_PIN, EXAMPLE_ADC_POTENTIOMETER_FUNCTION}
11
#endif
12
};

Initialisierung:
1
  /* Assign and enable GPIO pins to the ADC function. */
2
  gpio_enable_module(ADC_GPIO_MAP, sizeof(ADC_GPIO_MAP) /
3
      sizeof(ADC_GPIO_MAP[0]));
4

5
  /* Configure the ADC peripheral module.
6
   * Lower the ADC clock to match the ADC characteristics (because we
7
   * configured the CPU clock to 12MHz, and the ADC clock characteristics are
8
   *  usually lower; cf. the ADC Characteristic section in the datasheet). */
9
  AVR32_ADC.mr |= 0x1 << AVR32_ADC_MR_PRESCAL_OFFSET;
10
  adc_configure(&AVR32_ADC);
11

12
  /* Enable the ADC channels. */
13
#if defined(EXAMPLE_ADC_TEMPERATURE_CHANNEL)
14
  adc_enable(&AVR32_ADC, EXAMPLE_ADC_TEMPERATURE_CHANNEL);
15
#endif
16
#if defined(EXAMPLE_ADC_LIGHT_CHANNEL)
17
  adc_enable(&AVR32_ADC, EXAMPLE_ADC_LIGHT_CHANNEL);
18
#endif
19
#if defined(EXAMPLE_ADC_POTENTIOMETER_CHANNEL)
20
  adc_enable(&AVR32_ADC, EXAMPLE_ADC_POTENTIOMETER_CHANNEL);
21
#endif

Meine Idee für Potentiometer:
1
const gpio_map_t poti_ADC_GPIO_MAP =
2
{
3
  {POTENTIOMETER_ADC_PIN, POTENTIOMETER_ADC_FUNCTION}
4
};
5
volatile avr32_adc_t  *poti_adc_gpio_map = &AVR32_ADC;
6

7

8
void poti_init(void) {
9
 // Assign and enable GPIO pins to the ADC function.
10
  gpio_enable_module(poti_ADC_GPIO_MAP, sizeof(poti_ADC_GPIO_MAP) / sizeof(poti_ADC_GPIO_MAP[0]));
11

12
  // Initialize
13
  AVR32_ADC.mr |= 0x8 << AVR32_ADC_MR_PRESCAL_OFFSET;
14
  adc_configure(poti_adc_gpio_map);
15
      
16
  // Enable the ADC channel
17
  adc_enable(poti_adc_gpio_map, POTENTIOMETER_ADC_CHANNEL);
18
}

Und für Motor:
1
const gpio_map_t motor_ADC_GPIO_MAP =
2
{
3
  {MOTOR_ADC_PIN, MOTOR_ADC_FUNCTION}
4
};
5
volatile avr32_adc_t  *motor_adc_gpio_map = &AVR32_ADC;
6

7

8
void motor_init(void) {
9
 // Assign and enable GPIO pins to the ADC function.
10
  gpio_enable_module(motor_ADC_GPIO_MAP, sizeof(motor_ADC_GPIO_MAP) / sizeof(motor_ADC_GPIO_MAP[0]));
11

12
  // Initialize
13
  AVR32_ADC.mr |= 0x8 << AVR32_ADC_MR_PRESCAL_OFFSET;
14
  adc_configure(motor_adc_gpio_map);
15
         
16
  // Enable the ADC channel
17
  adc_enable(motor_adc_gpio_map, POTENTIOMETER_ADC_CHANNEL);
18
}

Kann ich dies so Trennen?

Was passiert wenn ich USE_ADC_8_BITS definiere? Werden dann alle 
channels auf 8 bit gesetzt oder kann man sich das aussuchen welcher 
channel 8-bit oder 10-bit Auflösung hat?

Des weiteren ist mit das mit der "Prescaler Rate Selection" noch nicht 
klar.
Also ich habe die CPU frequenz auf 60MHz eingestellt.
Weiters steht im Handbuch:
ADC Clock Frequency 10-bit resolution mode 5 MHz
ADC Clock Frequency 8-bit resolution mode 8 MHz
und
ADCClock = CLK_ADC / ( (PRESCAL+1) * 2 )

Ist mit CLK_ADC 5 (bzw 8) MHz gemeint oder die Taktrate der CPU?
Welchen Wert für PRESCAL sollte ich jetzt verwenden?

godi

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.