Muy buenas tardes a todos y gracias por estar siempre ahí.
Resulta que necesito controlar un DS1881.
La comunicación con Arduino es efectiva, pero una vez lo intento con PIC no obtengo ningún resultado.
Se me ocurrió que podría comparar las transmisiones con los osciloscopios de Proteus y efectivamente aunque el 16F887 emite, no tienen nada que ver con el ATmega.
Los códigos usados respectivamente para Arduino y MikroC for PIC son los siguientes:
Arduino
MikroC
(El objetivo de que ambos programas se encuentren dentro de un bucle, es solo para facilitar la comprensión de los osciloscopios)
Lo que logro entender de la explicación de la biblioteca de MikroC, es que:
I2C1_Wr primero dirección del dispositivo
I2C1_Wr segundo especificación en el dispositivo
I2C1_Wr tercero valor a cargar
¿Es esto correcto ?
¿Dónde se encuentra la diferencia entre los programas?
Adjunto foto de Proteus.
Muchas gracias, saludos.
Resulta que necesito controlar un DS1881.
La comunicación con Arduino es efectiva, pero una vez lo intento con PIC no obtengo ningún resultado.
Se me ocurrió que podría comparar las transmisiones con los osciloscopios de Proteus y efectivamente aunque el 16F887 emite, no tienen nada que ver con el ATmega.
Los códigos usados respectivamente para Arduino y MikroC for PIC son los siguientes:
Arduino
PHP:
#include <Wire.h>
void setup(){
Wire.begin();
}
void loop(){
delay(500);
Wire.beginTransmission(0x28); // if you have only one pot, just ground all three address lines and use this address
Wire.write(B00000000 | 0); // technically not necessary to or these together, just use pot0Val
Wire.endTransmission();
delay(500);
}
PHP:
void main(){
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
PORTB = 0;
TRISB = 0; // Configure PORTB as output
I2C1_Init(100000); // initialize I2C communication
while(1){
delay_ms(500);
I2C1_Start(); // issue I2C start signal
I2C1_Wr(0x28); // send byte via I2C (device address + W)
I2C1_Wr(0b00000000); // send byte (address of EEPROM location)
I2C1_Wr(0); // send data (data to be written)
I2C1_Stop(); // issue I2C stop signal
delay_ms(500);
}}
Lo que logro entender de la explicación de la biblioteca de MikroC, es que:
I2C1_Wr primero dirección del dispositivo
I2C1_Wr segundo especificación en el dispositivo
I2C1_Wr tercero valor a cargar
¿Es esto correcto ?
¿Dónde se encuentra la diferencia entre los programas?
Adjunto foto de Proteus.
Muchas gracias, saludos.
Adjuntos
Última edición por un moderador: