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


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
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.