xmega_tutorial.jpg

Xmega Tutorial - DAC

Bewertung:  / 2
SchwachSuper 
  • xmega_dac_system

Die XMEGA-Bausteine enthalten sehr schnelle 12-Bit analoge Module in ihrer Peripherie. Dazu gehört neben dem ADC (Analog zu Digital Converter)und verschiedenen analogen Komperatoren auch ein High-Performance-Digital-Analog-Wandler, kurz DAC (Digital zu Analog Converter), welcher bis zu 1Mio Wandlungen pro Sekunde mit einer Auflösung von 12Bit schafft.

Weitere Eigenschaften wie duale Sample-Hold Ausgänge, ein optionales Routing der DAC-Ausgänge zu den On-Board-Komparatoren oder zum Analog-to-Digital-Wandler (ADC) des Controllers schaffen ein sehr flexibles Modul, welches sich für eine breite Palette von Anwendungen, wie zum Beispiel Stereo-Sound, High-Speed-Signalerzeugung oder Kalibrier-und Signal-Kompensation eignet.

Durch eine erweiterte Nutzung des DAC's mit der DMA (Direct Memory Access) Einheit und dem internen Event System des Xmega Controllers kann die für die Wandlungen benötigte CPU Leistung auf ein Minimum reduziert werden. Weiter hin kann zwischen einer internen und externen Spannungsreferenz gewählt werden.

Features

  • 12 bit Auflösung
  • bis zu 1Mio Wandlungen pro Sekunde
  • kontinuierlicher oder sample-and-hold Betrieb
  • integrierte Offset- und Verstärkungs-Kallibrierung
  • xmega_dac_1

Das folgende Beispiel zeigt die Verwendung des 12Bit DAC am Port B des Xmegas. Dort wird am Ausgang 0 und 1 mit der maximalen Geschwindigkeit eine Dreieckfunktion ausgegeben, in dem in einer Schleife das Register des DAC-B in einer Schleife "hoch und runter" gezählt wird. Vor der Ausgabe des neuen Wertes wird das register des DAC überprüft, ob dieser für einen neuen Wert bereit ist.

Die beiden vom DAC generierten Dreieck-Signale sind um 180° phasenversetzt. Ein Bild der DAC-Ausgabe findet man rechts neben dem Text. Hier sieht man schön die kleinen Digitalisierungsstufen, welche durch die begrenzte digitale Auflösung entsteht.

Xmega DAC Example
#include "dac_driver.h"
 
cli();
init_clock(); 
 
//####################################### Initialize DAC
DAC_DualChannel_Enable(&DACB, DAC_REFSEL_AVCC_gc, false, 
DAC_CONINTVAL_16CLK_gc, DAC_REFRESH_32CLK_gc );
 
//####################################### enable Interrupts 
PMIC.CTRL|=PMIC_HILVLEN_bm|PMIC_MEDLVLEN_bm|PMIC_LOLVLEN_bm; //Intrrupts
 
sei();
 
//####################################### main
int main (void)
{
 
while(1)
{
//#################### DAC update 
// Use a 12 bit variable to output two trivalue waves, 
// separated by 180 degrees phase, as fast as possible
 
for ( value = 0; value < max; ++value ) 
{
while (DAC_Channel_DataEmpty(&DACB,CH0) == false) {}
DAC_Channel_Write(&DACB, value, CH0);
 
while (DAC_Channel_DataEmpty(&DACB,CH1) == false) {} 
DAC_Channel_Write(&DACB, max - value, CH1);
}
 
 
for ( value = 0; value < max; ++value ) 
{
while (DAC_Channel_DataEmpty(&DACB,CH0) == false) {} 
DAC_Channel_Write(&DACB, max - value, CH0);
 
while (DAC_Channel_DataEmpty(&DACB,CH1) == false) {} 
DAC_Channel_Write(&DACB, value, CH1);
}		
//#################### while end  
 
}
 

Ein ausführliches Beispiel zum Testen der vorgestellten Funktionen findet ihr unter Downloads. Weiterhin findet ihr die von Atmel zu dem Thema zur Verfügung gestellte Appnote im Anhang des Artikels unter Links.

Viel Spass beim Testen.

Hinweis:
Das Tutorial wird nach und nach von mir ergänzt. Wenn ihr Fehler in dem Tutorial findet würde ich mich freuen wenn ihr mir diese mitteilt, damit ich diese korrigieren kann. Wenn jemand eigene Tips, Informationen oder Code-Schnipsel hat kann er mir diese gern zusenden damit ich sie anschließend in das Tutorial einbinden kann.

Links

 
Atmel Appnote
Xmega DAC
AVR1301: Using the XMEGA DAC (pdf)
AVR1301: Using the XMEGA DAC (Software)

Downloads

Kommentar hinzufügen

Neuste Beiträge

30/08/2016
Es gibt nun endlich ein Update für die Tinyg CNC Controller Hardware und der dazu gehörenden PC Software...
03/09/2015
In den letzten Monaten habe ich lange das CAD Programm und meinen kleinen Ultimaker 3D Drucker gequält....
15/05/2015
Zuerst wurde eine kleine Katze am Computer konstruiert. Der erste Druck mit 0,3mm Schichtstärke war...
06/05/2015
Da beim Ultimaker keine Beleuchtung des Arbeitstisches vorgesehen ist, muss ich mir hier selber eine...
10/03/2015
Nach vielen Überlegungen habe ich mich nun endlich dazu entschieden meinen Machinenpark mit einem 3D...
01/02/2015
Diese Hardware besteht aus einem mächtigem Hardwarecontroller und vier leistungsstarken...
123135