Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Epp, > > > Danke für den Code, aber wie funktioniert sie? Gibt es irgendwo ein paar Zeilen Doku dazu? > > Ich nehme mal an, dass die Funktion einen Wert zurückliefert, wenn die Übertragung beendet wurde? > > Wo soll ich die Funktion einbinden? Oder wie setze ich sie am besten ein? > > Das hatte ich eigentlich kurz im anderen Thread geschrieben. > Nach jedem Lese- oder Schreibvorgang muß die Funktion aufgerufen werden. > Die Funktion waitI2C_Ready() hat keinen Rückgabewert. Ansonsten würde > ein <code>returns int</code> dahinterstehen. > Innerhalb der Funktion läuft eine Schleife, die erst beendet wird, nachdem an SCL > ein Highpegel anliegt. > Getestet habe ich die Funktion noch nicht, da ich hier keine langsamen I²C-Bus-Bausteine habe, > die Clockstreching betreiben. > (Ich müsste dafür erst extra einen Atmel-Controller programmieren und die Interruptroutine > etwas verzögern. Dazu habe ich habe keine Zeit.) > > Nach welchen Anweisungen Du die Funktion einbinden mußt, zeigt Dir hier nur ein Probieren. > Denn wird an einer Stelle kein Clock-Streching benötigt, kann der Aufruf der Funktion > als zusätzlicher Clock-Pulse interpretiert werden. > Taste Dich einfach durch und ersetze ersteinmal die sleeps hinter den i2c.write() > durch den Funktionsaufruf. > Nach i2c.stop() darf normal keine Pause und auch kein Aufruf der Wartefunktion erfolgen. > Nach dem i2c.cstart() sollte normal auch keine Pause notwendig sein. > Der Aufbau Deiner Funktion würde dann so aussehen: > <code>//------------------------------------------- > function direction (byte motor, byte direct) returns int > //------------------------------------------- > { /* Motor Drehrichtung */ > if i2c.cstart(0x56) > { > i2c.write (10); waitI2C_Ready(); > i2c.write (04); waitI2C_Ready(); > i2c.write (motor); waitI2C_Ready(); > i2c.write (direct); waitI2C_Ready(); > i2c.write (0); waitI2C_Ready(); > i2c.stop(); > return -1; > } > i2c.stop(); > return 0; > }</code> > > Die extra If-Abfrage dient dazu, zu erkennen, ob das I²C-Device angeschlossen > ist bzw. reagiert. > > Wenn die Zeitangaben von Frank korrekt sind, kannst Du aber auch mit den Sleeps > weiterarbeiten, jedoch <code>sleep 1;</code> angeben, da die Verarbeitung > eines Bytes unter einer 1ms dauern soll. > > MfG André H.