Hola gente les quería preguntar si el código que escribí es correcto para poder leer la entrada del adc.
El ADC en cuestión es uno de 16Bits por I2C de Texas instruments. Según lo que leí al principio tengo que enviar el comando de reset para asegurarme un inicio adecuado del adc y luego tengo que leer a través del comando RDATA la conversión más reciente y guardar en dos variables de 8 bits el Msb y Lsb de la información pero el problema que tengo es que la lectura o me da 255 o 0.
Cabe destacar que es la primera vez que pruebo un ADC por i2c por lo cual les solicito una mano.
El pic que uso es el 16F877A y el compilador es CCS 5.07. El adc tiene una referencia externa de 5V con el Ref5050
El código :
La libreria lcd_porta no es más que la libreria flex_lcd pero con los pines del puerto a ya definidos en la misma
Desde ya muchas gracias de antemano.
El ADC en cuestión es uno de 16Bits por I2C de Texas instruments. Según lo que leí al principio tengo que enviar el comando de reset para asegurarme un inicio adecuado del adc y luego tengo que leer a través del comando RDATA la conversión más reciente y guardar en dos variables de 8 bits el Msb y Lsb de la información pero el problema que tengo es que la lectura o me da 255 o 0.
Cabe destacar que es la primera vez que pruebo un ADC por i2c por lo cual les solicito una mano.
El pic que uso es el 16F877A y el compilador es CCS 5.07. El adc tiene una referencia externa de 5V con el Ref5050
El código :
Objective-C:
#include <16f877a.h>
#fuses hs,nolvp,nobrownout,nowdt
#use delay(clock=20M)
#use i2c(master,fast,sda=pin_c4,scl=pin_c3)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
#byte porte=0x09
#byte trisa=0x85
#byte trisb=0x86
#byte trisc=0x87
#byte trisd=0x88
#byte trise=0x89
#define lcd_rs_pin pin_a0
#define lcd_enable_pin pin_a1
#define data4 pin_a2
#define data5 pin_a3
#define data6 pin_a4
#define data7 pin_a5
#include <lcd_porta.c>
int8 msb_data_adc=0,lsb_data_adc=0;
void main(){
porta=0x00;
portb=0x00;
portc=0x00;
portd=0x00;
porte=0x00;
lcd_init();
i2c_start();
i2c_write(0x88);// Address+R/~w=0
i2c_write(0x06);//0000-0110 Reset Command
i2c_stop();
while (true){
i2c_start();
i2c_write(0x88);// Address+R/~w=0
i2c_write(0x10);// RData command
i2c_start();
i2c_write(0x89);// Address+R/~w=1
msb_data_adc=i2c_read();
lsb_data_adc=i2c_read(0);
i2c_stop();
lcd_gotoxy(1,1);
printf(lcd_putc,"MSB: %i",msb_data_adc);
lcd_gotoxy(1,2);
printf(lcd_putc,"LSB: %i",lsb_data_adc);
}
}
La libreria lcd_porta no es más que la libreria flex_lcd pero con los pines del puerto a ya definidos en la misma
Desde ya muchas gracias de antemano.