Hallo zusammen
Ich nehme gerade meinen A/D Wandler in betrieb ADS122C04 über I2C. Der
Bus funktioniert einwandfrei und ich kann den chip auch ansprechen und
dieser reagiert auch. Mein Problem ist eher das ich ein Fehler bei der
konfiguration mache den wen ich die AD-Werte herauslesen möchte bekomme
ich kein ACK. Somit ist ein Fehler bei der Konfiguration denke ich mal.
Nach dem icn das Datenbaltt gefühlt auswendig kann komme ich leider
immer noch nicht drauf was ich falsch mache.
Konfiguration Register 0 bei mir 0x80 für Kanal 0 und 0x90 für Kanal 1
Bei deisem Register wähle ich den Kanal aus in meinen Fall ist das
einmal den
1000 : AINP = AIN0, AINN = AVSS
1001 : AINP = AIN1, AINN = AVSS
Das Gain bleibt 1 somit 000
und PGA_BYPASS ist auch auf default also 0
Konfiguration Register 1
Hier soll alles auf standard sein und die Datenrate reicht die
langsamste. Ebenfalls wird die Externe Referenz also bei mir 5,0V
ausgewählt.
Somit steht in diesem Register 0x02
Konfiguration Register 2
Ganzese Register 0x00
Konfiguration Register 3
Ganzes Regiser 0x00
Die Adresse des Bausteins ist 0x80 und für das Herauslesen wird das
Rister (RDATA 0x10) benutzt.
Hier mein anschliessender Code die Init Funktion wird einmal bei beginn
aufgerufen danach immer die anderen beiden hintereinander.
Sieht jemand mein Problem das ich bei der Konfiguration oder dem
auslesen mache?
1 | func init_ADC()
|
2 | I2C1_Start();
|
3 | I2C1_Write(0x80); //device adress
|
4 | I2C1_Write(0x40); //registdr 0
|
5 | I2C1_Write(0x80); //config 0x80 = Kanal 0 0x90 = Kanal 1
|
6 | I2C1_Stop();
|
7 |
|
8 | I2C1_Start();
|
9 | I2C1_Write(0x80); //device adress
|
10 | I2C1_Write(0x44); //registdr 1
|
11 | I2C1_Write(0x02); //config temp of and Ref extern
|
12 | I2C1_Stop();
|
13 |
|
14 | I2C1_Start();
|
15 | I2C1_Write(0x80); //device adress
|
16 | I2C1_Write(0x48); //registdr 2
|
17 | I2C1_Write(0x00); //config no changes ->default
|
18 | I2C1_Stop();
|
19 |
|
20 | I2C1_Start();
|
21 | I2C1_Write(0x80); //device adress
|
22 | I2C1_Write(0x4C); //registdr 3
|
23 | I2C1_Write(0x00); //config no changes ->default
|
24 | I2C1_Stop();
|
25 | endfunc
|
26 |
|
27 | func read_Kanal0()
|
28 | I2C1_Start();
|
29 | I2C1_Write(0x80); //device adress
|
30 | I2C1_Write(0x40); //registdr 0
|
31 | I2C1_Write(0x80); //config Kanal 0
|
32 | I2C1_Stop();
|
33 |
|
34 | I2C1_Start();
|
35 | I2C1_Write(0x80); //device adress
|
36 | I2C1_Write(0x10); //read out Register
|
37 | I2C1_Start();
|
38 | I2C1_Write(0x81); //device adress + read bit
|
39 | dataPMSB := I2C1_Read();
|
40 | dataPMB := I2C1_Read();
|
41 | dataPLSB := I2C1_Read();
|
42 | I2C1_Stop();
|
43 | endfunc
|
44 |
|
45 | func read_Kanal1()
|
46 | I2C1_Start();
|
47 | I2C1_Write(0x80); //device adress
|
48 | I2C1_Write(0x40); //registdr 0
|
49 | I2C1_Write(0x90); //config Kanal 1
|
50 | I2C1_Stop();
|
51 |
|
52 | I2C1_Start();
|
53 | I2C1_Write(0x80); //device adress
|
54 | I2C1_Write(0x10); //read out Register
|
55 | I2C1_Start();
|
56 | I2C1_Write(0x81); //device adress + read bit
|
57 | dataNMSB = I2C1_Read();
|
58 | dataNMB = I2C1_Read();
|
59 | dataNLSB = I2C1_Read();
|
60 | I2C1_Stop();
|
61 | endfunc
|