-
-
Erfahrener Benutzer
Roboter Genie
@Netzman Der Timer läuft mit Prescaler 64, also kommt die Timer ISR nur ca. alle 2000 Takte, also kein Problem.
@Rone Man kann auch mit F8 einen Interrupt auslösen, zumindest einen Timer Interrupt. Während er durch das Programm steppt, zählt der Timer hoch und bei Überlauf wird die ISR ausgeführt.
@Halodri F8 steppt durch die Bascom Befehle. Deren Abarbeitung kann natürlich ziemlich viele Takte Ausführungszeit benötigen. Locker über 1000. Ist aber in deinem Programm nichts drin, was mehr als 50 Takte dauert.
Wenn du das Ganze aber wirklich mit Prescale 1 ausführst, dann bekommst du in der Timer ISR tatsächlich ein Problem.
Timer1 = Timervorgabe
setzt den Timer auf Preload 65500. Jetzt kommen noch ein paar andere Befehle. Dann das Return. Der Rücksprung dauert 57 Takte. Während der ISR sind Interrupts global abgeschaltet, d.h. dass während dieser Takte nicht überprüft wird, ob der Timer überläuft. Wenn die Interrupts dann wieder eingeschaltet sind, ist der Timer schon übergelaufen und macht nun bei ganz niedrigen Werten (ca. 50) weiter.
Dies wird aber alles nicht passieren, wenn du mit Prescale 64 arbeitest.
-
Neuer Benutzer
Öfters hier
Hallo Leute!
Also irgendwie komme ich nicht weiter.
Ich habe jetzt die Werte für Timervorgabe auf 49911 gesetzt dann sollte pro Sekunde ein ISR aufgerufen werden.
Aber dieser Zähler erhöht sich nicht. Ich bin mir fast sicher das die ISR garnicht aufgerufen wird. Da in der ersten Zeile ja steht
Timer1= Timervorgabe
Der Timer1 aber bei Überlauf wieder bei 0 anfängt zu zählen statt wie angegeben bei 49911...
Wie verhält sich das Prog denn bei Euch wenn Ihr es in Bascom einfügt und den Simulator startet. Zählt die Variable Zähler dann hoch oder nicht? Wo macht der Timer1 nach dem Überlauf weiter? Bei 0 oder bei 49911?
Danke für Euro Hilfe
Grüße aus dem Süden
-
Erfahrener Benutzer
Fleißiges Mitglied
Hallo!
Funktioniert hier bei mir.
Musst nur Deinen Eingangstaster auf 1 setzen, sonst wird Dummy nicht
gesetzt. Wenn Dummy nicht gesetzt wird, wird auch der Zähler nicht erhöht.
@for_ro:
Wieder was dazugelernt, aber ich probier auch nicht soviel mit dem Sim.
Übrigens: Das Programm funktioniert auch im Simulator ohne die
"$sim"-Anweisung. Dachte bisher die muss sein.
MfG
Rone
-
Erfahrener Benutzer
Robotik Einstein
Nochwas zum lernen *g*:
Die $sim-Anweisung hat als einzigen Effekt, dass Warteschleifen rausgeworfen werden. So muss man z.B. bei einer LCD-Initialisierung nicht diese (im Simulator ewig dauernden) Delays abwarten muss. Da hier ja keine Hardware dranhängt, die sich beschweren könnte, können diese Delays in der Simulation also ausgeschlossen werden.
Nachtrag: Man kann auch ein mit $sim kompiliertes Programm auf den AVR werfen. Nur wird sich der halt u.U. seltsam verhalten.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen