// DAC module connections
sbit Chip_Select at RB5_bit;
sbit Chip_Select_Direction at TRISB5_bit;
// End DAC module connections
double t,valor;
void InitMain() {
Chip_Select = 1; // Libera DAC
Chip_Select_Direction = 0; // Pin CS# como salida
SPI1_Init(); // Inicializa modulo SPI
}
void DAC_Output(unsigned int valueDAC) {
char temp;
Chip_Select = 0; // Selecciona chip
//High Byte
temp = (valueDAC >> 6) & 0x0F; // Corrimiento
temp |= 0xF0; // Cargar dato al canal A
SPI1_Write(temp); // Envía parte alta del byte
//Low Byte
temp = valueDAC<< 2;
SPI1_Write(temp); // Envía parte baja del byte
Chip_Select = 1; // Libera chip
}
void main() {
int i = 0;
ADCON1 |= 0x0F; // Desactiva entradas analógicas
CMCON |= 7; // Desactiva comparadores
// Puerto B como salidas
TRISB = 0x00;
PORTB = 0X00;
//
InitMain(); // Secuencia de inicialización
while(1){
for (i=0; i < 80; i++){ // función de prueba
t = t + 0.078;
valor = (unsigned int) floor(512*sin(t)+512);
DAC_Output(valor); // Enviar dato
if (t > 2*3.14) t = 0;
}
}
}
* * *
Para que la salida de la DAC sea bipolar, es decir que tenga un rango de -5 a +5 V, se debe implementar el siguiente circuito: