PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF08 abfragen



ACU
11.12.2007, 19:27
Hallo!
Es ist mir etwas peinlich zu fragen, aber ich bekomme meinen SRF08 einfach nicht ausgelesen.
Ich habe den SRF08 schon (recht erfolgreich) mit einer C-Control2 benutzt, aber mit diesen fertigen I²C Routinen habe ich irgendwie bischen Probleme.



I2CTWI_transmit2Bytes(224, 0, 81);
mSleep(500);

Der obige Code bewirkt, dass der SRF08 aller 500ms eine Ultraschallmessung beginnt.

Das Datenblatt zum SRF08 ist hier (http://www.roboterbastler.de/Downloads/DB/srf08.pdf).

Danke für eure Hilfe.


MfG ACU

KingTobi
19.12.2007, 06:39
Hi

Was genau ist denn dein Problem?
Weisst du nciht wie du die Abfrage machst, oder funktioniert es nicht, ...?

roboterheld
19.12.2007, 20:35
wird auch nicht so einfach sein, dieses noch in den rp6 einzubinden. ausreichende winavr-c-kenntnisse sind erforderlich.

SlyD
20.12.2007, 07:41
Hallo,

in den Beispielprogrammen sind zwei dabei die SRF08 / SRF10 Sensoren ansteuern. Vielleicht da mal schauen.
(diese Beispiele sind allerdings auf nebenläufige Abarbeitung optimiert um Zeit zu sparen und daher 10 Zeilen länger...)

Etwas einfacher geht es mit dieser Funktion aus der RP6Lib:


void I2CTWI_readRegisters(uint8_t targetAdr, uint8_t reg, uint8_t * messageBuffer, uint8_t numberOfBytes)


Ich habe das nur gerade hier im Forum getippt und nicht getestet - aber es sollte in etwa so funktionieren:


#define SRF08_ADR 225
I2CTWI_transmit2Bytes(SRF08_ADR, 0, 81);
mSleep(120);
uint8_t results[3];
I2CTWI_readRegisters(SRF08_ADR, 2, results, 2);
// jetzt sollten High und Low byte der gemessenen Entfernung im results Array sein.


Wie gesagt - der Code ist nicht getestet und zeigt nur das Prinzip.

MfG,
SlyD

roboterheld
20.12.2007, 08:37
warum soll das der user nicht alleine machen. immer dieses vorkauen von dem code für winavr-c. er wird nie lernen wie ein srf8 funktioniert, wenn er den ursprung nicht kennt.

SlyD
20.12.2007, 11:11
wird auch nicht so einfach sein, dieses noch in den rp6 einzubinden. ausreichende winavr-c-kenntnisse sind erforderlich.


und dann:



immer dieses vorkauen von dem code



Schon klar Pebi. Erst behaupten es sei zu schwer - und dann wenn ne einfache Lösung (3 Zeiler...) gezeigt wird meckern warum das hier gepostet wird.




wird nie lernen wie ein srf8 funktioniert


Wenn man das wollte müsste man sich den kompletten Sensor selbst bauen (und daran hindert Dich ja keiner) was bei einem fertigen Sensormodul aber wohl nicht Sinn und Zweck der Sache ist.
Der Code oben ist doch nur die Ansteuerung per TWI. Das hat mit dem wie der Sensor an sich funktioniert rein gar nichts zu tun.

MfG,
SlyD

ACU
25.12.2007, 22:48
Hallo SlyD, vielen Dank für deine Hilfe.
Auf diesen Lösungsansatz bin ich irgendwie nicht gekommen.
Habe heute endlich mal Zeit gehabt den Code zu testen, funzt super.
Hier zwei kleine Funktionen, mit denen ich es mache (für alle Faule).
Die Adresse habe ich fest gesetzt, da ich nur einen Sensor montiert habe.


void USFire()
{

I2CTWI_transmit2Bytes(224, 0, 81);
}

int USRead()
{
uint8_t Sensorarray[2];
I2CTWI_readRegisters(224, 2, Sensorarray, 2);
return Sensorarray[1]+Sensorarray[0]*256;
}

@pebi
Wenn du dich mal eine ganze Weile zurückerinnerst, wirst du feststellen, dass wir uns wegen der SRF Sache mal geschrieben hatten und ich sehr wohl das Funktionsprinzip verstanden habe.
Du kannst ja auch in deinen PNs mal schauen.
Ach sorry, ganz vergessen dein Account ist ja gesperrt :-s


MfG ACU