CCS C driver per AD7708 o AD7718

K

kender

Guest
Onorevoli colleghi,

Chiunque potrebbe inviare un campione di CCS codice C per l'interfacciamento di uno PIC AD7708 o AD7718 (che condividono il datasheet) attraverso hardware SPI sul lato PIC?

Grazie,
- Nick

PS Non dimenticare di fare clic sul pulsante "mi ha aiutato" bottone per coloro che hanno contribuito.

 
/ / Routine per i driver dei chip AD7707

# define AD7707_DRDY PIN_B0
# define AD7707_DO PIN_B1
# define AD7707_DI PIN_B2
# define AD7707_CLK PIN_C0
# define AD7707_CS PIN_C1
# define AD7707_RESET PIN_C2

# define ADC_CHANNEL_NO 31
# define CUTOFF_FREQ 0,6 / / 10000L / / 100,00%

unsigned long adc_data [32];

void AD7707_write_byte (byte di dati)
(
i byte;

output_low (AD7707_CS);

for (i = 1; i <= 8; i ) (
output_low (AD7707_CLK);
output_bit (AD7707_DI, shift_left (& dati, 1,0));
output_high (AD7707_CLK);
)
output_high (AD7707_CS);
)unsigned long AD7707_read_word (void)
(
i byte;
dati a lungo;

output_low (AD7707_CS);
for (i = 1; i <= 16; i ) (
output_low (AD7707_CLK);
output_high (AD7707_CLK);
shift_left (& dati, 2, ingresso (AD7707_DO));
)
output_high (AD7707_CS);
restituzione dei dati;
)

unsigned long AD7707_read_value (void)
(
float temp;
i byte;
temp = 0,0;
i = 5;
/ / 0DRDY/RS2/RS1/RS0/RW/STBY/CH1/CH0
/ / 0 / 0 / 1 / 1 / 1 / 0 / 1 / 1 / / 0x38: Ch3ŔÇ Registrati operazione di lettura dei dati
while (i) (
i -;
AD7707_write_byte (0x3b) / / Dati Registrati ch3 operazione di lettura
while (ingresso (AD7707_DRDY));
temp = (float) AD7707_read_word ();
)
temp / = 5,0;
return (unsigned long) temperatura;
)unsigned long AD7707_read_value_filtered (ch byte)
(
float temp;
temp = (float) AD7707_read_value ();
temp = temp * (1,0-CUTOFF_FREQ) (float) adc_data [ch] * CUTOFF_FREQ;
adc_data [ch] = (unsigned long) temperatura;
ritorno adc_data [ch];
)

void AD7707_init ()
(
i byte;

set_tris_b (0x03); / / 0b00000011, mux4 out/mux3 out/mux2 out/mux1 out/mux0 out/ad7707di out/ad7707do in/ad7707drdy in

output_low (AD7707_RESET);
output_high (AD7707_CLK);
output_high (AD7707_RESET); / / Set alto per AD7715 reset pin basso
output_high (AD7707_CS); / / Set a basso AD7715 chip selezionare basso pin
delay_ms (100);

/ / 0DRDY/RS2/RS1/RS0/RW/STBY/CH1/CH0
/ / 0 / 0 / 1 / 0 / 0 / 0 / 1 / 1 / / 0x13: Ch3ŔÇ orologio operazione di scrittura
AD7707_write_byte (0x23); / / Comunicazione Registrati
/ / zero/zero/clkdis/clkdiv/clk/fs2/fs1/fs0
/ / 0 / 0 / 0 / 1 / 0 / 0 / 0 / 0
AD7707_write_byte (0x10); / / Orologio Registrati

/ / 0DRDY/RS2/RS1/RS0/RW/STBY/CH1/CH0
/ / 0 / 0 / 0 / 1 / 0 / 0 / 1 / 1 / / 0x13: Ch3ŔÇ operazione di scrittura del registro di configurazione
AD7707_write_byte (0x13); / / Comunicazione Registrati
/ / MD1/MD0/G2/G1/G0/BU/BUF/FSYNC
/ / 0 / 1 / 0 / 0 / 0 / 0 / 0 / 0 / / Gain = 1 bipolare, buffer off,
/ / AD7707_write_byte (0x40); / / auto Calib
AD7707_write_byte (0x50);

/ / AD7707_write_byte (0x13); / / Comunicazione Registrati
/ / AD7707_write_byte (0xC0); / / fullscale cailb

while (ingresso (AD7707_DRDY));

for (i = 0; i <ADC_CHANNEL_NO; i ) (
output_b (i <<3);
delay_ms (30);
adc_data = AD7707_read_value ();
)
)

 
Sto usando uno PIC18F2580 oltre opto isolati SPI per comunicare con uno AD7707.

Se trovare questo dispositivo incredibilmente lenta di aggiornamento.

Voglio leggere tutti e tre i canali in un ciclo, ma ogni volta che provi a leggere il dispositivo in modo rapido forma, cambiando i canali, ho falsi risultati.
Rallentarlo per cambiare i canali ogni mezzo secondo e diventa piuttosto
preciso.

Sto facendo qualcosa di sbagliato o sono delta sigma ADCS solo pensata per essere letta da un canale
in un momento molto lentamente e molto a che?

 
robin48gx ha scritto:

Sto facendo qualcosa di sbagliato o sono delta sigma ADCS solo pensata per essere letta da un canale ad un tempo e molto, molto lentamente, a che?
 

Welcome to EDABoard.com

Sponsor

Back
Top