Hallo Leute, ich habe vor laaaanger Zeit in der Schule Microcontroller programmiert. Habe seit dem leider einiges vergessen :..( Ich muß mich jetzt beruflich wieder damit beschäftigen, und dabei sind folgende Fragen aufgetaucht: 1. Wofür braucht man den Watchdog-Timer, bzw. wofür kann man ihn sinnvoll einsetzen? 2. Wie errechne ich die Zeit, die der Prozessor zum Abarbeiten eines Befehls (z.B. des NOP) benötigt? Konkret geht es um ein Unterprogramm, das eine definierbare Zeit "wartet". Danke im voraus für eure Antworten! Gruß, Jürgen
Hi, 1. Der Watchdog ist eigentlich eine Sicherheitsvorkehrung. Sollte das Programm aus irgendeinem Grund mal hängenbleiben, sei es nun durch nen Programmierfehler oder durch externe Einwirkung, dann bewirkt dieser Watchdog nen Reset. (Man stellt den Watchdog auf eine bestimmte Zeit ein. Nun muß man den WD im Programm immer wieder rücksetzten. Damit "merkt" der WD, dass das Programm noch so läuft, wie es soll. Wird der WD nicht zurückgesetzt, dann läuft der WD über (Ist eigentlich ein Timer.) und löst nen Reset aus.) 2. Kommt darauf an, was für ein Prozzi du benutzt. Bei den 8051-kopatiblen mußt du den Takt durch 12 teilen, um einen Maschinenzyklus zu bekommen. (Die brauchen 12 Taktzyklen, um einen Maschinenzyklus zu durchlaufen.) Während diesem Maschinenzyklus kann ein Befehl abgearbeitet werden. (Allerdings nur, wenn der Befehl nicht 2 oder 3 MZ braucht. Das steht in der Befehlsbeschreibung drin.) Bei Dallas-Controllern ist das anders. Die wurden beschleunigt. Der 80320 braucht, glaube ich, nur 4 Taktzyklen für einen Maschinenzyklus, der neue DS80C420 480 (weiß nicht mehr genau) ist sogar umschaltbar. Entweder 12 TZ für einen MZ oder pro TZ ein MZ. Der AVR hat, glaube ich, auch nur einen MZ pro TZ. Wie lange ein Befehl aber letztendlich dauert, bis er ausgeführt ist, mußt du im Befehlssatz des jeweiligen Controllers nachlesen. Auch, wie lange ein MZ dauert. Bis denn, ERDI - Soft.
Hallo ERDI - Soft. , danke für deine rasche und hilfreiche Antwort! Eine Frage hätte ich noch: Ist es eigentlich sinnvoll, "Warteschleifen" über gezieltes Einfügen von NOP´s zu programmieren (um zB keinen Timer zu vergeuden)? Ist das dann auch noch hinreichend genau, wenn damit Wartezeiten im Sekundenbereich realisiert werden? Gruß, Jürgen
also zum warten von kurzen zeigen (max. einige ms) kann man warteschleifen noch rechtfertigen. wenns aber in den sekundenbereich geht, ist ein timer eindeutig die bessere lösung. denn beim warten per schleife kann der µc nix anderes machen, per timer kannst du ihn zumindest in den sleep modus schicken (wenn nix anderes ansteht) und batterie sparen. außerdem brauchste zum warten von mehreren sekunden mindestens 4 register (oder zig zeilen code) - da investier ich besser nen timer :-)
Genau meine Meinung. Kommt immer darauf an, was du machen willst. Wenn du keine Rechenzeit verschwenden willst, dann solltest du auf jeden Fall den Timer benutzten. Dann kann nämlich das Programm weiterlaufen. Ist das aber unwichtig und du brauchst alle Timer für was anderes und hast genug Register bzw. RAM frei, dann kannst du auch die Schleifenmethode wählen. Allerdings ist die Genauigkeit mit einem Timer wesentlich höher als mit ner Schleife. So, jetzt such dir das aus, was am sinnvollsten für dich bzw. das Programm ist. Viel Spass. Bis denn, ERDI - Soft.
da muss ich widersprechen: die timer methode ist idR ungenauer, denn der timer arbeitet mit einem prescaler, d.h. die auflösung des timers ist dann nicht 1:1 (d.h. taktgleich), sondern evtl. sogar nur 1:1024! will heißen: per warte schleife kannst du die wartezeit taktgenau (also bei 4mhz mit einer auflösung von 1/4µs) steuern, beim timer zwar auch (beim prescaler von 1), aber es geht beim timer auch ungenauer.
Tja, ich denke mal, wenn man den Prescaler kennt, ist das ja wohl kein Thema. Aber der Vorteil vom Timer ist ja wohl, dass der Prozessor frei für andere Dinge ist.
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.