38 #define ADC_NSTEPS 4096
39 #define ADC_12BIT_FLAG 1
42 #define ADC_NSTEPS 1024
43 #define ADC_12BIT_FLAG 0
50 volatile uint8_t u8_per, u8_amp;
53 const uint8_t au8_sinetbl[] = {127,133,139,146,152,158,164,170,176,181, \
54 187,192,198,203,208,212,217,221,225,229,233,236,239,242,244,247,249,250, \
55 252,253,253,254,254,254,253,253,252,250,249,247,244,242,239,236,233,229, \
56 225,221,217,212,208,203,198,192,187,181,176,170,164,158,152,146,139,133, \
57 127,121,115,108,102,96,90,84,78,73,67,62,56,51,46,42,37,33,29,25,21,18, \
58 15,12,10,7,5,4,2,1,1,0,0,0,1,1,2,4,5,7,10,12,15,18,21,25,29,33,37,42,46, \
59 51,56,62,67,73,78,84,90,96,102,108,115,121
74 #warning "DAC_R2R.C built for explicit R-2R DAC connected to RB9(MSb)-RB2(LSb)"
76 CONFIG_RB2_AS_DIG_OUTPUT();
77 CONFIG_RB3_AS_DIG_OUTPUT();
78 CONFIG_RB4_AS_DIG_OUTPUT();
79 CONFIG_RB5_AS_DIG_OUTPUT();
80 CONFIG_RB6_AS_DIG_OUTPUT();
81 CONFIG_RB7_AS_DIG_OUTPUT();
82 CONFIG_RB8_AS_DIG_OUTPUT();
83 CONFIG_RB9_AS_DIG_OUTPUT();
89 u16_temp = LATB & 0xFC03;
90 u16_temp |= ((u16_x & 0xFF00) >> 6);
96 #warning "DAC_R2R.C built for SPI-based dual 8-bit MAX548A DAC connected to RP14(SDO) and RP13(SCLK)"
97 #define CONFIG_MAX548A_ENABLE() CONFIG_RA2_AS_DIG_OUTPUT()
98 #define MAX548A_ENABLE() _LATA2 = 0
99 #define MAX548A_DISABLE() _LATA2 = 1
101 void configDAC(
void) {
103 SPI1CON1 = SEC_PRESCAL_1_1 |
105 CLK_POL_ACTIVE_HIGH |
111 CONFIG_RB14_AS_DIG_OUTPUT();
113 CONFIG_RB13_AS_DIG_OUTPUT();
115 SPI1STATbits.SPIEN = 1;
116 CONFIG_MAX548A_ENABLE();
140 #warning "DAC_R2R.C built for SPI-based 12-bit MAX5353 DAC connected to RP14(SDO) and RP13(SCLK)"
141 #define CONFIG_MAX5353_ENABLE() CONFIG_RA3_AS_DIG_OUTPUT()
142 #define MAX5353_CMD_ANDMASK 0x1FFE
143 #define MAX5353_ENABLE() _LATA3 = 0
144 #define MAX5353_DISABLE() _LATA3 = 1
146 void configDAC(
void) {
148 SPI1CON1 = SEC_PRESCAL_1_1 |
150 CLK_POL_ACTIVE_HIGH |
156 CONFIG_RB14_AS_DIG_OUTPUT();
158 CONFIG_RB13_AS_DIG_OUTPUT();
160 SPI1STATbits.SPIEN = 1;
161 CONFIG_MAX5353_ENABLE();
174 #warning "DAC_R2R.C built for I2C-based single output 8-bit MAX518 DAC connected to RB9(SDA) and RB8(SCL)"
175 #define MAX518_I2C_ADDR 0x58 // see MAX518 datasheet 19-0393 Figure 6
176 #define MAX518_WRITE_DACA 0x00 // see MAX518 datasheet 19-0393 Figure 7
177 #define MAX518_WRITE_DACB 0x01 // see MAX518 datasheet 19-0393 Figure 7
179 void configDAC(
void) {
188 #ifdef __DAC_MAX518_DUAL
189 #warning "DAC_R2R.C built for I2C-based DUAL output 8-bit MAX518 DAC connected to RB9(SDA) and RB8(SCL)"
190 #warning "In this example, I2C SCL is beyond specification for the MAX518 DAC."
191 #define MAX518_I2C_ADDR 0x58 // see MAX518 datasheet 19-0393 Figure 6
192 #define MAX518_WRITE_DACA 0x00 // see MAX518 datasheet 19-0393 Figure 7
193 #define MAX518_WRITE_DACB 0x01 // see MAX518 datasheet 19-0393 Figure 7
195 void configDAC(
void) {
200 static uint8_t au8_buf[]= {MAX518_WRITE_DACA, 0, MAX518_WRITE_DACB, 0 };
202 au8_buf[1] = (
uint8_t) (u16_x>>8);
203 au8_buf[3] = (
uint8_t) (u16_y>>8);
211 void _ISR _T3Interrupt (
void) {
216 writeDAC(u16_val, u16_idx);
220 u8_idx = (
uint8_t) (u16_idx>>9 );
221 u16_val = ((
uint16_t)au8_sinetbl[u8_idx])<<8;
224 if ((u16_idx^u16_old)&0x8000) _LATB12 = !_LATB12;
230 void configTimer3(
void) {
233 T3CON = T3_PS_1_1 | T3_SOURCE_INT;
253 CONFIG_AN0_AS_ANALOG();
254 CONFIG_AN1_AS_ANALOG();
257 CONFIG_RB12_AS_DIG_OUTPUT();
265 if (u16_per==0) u16_per++;
272 printf(
"timestep=0x%04X amplitude shift = 0x%02X\n", u16_per, u8_amp );