Externer ADC AS1538 stürzt ab

OP #2655578
Lesenswert?

Hi

ich habe eine kleine Frage und zwar hat jemand schon Erfahrung mit den 
Baustein AS1538 gesammelt?

Datenblatt
http://www.austriamicrosystems.com/content/download/1174/6881/565

Etwas allgemeines dazu:
Ich verwende die 4 maximalen Bausteine die ich verwenden kann und lese 
diese mittels TWI aus.
Mikrocontroller ist der AT90CAN128.
Verwenden tue ich dafür die TWI_MASTER.c, welcher aber angepasst ist um 
auch das repeated start flag zu versenden.
Versendet werden die Daten/Befehle so wie es im Datenblatt gefordert 
wird.
Gemessen wird immer der Eingangswert gegenüber masse.

ID's 0x90  0x92  0x94 0x96

Commands  0x84  0x94  0xA4  0xB4  0xC4  0xD4  0xE4  0xF4


Das Problem was ich gerade habe ist folgendes:

der erste Baustein (id 90) lässt sich problemlos auslesen.
Bei den anderen geht dies aber nicht ohne weiteres denn sobald ich an 
diese Eingänge eine Spannung anlege stürzt mir der i2c ab. Und zwar 
nachdem ! dieser Wert eingelesen wurde. Sprich das Ergebnis bekomme ich 
aber wenn ich den nächsten Pin einlese bleibt SDA auf Low und blockiert 
den Bus.

ich kann zwar durch das deaktivieren des Busses + 1sec wartezeit + 2x 
stoppbit den Bus wieder zurück ins leben rufen und dann weitermachen. 
(so funktioniert das meiste gerade) aber weder gefällt mir das noch kann 
ich ständig solange warten bis ich alle channels so ausgelesen habe.



Hat jemand mit dem Baustein schon die gleichen Erfahrungen gemacht und 
weiß was ich ändern muss damit es funktioniert ?



THX
OP #2659645
Lesenswert?

Hi


ich bin weitergekommen in der Fehlersuche aber gelöst habe ich es bis 
jetzt noch nicht.


Das Problem ist das wenn ich die Daten auslese nach dem ersten Byte kein 
Ack gesendet wird. Der Pegel fällt zwar am SDA ein wenig aber nur von 5V 
auf 4,7V. Und für den µC ist das somit ein Arbitration Lost.

Das was mich momentan am meisten verwirrt ist immer noch die Tatsache 
das es nur dann auftritt wenn eine Spannung am Baustein anliegt.
Desweiteren kommt es hin und wieder vor das die Daten dann doch mal 
gültig übertragen werden.

Taktgeschwindigkeit an der Clock hab ich auch mal getestet aber der 
Fehler sieht exakt so aus wie es bei schneller Taktrate.
Moderator (Firma: Titel) Persönliche Seite #2659653
Lesenswert?

Florian W. schrieb:
> TWI_MASTER.c, welcher aber angepasst ist
Hmmmmm.....
WAS wurde denn WIE und WOMIT "angepasst"?

Florian W. schrieb:
> Der Pegel fällt zwar am SDA ein wenig aber nur von 5V auf 4,7V.
Hört sich nach Buskonflikt an.
Treibst du den SDA vom uC aus zum falschen Zeitpunkt aktiv auf high?
Mach mal einen 100 Ohm Widerstand zwischen die beiden I2C Busteilnehmer, 
dann kannst du leicht messen, wer da was macht: wenn im Fehlerfall z.B. 
der Pegel auf der uC-Seite höher ist, dann treibt der uC beim ACK einen 
high-Pegel, das dürfte er aber nicht!
OP #2659707
Lesenswert?

Hi

Angepasst wurde die TWI.c in der Hinsicht das wie im Datenblatt 
gefordert ein Repeated Start gesendet wird weil das war bisher nicht 
vorgesehen.

Ohne das Repeated Start würde der AS1538 keine Messung ausführen.
Das ich das verpfuscht habe glaub ich nicht bzw würde ich ausschließen.

Denn ich frage an sich nur ab ob die Adresse mit dem read bit versendet 
werden soll und schreibe dann auf das Register die Bedingung für des 
RepStart

 TWCR = (1<<TWEN)|
        (1<<TWIE)|(1<<TWINT)|
        (0<<TWEA)|(1<<TWSTA)|(0<<TWSTO)|
        (0<<TWWC);

Und erst beim nächsten Interrupt die Adressierung.

Am Oszi sieht es jedenfalls so aus wie es sein muss. Einzig sogar mit 
mindestens 5µsec zeit zwischen RepStart und Anforderung zum Lesen. 
(gefordert sind im Datenblatt mindestens 3,7)


Ich werd mir später das mit dem Widerstand anschauen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren