Guten Abend, ich habe da ein Problem mit meiner 8x8 LED-Matrix und hoffe Ihr könnt mir dabei helfen. Ich habe leider noch nicht so viel Erfahrung mit uC und arbeite daher mit BASIC. Problem: Eine 8x8 LED-Matrix soll verschiedene Muster (Unterprogramme) abarbeiten. Über ein Taster möchte ich zwichen den Unterprogrammen springen. Der Taster soll jedoch in echtzeit abgefragt werden. Das heißt, wenn sich das Programm gerade in einer Schleife befindet (Muster abarbeitet) möchte ich diese Prozedur mit einem Tastendruck unterbrechen und z.B die Variable counter um 1 zu adieren. Ich stelle mir das ungefähr so vor: start: counter = counter + 1 if counter = 1 then goto programm1 if counter = 2 then goto programm2 programm1: darstellung muster 1 if porta.0 = 1 then goto start goto programm1 programm2: darstellung muster 2 if porta.0 = 1 then goto start goto programm2 Ich denke in dieser Lösung sind einige Fehler bezüglich der Logik. Also bitte ich euch mal um Rat.
da wirst du um Interrupte nicht herumkommen. Entweder du lässt deine Lichtspielerei interruptgesteuert laufen und fragst im Hauptprogramm die Taste ab oder umgekehrt. Kannste dir aussuchen. bye Frank
Vitali wrote: > Über ein Taster möchte ich zwichen den Unterprogrammen springen. > Der Taster soll jedoch in echtzeit abgefragt werden. Das heißt, wenn > sich das Programm gerade in einer Schleife befindet (Muster abarbeitet) > möchte ich diese Prozedur mit einem Tastendruck unterbrechen und z.B die > Variable counter um 1 zu adieren. Nun, es gibt 2 Ansätze: 1. Du rufst die Tastenabfrage einfach in jeder Schleife auf und verläßt die Schleife dann. 2. Da alle Schleifen ja genau das gleiche machen, nimmst Du auch nur eine Schleife und der Tastendruck zählt dann nur die Nummer der Mustertabellen (2-dimensionales Array) hoch. Wichtig ist ne ordentlich Entprellung und Flankenerkennung. Dazu hat sich eigentlich nur der Timerinterrupt bestens bewährt. Peter
Wenn es sich um eine manuell betaetigte Taste handelt, sollte eine Auswertung alle 10ms genuegen. Da kann man die LEDs getrost beenden. Derselbe Timertick kann auch angewendet werden um die Taste zu entprellen rene
Ich danke Euch für die schnelle Antwort. Werde mich dann erstmal in das Thema Interrups reinlesen. Gruß Vitali
Hallo nochmal. Ich habe im Netz leider nichts brauchbares gefunden, ausser ein paar Grundlagen. Mein Problem ist aber auch dass ich nur leichtes Basic kann. Die meisten Beispiele sin in C oder ASM. Habe nur ein kleines Codebeispiel in Basic gefunden, kann damit aber nicht viel anfangen. Wäre echt super wenn mir das jemand erklähren könnte. Hier das Codebeispiel: Dim a As Byte a = 255 TRISA = 0 PORTA = a INTCON.INTE = 1 Enable End On Interrupt a = a - 1 PORTA = a INTCON.INTF = 0 Resume Ich müsste eigentlich nur wissen wie ich mit einem Taster ( z. B. wenn porta.0 = 1 dann springe zu einem Punkt.) Sorry bin halt Anfänger... Gruß Vitali
Vitali wrote: > Dim a As Byte > a = 255 > TRISA = 0 > PORTA = a > INTCON.INTE = 1 > Enable > End > On Interrupt > a = a - 1 > PORTA = a > INTCON.INTF = 0 > Resume ... > Sorry bin halt Anfänger... Auch als Anfänger hast Du das Recht, Deinen Kode kommentieren zu dürfen. Ausreden zählen nicht ! Was soll das da oben denn sein ? Peter
Vitali wrote: > Ich müsste eigentlich nur wissen wie ich mit einem Taster > ( z. B. wenn porta.0 = 1 dann springe zu einem Punkt.) So gehts eben genau nicht. Du würdest mit „wahnsinniger Geschwindigkeit“ umherspringen. Daher mußt Du den 0->1 Wechsel auswerten, nicht den 1-Zustand. Lies mal im Tutorial "Entprellen" Peter
Hallo , falls du in Bascom programmierst dann schau dir mal den Befehl Debounce an der beinhaltet all das was du brauchst : Entprellung, Sprung ins Unterprogramm .... Gruss Gerhard
Danke für die Hilfe, hat mir echt weitergeholfen. Experementiere zur Zeit mit dem XPort herum. Ist echt spannend... P.S. Gehört hier fielleicht nicht rein, aber weis jemand wie ich eine Weboberfläche erstelle, die mir den Status des Kontrolers anzeigt? Gruß Vitali
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.