- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 7 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 62

Thema: Drei Led´s mit einem Taster unabhängig von einander schalten

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Anzeige

    E-Bike
    Schönheitsfehler: Solange die Taste gedrückt ist, wird übriges Programm aufgehalten.
    Das stimmt, aber auch dafür gäbe es eine Lösung (um den armen p@ty komplett zu verwirren):

    Man konfiguriert den 16-Bit-Timer so, dass er deutlich länger als 6 Sekunden für einen Durchlauf braucht. Z.B. mit einer Taktfrequenz von 1 MHz (die für diese Anwendung ja locker reichen müsste) und einem Prescaler von 1024, macht knapp 1000 Counts pro Sekunde. Der Timer läuft kontinuierlich durch.

    Der Taster wird an einem Change-konfigurierten Interrupt-Eingang angeschlossen. Bei fallender Flanke (Beginn Tastendruck) wird der aktuelle Timer-Wert in eine erste Word-Variable übernommen, bei steigender Flanke (Ende Tastendruck) in eine zweite Word-Variable. Zieht man den ersten Wert vom zweiten ab weiß man, wie lange der Taster gedrückt wurde (und zwar auch, wenn der Timer zwischendurch übergelaufen ist). Dann noch ein kleines Flag nach der steigenden Flanke gesetzt, das in der Hauptschleife das Ende des Tastendrucks signalisiert - fertig!


  2. #12
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    Jepp,

    habt ihr geschafft!
    Probiere jetzt erst einmal Daniel´s Idee dann arbeite ich mich zu euren durch!
    Vielen Dank!!

    Viele Grüße,
    P@

  3. #13
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    Hey zusammen,

    hab´ Daniel´s Code getestet aber leider kam vom µC keinerlei Reaktion?...
    Hier noch der Vollständigkeit halber mein Code mit allen Schaltmöglichkeiten:

    Led1 oder Led2 oder Led3,
    Led1 und Led2,
    Led1 und Led3,
    Led2 und Led3,
    Led1 und Led2 und Led3.

    Der tut´s wenn auch sicherlich nicht sehr effektiv...
    Code:
    $regfile = "M168def.dat"
    $crystal = 16000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    $baud = 9600
    
    
    'Pin- Portkonfiguration Outputs
    Config Portc.0 = Output
    Led1 Alias Portc.0
    Portc.0 = 0
    
    Config Portc.1 = Output
    Led2 Alias Portc.1
    Portc.1 = 0
    
    Config Portb.1 = Output
    Led3 Alias Portb.1
    Portb.1 = 0
    
    'Pin- Portkonfiguration Inputs
    Config Pind.4 = Input
    Taster Alias Pind.4
    Portd.4 = 1
    
    Dim A As Byte
    Dim X As Word
    
    Declare Sub Lichtszenen(byval B As Byte)
    
    
    'Hauptprogramm
    Do
    
    
       If Taster = 0 Then                                       'Wenn Taster = 0 dann...
       Incr X                                                   'X incrementieren...
       Print X                                                  'sonst X = 0
       Else
       X = 0
       End If
    
       If X >= 200 Then                                         'Wenn X >= 200ms dann...
       Gosub Lichtszenen                                        'Sprung in Unterprozedur Lichtszene
       End If
    
       If A = 1 And Taster = 0 Then                             'Wenn Variable A = 1 und Taster = 0 dann...
       Led1 = 1                                                 'Led1 an
       Led2 = 0
       Led3 = 0
       Elseif Taster = 1 And A = 1 Then                         'Led1 aus
       Led1 = 0
       Led2 = 0
       Led3 = 0
       End If
    
       If A = 2 And Taster = 0 Then                             'Wenn Variable A = 2 und Taster = 0 dann...
       Led1 = 0                                                 'Led2 an
       Led2 = 1
       Led3 = 0
       Elseif Taster = 1 And A = 2 Then                         'Led2 aus
       Led1 = 0
       Led2 = 0
       Led3 = 0
       End If
    
       If A = 3 And Taster = 0 Then                             'Wenn Variable A = 3 und Taster = 0 dann...
       Led1 = 0                                                 'Led3 an
       Led2 = 0
       Led3 = 1
       Elseif Taster = 1 And A = 3 Then                         'Led3 aus ...usw...
       Led1 = 0
       Led2 = 0
       Led3 = 0
       End If
    
       If A = 4 And Taster = 0 Then
       Led1 = 1
       Led2 = 0
       Led3 = 1
       Elseif Taster = 1 And A = 4 Then
       Led1 = 0
       Led2 = 0
       Led3 = 0
       End If
    
       If A = 5 And Taster = 0 Then
       Led1 = 0
       Led2 = 1
       Led3 = 1
       Elseif Taster = 1 And A = 5 Then
       Led1 = 0
       Led2 = 0
       Led3 = 0
       End If
    
       If A = 6 And Taster = 0 Then
       Led1 = 1
       Led2 = 1
       Led3 = 0
       Elseif Taster = 1 And A = 6 Then
       Led1 = 0
       Led2 = 0
       Led3 = 0
       End If
    
       If A = 7 And Taster = 0 Then
       Led1 = 1
       Led2 = 1
       Led3 = 1
       Elseif Taster = 1 And A = 7 Then
       Led1 = 0
       Led2 = 0
       Led3 = 0
       End If
    
    Loop
    
    End
    
    'Unterprozedur
    Sub Lichtszenen
    
    If Taster = 0 Then Incr X                                   'Wenn Tatser = 0 dann Incrementiere X
    If X >= 200 Then A = 1                                      'Wenn X >= 200ms dann Variable A = 1
    If A = 1 Then                                               'Wenn A = 1 dann...
    Led1 = 1
    Led2 = 0
    Led3 = 0
    End If
    
    If X >= 750 Then A = 2
    If A = 2 Then                                               'Wenn X >= 750ms dann Variable A = 2
    Led1 = 0                                                    'Wenn A = 2 dann...
    Led2 = 1
    Led3 = 0
    End If
    
    If X >= 1250 Then A = 3                                     'Wenn X >= 1250ms dann Variable A = 3
    If A = 3 Then                                               'Wenn A = 3 dann... usw...
    Led1 = 0
    Led2 = 0
    Led3 = 1
    End If
    
    If X >= 1750 Then A = 4
    If A = 4 Then
    Led1 = 1
    Led2 = 0
    Led3 = 1
    End If
    
    If X >= 2250 Then A = 5
    If A = 5 Then
    Led1 = 0
    Led2 = 1
    Led3 = 1
    End If
    
    If X >= 2750 Then A = 6
    If A = 6 Then
    Led1 = 1
    Led2 = 1
    Led3 = 0
    End If
    
    If X >= 3250 Then A = 7
    If A = 7 Then
    Led1 = 1
    Led2 = 1
    Led3 = 1
    End If
    
    If Taster = 1 Then                                          'Wenn Taster losgelassen wird dann...
    Led1 = 0
    Led2 = 0
    Led3 = 0
    
    End Sub
    End If
    Viele Grüße,
    p@

  4. #14
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    ja bei dem Code handelt es sich auch nur um deinen Code in gekürzter Form
    Wirklich Fehler hatte ich da noch nicht drin gesucht :P
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #15
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    Hey Daniel,

    ach so! Okay, dann war da wohl noch der Wurm drin! ^^
    Kannst ja bei Gelegenheit meinen letzten mal aus probieren.

    Was ich da noch nicht blicke ist die Geschichte mit dem "declareSub (byval b as Byte)" ...wobei doch "A" die Variable in der Unterprozedur ist...?

    Viele Grüße,
    P@

  6. #16
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Mit dem Declare Sub definierst du ein Unterprogramm. Den Wert den du mit dem Aufruf ins Unterprogramm übergibst, nennst du "b" und er ist vom Typ "Byte".
    Innerhalb des Unterprogramms heißt die Variable dann ebenfalls "b" und du kannst diese dann natürlich auch weiter verarbeiten.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  7. #17
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    ...okay, dann blicke ich aber immer noch nicht warum mein Programm läuft. Denn von der Variablen b steht nichts in der Unterprozedur...??

    Viele Grüße,
    p@

  8. #18
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    in dem Unterprogramm greifst du nur auf globale Variablen (A und X zu).
    Globale Variablen sind Variablen, die du am Anfang deines Hauptprogrammes deklariert hast. Diese Variablen stehen dann sowohl im Hauptprogramm als auch in jedem Unterprogramm zur Verfügung.
    Lokale Variablen sind Variablen die du innerhalb eines Unterprogramms deklariert hast. Diese stehen dem entsprechend nur im Unterprogramm zur Verfügung.
    Variablen die beim Funktionsaufruf deklariert werden (dein b) sind Variablen für ein Unterprogramm, also lokale Variablen.
    Du kannst z.B schreiben.
    Code:
    Variable1 = 1
    Declare Sub MeinUnterprogramm(byval Test as Byte)
    
    Do
    
    MeinUnterprogramm(Variable)
    
    Loop
    End
    
    Sub MeinUnterprogramm(byval Test as Byte)
    
    Local NeueVariable as Byte
    NeueVariable = Test
    Print NeueVariable
    
    End Sub
    schreiben. Damit deklarierst du eine Variable "Variable" = 1 und ein Unterprogramm. Das Unterprogramm rufst du anschließend auf und die Variable "Variable" wird übergeben (eine KOPIE von "Variable" wird übergeben). Der Wert der Variable "Variable" steht dann innerhalb der Funktion unter dem Namen "Test" zur Verfügung (halt der Name den du in der Unterprogrammdeklaration festgelegt hast).
    Innerhalb dieses Unterprogramms wird eine lokale Variable mit Namen "NeueVariable" deklariert und diese Variable bekommt den Inhalt der Variable "Test".
    Da "Test" aber nun den Wert von der Variable "Variable" besitzt, besitzt die Variable "NeueVariable" dementsprechend den Wert von "Variable", also 1.
    Dieser Wert wird mittels "Print" ausgegeben.
    Mit diesem Programm kannst du mal ein bisschen rumspielen um dich mit der Werteübergabe vertraut zu machen. Es (sollte) funktionieren (nicht getestet sondern einfach nur aus dem Kopf aufgeschrieben). Falls nicht -> PM dann schaue ich heute Mittag drüber.
    Auf dein Programm übertragen kann man also sagen, dass du den Teil "byval B As Byte" löschen kannst, da du die Variable "b" eh nicht nutzt.
    Funktioniert dein Programm den jetzt richtig? Und wenn nicht was funktioniert nicht.
    Wollte das heute u.U. mal auf meinem RN-Control nachstellen.
    Geändert von Kampi (14.03.2013 um 09:27 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  9. #19
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    Hi Daniel,

    okay, es wird transparenter!
    Ja, das Programm läuft! Wäre klasse wenn Du´s mal testen könntest und mir en´ feedback geben würdest!
    Danke schon mal!!

    Viele Grüße,
    p@

  10. #20
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ok
    Ich schau es mir mal an wenn ich Zeit habe
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Seite 2 von 7 ErsteErste 1234 ... LetzteLetzte

Ähnliche Themen

  1. Roboter mit einem Taster an und aus schalten!?
    Von Bammel im Forum Elektronik
    Antworten: 56
    Letzter Beitrag: 10.02.2010, 19:53
  2. Antworten: 11
    Letzter Beitrag: 31.01.2010, 17:25
  3. Einfach nur mit Taster eine LED ein und aus schalten ?
    Von Ferdinand im Forum Assembler-Programmierung
    Antworten: 2
    Letzter Beitrag: 13.06.2008, 10:08
  4. LED mit Taster ein/aus schalten
    Von sampe im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 16.09.2006, 11:55
  5. Problem mit LED´s an Output Matrix und einem Taster
    Von MrQu im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 16.10.2005, 19:13

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress