Autor Tema: Comunicacion PIC16F873A con TLC5628  (Leído 3647 veces)

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

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Comunicacion PIC16F873A con TLC5628
« en: 01 de Noviembre de 2006, 22:25:29 »
Saludos a todos, alguien podria indicarme como realizar la comunicacion entre el pic y el conversor digital a analogico tlc5628, apenas estoy comenzando con la programación en C y se poco de ello, he estado leyendo el ejemplo que trar el CCS para SPI pero no me ha ayudado en nada. Lo que deseo hacer es generar 3 señales analogicas usando un PIC lo que deseo principalmente es simplificar el circuito de momento estoy usando un DAC0800, TL082 y 3 LF398 para mantener los tres diferentes niveles de voltaje que deseo. Esta bien pero me gustaria usar una unica fuente de 5V ya que el DAC0800 y el TL082 requieren de +-12V.

El TLC5628 tiene comunicacion serie spi con el micro.

Saludos y espero alguien pueda darme un consejo.

FJPPitta :?
Que la fuerza te acompañe

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: Comunicacion PIC16F873A con TLC5628
« Respuesta #1 en: 01 de Noviembre de 2006, 23:25:29 »
podrias comentar un poco mas  que es lo que pretendes hacer asi te podemos guiar mejor :)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Comunicacion PIC16F873A con TLC5628
« Respuesta #2 en: 02 de Noviembre de 2006, 02:57:25 »
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5246
aca un dac de 5 volt, con ese puedes generar lo q deseas , y tiene varios canales, ademas hay muchos otros mas segun la aplicacion q requieras, pero primero define tu conversor DAC
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Comunicacion PIC16F873A con TLC5628
« Respuesta #3 en: 03 de Noviembre de 2006, 01:33:05 »
Saludos lo que pretendo hacer es generar tres referencias de voltaje diferentes entre si pero en un rango de 2 a 4 volts, estoy utilizando de momento un DAC de texas instrument el TLC5628 lo uso por que es el que tengo cuenta con interface serie spi, es de 8 bits se alimenta con 5 volts tiene internamente 8 convertidores maneja dos referencias diferentes.

Necesito las tres señales constantes son de referencia para otros tres circuitos.

He implementado dos codigos aunque sin exito uno de ellos usando la comunicacion SPI que ya trae el micro

Inicializo y configuro

Código: [Seleccionar]
setup_spi(spi_master | SPI_SS_DISABLED | SPI_CLK_DIV_16);
mando primero el comando y luego el dado

Código: [Seleccionar]
output_high(LOAD);
output_high(LDAC);

spi_write(salida1);
spi_write(todo);

output_low(LOAD);
output_low(LDAC);

Tambien intente realizar de forma manual la SPI con dos funciones:

Código: [Seleccionar]
void envia_comando_SPI(int comando)
{
int i=0;
int dato;

dato=comando;
while ( i < 4 )
{
output_low (CLK);
output_bit (DIN, (dato)?1:0);
output_high (CLK);
dato <<= 1;
i++;
}
}

void envia_dato_SPI(int dato)
{
int i=0;
output_low(LDAC);
output_high(LOAD);
while ( i < 8 )
{
output_low (CLK);
output_bit (DIN, (dato)?1:0);
output_high (CLK);
dato <<= 1;
i++;
}
output_low(LOAD);
output_low(CLK);
output_high(LOAD);
}

Luego realizo el llamado de las dos funciones

Código: [Seleccionar]
envia_comando_SPI(salida1);
 envia_dato_SPI(255);

El dato de 255 solo es de prueba para ver si a la salida me da el valor de referencia del DAC que de momento lo tengo en 5Volts. A la salida me da 400mV.

Me interesa hacerlo con un DAC serie ya tengo el circuito funcionando con un DAC paralelo y con retenedores.

De antemano gracias
Francisco
Que la fuerza te acompañe

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Comunicacion PIC16F873A con TLC5628
« Respuesta #4 en: 03 de Noviembre de 2006, 17:21:44 »
El DAC tiene 4 lineas que le llegan del micro:

Reloj
Dato: 12 bit de los cuales 4 son de control para escoger el convertidor y la escala y los otros 8 son el valor de voltaje
LOAD: Control de carga de la interfase serial. Cuando LDAC es bajo y LOAD es bajo el dato es llevado a un latch e inmediatamente se ejecuta la conversion.
LDAC: Carga al DAC. Cuando esta en alto no hay salida en el DAC aunque ya este el dato en la interfase serie del DAC. La salida solo se habilita cuando LDAC va de alto a bajo.

