βοηθήσουν με ade7753

K

kbbhushan

Guest
Γεια σου,
Κάνω ένα έργο χρησιμοποιώντας ade7753 και atmega32.
Δεν είμαι σε θέση να καθορίζει την επικοινωνία μεταξύ των δύο.
Μπορεί κάποιος παρακαλώ να με βοηθήσει.

Αυτό είναι SPI κώδικα.
int main (κενή)
(

/ / Initialize βιβλιοθήκες μας
/ / Initialize το UART (σειριακής θύρας)
uartInit ()?
/ / Που την ταχύτητα baud της UART για μας debug / αναφοράς εξόδου
uartSetBaudRate (9600)?
/ / Initialize το χρονοδιακόπτη σύστημα
timerInit ()?

/ / Initialize rprintf σύστημα
/ / - UartSendByte χρήση ως παραγωγή για όλες τις καταστάσεις rprintf
/ / Αυτό θα προκαλέσει όλες τις λειτουργίες της βιβλιοθήκης rprintf να κατευθύνουν τις
/ / Εξόδου για το UART
/ / - Rprintf μπορεί να γίνει για την έξοδο σε κάθε συσκευή που λαμβάνει χαρακτήρες.
/ / Θα πρέπει να γράψετε μια λειτουργία η οποία λαμβάνει ένα unsigned char ως επιχείρημα
/ / Και στη συνέχεια να περάσει αυτό το rprintfInit κάπως έτσι: rprintfInit (YOUR_FUNCTION)?
rprintfInit (uartSendByte)?

/ / Initialize vt100 βιβλιοθήκη
vt100Init ()?

/ / Σαφές το τερματικό οθόνη
vt100ClearScreen ()?
SBI (DDRD, 1)?
CBI (DDRD, 0)?

char αποτέλεσμα?
spi_init ()?
ade7753_write_to_reg (0x13, 0x02)?
αποτέλεσμα = ade7753_read_from_reg (0x13)?
rprintf ( "Αποτέλεσμα είναι% d \ r \ n", (uint8_t) αποτέλεσμα)?/ / Spi_tx ()?
/ / Spi_rx ()?/ /)

)

άκυρη ade7753_write_to_reg (char addr, char αξία) (
rprintf ( "Στην ade7753_write_to_reg \ r \ n")?
spi_start ()?
/ / εγγραφής διεύθυνση επικοινωνίας για να εγγραφείτε πρώτα
addr = (addr 0 x80)?
rprintf ( "Αυτή η διεύθυνση γράφεται% d \ r \ n", addr)?
spi_tx (addr)? / / διεύθυνση του reigster να γράψετε
_delay_us (0.05)?
spi_tx (τιμή)? / / αξία που πρέπει να εγγραφούν στο μητρώο
spi_end ()?
)

unsigned char ade7753_read_from_reg (char addr)
(
unsigned char regval?
rprintf ( "Στην ade7753_read_from_reg \ r \ n")?
spi_start ()?
/ / γράψετε τη διεύθυνση του μητρώου για την ανάγνωση της Επιτροπής εγγραφείτε πρώτα
addr = (addr 0 x80)?
rprintf ( "Αυτή είναι η ανάγνωση του μητρώου διεύθυνση% d", addr)?
_delay_us (4)? / / T9 = 4uswait μέχρι να τελειώσει η διεύθυνση είναι φορτωμένο

regval = spi_rx ()?
επιστροφή regval?
)

άκυρη spi_init (κενή)
(
/ * MOSI που αναφέρονται? SCK out? SS out? * /
DDR_SPI = DDR_SPI | (1 <<MOSI) | (1 <<SCK) | (1 <<SS)?
/ * Ορισμός ΜΙΣΟ σε * /
DDR_SPI = DDR_SPI & ~ (1 <<ΜΙΣΟ)?
/ * Ενεργοποίηση SPI? Που Master mode? SPI Mode = 3? Στ '= f/128 * /
SPCR = (1 <<SPE) | (0 <<DORD) | (1 <<MSTR) | (0 <<CPOL) | (1 <<CPHA) | (0 <<SPR1) | (1 <<SPR0) ?

επιστροφή?
)

άκυρη spi_tx (unsigned char data)
(
/ * Έναρξη μετάδοσης * /
SPDR = δεδομένα?
rprintf ( "Αυτό είναι το spi_tx δεδομένα είναι% d",
τα δεδομένα)?
/ * Περιμένετε για πλήρη μετάδοση * /
while (! (SPSR & (1 <<SPIF)))?

επιστροφή?
)

