Hallo Gemeinde, ich habe folgendes Problem. Und zwar will ich delay(ms)Funktion haben weiss aber nicht wie ich es Anstellen soll. Kann mir jemand einen kompletten Code in C schicken/reinstellen. Ich habe schon Tausende Foren gelesen aber bin daraus nicht schlauer geworden! Habe STK500 und AtMega16. Vielen Dank im Vorraus
Maloj schrieb: > Hallo Gemeinde, > > ich habe folgendes Problem. Und zwar will ich delay(ms)Funktion haben > weiss aber nicht wie ich es Anstellen soll. Kann mir jemand einen > kompletten Code in C schicken/reinstellen. Ich habe schon Tausende Foren > gelesen aber bin daraus nicht schlauer geworden! Und was an den Timern hast du nicht verstanden? * Du konfigurierst dir einen Timer, so dass er dir einen Interrupt in bekannten Zeitabständen auslöst. * In der Interruptroutine zählst du eine eigene Variable als Zähler hoch (oder runter je nachdem) * Da du weißt, in welchen Zeitabständen die ISR aufgerufen wird, kannst du auch ausrechnen, wie weit diese Zählvariable zählen muss, damit eine bestimmte Zeit vergangen ist. (Im Grunde: Wenn du alle 3 Sekunden zählst, und ich danebenstehe und abwarte bis 2 Minuten 12 Sekunden vergangen sind, dann warte ich bis du bis 24 gezählt hast. Denn dazu brauchst du 24 * 3 = 72 Sekunden und das sind wiederrum die gewünschten 2 Minuten 12 Sekunden) * In der Hauptschleife wird + ausgerechnet wie weit die Zählvariable zählen soll bzw. von welcher Zahl aus die Zählvariable auf 0 herunterzählen soll + abgewartet, bis die Zählvariable den gewünschten Wert erreicht hat Bei welchem der Schritte hast du Schwierigkeiten?
Hi DANKE für die ausführliche Beschreibung. Ich bin ein Neunling in C. Ich verstehe schon alle Schritte die du aufzählst, kann aber die noch nicht in C-Umsetzen. Diese Funktion brauche ich für einen LCD-Display! Vielen Dank im Vorraus
Maloj schrieb:
> ich habe folgendes Problem. Und zwar will ich delay(ms)Funktion haben
Ich würd da einfach mal im Includeverzeichnis in der "delay.h" stöbern,
klingt schonmal nicht schlecht, oder?
Und siehe da, "void _delay_ms(double __ms)" scheints zu wuppen.
Timer nimmt man eher, wenn nicht an der Stelle gewartet werden soll oder
keine Fehlerakkumulation auftreten darf (RTC).
Peter
Ja und wenn ich kein "delay.h" habe. Ich benutze IAR Systems und irgendwie kann ich da diesen "delay.h" nicht finden!
Dann sieht man in die Doku ob es etwas Gleichwertiges gibt. Wenn auch das fehlschlägt, dann sieht man in der Doku nach, wie man einen NOP (=No operation) machen kann, die vom Compiler nicht wegoptimiert wird. Den benutzt man dann in einer Schleife um längere Wartezeiten zu erreichen. Da man aber wahrscheinlich nicht der erste ist der das Problem hat, kann man natürlich auch den Weg gehen, erst mal google zu befragen. Zb mit dem Suchstring "IAR AVR delay" und die ersten 10 oder 20 Einträge durchforsten, ob sich was findet.
Bei IAR heißt die Funktion __delay_cycles(unsigned long int); Michael
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.