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?
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
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 :-(
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
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!!!
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 :-(
Was genau klappt denn jetzt nicht? Bekommst Du keine Daten, oder sendet der Chip schon keine Ack-Kondition zurück?
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?
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); }
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 :-(
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 :-)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.