This is what I have used to produce 3 sinewaves out of 3 MCP4921 DACs. Cant find an MCP4291
Code:
include "modedefs.bas"
ANSEL = %00000000 'Disable analog inputs Channels 0 to 7
ANSELH = %00000000 'Disable analog inputs Channels 8 to 11
WPUB = %00000000 'Disable weak pull-ups
ADCON0 = %00000000 'A/D Module is OFF
CM1CON0 = %00000000 'Comparator1 Module is OFF
CM2CON0 = %00000000 'Comparator2 Module is OFF
INTCON = %00000000 'INTerrupts CONtrol
TRISA = %00000000 'Set Input/Output (0 to 5)
PORTA = %00000000 'Ports High/Low (0 to 5)
TRISB = %00000000 'Set Input/Output (4 to 7)
PORTB = %00000000 'Ports High/Low (4 to 7)
TRISC = %01000000 'Set Input/Output (0 to 7)
PORTC = %01000000 'Ports High/Low (0 to 7)
addr var word [90]
addr[1]=2139
addr[2]=2278
addr[3]=2415
addr[4]=2551
addr[5]=2684
addr[6]=2813
addr[7]=2938
addr[8]=3059
addr[9]=3175
addr[10]=3285
addr[11]=3389
addr[12]=3486
addr[13]=3576
addr[14]=3658
addr[15]=3732
addr[16]=3797
addr[17]=3854
addr[18]=3902
addr[19]=3940
addr[20]=3969
addr[21]=3989
addr[22]=3998
addr[23]=3998
addr[24]=3989
addr[25]=3969
addr[26]=3940
addr[27]=3902
addr[28]=3854
addr[29]=3797
addr[30]=3732
addr[31]=3658
addr[32]=3576
addr[33]=3486
addr[34]=3389
addr[35]=3285
addr[36]=3175
addr[37]=3059
addr[38]=2938
addr[39]=2813
addr[40]=2684
addr[41]=2551
addr[42]=2415
addr[43]=2278
addr[44]=2139
addr[45]=2002
addr[46]=1861
addr[47]=1722
addr[48]=1585
addr[49]=1449
addr[50]=1316
addr[51]=1187
addr[52]=1062
addr[53]=941
addr[54]=825
addr[55]=715
addr[56]=611
addr[57]=514
addr[58]=424
addr[59]=342
addr[60]=268
addr[61]=203
addr[62]=146
addr[63]=98
addr[64]=60
addr[65]=31
addr[66]=11
addr[67]=2
addr[68]=2
addr[69]=11
addr[70]=31
addr[71]=60
addr[72]=98
addr[73]=146
addr[74]=203
addr[75]=268
addr[76]=342
addr[77]=424
addr[78]=514
addr[79]=611
addr[80]=715
addr[81]=825
addr[82]=941
addr[83]=1062
addr[84]=1187
addr[85]=1316
addr[86]=1449
addr[87]=1585
addr[88]=1722
addr[89]=1861
addr[90]=1996
'-------------------------------------------------------------------------------
' Variables
SCK VAR PORTB.6 'Clock pin
CS1 VAR PORTC.0 'Chip Select Active low
CS2 VAR PORTC.1
CS3 VAR PORTC.2
SDO VAR PORTC.7 'Data Out pin
FREQ VAR BYTE
SWITCH VAR PORTC.6
counter VAR word
highbit var word
lbit var highbit.byte0
hbit var highbit.byte1
'-------------------------------------------------------------------------------
START:
IF SWITCH THEN
FREQ = 35
ELSE
FREQ = 185
ENDIF
for counter = 1 to 90
highbit = addr[counter] +20480
low cs1
SHIFTOUT SDO,SCK,msbfirst,[hbit]
SHIFTOUT SDO,SCK,msbfirst,[lbit]
high cs1
PAUSEUS FREQ
low cs2
SHIFTOUT SDO,SCK,msbfirst,[hbit]
SHIFTOUT SDO,SCK,msbfirst,[lbit]
high cs2
PAUSEUS FREQ
low cs3
SHIFTOUT SDO,SCK,msbfirst,[hbit]
SHIFTOUT SDO,SCK,msbfirst,[lbit]
high cs3
PAUSEUS FREQ
next counter
counter=1
GOTO START:
END
regards
aajgss
Bookmarks