- Akku Tests und Balkonkraftwerk Speicher         
Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 62

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

  1. #31
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Anzeige

    Powerstation Test
    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

  2. #32
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    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! \/

  3. #33
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    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

  4. #34
    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
    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

  5. #35
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    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

  6. #36
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Ja bei Stromstoßrelais wird es nicht einfach. Da bräuchte man noch eine Rückmeldung der 3 Relais, falls mal die Steuerspannung fehlt oder jemand manuell auf dem Relais gedrückt hat. Da reicht dann ein Tiny13 nicht mehr.

    Warten wir erstmal ab, ob er sich dazu nochmal äußert.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  7. #37
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    Hey Leute!!
    Immer noch tolles Interesse!! Danke!

    Also das mit den Stromstoßschaltern (SSS) war eine Idee ist aber noch nicht in die Tat umgesetzt - und bei genauerem hinsehen ergeben sich dadurch eine Reihe von Problemen die gelöst oder umgangen werden müssen. Ich werde die Schaltung vorläufig mit Standart Relais betreiben was nur eine kleine Änderungen des Codes zur Folge hätte. Denke das bei Nutzen der SSS der Code ungleich umfangreicher wird. Die größe des Codes spielt aber nicht so die Rolle da, wie schon erwähnt, ein ATMega 168 in die Schaltung integriert wird. Sollte doch reichen? Nur wie ich die SSS abfgrage (elektronisch) bin ich mir noch nicht ganz sicher... Hätte halt gerne was mit dem Sleep-Modus des µC gemacht. Das er, wenn der Taster eine gewisse Zeit nicht betätigt wird, in diesen Modus wechselt und die Relais nicht die ganze Zeit bestromt werden....hoffe da hat noch jemand den richtigen Geistesblitz! Ich werde erstmal noch etliche I-Net-Seiten durchstöbern müssen und hoffen irgendwo was von Ratiopharm, um eine Lösung zum Betrieb der Schaltung mit SSS zu finden...

    Parallel dazu bin ich grade dabei ne´ Platine zu basteln die in ein Leergehäuse (75x50x17,5mm außen) zur Hutschienenmontage passt! Erstmal für die Variante mit standart Relais / ohne Eingänge zur SSS Abfrage. Mit dem ATMega168 garnicht mal so leicht wenn auch noch die geglätteten 5V darin erzeugt werden und die Ausgänge zu den Relais Platz finden sollen. Erst danach und wenn der Code für SSS optimiert werden konnte wird die Schaltung erweitert. Schicke wenn ich fertig bin, denke Mi oder Do mal en´ Pic von der Schlatung!

    Auch hier bin ich für jeden Tipp und Verbesserungsvorschläge dankbar!

    Werde mir beim großen C oder R mal 3 Stromstoßschalter bestellen und dann mal ne´ Schaltung aufbauen. Da lässt sich der Code auch gleich besser anpassen wenn man sieht was passiert. Zumindest bei mir ist das so!
    Viele Grüße,
    P@
    Geändert von p@ty (18.03.2013 um 11:24 Uhr)

  8. #38
    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
    Du kannst den Taster an einen INT-Pin anschließen. Dann wird der Controller bei einem Tastendruck geweckt. Und wenn z.B. 10 Sekunden nichts passiert lässt du ihn wieder schlafen und den Status der IOs löscht (auf 0 setzt).
    Ein Mega168 reicht dicke aus. Der hat Platz genug
    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. #39
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    Okay, hört sich gut an!
    Ne, Idee wie ich die SSS abfragen kann?

    Viele Grüße,
    Patrick

  10. #40
    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
    Du kannst den zu schaltenden Ausgang über einen Optokoppler auf einen Mikrocontrollerpin rückkoppeln. Sprich wenn das Relais geschaltet wird, schaltet es neben den LEDs auch einen Koppler und dieser legt dann einen µC Pin auf High.
    Dann weißt du das das Relais geschaltet wurde
    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 4 von 7 ErsteErste ... 23456 ... LetzteLetzte

Ä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
  •  

Labornetzteil AliExpress