Forum: Mikrocontroller und Digitale Elektronik Externer ADC AS1538 stürzt ab


von Florian W. (kalu)


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

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

Mit einem Oszi den I2C Bus beobachten und schauen, ob alle Zeiten lt. 
Datenblatt eingehalten werden. Das dürfte in deinem Fall wahrscheinlich 
das Problem sein.

Grüsse

von Florian W. (kalu)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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!

von Florian W. (kalu)


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.

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.