Professional Documents
Culture Documents
Pgina 1 de 22
Signup
Login
Search
9 posts / 0 new
Message
#1
2015 - 09:54 AM
Fivestar widget
Total votes: 0
Level: Newbie
Joined: Mon. Apr 6, 2015
Posts: 5 View posts
Hi there,
Arduino Pin
Pin 11
Pin 2
(DIN)
Pin 12
Pin 13 (DOUT)
Pin 13
Pin 5
(CLK)
Pin 9
Pin 4
(CSBIN)
Pin 5
Pin 3
(RESET)
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 2 de 22
global variables
*/
#define DEBUG 1
#define NETWORKING 1
#define BUFFER_SIZE 4
#define SENDTODB 0
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 3 de 22
#define CALIBRATION 1
#define RESET_DATA 0
#define sampleintervall 10000
byte samplecount=0;
unsigned long irms_avg=0;
unsigned long vrms_avg=0;
int Wh_LSB=1, VAh_LSB=1, VARh_LSB=1, VRMS_LSB=1,
IRMS_LSB=1;
unsigned long metered_data_buffer[6];
#define slaveSelectPin 9 //CSBIN pin
#define WRITE 0x80
#define CLKIN 1
#define SAG_PIN
#define IRQ_PIN
#define RESET_PIN 5
#define RELAY_PIN 8
/* register adresses */
/* 24 bit */
#define Waveform
#define AENERGY
0x01
0x02
energy register*/
#define VAENERGY 0x05
/* mode register*/
/* 12 bit */
#define ZXTOUT 0x1D
#define CFNUM
0x14
#define CFDEN
0x15
/* Zero-crossing timeout */
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 4 de 22
/* 8 bit */
#define GAIN 0x0F
channels */
#define TEMP 0x26
/* Temperature register */
/*
*/
void enableMeter(void){
digitalWrite(slaveSelectPin, LOW);
}
void disableMeter(void){
digitalWrite(slaveSelectPin, HIGH);
}
void enableLoad(void){
digitalWrite(RELAY_PIN, HIGH);
}
void disableLoad(void){
digitalWrite(RELAY_PIN, LOW);
}
void setMode(int modus){
setREG16(MODE, modus);
}
int getMode(){
return readREG16(MODE);
}
void printREG16(int adress){
enableMeter();
delayMicroseconds(5);
SPI.transfer(adress);
delayMicroseconds(5);
Serial.print(SPI.transfer(0x00),HEX); //SPI.transfer(0x00)
is a dummy btye value
Serial.print("-");
Serial.println(SPI.transfer(0x00),HEX);
delayMicroseconds(5);
disableMeter();
}
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 5 de 22
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 6 de 22
enableMeter();
unsigned long reg;
delayMicroseconds(5);
SPI.transfer(adress);
delayMicroseconds(5);
reg = SPI.transfer(0x00);
delayMicroseconds(5);
disableMeter();
return reg;
}
long readREG16(int adress){
enableMeter();
long reg, a;
delayMicroseconds(5);
SPI.transfer(adress);
delayMicroseconds(5);
reg = SPI.transfer(0x00);
a = SPI.transfer(0x00);
delayMicroseconds(5);
disableMeter();
reg
= reg <<
8;
reg = reg + a;
return reg;
}
unsigned long readREG24(int adress){
enableMeter();
unsigned long reg, a, b;
delayMicroseconds(5);
SPI.transfer(adress);
delayMicroseconds(5);
reg = SPI.transfer(0x00);
a = SPI.transfer(0x00);
b = SPI.transfer(0x00);
delayMicroseconds(5);
disableMeter();
reg
= reg <<
8;
reg = reg + a;
reg = reg <<
8;
reg = reg + b;
return reg;
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 7 de 22
}
///////////////////////////////////////////////////////////////////////////////////////////////////
/*
long getVRMS(void){
unsigned long lastupdate = 0;
getresetInterruptStatus();
lastupdate = millis();
while(! (getInterruptStatus() & ZX)){
if((millis() - lastupdate) >100){
wdt_reset();
Serial.println("\n VRMS timeout");
break;
}
}
return readREG24(VRMS);
}
long getIRMS(void){
unsigned long lastupdate = 0;
getresetInterruptStatus();
lastupdate = millis();
while(! (getInterruptStatus() & ZX)){
if((millis() - lastupdate) >100){
Serial.println("\n IRMS timeout");
break;
}
}
return readREG24(IRMS);
}
*/
///////////////////////////////////////////////////////////////////////////////////////////////////
int getresetInterruptStatus(void){
return readREG16(RSTSTATUS);
}
int getInterruptStatus(void){
return readREG16(STATUS);
}
/*
unsigned long VRMS_COEFFICIENT(int iterations){
for(int i=0;i<iterations;i++){
vrms_avg += getVRMS();
delay(100);}
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 8 de 22
vrms_avg = vrms_avg/iterations;
// vrms_avg = (vrms_avg*230)/18000000;
return vrms_avg;
}
unsigned long IRMS_COEFFICIENT(int iterations){
for(int i=0;i<iterations;i++){
irms_avg += readREG24(IRMS);
delay(100);}
irms_avg = irms_avg/iterations;
return irms_avg;
}
*/
///////////////////////////////////////////////////////////////////////////////////////////////////
setup routine
*/
void setup(){
pinMode(slaveSelectPin, OUTPUT);
pinMode(RESET_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(slaveSelectPin, HIGH);
digitalWrite(RESET_PIN, HIGH);
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 9 de 22
SPI.setDataMode(SPI_MODE1);
SPI.setClockDivider(SPI_CLOCK_DIV32);
SPI.setBitOrder(MSBFIRST);
SPI.begin();
Serial.begin(9600);
delay(1000);
//enableMeter();
setREG16(0x09,0000000010001100); //Binary code
written , before edit 0000000010001100,
0000000010011100
Serial.println(readREG16(0x09));
//disableMeter();
SPI.end();
//setREG16(LINECYC, 0xFFFF); //0000 0000 1100 1000 ->
What does it means? , before edit 0x00C8
//setREG16(IRQEN,0x0040); //0100 0000 0100 0000,
before edit 0x404, to turn on bit5(for tempsel): 0x4050
}
/*******************************/
/*
main routine
*/
void loop(){
printREG16(0x0B);
printREG16(MODE);
//VRMS_COEFFICIENT(10);
//IRMS_COEFFICIENT(10);
delay(1000);
setREG16(0x09,0000000010001100); //Binary code
written , before edit 0000000010001100,
0000000010011100
Serial.println(readREG16(0x09));
//Serial.print("VRMS : ");
//Serial.println(vrms_avg);
//Serial.print("V");
//Serial.print("IRMS : ");
//Serial.println(irms_avg);
//Serial.print("A");
/*
Serial.print("VRMSvalue : ");
vrmsvalue = getVRMS();
Serial.println(vrmsvalue);
Serial.print("\n");
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 10 de 22
*/
delay(1000);
}
/*******************************/
Tags:
Tools, Compilers, ATxmega256A3
Top
#2
2015 - 10:49 PM
Total votes: 0
koseiwind
Top
#3
Total votes: 0
Level: Newbie
Joined: Mon. Apr 6, 2015
Posts: 5 View posts
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 11 de 22
#include <Arduino.h>
#include "SPI.h"
//Register address
#define WAVEFORM
#define AENERGY
0x01
0x02
#define RAENERGY
0x03
#define LAENERGY
0x04
#define VAENERGY
0x05
#define RVAENERGY
0x06
#define LVAENERGY
0x07
0x09
#define IRQEN
0x0A
#define STATUS
0x0B
#define RSTSTATUS
0x0C
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
#define CH1OS
Pgina 12 de 22
0x0D
#define CH2OS
0x0E
#define GAIN
0x0F
#define PHCAL
0x10
#define APOS
0x11
#define WGAIN
0x12
#define WDIV
0x13
#define CFNUM
0x14
#define CFDEN
0x15
#define IRMS
0x16
#define VRMS
0x17
#define IRMSOS
0x18
#define VRMSOS
0x19
#define VAGAIN
0x1A
#define VADIV
0x1B
#define LINECYC
0x1C
#define ZXTOUT
0x1D
#define SAGCYC
0x1E
#define SAGLVL
0x1F
#define IPKLVL
0x20
#define VPKLVL
0x21
#define IPEAK
0x22
#define RSTIPEAK
#define VPEAK
0x23
0x24
#define RSTVPEAK
0x25
#define TEMP
0x26
#define PERIOD
0x27
#define TMODE
0x3D
#define CHKSUM
0x3E
#define DIEREV
0X3F
12//MISO
#define SPICLOCK
13//sck
registers
#define CLKIN 4000000
// ADE7753 frec,
4.000000MHz
void setup()
{
Serial.begin(9600);
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 13 de 22
pinMode(RESET, OUTPUT);
pinMode(DATAOUT, OUTPUT);
pinMode(DATAIN, INPUT);
pinMode(SPICLOCK,OUTPUT);
pinMode(CS,OUTPUT);
digitalWrite(RESET,LOW);
digitalWrite(RESET,HIGH);
digitalWrite(CS,HIGH);
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE1);
SPI.setClockDivider(SPI_CLOCK_DIV32);
SPI.begin();
//Serial.println(read8(GAIN),BIN);
//write8(GAIN,0b01100001);
//Serial.println(read8(GAIN),BIN);
//digitalWrite(SLAVESELECT,HIGH);
SPI.end();
}
unsigned char write8(char reg, unsigned char data){
digitalWrite(CS,LOW);
unsigned char data0 = 0;
// 8th bit (DB7) of the register address controls the
Read/Write mode (Refer to spec page 55 table 13)
// For Write -> DB7 = 1
reg |= WRITE;
data0 = (unsigned char)data;
delayMicroseconds(500);
SPI.transfer((unsigned char)reg);
//register
selection
delayMicroseconds(500);
SPI.transfer((unsigned char)data0);
delayMicroseconds(500);
digitalWrite(CS,HIGH);
}
unsigned char read8(char reg){
// enableChip();
digitalWrite(CS,LOW);
float b0;
delayMicroseconds(5);
SPI.transfer(reg);
delayMicroseconds(5);
b0=SPI.transfer(0x00);
Serial.print("b0 value: ");
Serial.println(b0);
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 14 de 22
delayMicroseconds(10);
digitalWrite(CS,HIGH);
// disableChip();
//
return b0;
}
void loop(){
pinMode(CS,OUTPUT);
");
delay(1000);
//write8(GAIN,01100001);
//Serial.println(read8(GAIN),BIN);
//digitalWrite(SLAVESELECT,HIGH);
SPI.end();
delay(10);
koseiwind
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
Top
#4
25/04/2015
Pgina 15 de 22
Total votes: 0
Level: Newbie
Joined: Mon. Apr 6, 2015
Posts: 5 View posts
Arduino Pin
Pin 11(MOSI)
Pin 2
Pin 12(MISO)
Pin 13 (DOUT)
Pin 13(CLK)
Pin 5
Pin 10(SS)
Pin 5
(DIN)
(CLK)
Pin 4
Pin 3
(CSBIN)
(RESET) (Hardwired to 5V so
Attachment(s):
Debugcode2.txt
(http://www.avrfreaks.net/sites/default/files/forum_attachme
DSC_0044.JPG
(http://www.avrfreaks.net/sites/default/files/forum_attachme
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 16 de 22
Top
#5
Total votes: 0
Kartman wrote:
Quote:
Top
#6
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 17 de 22
awneil
Total votes: 0
koseiwind wrote:
Rather than attach it - so that it can't be seen in context it's better to place the actual picture in the post:
And, yes:
koseiwind
Top
#7
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 18 de 22
Total votes: 0
Top
#8
2015 - 06:40 AM
Total votes: 0
Top
koseiwind
#9
Total votes: 0
Hi Awneil,
Level: Newbie
Joined: Mon. Apr 6, 2015
Posts: 5 View posts
I finally got arduino to read and write the registers of
ADE7753. Seems like it is the problem with the oscillator.
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 19 de 22
#include <avr/io.h>
#include <SPI.h>
/*
global variables
*/
#define DEBUG 1
#define NETWORKING 1
#define BUFFER_SIZE 4
#define SENDTODB 0
#define CALIBRATION 1
#define RESET_DATA 0
#define sampleintervall 10000
byte samplecount=0;
int Wh_LSB=1, VAh_LSB=1, VARh_LSB=1, VRMS_LSB=1,
IRMS_LSB=1;
unsigned long metered_data_buffer[6];
#define slaveSelectPin 10 //CSBIN pin
#define WRITE 0x80
#define CLKIN 1
#define SAG_PIN
#define IRQ_PIN
#define RESET_PIN 5
#define RELAY_PIN 8
/* register adresses */
/* 24 bit */
#define Waveform
#define AENERGY
0x01
0x02
energy register*/
#define VAENERGY 0x05
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 20 de 22
/* mode register*/
/* 12 bit */
#define ZXTOUT 0x1D
#define CFNUM
0x14
#define CFDEN
0x15
/* Zero-crossing timeout */
/* 8 bit */
#define GAIN 0x0F
channels */
#define TEMP 0x26
/* Temperature register */
void enableMeter(void){
digitalWrite(slaveSelectPin, LOW);
}
void disableMeter(void){
digitalWrite(slaveSelectPin, HIGH);
}
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 21 de 22
disableMeter();
}
void setREG24(int adress, long value){
enableMeter();
adress |= WRITE;
delayMicroseconds(5);
SPI.transfer(adress);
delayMicroseconds(5);
SPI.transfer(value>>16); //Why shift 16 bits instead of 8?
delayMicroseconds(5);
SPI.transfer(value>>8);
delayMicroseconds(5);
SPI.transfer(value);
disableMeter();
}
= reg <<
8;
reg = reg + a;
reg = reg <<
8;
reg = reg + b;
return reg;
}
/*******************************/
/*
setup routine
*/
void setup(){
pinMode(slaveSelectPin, OUTPUT);
digitalWrite(slaveSelectPin, LOW);
SPI.setDataMode(SPI_MODE2);
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015
Pgina 22 de 22
SPI.setClockDivider(SPI_CLOCK_DIV32);
SPI.setBitOrder(MSBFIRST);
SPI.begin();
Serial.begin(9600);
delay(1000);
setREG16(MODE,0x008C);
setREG16(LINECYC, 0x07D0); //Set 2000 Linecycles
setREG16(IRQEN,0xFFFF); // Enable all interrupts
Serial.println(readREG16(MODE));
Serial.println(readREG16(LINECYC));
Serial.println(readREG16(IRQEN));
digitalWrite(slaveSelectPin, HIGH);
}
/*******************************/
/*
main routine
*/
void loop(){
Serial.println(readREG24(LAENERGY));
delay(2000);
}
/*******************************/
Top
Jump To
-Evaluation and Development Kits
Privacy(http://www.atmel.com/About/privacy.aspx)
Contact(http://www.atmel.com/About/contact/distributors/default.aspx?
contactType=Online%20Directory)
http://www.avrfreaks.net/forum/problem-reading-ade7753-registers
25/04/2015