Forum: Mikrocontroller und Digitale Elektronik AT32UC3 ADC Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tobias (Gast)


Lesenswert?

Hallo,

ich benutze den AT32UC3C264 und arbeite mit der ASF. Den ADC möchte ich 
möglichst schnell laufen haben. Leider benötigt dieser nach dem Auslesen 
jedes mal eine neue Konfiguration.
1
adcifa_opt_t adc_options = {
2
  .frequency = 32000,
3
  .reference_source = ADCIFA_REF06VDD,  // Vref = 0,6*VDDANA
4
  .sample_and_hold_disable = false,
5
  .single_sequencer_mode = false,
6
  .free_running_mode_enable = false,
7
  .sleep_mode_enable = false,
8
  .mux_settle_more_time = false,
9
};
10
  
11
  
12
adcifa_sequencer_opt_t adc_seq = {
13
  .convnb = 1,
14
  .resolution = ADCIFA_SRES_12B,        // 12 Bit
15
  .trigger_selection = ADCIFA_TRGSEL_SOFT,
16
  .start_of_conversion = ADCIFA_SOCB_ALLSEQ,
17
  .sh_mode = ADCIFA_SH_MODE_OVERSAMP,
18
  .half_word_adjustment = ADCIFA_HWLA_NOADJ,
19
  .software_acknowledge = ADCIFA_SA_EOS_SOFTACK,
20
};
21
    
22
adcifa_sequencer_conversion_opt_t adc_seq_con0 = {
23
  .channel_p = AVR32_ADCIFA_INP_ADCIN0,
24
  .channel_n = AVR32_ADCIFA_INN_GNDANA,
25
  .gain = ADCIFA_SHG_1,
26
};
27
28
adcifa_configure(&AVR32_ADCIFA, &adc_options, 32000);
29
while(adcifa_configure_sequencer(&AVR32_ADCIFA, ADCIFA_SEQ0, &adc_seq, &adc_seq_con0) == ADCIFA_CONFIGURATION_REFUSED);
30
adcifa_start_sequencer(&AVR32_ADCIFA, ADCIFA_SEQ0);
31
32
while(1){
33
  get_adc_value(&measure, &adc_options, &adc_seq);
34
}
35
36
37
38
void get_adc_value(uint16_t *measure, adcifa_opt_t *adc_options, adcifa_sequencer_opt_t *adc_seq){
39
  while(adcifa_get_values_from_sequencer(&AVR32_ADCIFA, ADCIFA_SEQ0, adc_seq, measure) != ADCIFA_STATUS_COMPLETED);
40
41
  adcifa_configure(&AVR32_ADCIFA, &adc_options, 1500000);
42
  adcifa_start_sequencer(&AVR32_ADCIFA, ADCIFA_SEQ0);
43
}

Dieses Programm Funktioniert auch, allerdings sobald ich die 
Zeitaufwände Konfiguration drausen lasse wird immer der gleiche Wert 
ausgegeben.

Kann mir da jemand weiterhelfen?


Ein weiteres Problem habe ich wenn ich den Mikrocontroller mit dem 
externen Quarz ansteuern will.
Ich habe in der conf_clock.h das define für die PLL0 gesetzt. Lasse ich 
diese über den internen 8 MHz Takt laufen Funktioniert alles Wunderbar. 
Wähle ich aber den OSC0 aus, dann Funktioniert nichts mehr, obwohl in 
der conf_board.h folgendes geschrieben ist:
1
#define BOARD_OSC0_HZ 16000000
2
#define BOARD_OSC0_STARTUP_US  OSC_STARTUP_16384
3
#define OSC0_GAIN_VALUE    AVR32_SCIF_OSCCTRL0_GAIN_G1

Danke für die Hilfe
lg Tobias

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]
  • [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.