Forum: Mikrocontroller und Digitale Elektronik AT32UC3C beide DAC Kanäle A und B laufen nicht gleichzeitig


von Ralf Z. (laserelectronics)


Lesenswert?

Hallo,

ich benutze den AT32UC3C1512C. Ich möchte zwei verschiedene analoge 
Spannungen  an den  Kanälen A und B des internen DAC (DACIFB) 
gleichzeitig ausgeben. Wenn ich den DAC mit einem Kanal konfiguriere, 
z.B. nur Kanal A oder nur Kanal B, dann funktioniert alles, wie 
gewünscht. Wenn ich den DAC für beide Kanäle konfiguriere, liegt 
irgendwas undefiniertes an beiden Ausgängen an und schwankt.

Hier mal einen Auszug: //FOSC0 12MHz, DAC_PRESCALER_CLOCK = FOSC0 / 2

/* DAC Configuration */

dacifb_opt_t dacifb_opt = {

  .reference            = DACIFB_REFERENCE_VDDANA,

  .channel_selection    = DACIFB_CHANNEL_SELECTION_AB,

  .low_power            = false,

  .dual                 = false,

  .prescaler_clock_hz   = DAC_PRESCALER_CLOCK

};



/* DAC Channel Configuration */

dacifb_channel_opt_t dacifb_channel_opt = {

  .auto_refresh_mode    = true,

  .trigger_mode         = DACIFB_TRIGGER_MODE_MANUAL,

  .left_adjustment      = false,

  .data_shift           = 0,

  .data_round_enable    = false

};



int main(void)

{/* GPIO pin/DAC-function map. */
  const gpio_map_t DACIFB_GPIO_MAP = {
    {AVR32_DACREF_PIN, AVR32_DACREF_FUNCTION},
    {AVR32_ADCREFP_PIN, AVR32_ADCREFP_FUNCTION},
    {AVR32_ADCREFN_PIN, AVR32_ADCREFN_FUNCTION},
    {AVR32_DAC0A_PIN, AVR32_DAC0A_PIN},
    {AVR32_DAC0B_PIN, AVR32_DAC0B_PIN}
  };
  /* Init system clocks */
  sysclk_init();

  /* Assign and enable GPIO pins to the DAC function. */
  gpio_enable_module(DACIFB_GPIO_MAP, sizeof(DACIFB_GPIO_MAP) /
  sizeof(DACIFB_GPIO_MAP[0]));

dacifb_get_calibration_data(&AVR32_DACIFB0, &dacifb_opt, 
DACIFB0_INSTANCE);

dacifb_configure(&AVR32_DACIFB0, &dacifb_opt, FOSC0);   // Configure and

enable DACIFB0



dacifb_configure_channel(&AVR32_DACIFB0, DACIFB_CHANNEL_SELECTION_AB,

&dacifb_channel_opt, DAC_PRESCALER_CLOCK); // Configure both DAC

channels of DACIFB0



dacifb_start_channel(&AVR32_DACIFB0, DACIFB_CHANNEL_SELECTION_AB,

FOSC0);  // Enable both outputs A and B of DACIFB0.

dacifb_set_value(&AVR32_DACIFB0, DACIFB_CHANNEL_SELECTION_A, false, 
1000);
dacifb_set_value(&AVR32_DACIFB0, DACIFB_CHANNEL_SELECTION_B, false, 
2000);
}

Was ist hier falsch?

von pegel (Gast)


Lesenswert?

Ralf Z. schrieb:
> .dual                 = false,

Ich habe keinen Plan vom AT32.
Was bedeutet das?

von Mikki M. (mmerten)


Lesenswert?

Der AT32 hat wohl wie die "alten" ATxmega ohne u nur einen echten DAC 
mit nachgeschalter S/H Stufe daher ist bei der Übergabe der Wert Umsicht 
geboten. Direktes glecihzeitiges Schreiben funktioniert wohl nicht, da 
muss zuvor der DAC Status ermittelt werden, ob schreiben möglich ist.

Beitrag #6401360 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.