Hallo,
ich habe ein Problem, den Max127 12Bit-ADC auszulesen. Ich bin nach dem
Datenblatt vorgegangen (das glaube ich zumindest) und bekomme immer nur
Murks heraus.
Das Datenblatt ist im Anhang, angeschlossen ist er wie im Datenblatt auf
Seite 1 zu sehen.
Die I2C Lib, die ich verwende, ist die von P. Fleury.
Der Chip wird beim i2c_start() erkannt und ich kann ihm das Control-Byte
schicken, und auch auslesen.
Doch jenachdem was ich im Controlbyte schicke habe ich unterschiedliche
Ausgaben, diese jedoch immer gleich, egal ob nun GND oder VCC am Pin
liegt.
Wenn das Control Byte (Erklärung Seite 10) nun 0x8C ist, dann bekomme
ich immer 0x0800 heraus.
Wenn es 0x80 ist, bekomme ich 0x0000 heraus.
0x8C bedeutet: Channel 0, input range +-10V
0x80 bedeutet: Channel 0, input range 0..5V
VCC ist 5V.
Die Erklärung der I2C-Datenübertragung ist im Datenblatt auf Seite 12.
Hier der Code:
1 | #define maxWrite 0x50
|
2 | #define maxRead 0x51
|
3 |
|
4 | unsigned short read_max(uint8_t ctrl_byte) {
|
5 | unsigned short result=0;
|
6 | unsigned short value=0;
|
7 | i2c_start_wait(maxWrite);
|
8 | i2c_write(ctrl_byte);
|
9 | i2c_stop();
|
10 | i2c_start_wait(maxRead);
|
11 | value=i2c_readAck();
|
12 | value<<=8;
|
13 | value|=(uint16_t)i2c_readNak();
|
14 | i2c_stop();
|
15 | value>>=4;
|
16 | result=value;
|
17 |
|
18 | return (unsigned short)result;
|
19 |
|
20 | }
|
21 |
|
22 | int main() {
|
23 | .....
|
24 | for(;;) {
|
25 | lcd_set_cursor(10,20);
|
26 | sprintf(str, " %04x", (unsigned int)read_max(0x8C));
|
27 | lcd_puts(small_font, str);
|
28 |
|
29 | _delay_ms(50);
|
30 | lcd_clear();
|
31 | }
|
32 | .......
|
Ich hoffe mir kann hierbei jemand helfen...