unsigned char spi_rx (κενή)
(
/ * Αποστολή εικονική χαρακτήρα * /
SPDR ΑΝΔΡΕΙΚΕΛΟΥ =?
/ * Περιμένετε για λήψη πλήρους * /
while (! (SPSR & (1 <<SPIF)))?
/ * Επιστροφή μητρώο δεδομένων * /
rprintf ( "Αυτό είναι το spi_tx δεδομένα είναι% d", SPDR)?
επιστροφή SPDR?
)

άκυρη spi_start (κενή)
(
/ * Τέλος, αν υπάρχουν, προηγούμενες συνόδου * /
spi_end ()?
/ * Ρυθμίστε χαμηλά SS - έναρξη μιας νέας συνόδου * /
PORT_SPI = PORT_SPI & ~ (1 <<SS)?

επιστροφή?
)

άκυρη spi_end (κενή)
(
/ * Set SS υψηλής * /
PORT_SPI = PORT_SPI | (1 <<SS)?

επιστροφή?
)

 
Συγνώμη,
αλλά δεν
είμαι εξοικειωμένος με τις ATMEGA32 αλλά είχα μια ματιά στο δελτίο και το μόνο πράγμα που μπορεί να
και να κάνω λάθος είναι εδώ:

Απόσπασμα:

/ * Ενεργοποίηση SPI? Που Master mode? SPI Mode = 3? Στ '= f/128 * /

SPCR = (1 <<SPE) | (0 <<DORD) | (1 <<MSTR) | (0 <<CPOL) | (1 <<CPHA) | (0 <<SPR1) | (1 <<SPR0) ?
 
Ευχαριστώ για την απάντησή σας.
Στην πραγματικότητα είμαι χρησιμοποιώντας SCK ως f/16.Ξέχασα να αλλάξει τα σχόλια εκεί.
Αν όλα είναι εντάξει, δεν ξέρω πού θα πάω καλά.
Μπορούμε, σας παρακαλώ, πείτε μου αν δεν τον κώδικα όταν πρόκειται πιθανότατα λάθος.

 
Ωχ, δεν βλέπω ότι μπορείτε να γράψετε τη διεύθυνση ADE7753 εδώ:

Απόσπασμα:

unsigned char ade7753_read_from_reg (char addr)

(

unsigned char regval?

rprintf ( "Στην ade7753_read_from_reg \ r \ n")?

spi_start ()?

/ / γράψετε τη διεύθυνση του μητρώου για την ανάγνωση της Επιτροπής εγγραφείτε πρώτα

addr = (addr 0 x80)?

rprintf ( "Αυτή είναι η ανάγνωση του μητρώου διεύθυνση% d", addr)?

_delay_us (4)? / / T9 = 4uswait μέχρι να τελειώσει η διεύθυνση είναι φορτωμένοregval = spi_rx ()?

επιστροφή regval?

)

 
Ευχαριστώ πάρα πολύ.
Νόμιζα ότι όλα είναι εντάξει.Η απλή δήλωση σφάλμα δεν ήταν noticable.Now θα το διορθώσει και να εκτελέσετε το πρόγραμμα, όταν πηγαίνετε στο εργαστήριο και να αφήσει και το γνωρίζω.

Και είπατε ότι δεν θα πρέπει να έχουν διεύθυνση 0 x80.
Ο λόγος για την προσθήκη 0x80 είναι ότι στην εντολή byte (ανάγνωσης / εγγραφής) που λέει ade7753 αν είμαι επιδόσεις ανάγνωση ή γραφή λειτουργία.Κατά τη λειτουργία εγγραφής MSB διοίκησης αντίο θα πρέπει να είναι 1.Τότε πώς να ρυθμίσετε 1 στο MSBit.

Ευχαριστώ πολύ και πάλι.

 
Μπορείτε να δείτε εδώ ότι κατά την ανάγνωση από το ADE7753 πρέπει πρώτα να στείλετε την εντολή byte (η διεύθυνση), με τα δύο υψηλότερα δυφία 0.
Μετά που θα ξεκινήσετε την αποστολή ανδρεικέλου bytes για να διαβάσετε τα δεδομένα bytes.<img src="http://images.elektroda.net/8_1215370714_thumb.jpg" border="0" alt=""/>
 
Γεια σου,
Ευχαριστώ.Η εργασία τώρα.
Ένα ακόμα αμφιβολία είναι ότι ορισμένα από τα μητρώα σε ade7753 υπογράφονται και κάποια είναι υπογεγραμμένα.
My λειτουργίες αυτές έχουν δηλωθεί ως unsigned.
Μπορούμε, σας παρακαλώ, πες μου πώς να χειρίζονται υπεγράφη αριθμούς.

