- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 10

Thema: was versteht man unter "Taster im Polling erfassen"!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    20.08.2011
    Beiträge
    61

    was versteht man unter "Taster im Polling erfassen"!

    beschäftige mich in Assembler mit Taste entprellen, und lese immer wieder
    wieo.g. Taster im Polling erfassen.

    Grüße

    Rolf

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Hallo,
    der Portpin, an dem der Taster angeschlossen ist, wird zB durch einen Timerinterrupt in (festen) Abständen abgefragt. Die Abstände müssen so kurz sein, daß auch ein kurzer Tastendruck erkannt wird. Siehe auch http://de.wikipedia.org/wiki/Polling_%28Informatik%29

    Gruß
    Searcher
    Geändert von Searcher (21.01.2014 um 18:57 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    RN-Premium User Stammmitglied
    Registriert seit
    26.01.2005
    Ort
    Leipheim / Donau
    Beiträge
    53
    Hallo,

    kann man durchaus mit einem Timerinterrupt machen, ist wahrscheinlich die elegantere Lösung.
    Aber das richtige Polling Verfahren ist wenn der Pin z.B über den Befehl sbic abgefragt wird das würde so aussehen

    Start: sbic pind,0 pd0=0?
    jmp Start wenn pd0=0 wird der jmp befehl übersprungen.
    hier kann man den Taster noch mit einer Zeitschleife ausbremsen.

    Die ganz alte Methode wäre das aus maskieren, das würde so aussehen

    Start: in r16,pind das Eingansgangslatch an Portd einlesen
    andi r16,0x01 jetzt wird pd0 ausmaskiert d.h alle Bits bis auf pd0 werden durch die Undverküpfung gelöscht,
    breq start
    hier gehts dann weiter


    aber wie gesagt das mit dem Timerinterrupt ist die elegantere Lösung, weil das Programm nicht durch die Abfrage ausgebremst wird.
    Das Pollingverfahren kann man nicht nur bei Tasterabfragen verwenden sondern auch bei Abtastungen von Signalen.
    Der große Nachteil dieses Verfahrens ist, dass der Programmzähler in der Polling-schleife hängt bis die Bedingung erfüllt ist.

    mfg ihle

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    20.08.2011
    Beiträge
    61
    danke für Eure Infos!

    Hatte mir heute morgen so was ausgedacht:

    Haut aber nicht hin, die beiden LEDs an PB0 und PB1 leuchten schwach
    sofort nach den Einschalten.

    ; Projekt-Name: Projekt01 Datum: 22.01.2014

    ; Datei: Tiny2313-tasteprellen.asm

    ; AVR: Tiny2313-20PU

    .INCLUDE "tn2313def.inc" ; Deklaration für Tiny2313

    rjmp reset ; Reseteinsprung
    .ORG OVF0addr ; Interrupt-Vektor
    rjmp TIMER0_OVF ; Sprung zur ISR

    .def akku =r16
    .def temp17=r17 ; r17 zum Entprellen

    #define sw1 PIND,PD0

    reset:

    ;Timer0 initial.
    ldi akku,(1<<CS02)|(1<<CS00)
    out TCCR0B,akku ; Prescale = 1024
    ldi akku,(1<<TOIE0)
    out TIMSK,akku
    sei

    ;Vorbereitung PORTB und PIND
    ldi akku,(1<<PB0) | (1<<PB1)
    out DDRB,akku ; PB0 + PB1=Output

    ldi akku,0x00 ; alle Pins in r16=Low
    out DDRD,akku ; Datenricht. PD0-PD6=Input

    ldi akku,0x7F ; 0b0111.1111
    out PORTD,akku ; PD0 bis PD6=PULLUP

    clr akku ; beide LEDs zu Beginn AUS
    out PORTB,akku

    loop:


    sbis sw1 ; überspringe, wenn PD0=HIGH
    sbi PORTB,PB0
    rcall prellen

    sbis sw1 ; überspringe, wenn PD0=HIGH
    sbi PORTB,PB1
    rcall prellen

    sbis sw1 ; überspringe, wenn PD0=HIGH
    cbi PORTB,PB0
    rcall prellen

    sbis sw1 ; überspringe, wenn PD0=HIGH
    cbi PORTB,PB1
    rcall prellen
    rjmp loop

    prellen:
    ldi temp17,0x02 ; r17 = 02
    pause1:
    tst temp17
    brne pause1
    ret

    ;Interrupt-ISR

    TIMER0_OVF:
    push r2
    in r2,SREG
    dec temp17
    out SREG,r2
    pop r2
    reti
    .EXIT

  5. #5
    RN-Premium User Stammmitglied
    Registriert seit
    26.01.2005
    Ort
    Leipheim / Donau
    Beiträge
    53
    Hallo hegewald,

    deine LEDs betreibst du sie direkt am Pin? wenn ja musst du PB0,1 auf 1 setzten,
    weil bei 0 der Pin durchschaltet und deine LEDs leuchten und wenn sie schwach leuchten
    ist vielleicht dein Vorwiderstand zu groß? Bei 470 Ohm fließen ca. 7mA der Pin verträgt 20mA im Sink Betrieb.
    Du hast den Stackpointer nicht initialisiert, den braucht dein Programmzähler für die Rücksprungadressen.
    Wenn ein CALL Befehl ausgeführt wird, zeigt der Stackpointer auf eine Adresse im Ram in dieser wird die
    Adresse hinterlegt von der das Unterprogramm aufgerufen wird.
    Ist das Unterprogramm abgearbeitet wird der Stackpointer mit dem RET Befehl auf diese Adresse gelegt
    und der Counter springt an diese Adresse zurück.

    Stackpointer init

    ldi akku,high(ramend)
    out sph,akku
    ldi akku,low(ramend)
    out spl,akku

    mfg ihle

    P.S. ich wünsche dir viel Spass beim Assembler Programmieren, so lernst du die Controller richtig kennen.
    Geändert von ihle (22.01.2014 um 19:45 Uhr)

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    20.08.2011
    Beiträge
    61
    Hallo Ihle,
    danke für Deine Antwort!
    Die LEDs liegen über 330 R an GND. Jetzt messe ich mal was an PB0 bzw. PB1
    im LOW-Bereich noch ansteht......eigenartig da stehen noch 1,82 Volt an (Versorg. = 5,3V)
    dann müssen die LEDS noch glimmen.
    Ich habe doch zu Beginn das PORTB auf LOW gesetzt.

    clr akku ; beide LEDs zu Beginn AUS
    out PORTB,akku

    DDRB hab ich zu Beginn auch auf FF gesetzt.

    Entferne ich die beiden Pins von den LEDs, steigt die Spannung leicht auf 1,9 Volt an.
    Wie gesagt, irgend was stimmt hier auf meinen neu erstellten Programmierbord von Conrad nicht!
    Die Steckbrücken sind sehr lapperisch.
    Zu Deiner Anmerkung zum Stackpointer hatte ich irgendwo gelesen, daß diese beim Tiny13 bzw. 2313
    nicht nötig tut, ich hatte das nie gemacht. Hatte eine umfangreiche Software für einen Drehkran und
    Containerkran von Märklin erstellt...und die läuft und läuft.
    Aber ich werde es mal in diesen Code einbinden.

    Ich lass von mir hören.

    Grüße

    Rolf

Ähnliche Themen

  1. ATMega8 "verfused" Kann man den noch retten
    Von Bumbum im Forum AVR Hardwarethemen
    Antworten: 12
    Letzter Beitrag: 19.03.2013, 19:02
  2. RESET Benötigt? Was versteht man unter "ATMega 32"
    Von Merew im Forum AVR Hardwarethemen
    Antworten: 15
    Letzter Beitrag: 16.02.2008, 21:32
  3. Wie kommuniziert man "richtig" über RS232 mit C?
    Von Mad-Onion im Forum Software, Algorithmen und KI
    Antworten: 1
    Letzter Beitrag: 26.11.2006, 16:51
  4. Wie kann man "Dicke"Motoren Stuern/Wo ne "Dic
    Von Involut im Forum Motoren
    Antworten: 7
    Letzter Beitrag: 19.07.2004, 14:55
  5. Drehmoment im Art. "Motoren" unter "Grundlage
    Von Fabian im Forum Motoren
    Antworten: 9
    Letzter Beitrag: 17.02.2004, 10:11

Berechtigungen

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

Labornetzteil AliExpress