Autor Tema: DAC TCL5615 comunicacion SPI con PIC16f877 simulacion  (Leído 2332 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado elchapafer

  • PIC10
  • *
  • Mensajes: 6
DAC TCL5615 comunicacion SPI con PIC16f877 simulacion
« en: 22 de Noviembre de 2012, 01:49:51 »
Hola aca muestro la simulacion en proteus, ccs.
 Intento crear una rutina que cada 5 seg me de un tension proporcional a la salida del DAC, por ejemplo(no es exacto):
1111 1111 11(00) --->5v fondo de escala
1000 0000 01(00) --->3v
0111 1111 11(00) --->1v
0000 0000 01(00) ---->0.5v
0000 0000 00(00) ---->0 V

La cuestion es que obtengo valores cerca de 0v y 5v ,pero no una escala lineal.
Ademas no entiendo mucho, en la datasheet del TCL dice que es de 16 bits, muestra una tabla de 12bit; con los 2 mas bajos: (sub-LSB) with 0 values
Como es la cosa, tengo que enviar 10 HI seguidos y olvidarme de los 4 restantes? Tendra algo que ver la instruccion:
#use spi(M............., LSB_FIRST,
Ayudenme a comprender su funcionamiento. Gracias.
PD: Los comentarios en el .c son para preguntarles luego.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: DAC TCL5615 comunicacion SPI con PIC16f877 simulacion
« Respuesta #1 en: 22 de Noviembre de 2012, 18:10:07 »
Que tal amigo!
prueba esto   :mrgreen:

Citar
#include <18f252.h>
#device adc=10
#use delay(clock= 4000000)
#fuses XT,NOWDT,PUT

#use spi(BAUD= 115200,DI=PIN_C4, DO=PIN_C5, CLK=PIN_C3, ENABLE=PIN_C2, bits= 16,IDLE=1, STREAM= TLC5615)

void main()
{
   long adc_data;
   
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);

   while(true)
   {
      adc_data= (read_adc())<<2;
      adc_data = adc_data & 0xFFFC;
   
      spi_xfer(TLC5615,adc_data,16);
      delay_us(50);
     
   }
}

Recuerda colocar el pin del voltaje de referencia a 2.5V   :mrgreen:

Saludos
« Última modificación: 22 de Noviembre de 2012, 18:53:34 por RALF2 »

Desconectado elchapafer

  • PIC10
  • *
  • Mensajes: 6
Re: DAC TCL5615 comunicacion SPI con PIC16f877 simulacion
« Respuesta #2 en: 24 de Noviembre de 2012, 15:07:35 »
Hola, gracias por reponder. No pude correr tu programa, no se a que le estare errando. Lo mismo logre hacer lo mismo que vos, a mi manera. Todavia me quedan unas dudas en cuanto a BAUD: es necesario usar el pin DOUT?  ,
 resolucion: por que obtengo el fondo de escala enviandole 13 HI?
Ademas que seria el   <<2;     cuando lees la entrada analogica.
Este es mi programa mejorado

#include <16f877.h>
#device adc=12    // Usa resolución de 10 bits
#use delay(clock = 4000000)
#include<lcd.c> // libreria del LCD.
#define DA_SCL PIN_B0
#define DA_SDO PIN_B1
#define DA_SDI PIN_B2
#define DA_CS PIN_B3

#use spi(MASTER,CLOCK_HIGH=4,CLOCK_LOW=4,CLK=DA_SCL, DO=DA_SDO, DI=DA_SDI, BITS=16, MODE=1, mSB_FIRST, stream=DA_spi, FORCE_SW)
                                                                                                                                   
void main()
{
 int16 i;
 long adc_data;
 setup_adc_ports(AN0);
  setup_adc(ADC_CLOCK_INTERNAL);//
  lcd_init(); //inicializa lcd
  lcd_gotoxy(1,1);           // Escribe a partir de la columna 1 en la línea 1.
  lcd_putc("TODO OK");      //
 do
{
   //  for(i = 0; i<8192; i++)
   //  {
      adc_data= (read_adc())<<2;
      output_low(DA_CS);                                                                           //         
        spi_xfer(DA_spi,adc_data,16);
         delay_ms(5);                                                                        //
        output_high(DA_CS);
  lcd_gotoxy(1,2);           // Escribe a partir de la columna 1 en la línea 2.
  printf(lcd_putc,"t=%lu",adc_data); //Escribo en la segunda fila del LCD.
//}
}
while(true);
}

:
--------------------------------------------------------------------------------------------------------------------------------------------

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2062
Re: DAC TCL5615 comunicacion SPI con PIC16f877 simulacion
« Respuesta #3 en: 24 de Noviembre de 2012, 16:01:27 »
Que tal elchapafer!
mira no entiendo esta linea de codigo que colocastes:
Citar
#use spi(MASTER,CLOCK_HIGH=4,CLOCK_LOW=4,CLK=DA_SCL, DO=DA_SDO, DI=DA_SDI, BITS=16, MODE=1, mSB_FIRST, stream=DA_spi, FORCE_SW)
Alli colocas clock_high=4, clock_low=4  de donde sacas eso (el 4) ? en la instruccion del spi no aparecen por ningun lado y se usa una de las dos, no ambas a la vez :?
Lo otro el modo debe ser 3, ya que el clock en estado de reposo debe permanecer  en high (1) y leer el pin en el flanco de subida, como lo indica el data sheet.
el <<2 quiere decir que luego de leer el adc del pic desplace el dato dos veces a la izquierda, eso tambien lo indica el data sheet donde los dos primeros bits estan en cero.
El pin dout me supongo que te refieres al DAC, en mi caso no lo utilizo, pero puedes emplearlo si colocas varios ADC en cascada (uno tras otro)  :mrgreen:
El Baud es para controlar la velocidad del reloj del spi, sino lo colocas el clock ira a la maxima velocidad que pueda con el cristal que estes utilizando por ejemplo  :mrgreen:

El programa que te pase funciona puesto que ya lo probe con ese ADC
 :mrgreen:



 

anything