helpen met ade7753

K

kbbhushan

Guest
Hoi,
Ik ben bezig met een project met behulp van ade7753 en atmega32.
Ik ben niet in staat te stellen de communicatie tussen de twee.
Can someone please help me.

Dit is SPI code.
int main (void)
(

/ / Initialiseer onze bibliotheken
/ / Initialiseer de UART (seriële poort)
uartInit ();
/ / Stel de baudrate van de UART voor onze debug / rapportage-uitgang
uartSetBaudRate (9600);
/ / Initialiseer de timer systeem
timerInit ();

/ / Initialiseer rprintf systeem
/ / - Gebruik uartSendByte als output voor alle rprintf verklaringen
/ / Dit zal leiden alle rprintf bibliotheek functies aan hun
/ / Output naar de UART
/ / - Rprintf kan worden gemaakt van de output naar een apparaat die tekens.
/ / U moet schrijven een functie die een unsigned char als argument
/ / En vervolgens deze te rprintfInit als volgt uit: rprintfInit (YOUR_FUNCTION);
rprintfInit (uartSendByte);

/ / Initialiseer vt100 bibliotheek
vt100Init ();

/ / Heldere scherm van de terminal
vt100ClearScreen ();
sbi (DDRD, 1);
CBI (DDRD, 0);

char resultaat;
spi_init ();
ade7753_write_to_reg (0x13, 0x02);
result = ade7753_read_from_reg (0x13);
rprintf ( "Resultaat is% d \ r \ n", (uint8_t) resultaat);/ / Spi_tx ();
/ / Spi_rx ();/ /)

)

void ade7753_write_to_reg (char addr, char waarde) (
rprintf ( "In ade7753_write_to_reg \ r \ n");
spi_start ();
/ / schrijf-adres aan de Commissie eerst inschrijven
addr = (addr 0 x80);
rprintf ( "Dit adres is geschreven% d \ r \ n", addr);
spi_tx (addr); / /-adres van de reigster te schrijven
_delay_us (0,05);
spi_tx (waarde); / / waarde te worden geschreven te registreren
spi_end ();
)

unsigned char ade7753_read_from_reg (char addr)
(
unsigned char regval;
rprintf ( "In ade7753_read_from_reg \ r \ n");
spi_start ();
/ / schrijf het adres van de aflezing register communicatie eerst inschrijven
addr = (addr 0 x80);
rprintf ( "Dit is de lezing inschrijven adres% d", addr);
_delay_us (4); / / t9 = 4uswait tot na adres is geladen

regval = spi_rx ();
terugkeer regval;
)

void spi_init (void)
(
/ * set MOSI out; SCK out; SS out; * /
DDR_SPI = DDR_SPI | (1 <<MOSI) | (1 <<SCK) | (1 <<SS);
/ * Stel MISO in * /
DDR_SPI = DDR_SPI & ~ (1 <<MISO);
/ * Enable SPI; ingesteld Master modus; SPI mode = 3; f '= f/128 * /
SPCR = (1 <<SPE) | (0 <<DORD) | (1 <<MSTR) | (0 <<CPOL) | (1 <<CPHA) | (0 <<SPR1) | (1 <<SPR0) ;

terugkeer;
)

void spi_tx (unsigned char data)
(
/ * Start verzending * /
SPDR = gegevens;
rprintf ( "Dit is in spi_tx gegevens is% d", data);
/ * Wacht voor transmissie volledige * /
while (! (SPSR & (1 <<SPIF)));

terugkeer;
)

unsigned char spi_rx (void)
(
/ * Stuur een dummy karakter * /
SPDR = DUMMY;
/ * Wacht voor ontvangst compleet * /
while (! (SPSR & (1 <<SPIF)));
/ * Return gegevens registreren * /
rprintf ( "Dit is in spi_tx gegevens% d", SPDR);
terugkeer SPDR;
)

void spi_start (void)
(
/ * Einde eventuele vorige sessie * /
spi_end ();
/ * Set SS laag - start een nieuwe sessie * /
PORT_SPI = PORT_SPI & ~ (1 <<SS);

terugkeer;
)

void spi_end (void)
(
/ * Stel hoge SS * /
PORT_SPI = PORT_SPI | (1 <<SS);

terugkeer;
)

 
Typowa wiadomość phishingowa zawiera treść zachęcającą do kliknięcia w znajdujący się poniżej odnośnik. Link z kolei przekierowuje do sfałszowanej str ...

Read more...
 
Sorry, ik
ben niet bekend met de ATMEGA32 maar ik heb een kijkje in de notitie en het enige dat zou kunnen
verkeerd is hier:

Citaat:

/ * Enable SPI; ingesteld Master modus; SPI mode = 3; f '= f/128 * /

SPCR = (1 <<SPE) | (0 <<DORD) | (1 <<MSTR) | (0 <<CPOL) | (1 <<CPHA) | (0 <<SPR1) | (1 <<SPR0) ;
 
Bedankt voor uw antwoord.
Eigenlijk gebruik ik sck als f/16.Ik ben vergeten om de reacties daar.
Als alles in orde is, ik weet niet waar ga ik verkeerd.
Kunt u mij vertellen wat niet in de code waar ik waarschijnlijk verkeerd.

 
Oeps, ik zie niet in dat u het adres ADE7753 hier:

Citaat:

unsigned char ade7753_read_from_reg (char addr)

(

unsigned char regval;

rprintf ( "In ade7753_read_from_reg \ r \ n");

spi_start ();

/ / schrijf het adres van de aflezing register communicatie eerst inschrijven

addr = (addr 0 x80);

rprintf ( "Dit is de lezing inschrijven adres% d", addr);

_delay_us (4); / / t9 = 4uswait tot na adres is geladenregval = spi_rx ();

terugkeer regval;

)

 
Hartelijk dank.
Ik dacht dat alles in orde is.Deze eenvoudige verklaring vergissing was niet noticable.Now ik zal corrigeren en start het programma, wanneer ga naar lab en laat u weten.

En u zei dat het adres niet had moeten 0 x80.
De reden voor het toevoegen 0x80 is dat in opdracht byte (read / write), die vertelt ade7753 of ik ben presterende lezen of schrijven.In het schrijven van commando MSB bye moeten worden 1.Vervolgens hoe u 1 in het MSBit.

Hartelijk dank nogmaals.

 
U kunt hier zien dat bij het lezen van de ADE7753 je eerst om het commando byte (het adres) met de twee hoogste bits 0.
Daarna kun je beginnen met het verzenden van dummy bytes te lezen de gegevens bytes.<img src="http://images.elektroda.net/8_1215370714_thumb.jpg" border="0" alt=""/>
 
Hoi,
Bedankt.Zijn nu actief.
Een meer twijfel is dat sommige van de registers in ade7753 zijn ondertekend en sommige zijn niet ondertekend.
Mijn functies zijn aangegeven als unsigned.
Kunt u mij vertellen hoe om te gaan ondertekend nummers.

Bedankt.

 
Wanneer je leest de gegevens van de ADE7753 kunt u unsigned variabelen en bewaar ze in goed aangegeven variabelen.

8 en 16-bits waarden zijn eenvoudig als ze kaart op tekens en getallen rechtstreeks - enkele voorbeelden:

Voor het ondertekende 8-bits register TEMP (0x26) verklaart dat de variabele --

char temp;

- En dan alleen het opslaan van de gegevens byte van SPI --

TEMP = spi_rx ();Voor de unsigned 8-bit register GAIN (0x0F) verklaart dat de variabele --

unsigned char GAIN;

- En vervolgens het opslaan van de gegevens byte van SPI --

GAIN = spi_rx ();Voor het ondertekende 16-bits register APOS (0x11) verklaart dat de variabele --

int APOS;

- En vervolgens het opslaan van de getal van een vakbond als de een hebben we in de andere thread --

APOS = value.Int;Voor de niet-ondertekende 16-bits register LINECYC (0x1C) verklaart dat de variabele --

unsigned int LINECYC;

- En vervolgens --

LINECYC = value.Int;Voor de niet-ondertekende 24-bits register GMBS (0x16) verklaart de 32-bits variabele --

unsigned long GMBS;

- En vervolgens --

GMBS = value.Long;Nu, de opslag van de ondertekende 24-bits in een lange is iets lastiger als je nodig hebt om uitbreiding van de teken-bit, 23 bit.
Voor het ondertekende 24-bits register golfvorm (waarde 0x01) verklaart de 32-bits variabele --

lange golfvorm;

- En dan controleren of het lezen waarde is negatief (meld bit = 1) en de bovenste 8 bits 24-31 --

if (value.Char [1] & 0x80) value.Char [0] = 0xFF;Waveform = value.Long;Sommige ondertekende waarden zijn 12 bits, zodat we te maken hebben een soortgelijke zaak met hen.
Voor het ondertekende 12-bits register VAGAIN (0x1A) verklaart de 16-bits variabele --

int VAGAIN;

- En dan controleren of het lezen waarde is negatief (bord 11 bit = 1) en zet de bovenste 4 bits 12.15 --

if (value.Char [0] & 0x08) value.Char [0] = value.Char [0] | 0xF0;VAGAIN = value.Int;Het ziet er een beetje rommelig, maar ik hoop dat je het algemene idee.

/ Ram

 
hoi,
Bedankt voor al je hulp.Haar werken.

Ik heb geen huidige transformator en spanning transformator.Heb je enig idee hoe kan ik testen of hele schakeling werkt of niet.

Thanks in advance.

 
Good job!

ADE7753 de notitie staat dat de meting ingangen kunnen nemen ą0.5 V dus ik denk dat je zou kunnen
verbinden dat de spanning rechtstreeks aan de ingangen.Als je figuur 29 op pagina 14 kunt u de
"spanning"-signaal op pin 7 (V2P) en de "huidige" op pin 4 (V1P).Je moet ook de grond pin 5 (V1N)
door het aansluiten van de 100 Ohm weerstand op deze pin to grond.Ik denk dat dat zou moeten werken.

Waarschijnlijk hebt u geen behoefte aan een AC-signaal dus proberen met een ≤ 0,5 V DC spanning.
Ik neem aan dat het gemeten resultaat zal zijn product van de twee spanningen, zoals P = V * I, zodat u
kunt een van hen en zie hoe de "P" varieert.

/ Ram

 
Bedankt.

Doen we niet nodig om elke fase gecompenseerd, etc dergelijke soort dingen.

 
Als u een DC of een wisselstroomvoeding, uit een signaal generator, de fase matching is perfect als het signaal komt
uit dezelfde bron.
Fase bijpassende pas bij het spelen in een echte applicatie, met transformatoren en spullen en dan moet je kalibreren
de meting.

Ik denk dat je gezien hebben dit verzoek notitie waarin fase matching en kalibratie wordt besproken:
http://www.analog.com/Analog_Root/static/pdf/library/applicationNotes/an564.pdf

/ Ram

 
Hoi,

In tabel 6 van de notitie op pagina 16 wordt gezegd dat LSB grootte is 1.61mV/LSB.Wat houdt dit precies in?en ergens is het ook gezegd dat 2.2ms/LSB.wat betekent dit?

Bedankt.

 
De offset correctie register heeft 6 bits - 1 voor het ondertekenen en 5 voor de omvang.

Er staat in de tekst dat er een maximum van 0x1F = 31 spanning stappen worden gebruikt voor de correctie en als het de
correctie span is A50 mV (voor Gain = 1) krijg je 50/31 = 1,61 mV in elke stap.
Veranderen van het register de waarde van een LSB (minst significante bits) - door een toename of een daling met 1 - zullen
in dit geval leiden tot een spanning stap van 1,61 mV / LSB.

Zoals je kunt zien uit de tabel de spanning stap naar gelang van de maximale span.

/ Ram

 
Hoi,

Bedankt voor de verklaring van mij.

AENERGY register wordt ondertekend door twee
van de aanvulling methode.Hoe moet ik lees de waarde uit het register?Als ik het lezen met behulp van niet-ondertekende variabele, hoe om te zetten, zodat ik kan krijgen op de juiste waarde.

 
and is used like this:

De manier om te vertellen de compiler die je wilt behandelen een unsigned waarde ondertekend heet type casting
en wordt gebruikt als volgt:

Code:

lange waarde;

unsigned long aenergy;value = (lange) aenergy;

 
Hoi,

Bedankt.

Ik probeer te lezen GMBS en VRMS registers.Ik krijg grote hexadecimale waarden.notitie zegt dat het moet worden omgezet in ampère / LSB constant.Maar ik heb geen idee hoe dat te doen.Ik heb via het kalibreren pdf.Please help me.

 
Citaat:

Met de opgegeven volledige AC analoog ingangssignaal van 0,5 V, de output van de LPF1 schommelingen tussen 0x2518 en 0xDAE8 bij 60 Hz zie Kanaal 2 ADC-sectie.
De equivalente effectieve waarde van deze volledige ac-signaal is ongeveer 1.561.400 (0z17D338) in de VRMS registreren.
 

Welcome to EDABoard.com

Sponsor

Back
Top