Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmieren ohne "Waitms"
Brantiko
09.02.2007, 22:21
Moin,
In Beispielprogrammen zu Lauflichtern, Schleifen etc. wird immer Waitms Verwendet.
Da ich nun ein Lauflicht als "Unterprogramm" schreibe möchte will ich waitms vermeiden da der uC in dieser Zeit ja nichts tut außer warten.
Hat jemand eine Ahnung unter diesen Bedieungen ein 4 Kanal Lauflicht programmieren kann?
Gruss
Alex
hallo alex,
nimm doch einen timer und zähle bei jedem überlauf eine variable um 1hoch bis sie einen bestimten wert erreicht hat. dann setzt du sie wieder auf 0. dann kannst du je nach lust und laune bei z.B 100 timerüberläufen einen ausgang schalten und wieder löschen. ich hoffe ich konnte es so halbwegs erklären.
mfg franz
Ich falle fast vom Glauben ab ... ein Bascom Programmierer der es ohne waitms versuchen will :D
Um soetwas zu realisieren benötigt man: einen Timer
eine oder mehrere Zustandsvariablen
eine oder mehrere Zählvariablen
Mit dem Timer legt man das minimale Zeitfenster fest, welches zur Verfügung stehen soll.
Im Hauptprogramm werden nur die Zustandsvariablen abgefragt und gegebenfalls die passenden Aktionen gestartet.
In der Interupt Routine des Timers zählt man nun seine Zählvariablen runter. Ist eine auf 0 wird eine entsprechende Info in die Zustandsvariablen geschrieben, und die Zählvariable neu gesetzt.
Vom Prinzip her ist es recht einfacher Code ... zumindest in Assembler.
Grüße, Hanni
Hi,
einen WAIT-Befehl verwende ich höchstens zum initialisieren irgendwelcher Hardware, sonst wird alles über Timer-ISRs gelöst!
Gruß
Günter
1hdsquad
10.02.2007, 14:18
Ja, wait ist ***, weil es z.B. bei einem Interrupt weiter wartet, bis die Zeit um ist... :(
MFG
robby-fant
10.02.2007, 17:29
nimm winavr-c, dort gibt es genug beispiele, wunderbar.
mit bascom ...lol....
mfg
nimm winavr-c
Hier gehts aber nicht um Bascom, Assembler oder C ....
Hier geht es darum, wie man es in Bascom realisieren könnte !!
Grüße,
Hanni
1hdsquad
10.02.2007, 18:51
Lol, der Sprachenkonflikt ;-)
Ja, wait ist ***, weil es z.B. bei einem Interrupt weiter wartet, bis die Zeit um ist..
:shock: Wie das ? wird da vor wait... ein cli gemacht und die Interrupts auf Eis gelegt ?
1hdsquad
10.02.2007, 18:58
Ich habe das mal ausprobiert, vor dem Interrupt hat er zuende gewartet. Der Tastendruck war dann eine halbe Sekunde verzögert...
Naja, wenn man näher darüber nachdenkt, wäre es auch irgendwie logisch, wenn er z.B. eine Sekunde warten soll, dann darf da auch kein Interrupt zwischenfunken, sonst könnte aus 1 Sekunde 1,0001 werden ...
Gruß Sebastian
1hdsquad
10.02.2007, 19:16
Tja, und dann wundert man sich wieder. Aber ist der Wait-Befehl nicht sowieso ungenau? Steht so in der Hilfe...
Brantiko
11.02.2007, 13:38
Ähm ja,
Danke schon mal.
Mit dem Timer habe ich auch so gemacht.
Ich lasse VAriablen bis zu nem gewissen Wert raufzählen.
Wenn er erreicht ist soll irgendetwas passieren.
Allerdings nimmt das viel Speicherplatz,oder?
gruss
Alex
braucht ziemlich genau so viel Speicherplatz. Ob nun Schleifen zählen
oder Sprungvektor schenkt sich nix denk ich. und n paar Bytes hin oder
her sollten kaum ins Gewicht fallen.
braucht ziemlich genau so viel Speicherplatz. Ob nun Schleifen zählen
oder Sprungvektor schenkt sich nix denk ich. und n paar Bytes hin oder
her sollten kaum ins Gewicht fallen.
Nur ist es die elegantere Lösung das ganze via Timer zu lösen.
ich würde auch ne schleife nehmen....allerdings isses da schwerer auf genau eine sekunde zu kommen...
Brantiko
11.02.2007, 17:14
Moin,
Es gibt ja diese bekannten For Schleifen mit nem Waitms 20 am ende.
Wie ersetze ich sowas mit nem Timer?
Gruss
Alex
Wofür brauch in nach einer Schleife eine 20ms Warteschleife ?
*dummfrag*
1hdsquad
12.02.2007, 17:40
Wenn du z.BN. dem PC etwas senden willst, dann reicht es doch, dass alle paar ms bis Sekunden zu tun. Oder wenn man auf ein Bauteil etc. warten muß.
MFG
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.