Code:
'****************************************************************
'* Name : DAC_12BIT_MSSP *
'* Author : MARK S *
'* Date : 6/9/2011
'* SINE WAVE GENERATOR USING MCP4921 12BIT DAC *
'* USES MSSP MODULE vs SHIFTOUT *
'* PIC18F4680, PBP2.6 MPASM *
'* *
'****************************************************************
DEFINE OSC 20
'REGISTER SET
INTCON = %00000000
INTCON2.7 = 0 'weak pullups portB
ADCON1 =%00001111 'ALL DIGITAL
CMCON =%00000111 'COMP OFF
T3CON = 0
CCP1CON = 0 'ECCP OFF
ECCP1AS = 0
ECCP1DEL = 0
SSPSTAT = %00000000 'TX IDLE LOW,SAMPLE MIDDLE
SSPCON1 = %00100000 ' ENABLE MSSP,CLK IDLE LOW,FOSC/4
'-----------------------------------------------------
'PORTS
TRISA = %00000000 ' PORTA ALL OUTPUT '
TRISB = %00000000 ' PORTB
PORTB = %00000000 ' CLEAR PORTB
TRISC = %00000000 ' PortC
TRISD = %00000000
TRISE = %00000000
'----------------------------------------------------
'DAC CONNECTIONS
'VREF PIN6 MCP4921 TIED TO +5V
'CLOCK PIN3 MCP4921 TO PORTC.3 "SCK"
'DATA PIN4 MCP4921 TO PORTC.5 "SDO"
'CS PIN2 MCP4921 TO PORTD.2
'LOAD PIN5 MCP4921 TO PORTD.3 CONNECT THIS TO GROUND TO SAVE A PORT PIN
'--------------------------------------------------
'VARIABLES
CS_DAC VAR PORTD.2
LOAD_DAC VAR PORTD.3 'KEEP LOW
WAVE_INDEX VAR WORD
DAC_OUT VAR WORD
DAC_OUT1 VAR WORD
SSPIF VAR PIR1.3 ' SPI interrupt flag
'----------------------------------------------------
'START
SSPBUF = 0 ' CLEAR SPI BUFFER
SSPIF = 0 ' CLEAR SPI INTERUPT FLAG.
LOW LOAD_DAC
'===================================================================
MAIN:
HIGH CS_DAC
FOR WAVE_INDEX = 0 TO 255
GOSUB SINE_TABLE
LOW CS_DAC
DAC_OUT1 =$3000 | DAC_OUT ' Combine table value with dac reg control
SSPBUF = DAC_OUT1.HIGHBYTE 'SEND HIGH
While SSPIF = 0 ' WAIT FOR TX TO COMPLETE
Wend
SSPIF = 0 'RESET INT FLAG
SSPBUF = DAC_OUT1.LOWBYTE 'SEND LOW
While SSPIF = 0 ' WAIT FOR TX TO COMPLETE
Wend
SSPIF = 0 'RESET INT FLAG
HIGH CS_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
END
Bookmarks