Medidor de corriente con ADE 7758

Hola a todos, me gustaría hacer un medidor de corriente trifásico con un ADE7758 y un arduino, la comunicación entre los dos sería a través de SPI.

-Datasheet del ADE 7758

Quiero empezar por algo “sencillo” que sería coger la información de temperatura ambiente que da el chip.

Según el datasheet está en la dirección 0x11 de la memoria del chip.

Montaje básico para leer la temperatura.

os dejo mi código que por supuesto no me funciona jajajaja, ¡ah! que no os lo había comentado, mis conocimientos de programación son muy limitados y esto me va a servir para aprender.
Bueno lo que he conseguido hasta ahora es que en lugar de darme el valor de lo que hay en la posición 0x11 de la memoria, es que me da el valor 11 en decimal.

Mi código que devuelve como resultado el valor de 0x11 en decimal, es decir, 17.

#include <SPI.h>
#define CS 10
#define TEMP 0x11

int temperatura;

void setup()
{
Serial.begin(9600);
pinMode(CS,OUTPUT);
digitalWrite(CS, HIGH); //disabled by default
// SPI Init
SPI.setDataMode(SPI_MODE2);
SPI.setClockDivider(SPI_CLOCK_DIV32);
SPI.setBitOrder(MSBFIRST);
SPI.begin();

delay(10);

}

void loop() {

digitalWrite(CS,LOW); //Enable chip, setting low ChipSelect pin (CS)

temperatura = (TEMP);
Serial.println (temperatura);
temperatura=0;
delay(1000);

digitalWrite(CS,HIGH);

}

Tambien os dejo la siguiente información.

Librería en github del 7758 incompleta Esta sería genial, pero me da un montón de errores al compilarla y mis conocimientos no dan para resolverlos.

Librería para arduino del ADE7753 Esta compila perfectamente, pero es para el ADE7753, que es para lectura monofásica y no me sirve.

Y este otro es un código que he encontrado y que funciona o eso creo pero no se lo que hace.

#include <SPI.h>

#define CS 10

void setup() {
Serial.begin(9600);

pinMode(CS,OUTPUT);
// disable ADE7758 SPI
digitalWrite(CS,HIGH);

SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV16);
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE1);

Serial.println(“Setup complete”);
delay(1000);

}

void loop() {

write8bits(0x17,184); //calibration and period measurement
int test = read8bits(0x17);
Serial.print("LCYCMODE value is ");
Serial.println(test);

}

long read8bits (byte reg) {

long ret = 0;

// enable ADE7758 SPI
digitalWrite(CS,LOW);

delay(10);

SPI.transfer(reg);
delay(1);
ret=SPI.transfer(0x00);
delay(1);
// disable ADE7758 SPI
digitalWrite(CS,HIGH);

return ret;

}

long write8bits (byte reg, byte data) {

// enable ADE7758 SPI

digitalWrite(CS,LOW);
delay(10);

SPI.transfer(reg+128);
delay(2);

SPI.transfer(data);
delay(1);
// disable ADE7758 SPI
digitalWrite(CS,HIGH);

}

A ver si me dais un empujoncito para poder empezar, el principal problema es que no se como hacer para que me lea la dirección de memoria y guardar el registro en una variable.

Librería ADE7758 la primera que posteaste tu, funciona perfectamente con IDE 1.6.0

Corrí AdeTest.ino por supuesto no tengo el ADE7758.

[code]Sketch uses 5,420 bytes (2.1%) of program storage space. Maximum is 253,952 bytes.
Global variables use 384 bytes (4.7%) of dynamic memory, leaving 7,808 bytes for local variables. Maximum is 8,192 bytes.
[Stino - Done building "ADEtest" in 21.4s.]

[/code]

Voy a probarlo y te comento. Muchas gracias.

Edito: Pues si que me compila con la nueva version de arduino.

No uses las versiones 1.0.X no van salvo con programas y librerías viejas (mas de 2 años)

Hola de nuevo, he estado haciendo pruebas, he corrido el AdeTest.ino y compila perfecto, pero no soy capaz de obtener datos del ADE, siempre me da 0.
Tambien he corrido el que se llama ADE7758.ino de la misma librería, y ese me da el siguien te error.

¿Alguna idea de porque sale esto?.

tu errores no son visibles. usa [.code][./code] para postearlos

Este es el error.

C:\Users\Juan\AppData\Local\Temp\build7129493043543611867.tmp/core.a(main.cpp.o): In function `main':
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:40: undefined reference to `setup'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:43: undefined reference to `loop'
collect2.exe: error: ld returned 1 exit status
Error de compilación