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
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
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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.