- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 62

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

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Zitat Zitat von p@ty Beitrag anzeigen
    Dann kann ich anfangen mir ne´ Platine zu Layouten und zu fräsen das die in ein Leergehäuse zur Hutschienenmontage passt! Da kommt freude auf!!
    Ich drück Dir die Daumen. Hört sich an, als wenn das Ding in den Sicherungskasten kommt. Hoffentlich fallen da keine Störungen ein, die den µC außer Tritt bringen. Da hab ich keine Erfahrung und würd ich ein halbes Jahr nach Inbetriebnahme noch argwöhnisch als Betarelease betrachten

    Da sollte aber auch ein viel kleinerer µC ausreichen. Hab nu nicht für den Tiny13 optimiert - der sollte aber auch gehen aber mindestens höchstens der Tiny25.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #2
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    Danke!
    Jepp, Beta ist wohl richtig! Werde den µC natürlich so weit wie möglich vom Trafo und den Relais entfernt platzieren. So "weit" wie eben möglich und hoffen das der mir nachts nicht die Spots durch schaltet das meine frau denkt wir hätten Poltergeister im Haus!!
    Tolle Idee eigentlich für Helloween ein Programm zu schreiben!!

    Denke auch das ein kleinerer µC ausreichen sollte aber unsere Code´s sind etwas über 1kB groß...
    Hab´ hier auch noch 2 AtMega168 rum liegen....mal schauen ob alles in´s Leergehäuse passt. Wenn nicht dann Code-abspecken...
    Ich geb´ bescheid wenn´s fertig ist. Dann aber in einem Projekt-Teil des Forums...

    Viele Grüße,
    p@

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Also das Programm hat nur ein Unterprogramaufruf und nichts Verschachteltes, keine Interrupts. Mit Anpassung der HW-Anschlüsse für LEDs und Taster und folgendem Header hat das letzte Programm für den Tiny13 kompiliert:

    Code:
    $regfile = "attiny13.dat"
    $hwstack = 16
    $swstack = 10
    $framesize = 24
    $crystal = 1200000
    Bei der Anwendung ist - meine Ansicht - kein Quarz erforderlich. Tiny im Lieferzustand, glaub ich , läuft mit 1,2MHz.

    Zur groben Berechnung der Headerangaben:
    http://halvar.at/elektronik/kleiner_...swstack_frame/

    EDIT: Grad nochmal ein wenig mit dem Simulator probiert und in der Hilfe für framesize gelesen. Mit framesize = 24 sollte man hier auf der sicheren Seite sein.


    Also das geht auf jeden Fall mit dem Tiny13
    Gruß
    Searcher
    Geändert von Searcher (15.03.2013 um 12:41 Uhr) Grund: framesize im Header sicherer gemacht
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Die Schleife "while Taster = 0" setzt einen prellfreien Kontakt voraus. Auch scheint das Licht nicht anzubleiben, wenn der Taster losgelassen wird. Oder habe ich da nen Denkfehler?

    Mein erster Versuch würde jetzt so aussehen:
    Code:
    $regfile = "attiny13.dat"
    $hwstack = 16
    $swstack = 16
    $framesize = 24
    $crystal = 1200000
    
    
    Taster Alias Pinb.4
    'Led1 : Portb.0
    'Led2 : Portb.1
    'Led3 : Portb.2
    
    
    Dim Taste As Bit
    Dim Tastealt As Bit
    Dim Zeit As Word
    Dim Ledspeicher As Byte                 'Speichert Zustand der LEDs in einzelnen Bits
    
    Ddrb = &B00000111
    Portb = &B00110000
    
    Ledspeicher = &B00110111                                    'damit das erste mal kurz Tasten gleich alle Ausgänge setzt, falls nocht nicht alles bestückt ist.
    
    Do
       Gosub Tastercheck
       Gosub Szeit
       Gosub Licht
    
    Loop
    End
    
    
    Tastercheck:
       Debounce Taster , 0 , Taste_zu
    
       Debounce Taster , 1 , Taste_offen
    
    Taste_zu:
       Taste = 1
    Return
    Taste_offen:
       Taste = 0
    Return
    
    Szeit:
       If Taste = 0 Then
          If Tastealt = 1 Then
             If Zeit < 500 Then                                 'wurde nur kurz gedrückt, dann ein-/ausschalten
                Gosub Schalten
             End If
             Reset Tastealt
          End If
       End If
       If Taste = 1 Then
          If Tastealt = 0 Then
             Set Tastealt
             Zeit = 0
          End If
          Waitms 1
          Incr Zeit
       End If
    
    Return
    
    Licht:
       If Taste = 1 Then
    
          Select Case Zeit
    
             Case 500 : Portb = &B00110001                      'bit 4 immer an, wegen Pullup am Tastereingang
    
             Case 1000 : Portb = &B00110010                     'bit 5 immer an, wegen Pullup an offenem Eingang
    
             Case 1500 : Portb = &B00110100
    
             Case 2000 : Portb = &B00110011
    
             Case 2500 : Portb = &B00110101
    
             Case 3000 : Portb = &B00110110
    
             Case 3500 : Portb = &B00110111
    
             Case Is >= 4000 : Zeit = 499
    
          End Select
    
       End If
    
    Return
    
    Schalten:
       If Portb > &B00110000 Then                               'Wert größer Pullups
         Ledspeicher = Portb
         Portb = &B00110000
       Else
         Portb = Ledspeicher
       End If
    
    Return
    Zweite Idee mit zusätzlichem Eingang für ~65 Sekunden Licht:
    Code:
    $regfile = "attiny13.dat"
    $hwstack = 16
    $swstack = 16
    $framesize = 24
    $crystal = 1200000
    
    
    Taster Alias Pinb.4
    Tasterzeit Alias Pinb.5
    
    'Led1 : Portb.0
    'Led2 : Portb.1
    'Led3 : Portb.2
    
    
    Dim Taste As Bit
    Dim Tastealt As Bit
    Dim Zeit As Word
    Dim Ledspeicher As Byte                                     'Speichert Zustand der LEDs in einzelnen Bits
    Dim Wtimer As Word
    
    Ddrb = &B00000111
    Portb = &B00111000
    
    Ledspeicher = &B00111111                                    'damit das erste mal kurz Tasten gleich alle Ausgänge setzt, falls nocht nicht alles bestückt ist.
    
    Do
       Gosub Tastercheck
       Gosub Szeit
       Gosub Licht
    
    Loop
    End
    
    
    Tastercheck:
       Debounce Taster , 0 , Taste_zu
    
       Debounce Tasterzeit , 0 , Taste_zeit
    
       Reset Taste
    
    Return
    
    Taste_zu:
       Set Taste
       Wtimer = 0
    Return
    
    Taste_zeit:
       Wtimer = 65535
    Return
    
    Szeit:
       If Taste = 0 Then
          If Tastealt = 1 Then
             If Zeit < 500 Then                                 'wurde nur kurz gedrückt, dann ein-/ausschalten
                Gosub Schalten
             End If
             Reset Tastealt
          End If
       End If
    
       If Taste = 1 Then
          If Tastealt = 0 Then
             Set Tastealt
             Zeit = 0
          End If
          Waitms 1
          Incr Zeit
       End If
    
       If Wtimer >= 1 Then
          Decr Wtimer
          If Wtimer = 0 Then
             If Portb > &B00110000 Then
                Gosub Schalten
             End If
          End If
       End If
    Return
    
    Licht:
       If Taste = 1 Then
    
          Select Case Zeit
    
             Case 500 : Portb = &B00111001                      'bit 4 immer an, wegen Pullup am Tastereingang
    
             Case 1000 : Portb = &B00111010                     'bit 5 immer an, wegen Pullup an offenem Eingang
    
             Case 1500 : Portb = &B00111100
    
             Case 2000 : Portb = &B00111011
    
             Case 2500 : Portb = &B00111101
    
             Case 3000 : Portb = &B00111110
    
             Case 3500 : Portb = &B00111111
    
             Case Is >= 4000 : Zeit = 499
    
          End Select
    
       End If
    
    Return
    
    Schalten:
       If Portb > &B00110000 Then                               'Wert größer Pullups
         Ledspeicher = Portb
         Portb = &B00110000
       Else
         Portb = Ledspeicher
       End If
    
    Return
    Beide ungetestet, da keine passende Hardware hier. Werden die ganzen Zeiten halbiert und waitms auf 2 erhöht, verdoppelt sich die Laufzeit des Lichttimers. wtimer darf natürlich nicht größer werden.
    Geändert von peterfido (15.03.2013 um 22:56 Uhr) Grund: Codeänderung
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hallo peterfido,
    Auch scheint das Licht nicht anzubleiben, wenn der Taster losgelassen wird. Oder habe ich da nen Denkfehler?
    Ich habe angenommen (wie p@ty erwähnt hat), daß an den LED Pins des µCs nicht direkt LEDs sitzen, sondern Stromstoßrelais, die die LEDs schalten. Die Relais bekommen während der Bedienung mit dem Taster immer nur einen Stromstoß und sind sonst stromlos. So wie ich dann den p@ty verstanden habe, soll es folgende Funktion geben:

    1. System einschalten, keine LED leuchtet

    2. Als erstes kurzer Tastendruck (<200ms) -> nichts passiert.

    3. Taste wird lange gedrückt gehalten (>=200ms) -> Lichtszenario wird während gedrückter Taste ausgewählt

    • Die drei LED Pins (Stromstoßrelais) werden bei gedrückter Taste in gewissen Zeitabständen in unterschiedlichen Kombinationen unter Strom gesetzt mit LEDx = 1 bzw. ausgeschaltet mit LEDx = 0
    • Wird die Taste losgelassen, wird von allen Stromstoßrelais der Strom abgeschaltet (LEDx = 0). Das hab ich aus p@tys Programm entnommen und wurde vielleicht auch irgendwo erklärt.
    • Die zuletzt unter Strom gesetzten Stromstoßrelais sollen bei folgenden kurzen Tastendrücken einen Stromstoß bekommen.


    4. Taste wird kurz (<200ms), nachdem mindestens einmal nach Systemstart das Auswahlszenario durchgespielt und beendet wurde, gedrückt. Kurze Tastendrücke hintereinander schalten die ausgewählten LEDs aus und ein und aus und....

    • Während der gedrückten Taste sollen die LED Pins, die beim Auswahlszenario als letztes high waren, wieder high werden.
    • Wird die Taste vor Ablauf von 200ms gelöst, beginnt also nicht das Auswahlszenario, sondern die LED Pins werden direkt auf low geschaltet.

    Stromstoßrelais, die an den LED Pins hängen, bekommen also einen Stromstoß, was die LEDs dann wohl toggeln läßt.

    5. Nun kann wieder Punkt 3. oder 4. eintreten.

    Wie das genau bei P@ty realisiert ist weis ich auch nicht, scheint aber zu laufen.


    Die Schleife "while Taster = 0" setzt einen prellfreien Kontakt voraus.
    Eigentlich ja. Ist meiner Ansicht in meinem Programm aber egal. Die Entprellung wird mit dem DEBOUNCE gemacht und erst danach erreicht das Programm die Schleife, wenn der Taster stabil geschlossen ist.
    Falls der Taster beim Lösen prellen sollte, könnte die while Schleife nochmal unabsichtlich durchlaufen werden, was aber bei den 10ms Schritten nicht wahrgenommen werden dürfte.
    Wenn der Taster gelöst wird, dadurch die Schleife verlassen wird, aber noch nachprellt, ist das Programm wieder in der Hauptschleife und das DEBOUNCE fängt das Prellen ab.

    Puh, das war jetzt nicht perfekte Arbeit aber hoffentlich verständlich.
    Gruß
    Searcher
    Geändert von Searcher (16.03.2013 um 08:10 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Wenn es Probleme mit dem Prellen geben sollte, kann ja hinter der Tasterabfrage nochmal ein waitms 10 gesetzt werden und danach wird der Taster nochmal abgefragt.
    Spätestens dann sollte der Taster nicht mehr prellen
    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. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Mir ist auch nicht wirklich klar, wie die Auswahl des Beleuchtungsszenarios funktioniert. Wenn zu Testzwecken LEDs direkt an die µC Ports angeschlossen sind, funktioniert es in meinem Programm so, wie beschrieben. Wenn Stromstoßrelais angeschlossen sind, müßte man die, in einem Szenario über Relais eingeschalteten LEDs, über einen Stromstoß wieder ausschalten, bevor das nächste Szenario eingeschaltet wird. Müßte p@ty austesten und bisher ist er wohl zufrieden!? Hab bisher versucht nur stur nach Anforderung auszuführen.
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Ähnliche Themen

  1. Roboter mit einem Taster an und aus schalten!?
    Von Bammel im Forum Elektronik
    Antworten: 56
    Letzter Beitrag: 10.02.2010, 18:53
  2. Antworten: 11
    Letzter Beitrag: 31.01.2010, 16: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, 09:08
  4. LED mit Taster ein/aus schalten
    Von sampe im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 16.09.2006, 10: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, 18:13

Berechtigungen

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

LiFePO4 Speicher Test