TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rafagranada en 08 de Noviembre de 2018, 12:28:47

Título: pic 16f877a y conversor pcf8591
Publicado por: rafagranada en 08 de Noviembre de 2018, 12:28:47
buenas tardes a todos
estoy atrancado con un problemilla a ver si alguien me puede ayudar.
estoy intentado comunicar un conversor pcf8591 con 4 entradas analogicas a digital independientes. el caso es que he conseguido que funcione con solo 1 entrada, pero cuando el pic me envia la señal que pone scl sda a 1 me multiplica el resultado en pantalla al doble de lo que esta convirtiendo, tampoco he conseguido hacerlo funcionar con mas de 1 entrada.

esto lo estoy haciendo por que he visto el bh1750 que es un luxometro para arduino que se comunica con I2c pero tampoco he podido hacerlo andar.

si algun alma caritativa me puede decir por donde tirar.... estaria muy agradecido.

os dejo cogido y foto del circuito. mi correo es estoydebajodelventilador@gmail.com por si necesitais algo mas

muchas gracias


#include "16f877a.h"
#fuses XT,NOWDT,NOPROTECT,NOLVP
#byte pa=5 
#byte pb=6 
#byte pc=7 
#byte pd=8 
#byte pe=9
#use delay(clock=4Mhz)  // aqui declaramos que use el reloj que sera de 4 Mhz.
//#include "BH1750.c"
//#include "BH1750-1.c"
#include "mipant4bit.c" // incluimos el driver que usamos para el LCD
#include "stdio.h" //incluimos esta libreria para usar funcion printf
#use standard_io(d)
#use i2c(master,sda=pin_c4, scl=pin_c3)
float lectura;
float lectura2;

int i;

   
//----------------------------------------------------------------------------
void luces()
{


i2c_start();           // Inicio la comunicación I2C
i2c_write(0x90); // Envío Dirección I2C del PCF8591  90
delay_ms(10);
i2c_write(0x04); // Envío Configuración del PCF8591 para ADC por AIN0 04
delay_ms(10);
i2c_start();           // Inicio la comunicación I2C
i2c_write(0x91); // Envío Dirección I2C del PCF8591
lectura=i2c_read(); //leo la conversion de A0
i2c_stop();

lectura=(lectura*5)/256.0;
 

              //trato la conversion
              for (i=0;i<5;i++){
lcd_gotoxy(1,1);
printf(lcd_putc,"Tension:%f V ",lectura); //y muestro el dato

              }
delay_ms(2000);
}


//----------------------------------------------------------------------------



void main()
{
   lcd_init();//inicializacion necesaria del lcd
   set_tris_d(0);
   set_tris_b(0b11111111);
   set_tris_c(0b00000000);
   set_tris_e(0b000);
   set_tris_a(0b00111111);
   lcd_init();   
   pd=0;         
   pc=0;
   pe=0;
   lcd_putc("SISTEMA DOMOTICO");
   delay_ms(50);
   lcd_putc("\f");
   lcd_putc("STARTING SYSTEM");
   lcd_gotoxy(1,2);
   lcd_putc(".");
   lcd_gotoxy(2,2);
   lcd_putc(".....");
   delay_ms(100);
   lcd_putc("\f");
   while(1)
      {
      luces();
      }
}
Título: Re:pic 16f877a y conversor pcf8591
Publicado por: elreypic2 en 08 de Noviembre de 2018, 12:47:19
Rafagranada,

Has colocado tu petición en el subforo incorrecto.
Este subforo es para PICBasic y tú estás usando C. POr favor mueve tu mensaje al subforo de Lenguaje C para microcontrolaldores. O bien si algún moderador pudiera moverlo al subforo correcto.

elreypic.
Título: Re:pic 16f877a y conversor pcf8591
Publicado por: rafagranada en 08 de Noviembre de 2018, 16:21:17
Hola elreypic2.

Muchas gracias por tu observación, te pediría si me puedes ayudar con indicaciones de cómo cambiar el mensaje. Pues no tengo ni idea de cómo hacerlo o si algún moderador puede hacerlo le daria las gracias