www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tasten und aufrufe


Autor: Thomas Leist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Irgendwie kriege ich das nicht richtig hin - bzw. ich komme nicht drauf
wie man es besser machen kann.
Also:

ich habe drei taster, ein LCD und wenn die erste taste gedrückt wird,
dann soll "text" auf dem LCD stehen, wenn man eine andere Taste
drückt, dann soll ein anderer Text auf dem lcd stehen.

So habe ich es gemacht:

schleife:
loop1:
  sbic PINC, 1
  rjmp loop1
  ... Text1

loop2:
  sbic PINC, 2
  rjmp loop2
  ... Text2

loop3:
  sbic PINC, 3
  rjmp loop3
  ... Text3

rjmp schleife

das problem ist halt nur ich halt nur diese reihenfolge der tasten
drücken kann, also erts taste 1 dann die zweite taste und dann die
dritte taste. Aber wenn ich erst die erste taste drücke und dann die
dritte taste drücke dann passiert natürlich nichts, weil das programm
im "loop2" festhängt und wartet bis taste 2 gedrückt wird.

Wie kann man das noch realisieren

Ich komme irgendwie nicht drauf.

MFG

Autor: Michael Ehrhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich kenne zwar den Assemler nicht so genau, aber versuche 'mal
folgendes:

schleife:

  sbis PINC, 1
  ... Text1

  sbis PINC, 2
  ... Text2

  sbis PINC, 3
  ... Text3

rjmp schleife

Gruß Micha

Autor: Thomas Leist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mmmmhh,

nee ist nicht so das wahre was du da geschrieben hast. Das LCD zeigt
irgendwelche Kombinationen von den drei Texten an.

Aber trotzdem danke
:-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am besten ist es, wenn man die Tasten erstmal entprellt und dann das nur
Drücken erkennt (Wechsel von Losgelassen nach Gedrückt).

Das macht man im Timerinterrupt, damit nicht unnütz Rechenzeit
verwartet wird und kann dann im Hauptprogramm gemütlich die Auswertung
vornehmen.

Hier mal ein Beispielcode, der 8 LEDs mit 8 Tasten wechselt:

http://www.mikrocontroller.net/attachment.php/2055...


Peter

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast schon in dem Text von Michael die "sbis" in die für dein
programm benötigten "sbic" geändert, wenn du das vergessen haben
solltest, dann schreibt er der reihe nach "TEXT1" "TEXT2" "TEXT3"
auf das display und fängt wieder von vorne an.

Mfg Jochen.

Autor: Thomas Leist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau, mit "sbis" macht der das wie du sagst (Jochen).

@peter:
mit dem entprellen kann man ja ersteinmal vernachlässigen.
Das mit der Rechenzeit versteh ich - ist ja klar, er "wartet" in der
Schleife so lange bis man nach ner stunde mal die Taste drückt.
Und wie soll ich das anstellen mit dem Timerinterrupt?


MFG

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber mit "sbic" statt "sbis" geht es?

Jochen.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schleife:
  loop1:
    sbic PINC, 1
    rjmp loop2
    ... Text1
    rjmp schleife

  loop2:
    sbic PINC, 2
    rjmp loop3
    ... Text2
    rjmp schleife

  loop3:
    sbic PINC, 3
    rjmp schleife
    ... Text3

rjmp schleife

oder nicht?
Bin nicht so ASM-bewandert (und habe gerade keine Lust im Instruction
Set Summary nachzugucken), gehe aber davon aus, dass sbic ein Test auf
Null (skip if bit is clear?) ist und die folgende Anweisung
übersprungen wird, sobald die Bedingung erfüllt ist (low-aktive
Taster?!).
Es wir also getestet, ob die Taste gedrückt wird.
Ist das nicht der Fall, wird die folgende Anweisung (rjmp)
ausgeführt, und das Programm an der nächsten Abfrage weiter geführt.
Wird die Taste gedrückt, erscheint der Text auf dem Display, und es
wird mit der allgemeinen Abafrage fortgefahren.
Problem, das sich stellt:
Es wird solange der Text an das Display geschickt, wie die Taste
gedrückt wird.
Also noch eine Abfrage, die das Programm quasi anhält, solange die
Taste gedrückt wird.
Also:

schleife:
  loop1:
    sbic PINC, 1
    rjmp loop2
    ... Text1
    warte1:
      sbis PINC,1
      rjmp warte1

    rjmp schleife

  loop2:
    sbic PINC, 2
    rjmp loop3
    ... Text2
    warte2:
      sbis PINC,2
      rjmp warte1
    rjmp schleife

  loop3:
    sbic PINC, 3
    rjmp schleife
    ... Text3
    warte3:
      sbis PINC,3
      rjmp warte1

rjmp schleife

unter der Vorraussetzung, dass SBIS "skip if Bit is set" heisst...
Gruß Rahul

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
an dem code oben sollte man noch die sprunglabel anpassen (warte1-3 sind
falsch :) und eine pause vor der warteschleife zum taste loslassen. dann
ist der tester gleich ein wenig entprellt. ich würd für die pause eine
schleife bis 255 und eine so bis 10 oder so nehmen (kommt auf deinen
takt an, beispiel für 4mhz)

Autor: Thomas Leist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JA!!!

Das mit den anderen SChleifen ist mir nicht eingefallen.
Ganz herzlichen dank an euch allen.

Bis denne

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
copy'n'paste-Fehler... hatte keine Lust den ganzen Quatsch x-mal zu
tippen...

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter,

dein Code ist so brillant und so optimiert, dass ihn ein Anfänger nicht
so leicht verstehen kann.

Daher wundere ich mich nicht, dass du damit auf taube Ohren (blinde
Augen?) stößt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.