jueves, 27 de marzo de 2014

Comunicación SPI PIC2550 con DAC LTC1660 (MikroC)


// 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:

No hay comentarios: