- SF800 Solar Speicher Tutorial         
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
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    Hey Searcher!

    WOW!
    Vielen Dank für Deine Mühe!!!

    Genau so hatte ich mir das vorgestellet!!!
    Funktioniert großartig!!!
    Macht eigentlich genau das was auch mein ellenlanger Code macht nur sehr viel kompakter!
    Echt klasse das Du das mal so hin gezaubert hast!!

    Werde mir den Code morgen abend genauer anschauen und hoffe das wenn Fragen auftauchen (und das werden sie bestimmt )
    ich Dich noch mal ansprechen darf?

    Viele Dank nochmal und schönen Abend,
    p@



    Viele Grüße,
    P@

  2. #2
    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
    Vielen Dank für Deine Mühe!!!
    Keine Ursache. Hat mir auch geholfen.

    ich Dich noch mal ansprechen darf?
    Klar!

    Und gleich noch ein Update. Sollte das Gleiche machen - Ich übe auch noch.

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

  3. #3
    Benutzer Stammmitglied Avatar von p@ty
    Registriert seit
    05.06.2011
    Ort
    Bottrop
    Beiträge
    51
    Zitat Zitat von Searcher Beitrag anzeigen
    Klar!
    Super! Danke!
    Der 2. Code funzt übrigens ebenso klasse!
    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!!

    Viele Grüße,
    p@

  4. #4
    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
    Klasse das es nun funktioniert
    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. #5
    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

  6. #6
    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@

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

  8. #8
    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! \/

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

12V Akku bauen