Hi Lekro,
kannst des mal posten ich bin genauso gespannt wie pebisoft! ich dachte auch das so eine abruffertige Routine gehen muss!
Gruß Michi
Druckbare Version
Hi Lekro,
kannst des mal posten ich bin genauso gespannt wie pebisoft! ich dachte auch das so eine abruffertige Routine gehen muss!
Gruß Michi
...das ist nicht euer Ernst, oder? :/
Zu _delay_ms gibt es doch insgesamt nur drei Zeilen Dokumentation. Die schnell selbst zu lesen geht bestimmt schneller, als hier zu posten.
Na gut, weil ich mir heute unnötige Diskussionen ersparen will: Hier steht zu _delay_ms deutlich diese Anmerkung:
Um damit also 1000ms warten zu können bräuchtest du einen Takt von irgendwas unter 262kHz.Zitat:
Zitat von Doku
dann ist doch die ganze routine zum aufrufen völliger schwachsinn.
dann müste ich 30000 eingeben wenn ich 1000ms warten soll bei 8mhz
und rund 10000 wenn ich 1000us warten soll... oder...
mfg pebisoft
hallo zusammen,
*zusammensack* des ist ja idiotisch!
Was bedeutet überhaupt zum Beispiel 10KHZ wieviel Impulse sind das pro Sekunde?
Gruß Michi
Nein, der Parameter bezeichnet schon die Millisekunden. Der Trick hinter _delay_ms ist, dass mit dem Parameter eine Berechnung durchgeführt wird, und zwar zur Compilezeit. Das heißt, der Compiler rechnet den übergebenen Wert von ms nach "Wartetakte" um. Für diese Umrechnung braucht der Compiler eben die Takt-Geschwindigkeit des Mikrocontrollers, da bei höherem Takt die Wartschleife schneller durchläuft als bei niedrigerem. Bei höherem Takt muss der Compiler den Parameter "1 ms" z.B. in mehr Wartetakte umrechnen als bei einem langsamen Takt.Zitat:
Zitat von pebisoft
1 Hz ("1 Hertz") bezeichnet eine Schwingung pro Sekunde. 10 kHz sind also 10.000 Takt-Impulse pro Sekunde.Zitat:
Zitat von michaelb
Du kannst den AVR aber soweit ich weiß minimal mit einem Uhrenquarz, also etwa 32kHz, takten. Aber selbst das kann schon zu Schwierigkeiten führen (zu langsam für manche ISP-Adapter o.ä.).
dann frage ich, warum funktioniert mein srf04 mit _delay... nicht. nach der aussage von lekro müsste es aber funktionieren....weil....weil ja die _delayroutine automatisch umrechnet.
funktioniert aber nicht.
mfg pebisoft
hi lekro,
danke für deine Antwort! Hat für mich einiges klargestellt!
gruß Michi
BTW: so ist das problem leicht zu lösen:
Code:uint_8 temp;
...
temp = 0;
while(temp < 152) //Delay von 5 Sekunden
{
_delay_ms(33); /*maximal mögliche Delay-Zeit: 262,14ms/F_CPU in MHz
Bei 8Mhz = 32,77ms*/
temp++;
}
Nur als anmerkung, ich denke bei längeren wartezeiten ist es sinnvoller einen Timer-Interrupt zu verwenden, da hier der µc auch während des "wartens" noch zur verfügung steht.