Handy-Lampe

  • Ein Projekt aus der Abteilung: Unnütz aber gut...


    Meine Elter haben letzte Woche ein Handy auf der Straße gefunden, anscheinend hatte das jemand aufs Dach vom Auto gelegt und da vergessen.
    Display war ex, also hab ichs auseinandergerissen.


    Kleine Platine gebaut, mit ATiny2313 und Mosfet... Alte Soul 1,5W rein und fertig... Die Platine klebt direkt auf der Originalplatine (die dank großer Kupferanteile super die Hitze ableitet), die Star-LED in der Aussparung auch.


    Über die Steuerwippe (den Nippel) kann man die Helligkeit einstellen, unten ist der Hauptschalter per Epoxy eingepappt..
    Betrieben wird das Konstrukt über die Handy-Batterie. (3,6V / 650mA)


    Die LED läuft maximal auf ungefähr 180mA, daher bleibt der Stromverbauch in Grenzen.
    Die Silicon-Linse der Seoul musste ich leider mit dem Cutter ordentlich stutzen.. das Handy war zu flach... Strahlt jetzt ordentlich diffus.


    [Blockierte Grafik: http://img520.imageshack.us/img520/6479/handylampejh3.th.jpg]

  • Leuchtet halt... nicht wirklich aufregend.
    Diese Seoul ist technisch überholt, die LED selber schon etwas angekokelt vom Basteln und von voller Leistung knn bei ~180mA keine Rede sein.
    Sollte aber beim Grillen im Park sehr gute Dienste leisten ;)

  • hallo,


    muss den beitrag noch mal aktvieren, da ich gerade bei dem thema bei bin und einiges probiert habe.


    ich habe dann mit hilfe des weiten netztes einige anregungen gefunden und im endeffekt 2 varianten mal geschrieben.
    es geht dabei erstmal um eine led, die mittels 2 taster in 3 helligkeitsstufen zu versetzen ist.


    in der ersten variante ist es ein "stufenweises" schalten der helligkeitszustände.
    in der zweiten variante ist es ein "hochdimmen" bzw "runterdimmen" in die nächst höhere oder nächst tiefere helligkeitsstufe.


    Stefan_Z: wie hast Du die abfrage mit den tastern gelöst? auch über "IF" oder Interrupt? man kann ja diverse sachen zu dem thema lesen, an manchen stellen wurde ich aber auch nicht wirklich schlau. naja egal - so funktioniert es erstmal.
    ich dachte immer das es einen internen pullup widerstand gibt, den man software-seitig einschaltet und dann den taster "einfach" nur noch gegen masse legen muss, aber da musste ich mich auch eines besseren belehren lassen - naja "learning by doing" #-o


    von hier ist es ja nicht mehr weit zum rgb controller mit je zwei tastern pro farbe für hoch- und runterdimmen :-% 8-[ :led:


    [code:1]$regfile = "ATtiny2313.dat"


    $crystal = 8000000 '8 MHz
    $hwstack = 64
    $swstack = 64
    $framesize = 64


    Declare Sub Initialize_pwm()
    Declare Sub Check_input()


    '#############PWM Ausgang


    Config Pinb.3 = Output ' PWM Output


    '#############Eingänge
    Config Pind.2 = Input 'Pin D2 als Eingang konfigurieren
    Config Pind.3 = Input 'Pin D3 als Eingang konfigurieren


    Portd.2 = 1 'Pullup
    Portd.3 = 1 'Pullup


    Taster1 Alias Pind.2 'Taster1 - heller
    Taster2 Alias Pind.3 'Taster2 - dunkler


    Out_pwm Alias Pwm1a


    Dim Pwm_1_rate As Byte
    Dim Pwm_2_rate As Byte
    Dim Pwm_3_rate As Byte


    Pwm_1_rate = 255 '255 = 100 %
    Pwm_2_rate = 150 '150 = 60 %
    Pwm_3_rate = 026 '026 = 20 %


    Initialize_pwm


    Out_pwm = 0 'LED dunkel


    Portd.5 = 0
    Portd.6 = 0
    Do
    Check_input
    Waitms 25
    Loop
    End


    '***************** Initialize_pwm *********************************************
    '#############Timer1 für PWM
    Sub Initialize_pwm
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
    Enable Timer1
    End Sub


    Sub Check_input()


    If Taster1 = 0 Then
    If Out_pwm = 150 Then
    Out_pwm = Pwm_1_rate
    End If


    If Out_pwm = 026 Then
    Out_pwm = Pwm_2_rate
    End If


    If Out_pwm = 0 Then
    Out_pwm = Pwm_3_rate
    End If
    Waitms 50
    End If


    If Taster2 = 0 Then
    If Out_pwm = 026 Then
    Out_pwm = 0
    End If


    If Out_pwm = 150 Then
    Out_pwm = Pwm_3_rate
    End If


    If Out_pwm = 255 Then
    Out_pwm = Pwm_2_rate
    End If
    Waitms 50
    End If


    End Sub[/code:1]


    [code:1]$regfile = "ATtiny2313.dat"


    $crystal = 8000000 '8 MHz
    $hwstack = 64
    $swstack = 64
    $framesize = 64


    'Wie schnell soll die Lampe Hoch/Runter Dimmen
    ' in [ms], ca. 1,5 s von 0 auf 100 % Helligkeit (1,5s / 255 = 6ms)
    ' kann geändert werden ' einfach mal probieren
    Const Pwm_change_rate = 6


    Declare Sub Initialize_pwm()
    Declare Sub Check_input()
    Declare Sub Set_beam_pwm(byval Pwm As Byte)


    '***************************** PortB: ******************************************


    '#############PWM Ausgänge
    Config Pinb.3 = Output ' PWM Output


    '#############Eingänge
    Config Pind.2 = Input 'Pin D2 als Eingang konfigurieren
    Config Pind.3 = Input 'Pin D3 als Eingang konfigurieren


    Portd.2 = 1 'Pullup
    Portd.3 = 1 'Pullup


    Taster1 Alias Pind.2 'Taster1
    Taster2 Alias Pind.3 'Taster2


    Dim Speedup As Byte
    Dim Pwm_rate_tmp As Byte


    Out_pwm Alias Pwm1a


    Dim Pwm_1_rate As Byte
    Dim Pwm_2_rate As Byte
    Dim Pwm_3_rate As Byte


    'Welche Helligkeiten sollen als Default Werte eingestellt sein.
    ' Können später angepasst werden
    Pwm_1_rate = 255 '255 = 100 %
    Pwm_2_rate = 150 '150 = 60 %
    Pwm_3_rate = 026 '026 = 20 %


    Initialize_pwm


    Out_pwm = 0 'Lampe dunkel
    Pwm_rate_tmp = 0


    Do
    Check_input
    Waitms 15
    Loop
    End


    '***************** Initialize_pwm *********************************************
    '#############Timer1 für PWM
    Sub Initialize_pwm
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    Enable Timer1
    End Sub


    Sub Check_input()


    If Taster1 = 0 Then
    If Pwm_rate_tmp = 150 Then
    Pwm_rate_tmp = Pwm_1_rate
    End If


    If Pwm_rate_tmp = 026 Then
    Pwm_rate_tmp = Pwm_2_rate
    End If


    If Pwm_rate_tmp = 0 Then
    Pwm_rate_tmp = Pwm_3_rate
    End If


    Set_beam_pwm Pwm_rate_tmp
    Waitms 45
    End If


    If Taster2 = 0 Then
    If Pwm_rate_tmp = 026 Then
    Pwm_rate_tmp = 0
    End If


    If Pwm_rate_tmp = 150 Then
    Pwm_rate_tmp = Pwm_3_rate
    End If


    If Pwm_rate_tmp = 255 Then
    Pwm_rate_tmp = Pwm_2_rate
    End If
    Set_beam_pwm Pwm_rate_tmp
    Waitms 45
    End If


    End Sub


    Sub Set_beam_pwm(byval Pwm As Byte)
    If Pwm > Out_pwm Then
    For Speedup = Out_pwm To Pwm Step 1
    Out_pwm = Speedup
    Waitms Pwm_change_rate
    Next Speedup
    Else
    For Speedup = Out_pwm To Pwm Step -1
    Out_pwm = Speedup
    Waitms Pwm_change_rate
    Next Speedup
    End If
    End Sub[/code:1]

  • Zitat von "amron"

    ich dachte immer das es einen internen pullup widerstand gibt, den man software-seitig einschaltet und dann den taster "einfach" nur noch gegen masse legen muss, aber da musste ich mich auch eines besseren belehren lassen - naja "learning by doing" #-o


    #-o peinlich, man muss sie natürlich im endeffekt auch einschalten. ist irgendwie bei den ersten versuchen untergegangen.
    hab's mal im code angepasst.
    dann braucht man natürlich die 6,8k widerstände bei den Tastern nicht mehr. habs gerade mal getestet.

  • Ich hab nur die Steuerwippe benutzt, sieht aus wie die kleinen SMD-Schalter, hat aber halt Joystick und Knopf Funktion.
    Die originalen Leiterbahnen hab ich durchgeschnitten und die Beinchen belötet (250% fummelig!). Pullups sind auch dran.


    Die 5 aktiven Beine ergeben dann halt ein Bitmuster, ich habe SELECT CASE zur Auswertung benutzt. Da das Programm ja eh nix macht außer ständig die SELECT CASE Schleife zu durchlaufen ists auch nicht per Interrupt gelöst... wozu auch.


    Dimmen ist per PWM in 5 Schritten auf dem Taster möglich oder auch weich mit hoch/runter.
    Einen zweiten dimmbaren Ausgang hab ich auch noch auf dem Board, aber nicht geschaltet - könnte man noch ne normale LED als Low-Power-Version dranmachen, oder ne 2. Power-LED.