Tengo dos DAC MCP 4822 con un dspic33fj128mc804. La inicialización de ambos DAC se realiza según sea necesario. Sin embargo, cuando intento cambiar los valores que se escriben en el DAC, no se modifican. El valor permanece igual que el valor inicializado.
Debajo está mi código. ¿Puede alguien ayudarme con esto, por favor?
// Inicializar DAC
void initDACs (void) { TRISB & = ~ 0x4010; DAC1CS = DAC2CS = 1; _SPI1IF = 0; // Borrar el indicador de interrupción _SPI1IE = 0; // Desactivar la interrupción
// Inicializar SPI
SPI1CON1=0x073e; //16bit, master, prescale 4, CKP0 CKE1 SMP 1
SPI1STAT=0x8000; //enable SPI
DAC1CS=DAC2CS=0;
SPI1BUF = 0x3000; //Set output of A to 0V
while(!_SPI1IF); //wait until SPI has finished
_SPI1IF = 0;
DAC1CS=DAC2CS=1;
SPI1STAT &=~0x40;
_SPI1IF = 0;
DAC1CS=DAC2CS=0;
SPI1BUF = 0xb000; // Set output of B to 0V
_SPI1IE = 1;
spiReady=0;
}
// Función para establecer valores en el DAC
void channelSetDAC (int v, int ch) {
unsigned int sendData;
if(ch>4) return;
if (SPI1STATbits.SPITBF) return;
if(ch &1)
{
sendData= 0x3000 | (v & 0xfff);
}
else
{
sendData= 0xb000 | (v & 0xfff);
}
if (ch <3) DAC1CS=0; else DAC2CS=0;
SPI1BUF=sendData;
spiReady=0;
}
// Función para escribir valores en el DAC
sMethod void () { channelSetDAC (0x7d0,0); }