-         

Ergebnis 1 bis 4 von 4

Thema: Taster als Schalter?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.01.2007
    Beiträge
    17

    Taster als Schalter?

    Anzeige

    Ähm ja wie fragt man das nun......?

    Also PORTD wird für AUS und Eingänge genutzt.

    Jetzt möchte ich gerne an PIND,PB0 die Positive Flanke abfragen und wenn sie dann kommt einen Merker setzen. Wenn dann wieder eine Positve Flanke kommt den Merker wieder zurück setzten.

    In C habe ich was gefunden, nur in Assembler nicht.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    Du kannnst Dir mal Exclusiv Or (EOR) ansehen,
    damit kann man ein Bit sozusagen immer wechseln, mit dem gleichen Befehl.

    Dann wäre bei jedem Aufruf, mal das Bit gesetzt, nach der nächsten flanke wieder gelöscht, usw.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.01.2007
    Beiträge
    17

    wieso geht das jetzt nicht ?

    So hat etwas gedauert, aber nun komme ich mit EOR halbwegs klar und habe mir da auch ein kleines Prog. zusammen gebastelt.

    Im Simulator läuft es im Pollinboard ist es gestern auch mal gelaufen, nun habe ich die HEX heute noch mal übertragen aber es läuft nicht mehr.

    Die Testtool.hex läuft, also liegt es am Prog. nur ist mir mal wieder nicht klar wieso. Da es ja im Simulator läuft.

    Code:
    .include "m16def.inc"
    .def arbeitsregister = r16
    .def Tastmerker = r17
    .equ Timerwert = 65536 - 100
    
    
    start:
        ldi arbeitsregister, 0b11100000
        out DDRd, arbeitsregister
        cbi POrtd,pb6
    	cbi PORTD,PB7
    
    taster:            ;Auswahl ob Taster betätigt
        sbic PIND,PB2 
        rjmp reset
        sbis PIND,PB2
        rjmp taster
    
    reset:
        ldi r16,0b00000001
        eor r17, r16
        cpi r17,0x01
        brne lichtaus
        breq lichtan
    	
    Schleife:
        ldi arbeitsregister,  (1<<tov1)
        out TIFR, arbeitsregister
    	
    Timer:
        ldi arbeitsregister, HIGH(Timerwert)
        out TCNT1H, arbeitsregister
        ldi arbeitsregister, LOW(Timerwert)
        out TCNT1L, arbeitsregister
        ldi arbeitsregister, (1<<CS12)
        out TCCR1B, arbeitsregister
    loop:
        in arbeitsregister, TIFR
        sbrs arbeitsregister, TOV1 
        rjmp loop
        rjmp taster
    
    lichtan:
        sbi portd,pb6
        sbic pind,pb2
        rjmp lichtan
        rjmp schleife
    
    lichtaus:
        cbi portd,pb6
        sbic pind,pb2
        rjmp lichtaus
        rjmp schleife
    Wenn der Taster betätigt wird, wird über EOR die LED ein geschaltet.
    Ist der Taster wieder 0 springt das Prog in eine Timer Schleife und von dort wieder in die Tasterabfrage.

    Wenn der Taster nun betätigt wird, folgt nun der gleiche Ablauf nur das über EOR die LED diesmal Aus statt Ein geschaltet wird.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    24.01.2007
    Beiträge
    17

    Ich begreif dasssss nicht ?

    Ich meine das Problem schon etwas eingegrenzt zu haben.

    reset:
    ldi r16,0x01
    eor r17, r16
    cpi r17,0x01
    brne lichtaus
    breq lichtan

    Es sollte doch jedesmal beim Aufruf dieses Abschnitts der Wert in r17 gedreht werden und dann mit der Konstanten 0x01 verglichen werden.

    Ist der Vergleich i.o. dann gehe zu lichtaus
    Ist der Vergleich nicht i.o. dann gehe zu lichtaus

    Im Simulator funktioniert das auch, im Prozessor nicht.
    Wenn ich lichtaus lichtan tausche, dann geht zwar die LED an.
    Aber nicht mehr aus.

    ??????

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •