AVR1500: Xplain training – XMEGA™ Basic
AVR1502: Xplain training – XMEGA Direct Memory Access Controller
• Software prerequisites
Atmel
WinAVR/GCC 20100110 or later
• Hardware prerequisites
Xplain evaluation board
JTAGICE mkII
• Estimated completion time
2 hours
1 Introduction
Before starting with this training, it is recommended to do the Atmel XMEGA-Basics
training. For more information about the Atmel XMEGA Digital to Analog Converter
(DAC), please refer to the corresponding data sheet, the Atmel XMEGA Manual
and the AVR1301 application note.
®
AVR® Studio® 4.18 or later
8-bit
Microcontrollers
Application Note
The XMEGA DAC converts digital signals to analog signals. This can be used in
applications where you want stereo sound, signal generation, calibration or signal
compensation.
This training will show how to set up and use the DAC with practical code
examples.
Figure 1-1. DAC Overview
Rev. 8317A-AVR-06/10
2 Module Overview
http://www.BDTIC.com/ATMEL
This section provides an overview of the basic configuration options and functionality
of the DAC.
2.1 Conversion Triggers
A DAC conversion can be triggered either by (1) the data registers being written to or
(2) from an incoming event from the Atmel XMEGA Event System.
2.2 Single and Dual Channel Operation
The DAC module contains two data channels with corresponding data registers, but
only one conversion block. The user can choose between using channel 0 as a
continuous-drive output or both channels as two Sample/Hold outputs.
2.2.1 Single Channel Operation
2.2.2 Dual Channel Operation
The channel operation mode is configured with the Channel Select bitfield (
Control Register B (
In Single Channel mod
is always connected to the data registers and the output driver stage of channel 0,
hence the concept continuous-drive output.
Figure 2-1 shows the DAC in single channel op
Hold stage is bypassed compared to Figure 1-1.
Figure 2-1. Single Channel
In dual ch
for channel 0 and 1. Thus, sample and hold blocks are used to keep the output values
between conversions. To be able to maintain a stable output value on the two
outputs, the channels must be refreshed regularly.
ann
CTRLB).
e, only one of the two channels is used. The conversion block
eration mode. Note that the Sample /
Operation
el mode, the DAC conversion block is alternately used to convert values
CHSEL) in
A refresh of the channel means that its value is converted and output again. This is
necessary because the Sample/Hold circuit will lose its analog signal voltage over
time, just like the voltage over a capacitor that is discharging through a parallel
resistor.
Note that a higher refresh rate causes higher power consumption (for details, please
refer to the data sheet).
The sample interval is the time to store (sample) a value for analog output. This is
analogous to charging a capacitor. If the sample time is too long, you may lose
information from signals with high slew rate (steep curved signals). If the sample rate
2
AVR1508
8317A-AVR-06/10
http://www.BDTIC.com/ATMEL
is slower than the refresh rate, the DAC module has an internal refresh interval
generator as well. The automatic refresh interval is configured with the Refresh Timing Control bitfield (
Note that manual conversions or event triggering does not affect the refresh interval.
This means that the channels will be refreshed at constant intervals even if extra
conversions are done in between, caused by for instance a manual update of a data
register.
Figure 2-2. Channel refresh and conversion request
REFRESH) in the Timing Control register (TIMCTRL).
AVR1508
Figure 2-2 shows an example. Each sample is done in time int
Sample Interval. After sampling Channel 0, the Channel 1 is sampled, and this may
be repeated if using the automatic refresh feature, see number 1 in the Figure 2-2. If
annel
a ch
the numbers 2, 4 and 6 in Figure 2-2.
2.3 Left and Right Adjusted Values
The Atmel XMEGA DAC module can be configured to accept left adjusted values by
setting the Left-adjust Value bit (LEFTADJ) in Control Register C (CTRLC). Figure 2-3
s the difference between right and left adjusted values in the DAC value
show
registers.
Figure 2-3. Left and Right Adjusted Values
e
rvals; we call it a
conversion is requested, there will be additional updates, for instances, see
8317A-AVR-06/10
3
The 12-bit input value to the DAC contains two 8-bit registers, referred to as the high
http://www.BDTIC.com/ATMEL
and low registers. By default, the 12-bit value is distributed with the 8 LSB in the low
register and 4 MSB in the high register.
In some applications, it is useful to work with left-adjusted data. This could be if, for
instance, storing 8-bit data to the DAC and using the high-byte register only (8 MSB).
4
AVR1508
8317A-AVR-06/10
3 Overview
http://www.BDTIC.com/ATMEL
This training covers some of the basic Atmel XMEGA DAC features:
Task 1: Single Conversion Mode
This task shows how to set up the DAC in single conversion mode.
Task 2: Dual Conversion Mode
This task shows how to use the DAC in dual conversion mode. With a speaker you
may play dual tones by pressing button switches, like a piano.
Task 3: DAC with Event System
This task shows an example on how to use the event system to trigger DAC
conversions. A speaker will play a pre-recorded track in 8-bit resolution, sampled at
11 kSps.
AVR1508
Task 4: Using the DMA to feed the DAC with data
This task will teach you how to set up the DMA to feed data to the DAC.
Figure 3-1: How the speaker is connected on the Xplain
(cap
As Figure 3-1 shows, we have added a DC filter
each channel. The resistor should be 1 k Ohm minimum and is used as a current
limiter to protect the DAC output. A Texas Instruments TPA253 Class B audio
amplifier is used to drive the speaker in mono mode, where AUDIO_OUT_L and _R
from the XMEGA are internally summed in the amplifier.
acitor of 1 µF) and a resistor to
8317A-AVR-06/10
5
4 Task 1: DAC Introduction
http://www.BDTIC.com/ATMEL
This task will introduce you to the DAC and show how to write code to set it up in
Single Conversion mode without using driver functions. We will generate a triangle
wave to the DAC output channel and use the speaker to play the tone of the signal.
The goal for this task is that you know how to:
• Get started with the Atmel XMEGA DAC
• Set up the DAC in Single Conversion Mode
• Generate a triangle wave to play with the speaker
1. In Atmel AVR Studio, open the project
Note that there are three lines of code that set up the DACB:
• The voltage reference
• Single conversion mode
• Enabling of the DACA channel 0
2. Open the Atmel XMEGA A Manual and look through the register description
chapter for the DAC. Compare the CTRLA, CTRLB and CTRLC registers in the
manual with the C-code in
looks correct
3. Build and run the code in AVR Studio and verify that you hear a sound
4. AVCC is chosen as the voltage reference. Which other references could have been
chosen?
5. If you choose for instance INT1V instead of AVCC, what would happen with the
sound?
task1.c. Verify that you understand the code and that it
DAC_Intro.aps and look at the file task1.c
6. Change the value of TRIANGLE_ABRUPTNESS, build and run again
6
AVR1508
8317A-AVR-06/10
5 Task 2: DAC in Single Conversion Mode
http://www.BDTIC.com/ATMEL
Single Conversion mode means that we are only using one of the two channels in the
DAC module. In the ATxmega128A1, there are two DAC modules, DACA and DACB.
Each module has two channels. (We will use DACB only in this training.) Note that in
Single Conversion mode, there is no Sample and Hold circuit enabled, thus, the
analog output on the channel is always enabled.
The goal for this task is that you know how to:
• Set up the DAC in Single Conversion Mode using a driver
• Play a pre-recorded sound track to the speaker
AVR1508
1. Open the project
The code in this task is writing a piece of a sound track to the DAC. The sound track
is recorded in advance and the samples are saved in program memory. The sound
track is sampled with 8-bit precision and 11000 samples per second. A timer is set up
to trigger an overflow interrupt service routine (ISR) 11 thousand times each second,
to write samples to the DAC. Your task is to set up the DAC correctly.
2. Try to roughly understand the code in
3. In the main function you will see the empty
call. Open the driver file,
function
4. Insert the three missing parameters. You may use the Atmel XMEGA A Manual
and the
reference and left adjusted result for the channel 0. Why do you think we are using
left adjusted result?
5. In the ISR for the Timer/Counter C0, we want to write to the DAC. Fill in the
missing three parameters
iox128A1.h header file to find the macros to fill in. Hint: Use the AVCC
SingleConversion.aps and take a look at Task2.c
Task2.c
DAC_SingleChannel_Enable function
dac_driver.c, and scroll down to the definition of this
6. Build the project and run the program from debugging mode
7. Press and hold one of the buttons SW0, SW1 or SW2. You should now hear the
sound track playing. If not, you may refer to the solution code and see if you should
change some of your setup
8. When pressing SW0, the TIMER_C0_PERIOD equals 181. Why this value? What
happens when pressing SW1, adding 50 timer ticks?
8317A-AVR-06/10
7
6 Task 3: DAC in Dual Conversion mode
http://www.BDTIC.com/ATMEL
In this task we will look into the Dual Conversion mode in more details. As you may
have read from the Introduction chapter, the Dual Conversion mode means that both
of the two channels of a DAC module are used. For instance, this mode could be
used to play stereo music or to generate two different signals on the outputs.
In this task, you will set up the DAC in Dual Conversion mode. You may refer to the
Atmel XMEGA A Manual and the introduction chapter of this document in order to
understand the mode. It is important to understand this operational mode when
setting up the driver.
The program will output the gamut (piano tone scale) on channel 0 in Single
Conversion Mode when pressing the different switches on the Xplain. The task is to
enable Dual Conversion Mode. When you have done that, you will be able to play two
different tones at a time with the XMEGA.
Note that on the Xplain, though we have stereo output, the sound signal is mixed
down to mono outside the Atmel XMEGA as we only have one speaker. Refer to
Figure 3-1 for more details.
The goal fo
• Set up the DAC in Dual Conversion Mode
• Have fun playing the piano with dual-tones on the Xplain
1. Open the project
understand the main function and the ISR-routine for the Timer C0. As you will see,
we are going to output square signals to the DAC
2. Compile and run the program. Press the switches and play a song
3. Break the execution of the program
4. In the main function, replace the
DAC_DualChannel_Enable function. Open the dac_driver.c and fill in the missing
parameters. Note that only the two last parameters are new
Open the XMEGA A Manual and the header file
parameters that may fit in the
options; is it for instance possible to turn off the automatic refresh rate?
r this task is tha
DualConversion.aps and take a look at Task3.c. Try roughly to
t you know how to:
DAC_SingleChannel_Enable function with the
iox128A1.h to find out which
DAC_DualChannel_Enable function. Think about the
5. Build and run the program. What happens if you play the piano on the Xplain now?
(Answer: Dual tones)
8
AVR1508
8317A-AVR-06/10
7 Task 4: Using the DMAC to feed the DAC
http://www.BDTIC.com/ATMEL
In this task we will use the DMA Controller to write a Sine Wave to the Digital to
Analog Converter. When using the DMAC, the CPU will be unloaded and we could in
fact do other operations while the sine is being converted.
Your job will be to set up the second DACB channel (channel 1) and set up a working
configuration for the DMAC. It could be an advantage to have done the DMAC
training in advance.
The goal for this task is that you know how to:
• Set up the DAC in Dual Conversion Mode
• Set up the DMAC to write data to the DAC
• Get more familiar with the DMAC in a practical example
DMA_Approach.aps and take a look at Task4.c. Try to roughly
understand the code. We are going to output sine wave signals to the DAC using
the DMAC
2. In the
main()-function, we have set up the DAC channel 0 for you. Complete with
code for the DAC channel 1 by inserting the missing parameters in the function call
DMA_Setup()
3. Some of the code inside the
DMA_Setup() function is missing, too. By using the
hints below, insert the missing code
Hints:
There are missing codes for the source data, which are the hard coded sine wave
and the destination (DAC). The DMA will only send one byte at a time, but the data to
send is of the type
uint16_t. The destination should therefore be bursts of two bytes.
The source data should be repeated blocks of the size of the sine wave.
4. Build and run the project. You should now hear two different tones on the two DAC
channels
8 Summary
Here are some of the highlights from this training:
• Using DAC to transfer in Single Conversion Mode
• Using DAC to transfer in Dual Conversion Mode
• Using DAC to play the piano
• Using DMAC to feed the DAC without using the CPU
8317A-AVR-06/10
9
9 Resources
http://www.BDTIC.com/ATMEL
• Atmel XMEGA Manual and Datasheets
o http://www.atmel.com/xmega
• Atmel AVR Studio with help files
o http://www.atmel.com/products/AVR/
• WINAVR GCC compiler
o http://winavr.sourceforge.net/
• Atmel IAR Embedded Workbench
o http://www.iar.com/
10 Atmel Technical Support Center
Atmel has several support channels available:
®
compiler
• Web portal: http://support.atmel.no/
• Email: avr@atmel.com
• Email: avr32@atmel.com
Please register on the web portal to gain access to the following services:
• Access to a rich FAQ database
• Easy submission of technical support requests
• History of all your past support requests
• Register to receive Atmel microcontrollers’ newsletters
• Get information about available trainings and training material
All Atmel AVR products
All Atmel microcontrollers
All 32-bit AVR products
10
AVR1508
8317A-AVR-06/10
http://www.BDTIC.com/ATMEL
Disclaimer
Headquarters International
Atmel Corporation
2325 Orchard Parkway
San Jose, CA 95131
USA
Tel: 1(408) 441-0311
Fax: 1(408) 487-2600
Atmel Asia
Unit 1-5 & 16, 19/F
BEA Tower, Millennium City 5
418 Kwun Tong Road
Kwun Tong, Kowloon
Hong Kong
Tel: (852) 2245-6100
Fax: (852) 2722-1369
Atmel Europe
Le Krebs
8, Rue Jean-Pierre Timbaud
BP 309
78054 Saint-Quentin-enYvelines Cedex
France
Tel: (33) 1-30-60-70-00
Fax: (33) 1-30-60-71-11
Atmel Japan
9F, Tonetsu Shinkawa Bldg.
1-24-8 Shinkawa
Chuo-ku, Tokyo 104-0033
Japan
Tel: (81) 3-3523-3551
Fax: (81) 3-3523-7581
Product Contact
Web Site
www.atmel.com
Disclaimer: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any
intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN ATMEL’S TERMS AND
CONDITIONS OF SALE LOCATED ON ATMEL’S WEB SITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED
OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS,
BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the
contents of this document and reserves the right to make changes to specifications and product descriptions at any time without notice. Atmel does not make any
commitment to update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be used in,
automotive applications. Atmel’s products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.