Kommunikation MCU mit AD7794

Gast #6894565
Lesenswert?

Hallo!

Ich programmiere gerade einen MCU, der mit dem AD7794 ADU kommunizieren 
soll. Dazu verwende ich SPI und die HAL - Bibliothek.
Die Werte des ADU lese ich im Pseudocode wie folgt aus:
ADUreset();
configureModeRegister(Unipolar, Gain_64, 50Hz, , Continuous Mode, CH1)
configureIORegister(einstellen von output current)
readDataRegister()

Das ganze funktioniert halbwegs gut, wenn auch sehr langsam. Ich arbeite 
mit HAL_Delays und diese müssen sehr viel größer als die Abtastzeit sein 
um sinnvolle Werte zu bekommen. Im Datasheet steht, dass im continous 
mode die rdy flag zu berücksichtigen ist - ich weiß nur leider nicht wie 
ich diese auslese. Hat da jemand Erfahrung mit?

LG
Dominik
#6894582
Lesenswert?

Du könntest den RDY Pin entweder Pollen oder als Interrupt auswerten, 
ich vermute dann musst du den Pin immer umkonfigurieren (ohne Gewähr)

Du könntest das RDY Bit im Status Register kontinuierlich lesen, statt 
den Pin auszuwerten.

Du könntest im Config Register das CREAD Bit setzen und die Daten 
einfach kontinuierlich auslesen, irgendwann ändern sie sich dann halt.

Du könntest allgemein mal das ganze Datenblatt lesen, statt nur den 
Teil, von dem du denkst das du ihn brauchst.
Gast #6894584
Lesenswert?

Hi,
sorry, mir ist bewusst dass der ADU normal ADC genannt wird^^
Er befindet sich mit dem MCU auf einer Leiterplatte

Der Code für das Auslesen des Wertes lautet wie folgt:

void read_channel_1 (void)
{
   buf[0] = 0x00 | 0x10; //write to config reg
   buf [1] = 0x10 | 0x06; //unipolar, 64 gain
   buf [2] = 0x00 | 0x00; //ref 1, channel 1
   transmit (buf, 3);
   HAL_Delay(60); //if much lower, wrong output?

   buf[0] = 0x00 | 0x08; //write to mode reg
   buf[1] = 0x00; //continuous mode
   buf[2] = 0x05; //rate 50 Hz
   transmit (buf, 3);

   buf[0] = 0x00 | 0x28; //write to IO reg
   buf[1] = 0x08 | 0x01; //both currents to out 1 and 10ua
   transmit (buf, 2);
   HAL_Delay(60);

   uint32_t count;

   transmit (0x40 | 0x18); //read data reg
   HAL_Delay(60);
   receive (rbuf, 3);
   count = shift(rbuf); //shift operation

   return count;


}
Gast #6894589
Lesenswert?

DominikH schrieb:
> ich weiß nur leider nicht wie ich diese auslese.

Das RDY Flag ist ein Bit im Status Register
Zitat aus dem Datenblatt:
---------------------------------
STATUS REGISTER
RS2, RS1, RS0 = 0, 0, 0; Power-On/Reset = 0x80
(AD7795)/0x88 (AD7794)
The status register is an 8-bit read-only register. To access the
ADC status register, the user must write to the communications
register, select the next operation to be read, and load Bit RS2,
Bit RS1, and Bit RS0 with 0.
---------------------------------

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren