PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (Mal wieder) der SRF02 und ordentliches Messen...



-skunk-
18.01.2011, 10:13
Moin zusammen,

ich möchte mit einem ATmega324PA via I²C einen SRF02 auslesen. Dazu habe ich den Beispielcode benutzt. Ich habe nun schon fast das komplette Internet durchgelesen, komme aber nicht auf gute Ideen. Daher hoffe ich, dass ihr mir in meiner Verzweiflung weiterhelfen könnt ^^

Hier mal die Daten und das Problem:

F_CPU ist 3686400 Hz
F_TWI ist 230400 Hz
Pullups sind dran (4k7)

Ich habe das Problem, dass der Sensor manchmal funktioniert, "sogar" bei 75ms Wartezeit auf getRange(). Der µC hat sonst nichts zu tun, um die Tests nicht zu verfälschen. Wenn ich ihn nun aber resete passiert es, dass sich das Programm nach einem Blinken des SRF02 aufhängt. Gelegentlich passiert es, dass das Programm läuft, der SRF02 aber nicht blinkt und somit auch nicht ausgewertet wird. Meine bisherigen Ideen waren, dass es an der Software liegt.

Wenn ich die Platine allerdings eine Weile liegen lasse, KANN es sein, dass es wieder alles einwandfrei funktioniert. Nach einem Reset geht dann aber wieder nichts. Ich habe schon mit den Startupzeiten des Atmel experimentiert, dem SRF02 eine ganze zusätzliche Sekunde zum "hochfahren" gegeben, aber immer wieder den selben Fehler erhalten.

Ich würde mich sehr freuen, wenn ihr mir da irgendwie helfen oder Tipps zur Fehlersuche geben könntet, ich geh hier echt gerade kaputt daran :\

Schon mal vielen Dank!

uffi
29.01.2011, 18:51
Vorschlag: Setz mal die Frequenz für die I2C Konmmunikation auf 100kHz oder sogar 50 kHz herunter.
Mir scheint ausserdem der CPU Takt mit 3,6 MHz zu langsam für eine solch schnelle TWI Frequenz. Hast Du beachtet, dass:

SCL frequency = CPU Clock frequency / (16 + 2(TWBR) ⋅ 4^TWPS)

gilt? (siehe Datenbuch)

-skunk-
01.02.2011, 11:08
Hi,

das Problem hat sich mittlerweile erledigt ^^

Das Problem war, dass ich vor der eigentlichen Hauptschleife eine Schleife hatte, die 500ms dauert. Diese hat wohl irgendwas im SRF02 verzögert, dass er nur manchmal ging. Keine Ahnung, was da genau los war. Auf jeden Fall gehts ohne die Schleife jetzt :)

Trotzdem Danke für deine Antwort!

-skunk-
05.03.2011, 18:32
Da bin ich noch mal :) Was mittlerweile neu ist, ist folgendes: Wenn ich Messungen im Bereich < 15cm (die ja ungültig wären) oder > 5m (die gültig wären) mache, dann kommt nichts mehr vom I²C zurück. Er hängt sich quasi hier auf:

while (!(TWCR & (1<<TWINT)))

Habt ihr so etwas schon mal erlebt bei dem SRF02?