Hallo,
ich versuche seit einiger Zeit den PCF8591 mit einem PIC32 zum laufen zu
bringen.
Ich möchte gerne die angelegte Spannung (1V) am AD-Eingang über die I2C
Schnittstelle auslesen.
Jedoch bekomme ich bei jeder Wandlung nur den Wert 0xFF zurück.
Pull-Ups an SCL und SDA sind vorhanden.
Im Anhang ein Oszi-Bild der Datenübertragung.
Hier der Code für das Auslesen der Daten:
1 | unsigned char extadc_get_voltage(unsigned char adress, unsigned char channel)
|
2 | {
|
3 | unsigned int i = 350;
|
4 | unsigned char ad_value = 0;
|
5 | I2CStart(I2C1);
|
6 | IdleI2C1();
|
7 | MasterWriteI2C1(adress);
|
8 | IdleI2C1();
|
9 | MasterWriteI2C1(0x40 | channel);
|
10 | IdleI2C1();
|
11 | StopI2C1();
|
12 | IdleI2C1();
|
13 | do
|
14 | i--;
|
15 | while(i);
|
16 | StartI2C1();
|
17 | IdleI2C1();
|
18 | MasterWriteI2C1(adress | 0x01);
|
19 | IdleI2C1();
|
20 | ad_value = MasterReadI2C1();
|
21 | IdleI2C1();
|
22 | AckI2C1();
|
23 | IdleI2C1();
|
24 | ad_value = MasterReadI2C1();
|
25 | IdleI2C1();
|
26 | NotAckI2C1();
|
27 | IdleI2C1();
|
28 | I2CStop(I2C1);
|
29 | IdleI2C1();
|
30 | return ad_value;
|
31 | }
|
Mit der Do-While Schleife wird eine Wartezeit von ca. 90µs für die
Wandlung realisiert.
Ich hoffe Ihr könnt mir helfen, warum ich nur den Wert 0xFF als Antwort
bekomme.