Hallo,
habe folgendes Problem mit einem Atmega128 und einem ADC LTC 1867, von
dem die Digitalleitungen (Chip Select, SDI, SDO, und SCK) an drei Pins
des Atmegas hängen. Sobald ich die Konvertierung starte
(Spannungsmessung zwischen CH1 und GND) gibt er mir unabhängig von der
Eingangsspannung am SDOut highByte 0 und am LowByte zw. 48 und 112
zurück. Im Vergleichsmodus zw. zwei Eingängen (CH0 & CH1) bekomme ich
127 am High und 240 am LowByte (wieder sind die Spannungen egal). Am
Oszi, welches am SDOut hängt lässt sich das gleiche feststellen.
1 | unsigned int value = 0x0000;
|
2 |
|
3 | mask = 0x80;
|
4 |
|
5 | SET_CS_ADC; // chip select (set --> low)
|
6 | CLEAR_CS_ADC; // start convertion at rising edge
|
7 | warte(1); // 1 ms convertion time
|
8 | SET_CS_ADC;
|
9 |
|
10 |
|
11 | do
|
12 | {
|
13 | if(mask & control) // control --> CH0 to GND, Bipolar
|
14 | SET_BIT;
|
15 | else
|
16 | CLEAR_BIT;
|
17 |
|
18 | SET_SCK;
|
19 |
|
20 | if(PIN_SPI & (1 << PIN_MOSO))
|
21 | value |= iMask;
|
22 |
|
23 | CLEAR_SCK;
|
24 |
|
25 | mask = mask >> 1;
|
26 | iMask = iMask >> 1;
|
27 |
|
28 | }while(mask);
|
29 |
|
30 | mask = 0x08; // 4 more bits
|
31 |
|
32 | do
|
33 | {
|
34 | SET_SCK;
|
35 |
|
36 | if(PIN_SPI & (1 << PIN_MOSO))
|
37 | value |= iMask;
|
38 |
|
39 | CLEAR_SCK;
|
40 |
|
41 | mask = mask >> 1;
|
42 | iMask = iMask >> 1;
|
43 |
|
44 | }while(mask);
|
45 |
|
46 |
|
47 | CLEAR_CS_ADC;
|