Code:
'****************************************************************
'* Name : DAC_MCP4921_WAVE.PBP *
'* Author : MARK S *
'* Date : 4/30/2011 *
'* Version : 1.0 *
'* Notes : DEMO 12BIT DAC MCP4921 - OUTPUTS SINE OR COSINE WAVE *
'* : FIXED FREQUENCY SHIFTOUT VERY SLOW, TRY MSSP MODULE *
'****************************************************************
'PIC18F4680 PBP2.6, MPASM
DEFINE OSC 20
'REGISTERS
INTCON = %00000000
INTCON2.7 = 0 'weak pullups portB
'ADCON0 = %00000001 'A/D module enabled, channel 0
ADCON1 =%00001111 'ALL DIGITAL
'ADCON2 = %10101011 'Right justified, 12 Tad, Frc clock
CMCON =%00000111 'COMP OFF
T3CON = 0
CCP1CON = 0 'ECCP OFF
ECCP1AS = 0
ECCP1DEL = 0
'PORTS
TRISA = %00000000 ' PORTA ALL OUTPUT
TRISB = %00000000 ' PORTB
TRISC = %00000000 ' PortC TMR1 RC0 = INPUT
TRISD = %00000000
TRISE = %00000111
'VARIABLES & DAC CONNECTIONS VREF PIN6 4921 TIED TO +5V
SCLK VAR PORTD.0 'SPI CLOCK PIN3 4921
SDAT VAR PORTD.1 'SPI DATA PIN4 4921
CS_DAC VAR PORTD.2 'Chip select PIN2 4921
LOAD_DAC VAR PORTD.3 'PIN5 4921
WAVE_INDEX VAR WORD 'TABLE POINTER
DAC_OUT VAR WORD '0-4095 OUTPUT 0 TO 5V, value returned from table
MAIN:
HIGH LOAD_DAC
HIGH CS_DAC
FOR WAVE_INDEX = 0 TO 255
'GOSUB COS_TABLE
GOSUB SINE_TABLE
'PAUSEUS 500 'LOWER OUTPUT FREQ
'----------------------
LOW CS_DAC
SHIFTOUT SDAT,SCLK,1,[%0011,DAC_OUT\12] 'Set DAC out
HIGH CS_DAC
LOW LOAD_DAC
@ NOP
HIGH LOAD_DAC
'----------------------
NEXT WAVE_INDEX
GOTO MAIN
SINE_TABLE:
lookup2 WAVE_INDEX, [0,1,2,6,10,15,22,30,39,50,61,74,88,103,120,137,156,_
176, 197,219,242,266,291,318,345,374,403,433,465,497,_
531,565,600,636,673,710,749,788,828,869,910,952,995,_
1039,1083,1127,1172,1218,1264,1311,1358,1406,1453,1502,1550,1599,_
1648,1698,1747,1797,1847,1897,1948,1998,2048,2098,2148,2199,2249,_
2299,2349,2398,2448,2497,2546,2594,2643,2690,2738,2785,2832,2878,_
2924,2969,3013,3057,3101,3144,3186,3227,3268,3308,3347,3386,3423,_
3460,3496,3531,3565,3599,3631,3663,3693,3722,3751,3778,3805,3830,_
3854,3877,3899,3920,3940,3959,3976,3993,4008,4022,4035,4046,4057,_
4066,4074,4081,4086,4090,4094,4095,4095,4095,4094,4090,4086,4081,_
4074,4066,4057,4046,4035,4022,4008,3993,3976,3959,3940,3920,3899,_
3877,3854,3830,3805,3778,3751,3722,3693,3663,3631,3599,3565,3531,_
3496,3460,3423,3386,3347,3308,3268,3227,3186,3144,3101,3057,3013,_
2969,2924,2878,2832,2785,2738,2690,2643,2594,2546,2497,2448,2398,_
2349,2299,2249,2199,2148,2098,2048,1998,1948,1897,1847,1797,1747,_
1698,1648,1599,1550,1502,1453,1406,1358,1311,1264,1218,1172,1127,_
1083,1039,995,952,910,869,828,788,749,710,673,636,600,_
565,531,497,465,433,403,374,345,318,291,266,242,219,_
197,176,156,137,120,103,88,74,61,50,39,30,22,15,10,6,_
2,1],DAC_OUT
RETURN
COS_TABLE:
lookup2 WAVE_INDEX, [4095,4095,4094,4090,4086,4081,_
4074,4066,4057,4046,4035,4022,4008,3993,3976,3959,3940,3920,3899,_
3877,3854,3830,3805,3778,3751,3722,3693,3663,3631,3599,3565,3531,_
3496,3460,3423,3386,3347,3308,3268,3227,3186,3144,3101,3057,3013,_
2969,2924,2878,2832,2785,2738,2690,2643,2594,2546,2497,2448,2398,_
2349,2299,2249,2199,2148,2098,2048,1998,1948,1897,1847,1797,1747,_
1698,1648,1599,1550,1502,1453,1406,1358,1311,1264,1218,1172,1127,_
1083,1039,995,952,910,869,828,788,749,710,673,636,600,_
565,531,497,465,433,403,374,345,318,291,266,242,219,_
197,176,156,137,120,103,88,74,61,50,39,30,22,15,10,6,_
2,1,0,1,2,6,10,15,22,30,39,50,61,74,88,103,120,137,156,_
176, 197,219,242,266,291,318,345,374,403,433,465,497,_
531,565,600,636,673,710,749,788,828,869,910,952,995,_
1039,1083,1127,1172,1218,1264,1311,1358,1406,1453,1502,1550,1599,_
1648,1698,1747,1797,1847,1897,1948,1998,2048,2098,2148,2199,2249,_
2299,2349,2398,2448,2497,2546,2594,2643,2690,2738,2785,2832,2878,_
2924,2969,3013,3057,3101,3144,3186,3227,3268,3308,3347,3386,3423,_
3460,3496,3531,3565,3599,3631,3663,3693,3722,3751,3778,3805,3830,_
3854,3877,3899,3920,3940,3959,3976,3993,4008,4022,4035,4046,4057,_
4066,4074,4081,4086,4090,4094,4095],DAC_OUT
RETURN
END
Bookmarks