- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Taster als Code

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35

    Taster als Code

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich habe eine schwierige Frage an euch, ich bin derzeit am basteln und stehe nun vor einem Rätsel, ich habe einen Eingang, welcher ein Null-Signal liefert, dazu habe ich noch 2 Taster, nun ist meine Frage, wie kann ich es programmieren, dass immer wenn der Eingang ein Null Signal liefert ich mit den 2 Tastern einen Code eingeben muss z.B. erst den linken Taster drücke dann nach 2 Sekunden den rechten drücken und dann nochmal nach 3 Sekunden den Rechten und dann am Ausgang ein Signal einer 1 erhalte, hat einer eine Ahnung wie ich soetwas Programmiere?

    Ich verwende ein AVR-Board mit Bascom!

    MfG

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Was meinst du mit Null-Signal? GND? Hi-Z?
    Also wenn es GND ist, dann konfigurierst du den Pin als Input, setzt den internen Pullup und fragst dann mit IF PINx.y (Input geht nur mit PIN, nicht PORT!) ab.
    Das mit der verzögerten Tastenabfrage machst du entweder über WAITMS und ne Abfrage oder halt per Timer.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35
    danke für die antwort eine frage wäre da noch, wie könnte das den aussehen mit dem waitms oder dem timer, dass er abwartet ob da noch ein high-signal reinkommt?

    zu dem null-signal, es is ein null-signal im auto, also zb. von der zündung.


    MfG

    Yoyoba

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    drück dich mal klarer aus ... ein "signal" hat eine form, eine spannung oder eventuell einen strom

    mal ab davon, du nimmst einen timer, stellst ihn auf ctc modus, gibst ihm einen wert der der frequenzentsprechend eine auflösung von sagen wir mal 1ms oder 0.1 oder 0.01ms (also dass der timer nach z.B. 1ms überläuft)

    du schaltest den compare interrupt des timer ein, dieser wird bei jedem überlauf einmal aufgerufen, darin inkrementierst du eine zahl (ein int oder ein long wäre gut, damit due genügen überäufe zählen kannst)

    du startest den timer aus der hauptschleife mit der bedinung, dass dein "signal" anliegt, und der erste taster gedrückt wurde,

    dann legst du dir ein paar if-abragen in den interrupt rein, so von wegen

    wenn variable zwischen 800 und 1200(1sek) und taster 2 gedrückt (entprellen kannst du indem du die 2 oder 3 vorhergehenden tasterwerte zwischenspeicherst und wartest das alle 3 werte gedrückt anzeigen) dann setze counten fort, wenn counter > 1200 und kein tastendruck erkannt wurde, brich ab und warte dass das "signal" einmal aus und wieder angeht (neustart) .... du kannst dir beliebig viele if-s mit steigenden counterwerten anlegen und verschiedenen tastern

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35
    also es ist so, dass low signal hat 0V, wird aber auch auf 1 geschaltet, nur dann soll über den code etwas geschaltet werden, bei einem low signal soll er wieder einfach über den taster ohne code einschaltbar sein, ich habe nur ein problem damit, ich kriege es nicht hin, dass ich einen code eingebe mit einer bestimmten zeit, deswegen frage ich ob ihr mir ein beispiel geben könntet.


    mfg

    yoyoba

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    ich glaub nich das damit jemand was anfangen kann
    ...ansonstten steht die antwort bei ceos´Beitrag...

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35
    Also um durch den TÜV zu kommen darf man in seinem Auto keine LED’s leuchten haben während der fahrt. Also muss ich mir etwas programmieren damit der tüv während das auto eingeschaltet ist die LEDs nicht zum laufen bekommt; also einen code, der über taster bedient wird, ist das auto allerdings ausgeschaltet brauche ich keinen code da darf man die LEDs so eingeschaltet haben. Nun möchte ich also meinem microcontroller über die zündung sagen „das auto ist ein/aus“ dies bekomme ich über ein low oder high signal der zündung. Nun ist meine frage wie ich es realisiere, dass der code eingegeben wird. Er soll z.b. so funktionieren, dass ich 1 mal den linken taster betätige und dann 2 mal den rechten und das innerhalb von 5 sekunden, sollte ich länger brauchen um den code einzugeben ist es ungültig und der ausgang bleibt ein low signal. Meine frage war nun wie ich das mit dem code realisieren kann.

    Mit freundlichen Grüßen

    yoyoba

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    53
    Beiträge
    2.803
    ...einen beleuchteten Tannenbaum auf dem Armaturenbrett kann man auch per Schalter ausschalten !

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Das sollte eine Lösung sein:

    Code:
    $crystal = 1000000
    
    Disable Interrupts
    
    $regfile = "m16def.dat"    'Atmega 16
    
    $hwstack = 40
    $swstack = 40
    $framesize = 60
    
    
    Config Portd.4 = Output                                     'Ausgang
    Config Pind.5 = Input                                       'Taste 1
    Config Pind.6 = Input                                       'Taste 2
    Config Pind.7 = Input                                       'Zündung
    
    
    Ausgang Alias Portd.4
    Taste1 Alias Pind.5
    Taste2 Alias Pind.6
    Zundung Alias Pind.7
    
    
    
    Portd.5 = 1                                                 'Pullups, sodass Taster nur auf GND ziehen brauchen
    Portd.6 = 1
    Portd.7 = 0                                                 'Zündung per Pulldown auf GND ziehen und mittel Optokoppler auf High, wenn Zündung an
    
    
    Dim Code As Byte
    Dim Tickcount As Long                                       'Lauzeit in 10 mSek Schritten
    
    Config Timer0 = Timer , Prescale = 64                       '1 mhz
    
    On Timer0 Timer_irq
    
    Const Timervorgabe = 100                                    '1 mhz
    
    Enable Timer0
    Enable Interrupts
    
    
    Do
       If Zundung = 0 Then
          Code = 0
          Tickcount = 0
       Else
    
          If Tickcount < 500 Then                               '5 Sekunden
             If Code = 0 And Taste1 = 0 And Taste2 = 1 Then Code = 1       'Taste 1 gedrückt
             If Code = 0 And Taste1 = 1 And Taste2 = 0 Then Tickcount = 500       'falscher Code
             If Code = 1 And Taste1 = 1 And Taste2 = 1 Then Code = 2       'keine Taste gedrückt
             If Code = 2 And Taste1 = 1 And Taste2 = 0 Then Code = 3       'Taste 2 gedrückt
             If Code = 2 And Taste1 = 0 And Taste2 = 1 Then Tickcount = 500       'falscher Code
             If Code = 3 And Taste1 = 1 And Taste2 = 1 Then Code = 4       'keine Taste gedrückt
             If Code = 4 And Taste1 = 1 And Taste2 = 0 Then Code = 5       'Taste 2 gedrückt
             If Code = 4 And Taste1 = 0 And Taste2 = 1 Then Tickcount = 500       'falscher Code
             If Code = 5 And Taste1 = 1 And Taste2 = 1 Then Code = 6       'keine Taste gedrückt
          End If
       End If
       If Zundung = 0 Or Code = 6 Then
          Set Ausgang
       Else
          Reset Ausgang
       End If
    Loop
    
    End
    
    
    
    
    Timer_irq:
      Timer0 = Timervorgabe
      Tickcount = Tickcount + 1
      If Tickcount = 2147483647 Then Tickcount = 0              'sollte es eigentlich nie zu kommen
    
    Return
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    19.04.2009
    Beiträge
    35
    Vielen Vielen Dank

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test