Hallo Leute,
ich nutze einen ATMega328PA, um einen ADC AD7193 auszulesen. Dazu habe
ich eine C Bibliothek geschrieben, die ich auch veröffentlichen werde,
falls sie sich bewähren sollte.
Momentan verusche ich einige Register auszulesen und die Default Werte
(laut Datenblatt) zu bekommen. Das klappt auch bei 4 von 5 Registern.
Leidglich bei einem der wichtigsten, dem Mode Register bekomme ich
ständig 0xFFA0FF, obwohl der StartUp Wert 0x080060 sein sollte. Ebenso
kann ich, wenn ich über SPI etwas dort rein schreibe, kaum meine
gesetzten Bits finden. Das funktioniert nur mit dem "High Nibble" von 24
Bit. Ich lese und setze Inhalte auf dem Mode Register mit der gleichen
Routine, wie ich das auch auf dem ebenfalls 24Bit breiten Config
Register tue. Hier mal meine Leseroutine für die 24Bit Register.
1 | // ----------------------------------------------------------------------------
|
2 | /*!@details This function gets the mode register content.
|
3 | * @return 24 bit wide mode register content
|
4 | */
|
5 | uint32_t AD7193_getModeReg()
|
6 | {
|
7 | uint32_t mode = 0;
|
8 | uint8_t in3, in2, in1;
|
9 |
|
10 | // tell the ADC, that we want to read the Mode register
|
11 | RESET(ADC_CS);
|
12 | AD7193_readFromRegister(MODE);
|
13 | in3 = spi_putc(0xff);
|
14 | in2 = spi_putc(0xff);
|
15 | in1 = spi_putc(0xff);
|
16 | SET(ADC_CS);
|
17 |
|
18 | // now begin shifting everything to the left,
|
19 | // then fill up lowest available byte with read bytes
|
20 | mode = ((uint32_t)in3) << 16L;
|
21 | mode |= ((uint32_t)in2) << 8L;
|
22 | mode |= (uint32_t)in1;
|
23 |
|
24 | return mode;
|
25 | }
|
Habe schon mit Analog Kontakt aufgenommen, aber da rührt sich nichts.
Vielen Dank für euere Hinweise
Stefan