Ευχαριστώ.

 
Όταν διαβάζετε τα δεδομένα από την ADE7753 μπορείτε να χρησιμοποιήσετε unsigned μεταβλητές και στη συνέχεια αποθηκεύονται σε δηλωθεί μεταβλητές.

8 και 16 bit τιμές είναι απλή, καθώς πάνω σε χάρτη και ακέραιοι χαρακτήρες άμεσα - ορισμένα παραδείγματα:

Για την 8-bit που υπεγράφη μητρώο TEMP (0x26) δηλώνει τη μεταβλητή --

char TEMP?

- Και στη συνέχεια να αποθηκεύουν τα δεδομένα μόνο byte από SPI --

TEMP = spi_rx ()?Για το unsigned 8-bit μητρώο GAIN (0x0F) δηλώνει τη μεταβλητή --

unsigned char GAIN?

- Και στη συνέχεια αποθήκευση των δεδομένων byte από SPI --

GAIN = spi_rx ()?Για τα 16-bit που υπεγράφη μητρώο APOS (0x11) δηλώνει τη μεταβλητή --

int APOS?

- Και στη συνέχεια αποθηκεύει το ακέραιο από μια ένωση, όπως εκείνη που ορίζεται στο άλλο νήμα --

APOS value.Int =?Για τα 16-bit unsigned μητρώο LINECYC (0x1C) δηλώνει τη μεταβλητή --

unsigned int LINECYC?

- Και στη συνέχεια --

LINECYC = value.Int?Για τα 24-bit unsigned μητρώο IRMS (0x16) να κηρύξει την 32-bit μεταβλητή --

unsigned IRMS καιρό?

- Και στη συνέχεια --

IRMS value.Long =?Τώρα, η οποία υπεγράφη την αποθήκευση 24 bit σε ένα χρονικό διάστημα είναι λίγο trickier που θα πρέπει να επεκταθεί το σήμα bit, 23 bit.
Για τα 24-bit που υπεγράφη μητρώο κυματομορφών (0x01) να κηρύξει την 32-bit μεταβλητή --

κυματομορφών καιρό?

- Και στη συνέχεια να ελέγξει εάν το διαβάσει αξία είναι αρνητική (υπογράψουν bit = 1), και ορίζει το ανώτατο 8 bit 24-31 --

εάν (value.Char [1] & 0x80) value.Char [0] = 0xff?Waveform = value.Long?Ορισμένα που υπογράφηκε τιμές 12 bit, οπότε πρέπει να κάνουμε κάτι παρόμοιο με αυτά.
Για τα 12-bit που υπεγράφη μητρώο VAGAIN (0x1A) να κηρύξει την 16-bit μεταβλητή --

int VAGAIN?

- Και στη συνέχεια να ελέγξει εάν το διαβάσει αξία είναι αρνητική (υπογράψουν bit 11 = 1), και ορίζει το ανώτατο 4 δυφία 12-15 --

εάν (value.Char [0] & 0x08) value.Char [0] = value.Char [0] | 0xF0?VAGAIN = value.Int?Φαίνεται λίγο βρώμικο, αλλά ελπίζω ότι θα έχετε τη γενική ιδέα.

/ Ram

 
γεια,
Ευχαριστώ για τη βοήθειά σου.Η εργασίας.

Δεν έχω τρέχουσα και μετασχηματιστής τάσης μετασχηματιστή.Έχετε ιδέα πώς μπορώ να ελέγξω εάν ολόκληρο κύκλωμα είναι εργάσιμη ή μη.

Ευχαριστώ εκ των προτέρων.

 
Μπράβο!

Η ADE7753 δελτίο λέει ότι η μέτρηση των εισροών μπορεί να ą0.5 V Μάλλον έτσι θα μπορούσατε να
συνδεθεί άμεσα με την τάση των εισροών.Αν ελέγξετε αριθμός 29 στη σελίδα 14 θα μπορούσαν να εφαρμόζουν τις
"τάσης" μήνυμα προς το pin 7 (V2P) και το "ρεύμα" για το pin 4 (V1P).Μπορείτε επίσης να αμφισβητείται το pin 5 (V1N)
με τη σύνδεση των 100 Ω αντίσταση σε αυτό το pin και εδάφους.Νομίζω ότι θα πρέπει να εργαστεί.

Μάλλον δεν χρειάζεται ένα AC σήμα, ώστε να το δοκιμάσετε με ένα ≤ 0,5 V DC τάσης.
Υποθέτω ότι το αποτέλεσμα των μετρήσεων θα είναι προϊόν των δύο τάσεων, όπως η P = V * I, έτσι ώστε να
Μπορείτε να προσαρμόσετε ένα από αυτά και να δούμε πώς "Π" ποικίλλει.

/ Ram

 
Ευχαριστώ.

Να μην χρειάζεται να αντισταθμιστεί που κάθε φάση, κτλ τέτοιου είδους πράγματα.

 
Εάν χρησιμοποιείτε ένα AC DC ή μια τάση, ένα σήμα από γεννήτρια, η φάση που ταιριάζουν τέλεια όπως είναι το μήνυμα που έρχεται
από την ίδια πηγή.
Φάση που ταιριάζουν μόνο στο παιχνίδι έρχεται σε μια πραγματική εφαρμογή της, με μετασχηματιστές και πράγματα και στη συνέχεια θα πρέπει να διακριβώνει
τη μέτρηση.

Μάλλον έχετε δει αυτή την αίτηση σημείωμα όπου φάση ευθυγράμμιση και βαθμονόμηση συζητηθούν:
http://www.analog.com/Analog_Root/static/pdf/library/applicationNotes/an564.pdf

/ Ram

 
Γεια σου,

Θα περάσει μέσα από το έγγραφο.

Ευχαριστώ και πάλι.

 
Γεια σου,

Στον πίνακα 6 του δελτίο στη σελίδα 16, λέγεται ότι είναι 1.61mV/LSB LSB μέγεθος.Τι ακριβώς σημαίνει αυτό;και κάπου είναι επίσης είπε ότι 2.2ms/LSB.τι σημαίνει αυτό;

Ευχαριστώ.

 
Η αντιστάθμιση διόρθωση μητρώου έχει 6 bits - 1 για το πρόσημο και 5 για το μέγεθος.

Αναφέρεται στο κείμενο ότι το μέγιστο των 0x1F = 31 βήματα τάσης χρησιμοποιούνται για τη διόρθωση και ως την
διόρθωση span είναι A50 mV (για Gain = 1) έχετε 50/31 = 1,61 mV σε κάθε βήμα.
Η αλλαγή του μητρώου αξία από LSB (το λιγότερο σημαντικό Bit) - είτε από την αύξηση ή τη μείωση από 1 - θα
στην περίπτωση αυτή έχει ως αποτέλεσμα την τάση βήμα του 1,61 mV / LSB.

Όπως μπορείτε να δείτε από τον πίνακα της τάσης βήμα ποικίλλει ανάλογα με το μέγιστο άνοιγμα.

/ Ram

 
Γεια σου,

Ευχαριστώ που μου εξηγεί.

AENERGY μητρώο υπογράφεται από δύο πλήρωμα μέθοδο.Πώς θα πρέπει να διαβάζεται η τιμή από το μητρώο;Αν είμαι ανάγνωση χρησιμοποιώντας unsigned μεταβλητή, πώς να το μετατρέψει έτσι ώστε να μπορούν να έχουν τη σωστή τιμή.

 
and is used like this:

Ο τρόπος για να πούμε την μεταγλωττιστή που θέλετε να χειριστείτε ένα unsigned αξίας, που υπεγράφη ονομάζεται τύπου χύτευσης
και χρησιμοποιείται σαν αυτό:

Κωδικός:

μακρά αξία?

unsigned aenergy καιρό?αξία = (long) aenergy?

 
Γεια σου,

Ευχαριστώ.

Είμαι προσπαθεί να διαβάσει και IRMS VRMS μητρώα.Έχω αρχίσει μεγάλες hex τιμές.δελτίο λέει ότι θα πρέπει να μετατραπεί σε αμπέρ / LSB σταθερή.Αλλά δεν έχω καμία ιδέα για το πώς να το κάνουμε αυτό.Έχω περάσει από τη βαθμονόμηση pdf.Παρακαλώ να με βοηθήσει.

 
Απόσπασμα:

Με το συγκεκριμένο πλήρους κλίμακας ac αναλογικό σήμα εισόδου 0,5 V, η έξοδος από την LPF1 ταλαντεύεται μεταξύ 0x2518 και 0xDAE8 στα 60 Hz δείτε το τμήμα ADC Channel 2.
Το ισοδύναμο rms τιμή αυτής της πλήρους κλίμακας ac σήματος είναι περίπου 1.561.400 (0z17D338) στο μητρώο VRMS.
 

Welcome to EDABoard.com

Sponsor

Back
Top