1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include "dac_driver.h"
int main (void)
{
uint16_t angle;
/* Given 2 MHz CPU speed, this is configured to 2µs separation time and
* 16µs refresh time.*/
DAC_DualChannel_Enable( &DACA,
DAC_REFSEL_AVCC_gc,
false,
DAC_CONINTVAL_4CLK_gc,
DAC_REFRESH_32CLK_gc );
/* Use a 12 bit variable to output two triangle waves, separated by 180 degrees phase, as fast as possible. */
while (1) {
for ( angle = 0; angle < 0x1000; ++angle ) {
while ( DAC_Channel_DataEmpty( &DACA, CH0 ) == false ) {
/* Blocking code waiting for empty register. */
}
DAC_Channel_Write( &DACA, angle, CH0 );
while ( DAC_Channel_DataEmpty( &DACA, CH1 ) == false ) {
/* Blocking code waiting for empty register. */
}
DAC_Channel_Write( &DACA, 0xFFF - angle, CH1 );
}
for ( angle = 0; angle < 0x1000; ++angle ) {
while ( DAC_Channel_DataEmpty( &DACA, CH0 ) == false ) {
/* Blocking code waiting for empty register. */
}
DAC_Channel_Write( &DACA, 0xFFF - angle, CH0 );
while ( DAC_Channel_DataEmpty( &DACA, CH1 ) == false ) {
/* Blocking code waiting for empty register. */
}
DAC_Channel_Write( &DACA, angle, CH1 );
}
}
} |
Partager