Ports in echtzeit ansprechen.

Gast #500965
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.
Gast
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
Gast
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
Gast
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
Gast
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




Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.