PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF02 apathisch



Vinter
24.07.2007, 12:34
Salute,

neulich (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=32434&highlight=) meldete ich bereits einmal auf der Suche nach Einbindung von I2C-Sensoren in einen CAN-Bot. Nun ist dies direkt per I2C aus der seriellen Schnittstelle (sh Linuxfocus-Artikel LF365[1]) geschen und klappt zumindest fuer einfache Kommunikation mit einem PCF8574 ganz wonderbra.

Versuche ich nun jedoch, einen SRF02 anzusprechen, so ACKt der brav alle Befehle, scheint auch das Leseregister zu wechseln und Daten an mich zu uebertragen. Soweit das Positive - leider sind die uebertragenen Daten falsch, und die Befehle werden nicht ausgefuehrt.

Im Folgenden ein kurzes Kommunkationsprotokoll:



Firmwarepruefung -> [(<id 224 / read 0> reg 0)<id 224 / read 1> wait: 4 ok]
(<id 224 / read 0> reg 0)
<id 224 / read 1> pruefe - done.
I2C -> SRF02 test using firmware 4
Funktionstest -> [(<id 224 / read 0> reg 0)<id 224 / read 1> wait: 4 ok]
(<id 224 / read 0> reg 1)
<id 224 / read 1> chk - done.
Funktionspruefung ergab 22
Messung -> [(<id 224 / read 0> reg 0)<id 224 / read 1> wait: 4 ok]
(<id 224 / read 0> reg 0)
<id 224 / read 0> start - done.
Messung laeuft.
Bereitschaft -> [(<id 224 / read 0> reg 0)<id 224 / read 1> wait: 4 ok] ok.
Ergebnis -> [(<id 224 / read 0> reg 0)<id 224 / read 1> wait: 4 ok]
(<id 224 / read 0> reg 2)
<id 224 / read 1> recv - done.
Ergebnis der Messung: 0


Nicht erschrecken, ist recht strukturiert. Eckige Klammern bedeuten einen Unterblock, in dem er die Empfangsbereitschaft prueft (nach Reg. 0, != 255 falls bereit); runde Klammern waehlen ein Register aus (Zielregister mit reg x angegeben); spitze Klammen sind Startcondition (ID und read bit gibt er aus); die jeweils letzte Zeile in einem Einrueckblock ist der eigentliche Befehl an den Sensor bzw das Lesen; und schliesslich die Bloecke sind logische Einheiten, was er tut, steht ja jeweils dran.

Anzufuegen ist, dass jeweils bei fehlenden ACK N/A bei Verbindungsabbruch, Befehl nACK bei Nichtbestaetigung etc stehen muesste, was ueberall fehlt; es kommt also alles an und wird verstanden.

Nun aber die Probleme: Firmwareversion - passt 4? Funktionspruefung (Inh. Register 1) ist voellig falsch, sollte 128 sein. Zudem keine Wartezeit bei Messung, Distanz egal, LED blinkt nicht; der Befehl wird also geACKt, aber nicht ausgefuehrt. Dann das Ergebnis: Immer 0 - er misst ja auch nicht. Aehnliches bei Addressvergabe. Die Register scheint er aber zu wechseln, die Werte aendern sich ja jeweils und sind auch immer gleich...

Hat jemand nun eine Idee? Habe hier 10 Sensoren liegen, die sollten ALLERSPAETESTENS bis Ende der Woche laufen :( Ach ja, verhalten sich alle gleich...

Danke fuer Hilfe im Voraus,
David

PS: Sry fuer Telegrammstil, aber ist so schon genug Text ;)
PPS: Schreibe ich zum Beispiel nur 1 und lese dann, kommt auch 22, wo 128 stehen sollte...

Ed: Die ganzen Edits mal geloescht, falsche Faehrten unzo.

Vinter
24.07.2007, 16:45
Never mind,

ich habs geschafft :) Dank eines genialen Oszis, hab endlich mal geblickt, wie man Speciher und Trigger kombiniert, konnte ich mir die komplette Kommunikation ansehen und hab herausgefunden, dass der Sensor wohl nach einem ACK wieder ein LOW haben will, um STOP anzuerkennen. Das hats jedenfalls bei mir komplett gerichtet. Ach ja, weiterer Fehler: Beim Geben von Befehlen NICHT regSelect -> stop > start > Befehl, sondern Select > Befehl! Wird wohl nicht zwischengespeichert. Deshalb wurden auch Befehle nicht ausgefuehrt. Warum der Pruefwert in Reg 1 nicht stimmt, konnte ich allerdings immer noch nicht herausfinden...

Gruss,
David

