PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AnfängerProblem mit Timer



Looser
11.10.2005, 21:04
Hallo Leute ich habe ein Problem welches ich nicht allein lösen konnte. Bei einem bestimmten Ereignis soll ein Timer ausgelöst werden der nach ca 2 sec zu einer Gosubroutine geht. Habe alles versucht und meinem Namen (LOOSER) alle Ehre gemacht. kann mir vielleicht jemand einen Tip geben ?

If A = 1 Then
(jetzt soll der Timer0 loslegen und wenn inerhalb dieser 2 sec ein weiteres Zeichen bei INPUTBIN A kommt soll es mit GOSUB weitergehen)

Ich habs nicht geschafft und bitte hier um HILFE !!!

Hellmut
11.10.2005, 21:18
Hallo "Looser"

Hast du berücksichtigt mit welcher Frequenz welcher Timer getaktet wird und welchen Prescaler du eingestellt hast, damit der Timer überhaupt 2 Sekunden laufen kann ohne seinen Wertevorrat erschöpft zu haben?

Looser
11.10.2005, 21:37
Danke für deine Antwort aber das es genau 2 sec läuft ist nicht so wichtig. Aber der eigentliche Programaufbau mit Timer bereitet mir Schwierigkeiten. Gibt es vielleicht ein einfaches Beispiel für mein Problem ? [-(

Marco78
11.10.2005, 22:36
Gibt es vielleicht ein einfaches Beispiel für mein Problem ?
Mit der Suche im Forum wirst du viele Beispiele und Anwendungsfälle finden.
https://www.roboternetz.de/phpBB2/search.php

Es gibt auch ein Programm (RNAVR) was ir einen fertigen Code für Bascom liefert. Leider finde ich auf anhieb keinen Link dazu. Aber irgendwo in Downloadbereich muss es das auch geben.
https://www.roboternetz.de/phpBB2/dload.php


If A = 1 Then
(jetzt soll der Timer0 loslegen und wenn inerhalb dieser 2 sec ein weiteres Zeichen bei INPUTBIN A kommt soll es mit GOSUB weitergehen)

If A = 1 Then Enable Timer1

Ich hab's so noch nicht probiert, könnte aber klappen.

Du solltest dir aber überlegen, ob für dein Anwendungsfall der Timer benötigt wird.
Du kannst ja auch so Warteschleifen einfügen.
Wait 2 'Pause von 2 Sekunden
Waitms 2000 'Pause von 2000 Milisekunden.

Also:
If A = 1 Then Waitms 2000

Und schon wird eine Pause eingelegt.
Oder:

If A = 1 Then
Waitms 2000
Gosub Unterprogramm
End If

Das wäre ja das was du haben wolltest.

PS: Waitms erzeugt einen kleineren Code als Wait.

Wann du einen Timer verwendest, kann das Programm in der Zeit noch weiter laufen. Wait(ms) wartet an der Stelle solange, bis die Zeit vorbei ist. Kommt halt immer drauf an, was grade günstiger ist und was gefordert wird.

Und Hellmut's Rat solltest du berücksichtigen. Man kann die Zeiten nicht unendlich wählen. Die maximale Zeit ist abhänig von der Frequenz und vom gewählten Timer (0 oder 1 oder ...).
Ein Trick wäre, wenn du 10 Sekunden haben willst, aber nur eine maximal möglich ist, in der Routine für den Timer eine Variable hochzählen zu lassen und wenn sie bei 10 ist, wieder auf 0 setzen und den Code für 10 Sekunden, der dann kommen soll, ausführen lassen.

Es ist auch nicht immer günstig, in der Timerroutine in ein anderes SUB zu springen. Der Code könte auch in der Routine (ISR = Interrupt Service Routine, das SUB, das im Falle des Interrupts aufgerufen wird) stehen.