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


von Uwe L. (ufchen)


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!!!!!!!

von Michael Wilhelm (Gast)


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

von ES (Gast)


Lesenswert?

Wie eine Diode nach Masse schalten?
???

Bitte etwas genauer.

von Uwe L. (ufchen)


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!!!!!!!!!!!!

von crazy horse (Gast)


Lesenswert?

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

von Uwe L. (ufchen)


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!!!

von ES (Gast)


Lesenswert?

Was für Diode?
Meinst Du die LEDs?

von AVR-User (Gast)


Lesenswert?

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

von Uwe L. (ufchen)


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

von AVR-User (Gast)


Lesenswert?

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

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

von Icke M. (Firma: my-solution) (hendi)


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?

von ES (Gast)


Lesenswert?

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

von Uwe L. (ufchen)


Lesenswert?

Ich verwende assambler

von Uwe L. (ufchen)


Lesenswert?

richtig

von ES (Gast)


Lesenswert?

Und das in Assembler. Ja?

von ES (Gast)


Lesenswert?

Welchen AVR?

von Karl H. (kbuchegg)


Lesenswert?

Uwe Leibiger wrote:
> Ich verwende assambler

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

von Gast (Gast)


Lesenswert?

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

von ES (Gast)


Lesenswert?

Also dann eben nicht.

von Uwe L. (ufchen)


Lesenswert?

ich benutze den AT90S8515!!!
ud das in Assembler!!!!

von Uwe L. (ufchen)


Lesenswert?

ich kenne das Tut hat mir aber nicht geholfen!!!

von Uwe L. (ufchen)


Lesenswert?

Renn doch bitte nicht gleich weg!!!

von Peter D. (peda)


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

von Karl H. (kbuchegg)


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-Tutorial:_IO-Grundlagen

von Uwe L. (ufchen)


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

von Karl H. (kbuchegg)


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:
1
LED_aus:
2
         ldi r16, 0xFF
3
         out PORTB, r16      ; alle LEDs aus
4
5
Taste1:  sbic PIND, 0        ; nächsten Befehl überspringen,
6
                             ; wenn Taste gedrückt
7
         rjmp LED_aus        ; Taste war nicht gedrückt, LEDs ausschalten
8
9
        ; Soweit, so gut. AN diese Stelle kommt das Programm nur
10
        ; wenn Taste 1 gedrückt ist. Das reicht aber noch nicht
11
        ; AUch Taste 2 muss gedrückt sein. Ergo
12
13
Taste2:  sbic PIND, 1        ; Ist sie gedrückt?
14
         rjmp LED_aus        ; nein, ist sie nicht, -> LEDs ausschalten
15
16
       ; Um hier her zu kommen, musste sowohl Taster 1 als auch
17
       ; Taster 2 gedrückt sein. Daher wird die LED eingeschaltet
18
19
         ldi r16, 0x00
20
         out PORTB, r16
21
22
       ; das wars, die Abfragerei kann von vorne anfangen
23
24
         rjmp Taste1

von Uwe L. (ufchen)


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

von Uwe L. (ufchen)


Lesenswert?

Danke euch allen!!!!!

an Karl heinz Buchegger !!!

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

von Karl H. (kbuchegg)


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.

von Uwe L. (ufchen)


Lesenswert?

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

Danke sehr!!!

von Uwe L. (ufchen)


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 !!!

von Daniel B. (und3rt4ker)


Lesenswert?

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

Danke und MfG
und3rt4ker

von Uwe L. (ufchen)


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!

von Uwe L. (ufchen)


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!

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
Noch kein Account? Hier anmelden.