Vinter
06.08.2007, 16:36
Tja, jetzt sind sie wieder apathisch... Grade schoen GUI und alles programmiert, nun ja, mitten im Test explodiert ploetzlich ein Kondensator, direkt darauf schiesst ein kleiner Blitz aus dem Spannungswandler. Was die Sensoren dazu sagten, kann man sich denken, ich tippe mal die 24V am Eingang sind direkt durch den Wandler.

Frage (wollte keinen neuen Thread aufmachen): Kann sich jemand vorstellen warum? Nachdem die 24V schon am Limit des 7805 liegen - kann durch den Kondensator (minderwertig evtl.?) ein hoher Spannungspuls entstanden sein? Und warum sind meine Sensoren ueber den Jordan? Der Kompassensor am gleichen Bus funktioniert uebrigens noch, aber auch nur ohne einen neu eingeloeteten Wandler, da scheint so ziemlich alles drum herum abgeschossen zu sein... Geht auch ein schoener Riss durch.

Lunarman
06.08.2007, 19:08
Wie darf ich das denn jetzt verstehen? Kann ich evtl. ein Bild haben?
Außerdem meine ich zu wissen, das der 7805 36 v verträgt, oder aber es ist der 78S05. Finde ich schon ziemlich extrem, was bei dir passiert ist. Hat denn der Wert des Kondensators wirklich gepasst? War das ein ABblockkondensator für den Wandler oder was für einer? Also, wenn der kompass noch geht, ist der entwder extrem stabil, oder aber die SRF02 gehen auch noch, aber vielleicht hat irgendwas drumherum was abgekriegt - ich weiß nicht, ob in einem Microcontroller etwas kaputt gehen kann, etwas anderes aber nicht, ic hweiß nur, dass es darin verdammt Miniklein ist. Denke deshalb nicht, dass ausgerechnet der Teil kaputtgegangen ist, der sich mit den 02ern beschäftigt - das wäre ein Zufall der gar nicht geht. Könntest du vielleicht einen Schaltplan mit den brandherden eingezeichnet posten?

MfG,
Lunarman

P.S.: Hoffe, die Sauerei war nicht allzuschlimm :shock:

Vinter
06.08.2007, 21:00
Salute,

Sauerei war ertraeglich, zogen sich nur wunderbare Spinnenfaeden quer ueber das Board ;) Ist leider alles schon wieder aufgeputzt (und die Platine kaum mehr brauchbar...), also kein Bild.

Schaltplan auch in der Uni :\ Dass es richtig verdrahtet war muesst ihr mir einfach mal glauben ;), sonst war aber eh nicht viel dran, ein Standard-beschalteter L7805CV (24V) mit 100, 10 (EK) und 0.1 uF (KK), dazu 2 Ausgaenge der seriellen Schnittstelle + GND, ueber 2x 4k7 gegen 2x 5V1 Z-Dioden gegen Masse abgefuehrt, dazwischen abgegriffen und mit Versorgung auf 40er Wannenstecker und 4er Stiftleise auf 10 Sensoren + Kompass verteilt.

I2C scheint allerdings noch zu laufen, sogar die Addressen werden noch rausgeblinkt und Befehle angezeigt, nur kommen keine Werte zurueck oder nur voellig sinnlose...

Es geht mit allerdings auch weniger um Reparatur, das kann ich wohl sowieso vergessen; die Ursache / das Verstaendnis des Problems interessiert mich mehr. Muss wenigstens eine brauchbare Erklaerung bieten koennen, immerhin habe ich 200 Euro und ~1-1.5 Mannwochen Arbeit abgeschossen...

Mitarbeitender Ingenieur tippte auf Kurzschluss durch akute Unfaehigkeit (;)), aber die Platine lief 1 Woche in exakt dieser Position einwandfrei und war mit Antistatikschaum isoliert...

Werde mich jetzt (letzte Woche) wohl auf Simulation beschraenken muessen. Wird sich toll in der Bewertung machen :(

Gruss,
David

Lunarman
06.08.2007, 21:21
Worum gehst denn eigentlich? ich nehme an, da steht Geld auf dem Spiel?
Woher hattest du eigentlich die Spannungsversorgung? Netz? Batterie? Akku?
Könnte mir vorstellen, dass da irgendne starke Unregelmäßigkeit war, was ich bei AKku und Co allerdings für unwahrscheinlich halte (da passiert ja nix weiter mit, außer man schüttelts, aber eigentlich selbst dann net)

versteh ich wirklich net...

Vinter
08.08.2007, 09:17
Hochschulforschungsprojekt, bzw wichtige Unterstuetzung dafuer - und die wird nun nicht fertig, bin ja Freitag wieder weg. Gewissermassen auch Geld, da teils patentiert usw (nicht mein Billigkram, der Rest des Bots ;))...
Strom kam aus einem Statron-Netzgeraet.