Hallo Ist der unten eingefügten Code für die Programmierung der verlangten Verzögerungen beim 1-Wire Protokoll (in us Bereich) geeignet ? Vielen Dank für die Hilfe Toni --------------------------------------------------------------------- Code aus lcd.c von Peter Fleury /*********************************************************************** ** delay loop for small accurate delays: 16-bit counter, 4 cycles/loop ************************************************************************ */ static inline void _delayFourCycles(unsigned int __count) { if ( __count == 0 ) _asm_ __volatile__( "rjmp 1f\n 1:" ); // 2 cycles else _asm__ __volatile_ ( "1: sbiw %0,1" "\n\t" "brne 1b" // 4 cycles/loop : "=w" (__count) : "0" (__count) ); } /*********************************************************************** ** delay for a minimum of <us> microseconds the number of loops is calculated at compile-time from MCU clock frequency ************************************************************************ */ #define delay(us) _delayFourCycles( ( ( 1*(XTAL/4000) )*us)/1000 )
Die sollten schon funktionieren, wenn sie Peter veröffentlicht hat. Alternativ kann man auch einfach einen Timer verwenden. Diesen startet man ohne oder mit Prescaler (je nach gewünschter Zeit) und fragt dann ständig den Zählerstand ab. Hat der Zähler einen bestimmten Wert erreicht, bricht man eine Schleife ab und geht weiter im Programmablauf. Für Zeiten ab dem us-Bereich ist das eigentlich je nach verwendetem Oszillator auch praktikabel. Alex
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.