Los datos se envian de MSB a LSB.

Tambien corregi una instruccion y realice este codigo:

Código: [Seleccionar]
void envia_dato_SPI(int comando, int dato)
{
int i=0, j=0;

output_high(LOAD);
output_high(LDAC);

while ( i < 4 )
{
output_low (CLK);
output_bit (DIN, shift_left(&comando,1,0));
output_high (CLK);
//comando <<= 1;
i++;
}

while ( j < 8 )
{
output_low (CLK);
output_bit (DIN, shift_left(&dato,1,0));
output_high (CLK);
//dato <<= 1;
j++;
}

output_low(LOAD);
output_high(LOAD);
output_low(LDAC);
output_high(LDAC);

}

Ya me da salida pero no es la que yo deseo si no otro valor, por ejemplo cargo 255 como dato para obtener la referencia que son 5 Volts y lo que me da son 3.3 Volts, me imagino que ha de ser un problema de sincronizacion y/o envio de datos pero no encontrado la falla.

Ojala y alguien pueda hecharme la mano.

De antemano gracias
FJPPittta
Que la fuerza te acompañe

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Comunicacion PIC16F873A con TLC5628
« Respuesta #5 en: 03 de Noviembre de 2006, 23:29:31 »
Los rangos de volteja unicamente son entre 0.5 Volts y 4.0 Volts apesar de que la referencia es de 5V y que segun el convertidor cuando se ingresa el numero mas pequeño es cero. Como es la transmicion por medio de SPI se envia el primero el LSB o el MSB???, ya que por la palabra de control no hay problema ya logre seleccionar adecuadamente el DAC y el multiplicador pero no estoy convencido del voltaje de salida, puse un contador de 0 a 255 y otro de 255 a 0 y los dos DAC me dan buen resultado ya que dan un voltaje independiente uno en ascenso y otro en descenso, sin embargo el voltaje no me da lo que viene en la hoja de datos.

El codigo es:

Código: [Seleccionar]
#include <16F873a.h>
#include "dac.h"
#fuses HS,NOWDT,NOLVP
#use delay(clock=20000000)


void main()
{
int i=0;
int j=255;
setup_spi(spi_master);

while(TRUE)
{

output_high(LOAD);
output_high(LDAC);
spi_write(salida1);
spi_write(i);
output_low(LOAD);
output_high(LOAD);
spi_write(salida2);
spi_write(j);
output_low(LOAD);
output_high(LOAD);

output_low(LDAC);
output_high(LDAC);
delay_ms(250);
i++;
j--;
if (i==255) i=0;
if (j==0) i=255;

}
}

La libreria dac.h manejo constantes salida1, salida2 y salida3 los cuales me indican el DAC a donde mando el dato.

Lo que aun no me sale es la manipulacion manual sin hacer uso de spi_write me imagino que es por el tiempo ya que manejo un cristal de 20MHz.

Por lo de los comentarios hacerca de cada bloque de funcion realmente nunca me ha gustado ponerlos pero si arreglo el programa documentare el codigo.

Saludos
Francisco
Que la fuerza te acompañe

Desconectado jorgevert

  • Moderadores
  • PIC10
  • *****
  • Mensajes: 30
Re: Comunicacion PIC16F873A con TLC5628
« Respuesta #6 en: 04 de Noviembre de 2006, 12:33:43 »
Hola, en la hoja de datos aparece que el voltaje de referencia es como mucho vdd-1.5 entonces por eso no obtienes vdd a full scale.
Prueba con un divisor resistivo a la entrada del ref y ponlo a 2.5 y en el momento de enviar tus datos al dac activa el bit de control rng a 1 para doblar la salida del voltaje del dac.

Saludos

Jorge.

Desconectado FJPPitta

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
    • Mi pagina personal
Re: Comunicacion PIC16F873A con TLC5628
« Respuesta #7 en: 05 de Noviembre de 2006, 12:47:41 »
Muchas gracias por el dato jorgevert y ya obtengo el DAC a full scale lo unico que no he consegido es GND cuando envio el codigo 00H obtengo 600mV, de hecho en los DAC que no utilizo no estan a cero si no tienen el mismo valor de 600mV. En realidad ese error es de offset que segun la hoja de datos puede presentarse positivo o negativo entonces si es algo que ya esta en el DAC no se puede hacer nada, afortunadamente solamente requiero voltajes arriba de 1Volt.

Muchas gracias por la ayuda
Francisco
Que la fuerza te acompañe