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
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.
:
Bearbeitet durch User
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; }
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. ---------------------------------
Danke an dich und Kevin, ist erledigt! Mit dem auslesen des Statusregisters hat es geklappt. Tut mir leid, dass ich das übersehen habe, kommt nicht wieder vor.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.