Forum: Mikrocontroller und Digitale Elektronik probleme mit ADS7828


von KoF (Gast)


Lesenswert?

guten tag alle zusammen.

ich habe ein problem mit einem 8ch i2c ad-wandler!
( von ti ADS7828 )
er antwortet einfach nicht :-(

ich habe ihn als first gekennzeichnet, ein poti am ch 0 angeklemmt,

er erhält von mir die adresse 0x93 (10010011 bin);
danach das Commandbyte 0x0f (00001111 bin);

und dann sollte ich ein byte von ihm zurück erhalten, was er jedoch
nicht tut!. am oszi habe ich gesehen, das die clock anliegt und die
signale auch gesendet werden, nur antwortet er nicht :-(

kann mir jemand helfen?

von Markus_8051 (Gast)


Lesenswert?

Was für einen µC verwendest Du? Hast Du die I2C-Routienen selbst
geschrieben, oder sind es "fertige" aus dem Netz? Funktionieren diese
mit einem anderen I2C-Chip (z.B. RTC, EEPROM...)?
Wie groß ist Dein Source-Code? Kannst Du ihn hier posten?

Also, gib mal mehr Infos!

Gruß,
Markus_8051

von KoF (Gast)


Angehängte Dateien:

Lesenswert?

der code ist für den msp430!


der code funktioniert z.b. mit pcf8574's.... < also ist
er in ordnung! und nein, er ist nicht von mathar :-P!!!
er ist einfacher aufgebaut ;-)


aber warum willst du das wissen? bist du nur hinter dem code her?
denke mal schon! kannst ihn aber haben! (naja ich schließe von deinem
namen mal her, dass du 8051'er bist ;-) also ohne arbeit kannst du
damit nix anfangen ;-)...

aber mein ad-wandler läuft immer noch nicht :-(

von Markus_8051 (Gast)


Lesenswert?

Hi KoF,

messerscharf kombiniert, wenn ich allerdíngs alle µCs in meinem Nick
aufführen würde, mit denen ich arbeite, würde er etwas lang werden,
also danke für den Code ;-))

Nein, Spaß beiseite, wenn der Code schon getestet ist, hilft es nicht
viel, ihn hier zu posten. Da wär dann eher das Hauptprogramm
interessanter (und auch nur die Routienen, die hier den ADC
betreffen).

Aber vielleicht finden wir den Fehler auch so: Nachdem Du mit einem
Write-Befehl die Adresse und das Command-Byte gesendet hast, bekommst
Du nicht automatisch den gewandelten Wert zurück. Vielmehr erhältst Du
als Antwort eine Ack-Kondition, wenn das Command-Byte in Ordnung war.
Wenn Du diese bekommen hast, kannst Du mit einem Read-Befehl auf die
Adresse des ADC die gewandelten Daten abholen.

Noch etwas zu Deinem Command-Byte: durch die 0x0F die Du sendest,
konfigurierst Du den Chip auf eine Differenzmessung zwischen den
Kanälen 0 und 1. Du hast aber geschrieben, daß ein Poti an Eingang 0
angeschlossen ist. (Vermute mal, der Mittelabgriff an ADC-CH0, die
beiden äußeren Pins an Vcc und GND). Dann solltest Du als Commad-Byte
ein 0x8F senden.

Viel Erfolg,

Markus_8051

von KoF (Gast)


Lesenswert?

das habe ich auch gerade gemerkt und behoben!!!
aber trotzdem tut sich nix!

ich bin schon so verzweifelt, ich lasse jetzt jede adresse hochöaufen
(bei eins beginnend) und zu jeder einzelnen adresse lasse ich die
cmd's hochlaufen!!! aber nirgends habe ich etwas verwertbares gefunden
:-(

^^ das ist zwar nicht sinnvoll, aber bei irgend einer adresse muß er ja
antworten!!!

von KoF (Gast)


Lesenswert?

oh man, ich versteh es nicht!

adresse: 0x93;
cmd: 0x8f;

am chip liegen 3,3v an.
clock signal ligt am richtigen pin an.
data signal ligt am richtigen pin an.
a0 und a1 liegen auf gnd.
ein kondensator liegt zwischen vcc & gnd.
etwas über 3v pegel auf dem bus...

... und nix geht :-(

von Markus_8051 (Gast)


Lesenswert?

Was genau klappt denn jetzt nicht? Bekommst Du keine Daten, oder sendet
der Chip schon keine Ack-Kondition zurück?

von KoF (Gast)


Lesenswert?

nochmal von vorne (theoretisch)

1. Adressbyte (write) senden -> slave.ackn
2. commandbyte senden        -> slave.ackn
3. Adressbyte (read) senden  -> slave.ackn
4. datenbyte1 lesen          -> master.ackn
5. datenbyte2 lesen          -> master.ackn


ist das richtig?

von Stefan Winter (Gast)


Lesenswert?

ich habe ihn ohne Probleme zum Laufen bekommen... Vileicht hilft Dir
dies weiter::::

u16 I2C_ADConv(u08 channel)
{  // zZ. wird nur CH0 abgefragt
 u08 ADH, ADL; //Temps für Werte

 channel = channel<<4;
 set_c(4,10);
 lcd_bin(channel);
 I2C_Start();           // Start Senden
 Write_I2C_Control(0x09,0x00,0x00); //0x09 Adresse von ADS7828E ,0x00 =
A0-A2, 0x00 = write
 Write_I2C_Byte(channel | 0x04); // Kanal und Wandlungstyp
 I2C_Stop();
 I2C_Start();
 Write_I2C_Control(0x09,0x00,0x01); // ADS zum Lesen anwählen
 ADH = Read_I2C_Byte();        // Higbyte einlesen
 I2C_SAckn();              // ACK Senden
 ADL = Read_I2C_Byte();        // Lowbyte einlesen
 I2C_Stop();               // Stop senden
 return ADCombi(ADH,ADL);
}

von KoF (Gast)


Lesenswert?

oh man, ich bin am verzweifeln!!! heul

ich mache nun folgendes!

1. i2c-start
2. i2c-schreiben (adresse: 10010000 = 0x90)
3. i2c-schreiben (comandb: 10000111 = 0x87)
4. i2c-start
5. i2c-schreiben (adresse: 10010001 = 0x91)
6. i2c-lesen
7. i2c-lesen
8. i2c-stop

aber ohne erfolg :-(

von KoF (Gast)


Lesenswert?

er läuft luftsprung

... nachdem ich einige fehler in der adressierung und des cmd-byte's
ausgemerzt habe, läuft er jetzt. erst hatte ich sehr ungenaue werte,
was jetzt aber auch vorbei ist! ich hatte die interne referenz am
laufen, was ihn meistens bei 3,3v inputs gestört hatte...

aber alles schon vergesse, denn er läuft jetzt :-)

von KlaRa (Gast)


Lesenswert?

Hallo KoF,
ich bin erfreut das jemand auch mit dem ADS7828 arbeitet.
Ich habe bislang noch keine Bezugsquelle für diesen Chip ermitteln
können ohne gleich 250 Stück abnehmen zu müssen. In der Tat habe
ich mir von TI 4 Samples schicken lassen.
Jetzt möchte ich auch den ADS7823 ausprobieren. Hier habe ich ebenfalls
noch keine Bezugsquelle.
Kannst Du mir da weiterhelfen?

Gruss Klaus.

von anton Steiner (Gast)


Lesenswert?

Hi,

habe das gleiche Problem.
Kannst du mir bitte den funktionierenden Code schicken.

Danke & LG Toni

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.