kan nogen hjælpe med SPI

A

akhileshchidare

Guest
Jeg har skrevet en kode til SPI kommunikation med ADE7758.
Jeg vil gerne vide, om jeg er doin det rigtige eller ej ...
koden er indsamlingen med enhver fejl ...men logisk er det korrekt?Jeg er adgang ADE registre via SPI fra PIC controller ....
thanx
Akhilesh

Kode:

# include "p18f6490.h"# define CONFIG Unprotect & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTCLK & IESODIS & FCMDIS/*************** AnalogDevices AD7758 *******************// * For at læse watt-timer registre * /# define AWATTHR 0x01

# define BWATTHR 0x02

# define CWATTHR 0x03/ * For at læse VAR-HR registre * /# define AVARHR 0x04

# define BVARHR 0x05

# define CVARHR 0x06/ * Til aflæsning af VA-HR registre * /# define AVAHR 0x07

# define BVAHR 0x08

# define CVAHR 0x09/ * Til læsning I-RMS registre * /

# define AIRMS 0x0A

# define IRMS 0x0B

# define CIRMS 0x0C/ * Til aflæsning af V-RMS registre * /

# define AVRMS 0x0D

# define BVRMS 0x0E

# define CVRMS 0x0F
# define SS TRISFbits.TRISF7

# define SCK TRISCbits.TRISC3

# define SDI TRISCbits.TRISC4

# define SDO TRISCbits.TRISC5unsigned char writeSPI (unsigned char data_out);

unsigned char readSPI (void);void spi_init ();

void spi_init ()

(

SSPSTATbits.CKE = 1; / * indberettede data om fallling kant * /

SSPCON1bits.CKP = 1; / * ur inaktiv tilstand høj * /

TRISFbits.TRISF7 = 1; / * definere SS pin som input * /

TRISC & = 0xFD; / * definere SDO som output * /

TRISC | = 0x10; / * definere SDI som input * /

)void main ()

(

unsigned char data_out; / * adresse til at blive sendt til communiccation register * /

unsigned char read_data; / * data, der skal læses til de respektive register * /

unsigned int data;void spi_init (); / * SPI initialization * /writeSPI (data_out);writeSPI (AWATTHR);

data = readSPI ();writeSPI (BWATTHR);

data = readSPI ();writeSPI (CWATTHR);

data = readSPI ();writeSPI (AVARHR);

data = readSPI ();writeSPI (BVARHR);

data = readSPI ();writeSPI (CVARHR);

data = readSPI ();while (1);

)unsigned char writeSPI (unsigned char data_out)

(

SSPBUF = data_out;

if (SSPCON1 & 0x80)

return (-1);

anden

(

while (! SSPSTATbits.BF);

)

return (0);

)unsigned char readSPI (void)

(

SSPBUF = 0x00;

while (! SSPSTATbits.BF);

return (SSPBUF);

)

 
Hi;

Jeg tror, du behøver ikke at konfigurere SDI pin som i / p pin.det vil blive konfigureret automatisk.

gerne vide, har du kalibrere IC.

Du kan debug din SPI kommunikation, data ved at sende de data, som du har modtaget fra ADE 7.758, til hyper terminal.

Det ville være bedre at gemme kalibreringsparametre i udtænke EEPROM.

skål
Nagi

 

Welcome to EDABoard.com

Sponsor

Back
Top