-
        

Ergebnis 1 bis 3 von 3

Thema: Wie außerhalb von Endlosschleife auf Tastendruck reagieren?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.01.2009
    Beiträge
    10

    Wie außerhalb von Endlosschleife auf Tastendruck reagieren?

    Anzeige

    Hallo zusammen,

    ich bin relativ neu im Bereich Microcontroller, habe aber die letzten Tage echt gute Erfolgserlebnisse gehabt und es fängt an richtig Spaß zu machen.

    Jetzt hänge ich aber fest:

    Ich habe ein Programm, welches in einer Endlosschleife einen Maussensor ausliest und demensprechend einen Motor steuert.
    Jetzt Suche ich eine Möglichkeit mithilfe der Taster am RN-Control außerhalb dieser Schleife den Motor in beide Richtung drehen zu lassen, solange der jeweilige Taster gedrückt ist.

    Ich habe etwas mit Interrupts herumgespielt, da ich dachte damit kann man das Problem lösen. Die Schleife soll während des Tastendrucks auf keinen Fall weiterlaufen.
    Auf der anderen Seite hab ich versucht in dem Bascom Testprogramm die Logik zu verstehen, wie hier die Tasten abgefragt werden.
    Beides für sich gesehen hat auch irgendwie funktioniert.

    Ich denke mit dem Interrupt sollte mein Problem lösbar sein, allerdings verstehe ich nicht, wie ich das mit der Tastenabfrage kombinieren soll.
    Mit einem externen Taster, der direkt zwischen GRD und einem Pin ist, würde ich klar kommen, aber ich möchte die vorhandenen Taster nutzen.


    Im Moment sieht mein Code in etwa so aus:


    Code:
    Variablendefinition, Ports etc
    
    Do
    
    'Hauptprogramm (Sensorenabfrage, Motorsteuerung)
    
    Loop
    
    Unterfunktionen zum Hauptprogramm


    Zum Interrupt wollte ich folgendes hinzufügen:



    Code:
    Enable Interrupts
    Enable INT0
    Config INT0 = Low Level      'damit sollte Interrupt solange gültig sein, wie Taster gedrückt?
    On INT0 ISR_Motor
    
    .
    .
    .
    
    
    
    ISR_Motor:
    
    If Taster1 = 1 Then
    Portb.0 = 0      'Drehrichtung
    Portb.1 = 1
    
    Motor=1
    
    Else
    
    Return
    
    End if

    Motor und Taster sind vorher via Alias einem Pin zugeordnet.
    Für die andere Drehrichtung alles nochmal in einem anderen Interrupt .


    Meine 2 Fragen:

    Funktioniert obiges Schema prinzipiell mit einem externen Taster?

    Wie benutze ich einen der Taster des RN-Control?
    (Was bedeuten Case, Adc, Getadc etc im Beispielprogramm und woher kommen diese Werte (420 to 450)? )


    Vielen Dank für Eure Hilfe

    Gruß
    Manuel

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    24.09.2006
    Beiträge
    84
    Hallo Manuel,
    das RN-Control bedient sich einem Trick, dass mehrere Taster an einem einzigen Port angeschlossen werden. Je nachdem, welchen Taster man drückt, wird dann am ADC (Analog-Digital-Converter) eine andere Spannung anliegen und diese wird gemessen. Mit Getadc kannst du diese Spannung abfragen, die Werte beruhen auf unterschiedlichen Widerständen je Taster.
    Im Beispielprogramm hast du ja ein gutes Beispiel, wie die Taster abgefragt werden können.

    Zu dem Problem an sich kann ich nur sagen, dass sich dafür eine Verzweigung doch hervorragend eignet. Dazu brauchst du keine Interrupts. Also ungefähr so: (von Syntaxfehlern bitte absehen, bin kein Bascom-Nutzer ..)
    Code:
    If Taster1 = 1 Then 
    Portb.0 = 0      'Drehrichtung
    Portb.1 = 1
    
    Motor=1
    
    Else
    ' Abfrage Maussensor und dann Motor drehen lassen
    End if
    Viele Grüße
    Tobi

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    06.01.2009
    Beiträge
    10
    Hallo Tobi,

    danke für die Erklärung. Ich hab mich die ganze Zeit gefragt, woher man bei einem Port und 5 Tastern wissen soll, welcher denn jetzt gedrückt wurde und was diese Werte bedeuten. Jetzt ists klar

    Das Polling hab ich jetzt so umgesetzt, in meinem Testprogramm funktionierts einwandfrei. Muss jetzt nurnoch mit meinem alten Code verschmolzen werden.

    Edit: Läuft, thx nochmal

    Gruß
    Manuel

Berechtigungen

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