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:

domingo, 9 de marzo de 2014

Crear un archivo de texto desde un array en Matlab

Supongamos que se requiere generar una señal sinusoidal en un DSP o un FPGA a partir de un conjunto de 30 puntos de la función sin(t) dentro un solo ciclo. Si se programa el dispositivo en lenguaje C, necesitamos un array que contenga los 30 valores. Para transferir el array generado a un archivo.txt del cual se puedan copiar cómodamente (separados ya por una coma) se utiliza la función dlmwrite(). El código para generar los 30 valores en formato short es:

t = linspace(0,2*pi,30);
y = round(32767*sin(t));
dlmwrite('texto.txt',y);