mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik und verknüpfung zweier Taster


Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle!!!

habe mich hier gerade neu angemeldet weil ich mir das STK500 zugelegt 
habe und mich mit der Programmierung beschäftigen will!!!

ich habe schon einiges hinbekommen mit dem Bord nur eins verstehe ich 
absolut nicht!!!!

Ich will eine einfache und-verknüpfung herstellen zwischen zwei tastern
die mir wenn ich beide zugleich drücke eine Diode aum ausgang 
schalten!!!

Ich werd auch aus dem Tut.nicht schlau!!!!

Habe schon gegooglet und hier im Forum gelesen auch den querverweis auf 
die andere avr seite ich kapier es einfach nicht!!!!

ich hab auch kein bsp. wo das einfach erklärt ist!!!

Ich danke euch!!!!

Bitte helft mir!!!!!!!

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beide Taster in Reihe schalten. Beispiel:
Pull Up-Widerstand an einen Portpin, der als Eingang deklariert wurde. 
Portpin Taster 1 Pin 1 verbinden
Taster 1 Pin 2 an Taster 2 Pin 1
Taster 2 Pin 2 auf Gnd
Wenn kein oder ein Taster gedrückt Portpin high
wenn beide gedrückt Portpin low

MW

Autor: ES (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie eine Diode nach Masse schalten?
???

Bitte etwas genauer.

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort,

habe die Taster und dioden auf dem Bord!!!

ich bräuchte die Hilfe im bezug auf die programmierung,
wie ich es Programmieren muss wenn Taster1 auf Pin1 geht und Taster2 auf 
pin2!!!

Bitte helft mir!!!!!!!!!!!!

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber, aber...
Hier gehts doch um Software und die Taster auf dem STK500, oder?
@Uwe: welche Sprache, und was hast du schon gemacht?

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das experimentierBord STK500 da sind dioden und Taster fest 
verlötet!!!

Ich bräuchte die Lösung bitte anhand eines Programms, da ich auf dem 
bord nix verändern kann!!!

Autor: ES (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für Diode?
Meinst Du die LEDs?

Autor: AVR-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du auf die Fragen antworten würdest, würdest du mit Sicherheit eine 
Antwort bekommen...

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An crazy horse !!!!!!!!

Danke!!!!

Also ich habe bereits Dioden über Taster ein ,aus geschaltet, alle oder 
einzeln!!!!

alles in assambler mit avr studio 4!!!!!!!

und jetzt will ich halt weiter gehen und da hab ich ein Problem, das mit 
der logic verknüpfung!!!!

Hab das bord erst vor 2 h ausgepackt also absoluter Anfänger!!

Danke im voraus

Autor: AVR-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ES
verwirr ihn doch nicht... Hier gehts um die Software

@Uwe
Programmiersprache? Welche IDE? (AVR Studio? WinAVR?,...)

Autor: Icke Muster (Firma: my-solution) (hendi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jungs, der Mann will einfach nur wissen, über welchen Programmschnipsel 
er mit zwei Tastern am Eingang mit ner Software UND Verknüpfung ne LED 
ansteuern kann. Und Uwe welche ProgSprache verwendest du?

Autor: ES (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Taster 1 und Taster 2 gedrückt sind, dann soll LED leuchten?
Richtig?

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende assambler

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
richtig

Autor: ES (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und das in Assembler. Ja?

Autor: ES (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen AVR?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uwe Leibiger wrote:
> Ich verwende assambler

Das AVR Tutorial auf dieser Site kennst du?
http://www.mikrocontroller.net/articles/AVR-Tutorial

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Welchen AVR?
ändert das so viel am Code?
Er will doch nur wissen, wie er ein logisches Und in Assembler 
realisiert...

Autor: ES (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also dann eben nicht.

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich benutze den AT90S8515!!!
ud das in Assembler!!!!

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich kenne das Tut hat mir aber nicht geholfen!!!

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Renn doch bitte nicht gleich weg!!!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uwe Leibiger wrote:

> ich habe schon einiges hinbekommen mit dem Bord nur eins verstehe ich
> absolut nicht!!!!
>
> Ich will eine einfache und-verknüpfung herstellen zwischen zwei tastern
> die mir wenn ich beide zugleich drücke eine Diode aum ausgang
> schalten!!!

Dein Ausrufezeichen klemmt!

Was hast Du schon hinbekommen?

Machs erstmal mit einer Taste.
Wenn Du es nicht schaffst, zeig mal Deinen Code, wie Du es probiert 
hast.

Und wenn das geht, eben mit 2 Tasten.
Wenn Du es nicht schaffst, zeig mal Deinen Code, wie Du es probiert 
hast.

Einfach nur fertigen Code geben, hilft Dir ja kein bischen weiter.


Peter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich geb dir mal ein Flussdiagramm, das dich weiterbringen
sollte (ein fertiges Programm dazu wäre zu trivial, da lernst du
nichts dabei)


     +---------------------------+
     | Hardware initialisieren:  |
     |   die benötigten Portpins |
     |   auf Ein bzw. Ausgabe    |
     |   schalten                |
     |                           |
     +---------------------------+
                |
     +---------------------------+
     | An den Eingängen die Pull |
     | up Widerstände einschalten|
     | damit die Taster saubere  |
     | Pegel liefern             |
     +---------------------------+
                |
                |   <------------------------------+
                v                                  |
     +---------------------------+                 |
     |     LED ausschalten       |                 |
     +---------------------------+                 |
                |                                  |
+-------------> |                                  |
|               v                                  |
|    +---------------------------+                 |
|    |    Taster 1 abfragen      |                 |
|    +---------------------------+                 |
|               |                                  |
|        /-----------\                             |
|       /             \    Nein                    |
|      |   gedrückt ? |   -------------------------+
|       \            /                             ^
|        \----------/                              |
|             |                                    |
|             |  Ja                                |
|             v                                    |
|    +---------------------------+                 |
|    |    Taster 2 abfragen      |                 |
|    +---------------------------+                 |
|             |                                    |
|        /-----------\                             |
|       /             \    Nein                    |
|      |   gedrückt ? |   -------------------------+
|       \            /
|        \----------/
|             |
|             | Ja
|             v
|    +---------------------------+
|    |     LED einschalten       |
|    +---------------------------+
|             |
+-------------+

Das realisiert, dass die LED nur dann leuchtet, wenn beide
Taster gedrückt sind.
Details zu jeder Stufe, findest du im Tutorial.
Im Speziellen findest du alles was du für diese Aufgabe
brauchst auf der Seite
http://www.mikrocontroller.net/articles/AVR-Tutori...

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier der Code wie weit ich bin:


.include "m8515def.inc"

        ldi r16, 0xFF
         out DDRB, r16       ; Port B ist Ausgang

         ldi r16, 0x00
         out DDRD, r16       ; Port D ist Eingang


         ldi r16, 0xFF
         out PORTB, r16      ; alle LEDs aus
ende:

loop:    sbic PIND, 0        ; nächsten Befehl überspringen,
                             ; (Taste 0 gedrückt)
         rjmp loop           ; Sprung zu "loop:" -> Endlosschleife

         cbi PORTB, 3        ; Bit 3 im IO-Register PORTB auf 0 setzen 
-> 4. LED an

loop1:    sbic PIND, 1
          rjmp loop1

      sbi PORTB,3


          rjmp ende           ; Endlosschleife

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uwe Leibiger wrote:
> loop:    sbic PIND, 0        ; nächsten Befehl überspringen,
>                              ; (Taste 0 gedrückt)
>          rjmp loop           ; Sprung zu "loop:" -> Endlosschleife

Hier wirst du wohl eingreifen mussen, du willst ja nicht
warten bis eine Taste gedrückt wurde, sondern du willst
nur wissen ob die Taste gedrückt wurde.

Wenn die Taste nicht gedrückt ist, dann gehts (laut Flussdiagramm
von oben) damit weiter, dass die LED gelöscht werden.
Um den Code dort anspringen zu können, brauchst du dort ein
Label:
LED_aus:
         ldi r16, 0xFF
         out PORTB, r16      ; alle LEDs aus

Taste1:  sbic PIND, 0        ; nächsten Befehl überspringen,
                             ; wenn Taste gedrückt
         rjmp LED_aus        ; Taste war nicht gedrückt, LEDs ausschalten

        ; Soweit, so gut. AN diese Stelle kommt das Programm nur
        ; wenn Taste 1 gedrückt ist. Das reicht aber noch nicht
        ; AUch Taste 2 muss gedrückt sein. Ergo

Taste2:  sbic PIND, 1        ; Ist sie gedrückt?
         rjmp LED_aus        ; nein, ist sie nicht, -> LEDs ausschalten

       ; Um hier her zu kommen, musste sowohl Taster 1 als auch
       ; Taster 2 gedrückt sein. Daher wird die LED eingeschaltet

         ldi r16, 0x00
         out PORTB, r16

       ; das wars, die Abfragerei kann von vorne anfangen

         rjmp Taste1

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey habs hinbekommen :)


.include "m8515def.inc"

        ldi r16, 0xFF
         out DDRB, r16       ; Port B ist Ausgang

         ldi r16, 0x00
         out DDRD, r16       ; Port D ist Eingang


         ldi r16, 0xFF
         out PORTB, r16      ; alle LEDs aus
ende:

loop:        sbic PIND, 0        ; nächsten Befehl überspringen,
                                 ; (Taste 0 gedrückt)
             rjmp loop           ; Sprung zu "loop:" -> Endlosschleife
taste1:      sbic PIND, 1         ; Abfrage Taste1
             rjmp taste1         ;
             cbi PORTB, 3        ;  setzen -> 4. LED an


loop1:       sbic PIND, 2       ; ausschalten, wenn taste2 gedrückt
             rjmp loop1
             sbi PORTB,3


             rjmp ende           ; Endlosschleife

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke euch allen!!!!!

an Karl heinz Buchegger !!!

Also soll ich das Programm immer wieder von oben anfangen lassen???

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uwe Leibiger wrote:
> hey habs hinbekommen :)

Teste das ganze noch mal gründlich.
Dein Programm macht was anderes:

   Zuerst muss Taste1 gedrückt werden.
   Die kannst du dann auch wieder loslassen
   Danach muss Taste2 gedrückt werden.
   Dadurch schaltet sich die LED ein (und Taste2
      kann losgelassen werden)
   Um die LED wieder auszuschalten muss dann Taste 3
   gedrückt werden.

Das ist aber was anderes als: Eine LED soll dann und nur dann
leuchten, wenn beide Tasten zugleich gedrückt sind.

zb.
   Grundzustand

   Taste2 drücken                      -> nichts passiert, LED aus
   Taste2 gedrückt halten

   Taste1 drücken und gedrückt halten  -> LED leuchtet auf

   Taste2 loslassen                    -> LED verlischt

   Taste2 drücken                      -> LED leuchtet

   Taste 1 loslassen                   -> LED verlischt

   Taste 2 loslassen                   -> nichts passiert, LED aus

   Grundzustand


Das versteht man unter: Eine LED leuchtet nur dann, wenn beide
Tasten gedrückt sind. Egal in welcher Reihenfolge die Tasten
gedrückt oder losgelassen werden, in dem Moment in dem beide
gedrückt sind, soll die LED leuchten und ansonsten aus sein.

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt hast recht,
zu früh gefreut genau so wie du sagst solls sein!!!!!

Danke sehr!!!

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab jetzt bei beiden Abfragen die Schleife ende ausgewählt und den 
Prozess
einstiegspunkt für die Schleife vor "Alle Leds aus " gesetzt und jetzt 
gehts!!!!

ich bedanke mich nochmal bei euch allen und speziel bei dir Karl heinz 
Buchegger !!!

Autor: Daniel Bauer (und3rt4ker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!!!!!!!!!!!!!
Ich würde mich freuen, wenn du deine Tastatur reparierst!!!!?!?!?!?!
-->Das nervt "ultra"

Danke und MfG
und3rt4ker

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte mir das ganze nochmal 2h durch den Kopf gehen lassen und 
festgestellt das ich noch SPS versaut bin!!

War falsch an die theorie schon rangegangen!!!

Gedanken: Hatte gedacht ich muss den Eingang gleich mit nem Ausgang 
verknüpfen!!! (wie bei SPS-Programmierung)

Danke nochmal!

Autor: Uwe Leibiger (ufchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die ist nich kaputt habe nur 7 Finger an jeder Hand und da es ja nur ein 
zehn-finger-system gibt hab ich da schon probleme!!!

Is ja gut ich lass es sein!

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.