-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Port mit Tastendruck dauerhaft schalten

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.09.2004
    Ort
    Abensberg (Niederbayern)
    Alter
    33
    Beiträge
    224

    Port mit Tastendruck dauerhaft schalten

    Anzeige

    Hi Leute, brauch mal wieder eure Hilfe...

    Ich hab folgendes vor: An einem Mikrocontrollerpin hängt ein Taster. Wird dieser Taster kurz gedrückt, schaltet ein Port auf High, wenn ich den Taster wieder drücke, soll dieser Port wieder auf Low schalten. Kann mir da vielleicht jemand helfen, wie der Bascom-Code dafür vom Prinzip her aussieht? Bin ja nicht gerade die Programmierleuchte...

    Danke schon mal im vorraus,

    Martin

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    Das sollte vom Prinzip ungefähr so gehen (pseudocode):
    Code:
    dim angeschaltet as bit
    if taster = 1 and angeschaltet = 0 then
     port = 1
     angeschaltet = 1
    elseif taster = 1 and angeschaltet = 1 then
     port = 0
     angeschaltet = 0
    end if
    waitms 1000
    Viele Grüße, William
    -> http://william.thielicke.org/

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Oder schau dir mal
    Debounce PinX.Y, 0, toggle_port, sub
    und
    Toggle PortV.W
    an.
    PinX.Y steht dabei für den Pin, an den der Taster angeschlossen ist, 0 für Taster schaltet nach GND (1 für Taster schaltet nach VCC) und toggle_port ist ein Label, wo der Toggle Befehl steht. PortU.V ist entsprechend der Pin, den du umschalten möchtest.

    Gruß

    Rolf

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.09.2004
    Ort
    Abensberg (Niederbayern)
    Alter
    33
    Beiträge
    224
    Danke Leute, werd eure Beispiele mal ausprobieren!

    Gruß,

    Martin

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.05.2009
    Beiträge
    55
    hi

    ich bin auch nen ziemlicher anfänger, hab mir gerade erst nen µC gekauft^^

    ich baue gerade die selbe schaltung wie RAM, und habe das programm mal auf meinem controller geladen. nur bei mir blinkt die led jez. bei drücken des taster bleibt der takt stehen und wen ich wieder los lasse blinkt sie weiter

    hir is ma das programm das ich aufgespielt habe

    $regfile = "m8def.dat"
    $framesize = 8
    $swstack = 8
    $hwstack = 8
    $crystal = 8000000

    $baud = 9600

    Config Portb.0 = Output
    Led Alias Portb.0
    Config Pinb.1 = Input
    Taster Alias Pinb.1
    Portb.1 = 1

    Do
    Dim Angeschaltet As Bit
    If Taster = 1 And Angeschaltet = 0 Then
    Led = 1
    Angeschaltet = 1
    Elseif Taster = 1 And Angeschaltet = 1 Then
    Led = 0
    Angeschaltet = 0
    End If
    Waitms 100
    loop

    End

    ich nehme mal stark an das ich für "angeschaltet" irgentwas einsetzen soll

    nur keine ahnung was^^

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Mit portb.1 = 1 hast du den Pullup eingeschaltet. Wenn du mit dem Taster vom Pin nach Masse schaltest, sieht es so aus, das der Taster 1 liefert, wenn er nicht gedrückt ist und 0, wenn er gedrückt ist.
    Deine IF-Konstruktion schaltet also bei jedem Durchlauf von 1 nach 0 und zurück, da Taster ungedrückt = 1 ist.

    Gruß MeckPommER

    P.S.: ab besten auch gleich die Werte für framesize, stacksize, etc. von 8 raufsetzen auf 40 oder 60 ... sonst wirds dem Controler zu eng
    Mein Hexapod im Detail auf www.vreal.de

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    28.05.2009
    Beiträge
    55
    ok ich habe die 1 gegen eine 0 getauscht, jetzt funktioniert es.

    nur darf ich jez den taster nur ganz kurz drücken sonst registriert der gleich 2 einsen, wie kann ich das verhindern? denn das is echt unpraktisch.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.381
    du solltest auf flanken reagieren, d.h. du merkst dir den zustand des schalters, wie du dir den zustand der LED merkst und wenn der schalter vorher 0 und jetzt 1 ist reagierst du erst ....

    also einfach ein

    And letzteTaste = 0 hinzufügen und bei jedem durchlauf am ENDE letzteTaste mit dem wert des aktuellen taster belegen

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    Oder du machst es ganz einfach wie in meinem Beispiel oben:
    Code:
    waitms 1000
    am ende einfügen. Das geht natürlich nur wenn dein Programm nicht irgendetwas zeitkritisches machen muss.
    Viele Grüße, William
    -> http://william.thielicke.org/

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    28.05.2009
    Beiträge
    55
    ok ich hab jez mehrmals versucht...

    von wo bis wo ist ein durchlauf und in welcher zeile genau ist das ende. denn ich tu den befehl eindeutig an die falsche stelle ^^

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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