Hallo zusammen :D Ich möchte den Digital-Analogwandler des AVR32uc3c512c verwenden, um einzelne, vom Prozessor errechnete Werte in eine analoge Spannung umzuwandeln. Ich verwende: Atmel Studio 6 STK600 AVR Dragon Die im ASF aufgeführten Beispielprogramme verwenden den PDCA um dort zuvor abgelegte Sinus-Werte nacheinander über den DAC auszugeben. ich möchte jedoch direkt die Werte an den DAC übergeben, mittels der "dacifb_set_value(...)"-Funktion. der Wert soll dann so lange gehalten werden, bis ein neuer übergeben wird. Ich habe bereits versucht, das DACIFB-Example1 etwas umzuschreiben: #include <asf.h> #include <delay.h> #include <scif_uc3c.h> #include <dacifb.h> #define F_CPU 20000000 // 20000000 Hz crystal dacifb_opt_t my_dacifb ={ .reference=DACIFB_REFERENCE_VDDANA, .channel_selection= DACIFB_CHANNEL_SELECTION_B, .low_power= false, .dual= false, .prescaler_clock_hz= F_CPU }; dacifb_channel_opt_t my_dacifb_channel ={ .auto_refresh_mode= false, .trigger_mode= DACIFB_TRIGGER_MODE_MANUAL, .left_adjustment= false, .data_shift= 0, .data_round_enable= false }; int main (void) { board_init(); // systemclock sysclk_init(); osc_enable(OSC_ID_OSC0); osc_wait_ready(OSC_ID_OSC0); sysclk_set_source(SYSCLK_SRC_OSC0); 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_DAC1B_PIN, AVR32_DAC1B_PIN}, }; gpio_enable_module(DACIFB_GPIO_MAP, sizeof(DACIFB_GPIO_MAP)/sizeof(DACIFB_GPIO_MAP[0])); dacifb_get_calibration_data(&AVR32_DACIFB1, &my_dacifb, 1); dacifb_configure(&AVR32_DACIFB1, &my_dacifb, F_CPU); dacifb_configure_channel( &AVR32_DACIFB1, DACIFB_CHANNEL_SELECTION_B, &my_dacifb_channel, F_CPU ); dacifb_start_channel( &AVR32_DACIFB1, DACIFB_CHANNEL_SELECTION_B, F_CPU ); while(1){ //generate a trigger-signal each period gpio_set_gpio_pin(AVR32_PIN_PA06); gpio_clr_gpio_pin(AVR32_PIN_PA06); dacifb_set_value(&AVR32_DACIFB1,DACIFB_CHANNEL_SELECTION_B, false, 1000); // low time delay_us(100); dacifb_set_value(&AVR32_DACIFB1,DACIFB_CHANNEL_SELECTION_B, false, 3000 ); // high time delay_us(100); } In der while(1)-Schleife soll bei jedem Durchlauf ein Trigger-Signal für das Oszilloskop erzeugt werden und mit dem DAC ein Rechteck-Signal ausgegeben werden. die Pegel sollen jeweils 100us gehalten werden. In der Oszi-Ausgabe kommt jedoch der "3000er"-high-Pegel sofort nach dem Trigger, obwohl doch zuerst der "1000er" low-pegel kommen müsste. Die Periodenzeit stimmt allerdings. (siehe angehängtes Scope-Bild). Welche Parameter für die dacifb_opt_t und dacifb_channel_opt_t Strukturen wären für meine Aufgabe sinnvoll ? Hat Jemand Mit dem DACIFB Erfahrungen gesammelt? Danke schonmal, Gruß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.