Hola a todos me encuentro realizando un proyecto en el que necesito medir temperatura usando una pt100. Para ello opté por utilizar el conversor y acondicionador de señal ads1248 de texas instrument. Este integrado se comunica por spi y no tengo mucha experiencia en este tipo de transmision serie. He hecho algunos programas y no consigo comunicarme todavía, alguien tiene experiencia con este dispositivo o conoce algún otro que sirva para los mismos fines y de preferencia sea i2c?. Adjunto el programa que realicé por si alguien puede darme una mano. Les informo ademas que pongo un led en el pin de clock y este no enciende nunca por lo que sospecho que ni siquiera se establece la comunicación spi, estoy en lo correcto?. Desde ya agradezco sus respuestas
Programa:
#INCLUDE <18F4550.H>
#fuses XT,PUT,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=4000000)
#define DA_SCL PIN_b1
#define DA_SDO PIN_c7
#define DA_SDI PIN_b0
#define DA_CS PIN_a0
#include <lcdpf.c>
#use spi(MASTER,CLK=DA_SCL, DO=DA_SDO, DI=DA_SDI, BITS=8, MODE=0, mSB_FIRST, stream=DA_spi,FORCE_SW)
int dato_spi1[]={120,51,23};
float dato;
//void main()
//{//setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16); //inicia el puerto SPI.
// while(true)
// {
// output_low(DA_CS);
// spi_xfer(DA_spi,0xb0);/* |4 bits dummy|10bits DA|2 bits x */
// spi_write(0xb0);
// delay_ms(500);
// output_high(DA_CS);
// delay_ms(500);
//}
void iniciar_ads(){
spi_xfer(DA_spi,0x40);
spi_xfer(DA_spi,0x01);// configura registro 00h (MUX 0) para Pt100
spi_xfer(DA_spi,0x41);
spi_xfer(DA_spi,0x00);;//configura el registro 01h (VBIAS)
spi_xfer(DA_spi,0x42);
spi_xfer(DA_spi,0x30);;//configura el registro 02h (MUX 1)
spi_xfer(DA_spi,0x43);
spi_xfer(DA_spi,0b01110001);//configura el registro 03h (SYSO)
spi_xfer(DA_spi,0x4A);
spi_xfer(DA_spi,0x07);// configura el registro 0Ah (IDAC 0)
spi_xfer(DA_spi,0x4B);
spi_xfer(DA_spi,0x01);;// configura el registro 0Bh (IDAC 1)
delay_ms(30);
}
void main ()
{
set_tris_a(0);
lcd_init();
iniciar_ads();
lcd_gotoxy(1,1);
printf(lcd_putc,"temperatura %.2f ",dato);
lcd_gotoxy(1,2);
printf(lcd_putc,"temperatura %u ",dato_spi1[0]);
lcd_gotoxy(1,3);
printf(lcd_putc,"temperatura %u ",dato_spi1[1]);
lcd_gotoxy(1,4);
printf(lcd_putc,"temperatura %u ",dato_spi1[2]);
delay_ms(1500);
iniciar_ads ();
while (true)
{
output_toggle(pin_a0);
dato_spi1[0]=spi_xfer(0xff); //MSB
dato_spi1[1]=spi_xfer(0xff);//MID BYTE
dato_spi1[2]=spi_xfer(0xff);//LSB
dato= ((long)dato_spi1[2]*64 + (long)dato_spi1[1]*8 + (long)dato_spi1[0])*0.002686;
lcd_gotoxy(1,1);
printf(lcd_putc,"temperatura %.4f ",dato);
lcd_gotoxy(1,2);
printf(lcd_putc,"temperatura %02u ",dato_spi1[0]);
lcd_gotoxy(1,3);
printf(lcd_putc,"temperatura %02u ",dato_spi1[1]);
lcd_gotoxy(1,4);
printf(lcd_putc,"temperatura %02u ",dato_spi1[2]);
delay_ms(1000);
}
}