Firmware-Mods - Flasht jemand selbst?

heba

Flashaholic
5 August 2015
103
31
28
Raum Nürnberg
Hi,

da die Firmware für den BLF-Treiber ja frei verfügbar ist, schreit das ja geradezu nach Anpassung :alien: Gibt's vielleicht schon irgendwelche interessanten Erweiterungen oder besteht Interesse, mal einen TlfDrv zu bauen? Wenn man auf z.B. Programmierbarkeit verzichtet, paßt auf den ATTiny13 schon noch ein bißchen was drauf. Macht natürlich nur Sinn, wenn auch mehr als nur 2 Leute selbst flashen können...

Was ich mir z.B. testweise mal eingebaut habe:
* Doppelklick macht sofort Turbo
* kein "wrap around" mehr (kein Moon nach Turbo und vor dem Moon nur der Battery Check)
(Beim 7-Stufen-Mode habe ich sonst ziemlich häufig am Turbo vorbeigeschaltet.)

Was ich u.a. noch einbauen möchte:
* Mode Memory auf max. Helligkeit beschränkt (die Lampe startet z.B. max. auf 3, wenn sie vorher höher war)

Gruß,
Heiko
 
  • Danke
Reaktionen: chouster und prisma

Tekas

Flashaholic**
23 November 2011
3.819
1.647
113
Schau' Dir mal die Features vom neuen H17F-Treber von DrJones an, der lässt sich ziemlich flexibel für alle Bedürfnisse konfigurieren und wenn man schon den Titel 'TLF-Treiber' unbedingt vergeben möchte, der hätte ihn verdient.
 
  • Danke
Reaktionen: heba und prisma

prisma

Flashaholic**
7 Februar 2010
1.089
1.003
113
Frankenland
Als bekennender Fan von DrJones-Treibern stimme ich Tekas grundsätzlich zu.

Trotzdem will ich nicht unnötig alle anderen Treiber aus allen Lampen entsorgen und tauschen. Deshalb habe ich zB. auch die Firmware in der BLF A6 nach meinen Bedürfnissen angepasst.

Ich beginne aber erst langsam zu verstehen, wie die Programmierung funktioniert und kann dabei sicher nicht behilflich sein. Aber ich bin gespannt, wohin sich die Diskussion entwickelt. Und ich vermute mal, dass es nicht möglich sein wird, ein UI zu programmieren, dass alle gut finden ;)
 
  • Danke
Reaktionen: chouster und heba

heba

Flashaholic
5 August 2015
103
31
28
Raum Nürnberg
Sorry, das war wohl missverständlich. Mir geht's nur um die Firmware. Mich interessieren Code-Fragmente oder komplett gepatchte, frei verfügbare Firmware. Und da ich das bisher nur vom Blf-Treiber kenne (und nur diesen habe), eben erstmalfür diesen.

Für mich ist es recht interessant, die Firmware vorher an die jeweilige Lampe anzupassen. Wenn das bei anderen Treibern auch geht, bin ich früher oder später gern dabei ☺
 

heba

Flashaholic
5 August 2015
103
31
28
Raum Nürnberg
Und ich vermute mal, dass es nicht möglich sein wird, ein UI zu programmieren, dass alle gut finden ;)
Genau. Theoretisch könnte man ja sowas komplett programmierbar machen, aber alle Varianten passen nicht in den Speicher dieser kleinen Controller. Deswegen vorher mit den entsprechenden Optionen selbst compilieren und dann flashen :idee:

Frei verfügbare Firmware gibt's mittlerweile in großer Auswahl, z.B. hier: http://bazaar.launchpad.net/~toykeeper/flashlight-firmware/trunk/files/165

Waah, Du bist zu schnell :) Da hab ich den auch her und auch schon ein bißchen umgeschrieben. Ist wirklich super, daß das frei verfügbar ist. :daumenhoch:
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: prisma

prisma

Flashaholic**
7 Februar 2010
1.089
1.003
113
Frankenland
Mir ist noch nicht ganz klar, was genau Dein Anliegen ist... :confused:

Bietest Du uns wohl an, eine Firmware nach unseren Wünschen zu programmieren? ;):thumbup:

Das wäre ja mal super!!!
 

heba

Flashaholic
5 August 2015
103
31
28
Raum Nürnberg
Ich würde meine Änderungen und Patches auf jeden Fall gern mit anderen teilen. Ist ja eh Open Source. Wenn auf dem Weg auch ein paar Code-Fragmente oder Feedback zurückkommt, wäre das natürlich super :) Und das eine oder andere Feature läßt sich dann bestimmt auch gemeinsam einbauen ;)

Mich hat im wesentlichen erstmal interessiert, ob's hier noch mehr Leute gibt, die sich die Firmware selbst auf die Controller brutzeln. So wie's klingt, sind wir ja schon mindestens mal zwei ;)

So, jetzt aber .. gute Nacht :)
 

chouster

Flashaholic**
22 Dezember 2010
1.528
904
113
Find ich klasse soweit und schau dann öfters mal hier rein. Mit dem tiny13A ist schon einiges machbar. Wenn es darum geht eine Firmware zu erstellen, die möglichst viele Geschmäcker befriedigt, bietet sich der tiny25/45 oder gar 85 an. Schaut euch mal Bistro und Narsil an!!! Einmal richtig kalibriert braucht man das wohl kaum neuflashen, selbst wenn die Lampe mehrmals den Besitzer wechselt. Das beste was man derzeit aus dem t13 rausholen kann ist wohl der TripleDown Treiber mit drei Kanälen und einer angepassten BLF-A6 Firmware. PWM1 auf 1x AMC, PWM2 auf 6xAMC und an/aus für den FET...

Mit dem t25 könnte man allerdings schon eine LED (oder mehrere parallel) mit FET+1 betreiben, wie beim BLF-A6 Treiber, dazu jedoch noch einen dritten Kanal für eine sekundäre LED mit PWM auf 6xAMC...
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: heba

prisma

Flashaholic**
7 Februar 2010
1.089
1.003
113
Frankenland
Ich habe mir mittlerweile eine FW für die Solarstorm T4 gebastelt. Eine fertige, die genau meinen Wünschen entspricht, habe ich nicht gefunden und scheint wohl auch bisher nicht zu existieren.

Normalerweise habe ich in den Lampen mit eSwitch Treiber von DrJones mit lumodrv. Bei Verwendung eines FET sind mir die low-Stufen aber manchmal zu hell. Deswegen habe ich mich für eine Anpassung entschieden. Die 4 LEDs laufen jetzt bis zur high-Stufe mit 8*7135 (Nanjg 105c) und nur im Turbo über den FET.

Der Code basiert auf JonnyC´s Star_momentary, den ich (z.T. mit Unterstützung von pilotdog68) abgeändert habe.

Die Features:
MIC Attiny13a
eSwitch
dual PWM
single-click off
LVP
Turbotimer für FET-Channel

Das UI:

5 Stufen von unten nach oben, ohne Memory: moonlight - low - mid - high - turbo

Von aus:

Kurzer Druck - moonlight
Langer Druck* - Turbo

Von an:
Kurzer Druck - eine Stufe höher
Langer Druck* - aus
*=0.3s
Bleibt die Lampe an, startet beim Durchschalten der erste Modus wieder im low, dann also immer l-m-h-t.

Falls jemand Interesse hat, stelle ich den Code gerne zur Verfügung.
 

muellihenry

Flashaholic**
12 Oktober 2014
3.996
3.298
113
Ich habe mir mittlerweile eine FW für die Solarstorm T4 gebastelt. Eine fertige, die genau meinen Wünschen entspricht, habe ich nicht gefunden und scheint wohl auch bisher nicht zu existieren.

Normalerweise habe ich in den Lampen mit eSwitch Treiber von DrJones mit lumodrv. Bei Verwendung eines FET sind mir die low-Stufen aber manchmal zu hell. Deswegen habe ich mich für eine Anpassung entschieden. Die 4 LEDs laufen jetzt bis zur high-Stufe mit 8*7135 (Nanjg 105c) und nur im Turbo über den FET.

Der Code basiert auf JonnyC´s Star_momentary, den ich (z.T. mit Unterstützung von pilotdog68) abgeändert habe.

Die Features:
MIC Attiny13a
eSwitch
dual PWM
single-click off
LVP
Turbotimer für FET-Channel

Das UI:

5 Stufen von unten nach oben, ohne Memory: moonlight - low - mid - high - turbo

Von aus:

Kurzer Druck - moonlight
Langer Druck* - Turbo

Von an:
Kurzer Druck - eine Stufe höher
Langer Druck* - aus
*=0.3s
Bleibt die Lampe an, startet beim Durchschalten der erste Modus wieder im low, dann also immer l-m-h-t.

Falls jemand Interesse hat, stelle ich den Code gerne zur Verfügung.
Was für einen Treiber verwendest du da, oder was für Hardware Mods müssen gemacht werden?

Gruß, Gerd
 

heba

Flashaholic
5 August 2015
103
31
28
Raum Nürnberg
Das würde mich auch interessieren. Ich habe mal eine Liste angefangen mit fertig aufgebauten Treibern mit frei verfügbarer Firmware - die hat bis jetzt drei Zeilen, wobei 2 davon unvollständig sind. Und e-Switch support .. nada :( Deiner wäre dann ggf. der erste :)
 

prisma

Flashaholic**
7 Februar 2010
1.089
1.003
113
Frankenland
Als Treiber verwende ich einen stinknormalen Nanjg 105c mit 8*AMC.

Den Originaltreiber habe ich leer geräumt bis auf den FET und verwende ihn als Kontaktboard. Der FET wird durch Pin5/PB0/Star2 angesteuert, jedoch nur im Turbo-Modus.

Der eSwitch geht ganz normal von Masse an Pin2/PB3/Star4.

Ich habe natürlich wieder keine Bilder gemacht, aber die zweite Lampe bekommt noch andere LEDs, dann werde ich das versuchen zu dokumentieren, falls gewünscht.
 

muellihenry

Flashaholic**
12 Oktober 2014
3.996
3.298
113
Als Treiber verwende ich einen stinknormalen Nanjg 105c mit 8*AMC.

Den Originaltreiber habe ich leer geräumt bis auf den FET und verwende ihn als Kontaktboard. Der FET wird durch Pin5/PB0/Star2 angesteuert, jedoch nur im Turbo-Modus.

Der eSwitch geht ganz normal von Masse an Pin2/PB3/Star4.

Ich habe natürlich wieder keine Bilder gemacht, aber die zweite Lampe bekommt noch andere LEDs, dann werde ich das versuchen zu dokumentieren, falls gewünscht.
Ich würde vielleicht versuchen den Fet gleich auf dem 105C zu verbauen. Zwei AMC weg, an die Stelle den Fet und die entfallenen AMC's wieder stacken, wenn benötigt. Den Fet dann mit Pin 5, Masse versorgen und Ausgang Fet verbinden mit Ausgang Led.

Gruß, Gerd
 

prisma

Flashaholic**
7 Februar 2010
1.089
1.003
113
Frankenland
Jacke wie Hose... ;)

Das habe ich bisher so gemacht, wenn der Platz beschränkt ist. In Lampen mit 17mm Treiber-Aufnahme/Pill.

Macht aber nur zusätzliche Arbeit. In der T4 ist genügend Platz vorhanden, der FET ist ziemlich massiv und auf dem MCPCB schon vorhanden, muss also nur noch angesteuert werden und hat auch eine bessere Wärmeableitung als auf dem 105c, sofern man überhaupt davon sprechen kann...

Edit: Die "alten" Nanjg-Boards sind für mich jetzt wieder viel interessanter, seit ich mich ein wenig mit der FW-Geschichte beschäftigt habe. Damit sind alle erdenklichen Kombinationen realisierbar: eSwitch oder Clicky, single- oder dual-PWM mit oder ohne FET/DD, 1 cell oder 2 cell (Zenermod)...

Wenn man also wie ich noch welche rumliegen hat, lassen sich damit viele Möglichkeiten realisieren ohne z.B. gleich einen LD-2 kaufen zu müssen. Für meinen Hausgebrauch jedenfalls...
 
Zuletzt bearbeitet:

Wieselflinkpro

Flashaholic***
1 Dezember 2014
5.472
3.090
113
Goslar
Die Firmware könnte für meine Courui D01 interessant sein. Obwohl ich noch Angst habe DirectDrive von 3x18650 auf eine XP-L oder 219C zu geben.
 

prisma

Flashaholic**
7 Februar 2010
1.089
1.003
113
Frankenland
Hätte ich auch - das wird nicht gutgehen. Je nachdem welches binning Du verwendest ist bei 6 A Schluss. Ich habe meine D01 wieder "zurückgebaut" auf LD1 mit 5A, aber das wäre mit ein paar gestackten AMCs auch schnell erledigt.
 

chouster

Flashaholic**
22 Dezember 2010
1.528
904
113
Habe mir mal die Mühe gemacht die BLF-A6 Firmware von Toykeeper nach meinem Geschmack für einen nanjg 105C Treiber zu ändern. Die wichtigsten Änderungen:
  • diese Variante ist nur für single-channel-Treiber
  • Ausblinken der Akkuspannung,(BATTCHECK_VpT), zb.: für 3,7V: drei blinks, pause, 7 blinks, lange pause, ...
  • es müssen keine speziellen .h-files eingebunden werden, diese sind integriert
Kurz gesagt: Der sehr gängige und günstige nanjg 105C Treiber benötigt noch einen zusätzlichen Kondensator (1µF von Star4 auf Masse), dann einfach diese Firmware flashen und man hat das BLF-A6 UI mit besserem Akkustands-Blinkmodus. Gedacht für Lampen die sowieso schon einen 105C verbaut haben, oder Setups für die der BLF-A6-FET-Treiber aufgrund des hohen Stroms ungeeignet ist.

Kalibriert habe ich die Spannungsmessung mit einem 8xAMC7135 - 2,8A - nanjg 105c - Treiber in einer Lampe mit einer XP-L HI , Treiberfeder und Tailcapfeder überbrückt. Ich schreibe das, da bei ähnlicher Konfiguration das fertige .hex-file eventuell schon ziemlich gut funktioniert. Wem die Spannung des Indikators zu stark abweicht, kann die Werte in der Firmware anpassen, sprich kalibrieren.

BLF-A6-8xAMC7135+OTC.hex

BLF-A6 single channel, battcheck_vpt.c

Vielleicht kann es ja wer brauchen. Falls jemand das .hex-file auf einen 8xAMC7135 105C flasht, würde es mich interessieren, ob und wie stark die Spannungsmessung abweicht...

mfG chouster
 

chouster

Flashaholic**
22 Dezember 2010
1.528
904
113
Ich persönlich nehme welche von Murata. Würde empfehlen nicht irgendwelche noname-Kondensatoren zu nehmen.
  • 1µF
  • 0805
  • mind. 16V besser 25V
  • X7R Spezifikation (oft als "dielectric" gekennzeichnet)
  • max. 10% Toleranz
Das sollte die Auswahl schon recht übersichtlich machen.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Wieselflinkpro

prisma

Flashaholic**
7 Februar 2010
1.089
1.003
113
Frankenland
Habe mir mal die Mühe gemacht die BLF-A6 Firmware von Toykeeper nach meinem Geschmack für einen nanjg 105C Treiber zu ändern. Die wichtigsten Änderungen:
  • diese Variante ist nur für single-channel-Treiber
  • Ausblinken der Akkuspannung,(BATTCHECK_VpT), zb.: für 3,7V: drei blinks, pause, 7 blinks, lange pause, ...
  • es müssen keine speziellen .h-files eingebunden werden, diese sind integriert
Kurz gesagt: Der sehr gängige und günstige nanjg 105C Treiber benötigt noch einen zusätzlichen Kondensator (1µF von Star4 auf Masse), dann einfach diese Firmware flashen und man hat das BLF-A6 UI mit besserem Akkustands-Blinkmodus. Gedacht für Lampen die sowieso schon einen 105C verbaut haben, oder Setups für die der BLF-A6-FET-Treiber aufgrund des hohen Stroms ungeeignet ist.

Kalibriert habe ich die Spannungsmessung mit einem 8xAMC7135 - 2,8A - nanjg 105c - Treiber in einer Lampe mit einer XP-L HI , Treiberfeder und Tailcapfeder überbrückt. Ich schreibe das, da bei ähnlicher Konfiguration das fertige .hex-file eventuell schon ziemlich gut funktioniert. Wem die Spannung des Indikators zu stark abweicht, kann die Werte in der Firmware anpassen, sprich kalibrieren.

BLF-A6-8xAMC7135+OTC.hex

BLF-A6 single channel, battcheck_vpt.c

Vielleicht kann es ja wer brauchen. Falls jemand das .hex-file auf einen 8xAMC7135 105C flasht, würde es mich interessieren, ob und wie stark die Spannungsmessung abweicht...

mfG chouster

Danke, die werde ich mir bei Gelegenheit mal ansehen. Damit hast Du übrigens auch einen eigenen Ordner in meiner Firmware-Sammlung bekommen :thumbsup:

@Wieselflinkpro:
Ich hätte noch jede Menge von denen:

1µF 0805 16V 15% X7R SMD Kondensatoren / SMT Ceramic Capacitors


Bei Interesse...
 
  • Danke
Reaktionen: chouster

chouster

Flashaholic**
22 Dezember 2010
1.528
904
113
Eine dual-channel-Variante mit BATTCHECK_VpT hätte ich auch anzubieten, wenn jemand das möchte räum ichs noch ein bisschen auf...
 
  • Danke
Reaktionen: prisma

muellihenry

Flashaholic**
12 Oktober 2014
3.996
3.298
113
Gerade mal die A6 für den Nanjg 105C getestet, geht so weit wunderbar. :thumbup: Habe mir das Moon noch angepasst, war mir etwas zu hell, Wert jetzt
auf 3. Was mir aufgefallen ist, daß die Spannungsanzeige 0,2V zu viel anzeigt, kann natürlich auch an meiner Hardware liegen.
Meine Konfiguration nur im Testaufbau:

Treiber so wie er ist ohne litzen fliegend verkabelt
XM-L Led

Gruß, Gerd
 
  • Danke
Reaktionen: prisma und chouster

chouster

Flashaholic**
22 Dezember 2010
1.528
904
113
Danke fürs Feedback, Gerd. Bei der Abweichung der Spannnungsanzeige tippe ich auch auf Hardwarevariation.

Ich war euch noch die dual channel Variante schuldig...

Die wurde auf einen nanjg105C mit 11xAMC7135 + 2xAMC7135 (in einer Lampe mit beiden Federn überbrückt) kalibriert. Für FET+1 Treiber sollte der kleine Kanal im höchsten Mode einen PWM Wert von 0 statt 255 haben... Aber ich denke ihr wisst das. Hier hat nur eine abgespeckte Version vom BikeStrobe gepasst, blinkt mit 100% des kleinen Kanals, war eher als Warnblinker oder so gedacht. Kann man ja ändern oder komplett rausmachen...

BLF-A6-11xAMC7135+2xAMC7135 nanjg105C+OTC.hex

BLF-A6 dual channel, battcheck_vpt.c

mfG chouster
 

muellihenry

Flashaholic**
12 Oktober 2014
3.996
3.298
113
Danke chouster, werde ich auf jeden Fall mal bei einen nanjg mit fet und einem amc testen. :thumbup:

Gruß, Gerd
 
  • Danke
Reaktionen: chouster

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.205
6.284
113
moin zusammen,

ich wollte mich auch mal ans flashen wagen. ich habe mir alle nötigen Komponenten besorgt.

Programmer ist USBASP V2.0 von LC Technology
Treiber ist installiert,

habe mich genau an diese Anleitung gehalten:

http://flashlightwiki.com/AVR_Drivers#USBasp_Driver

avrdude ist installiert, die Belegung passt auch, habe zu Beginn die Klammer benutzt, jetzt habe ich aber einfach die Kabel direkt an den Attiny angelötet, um eine sichere Verbindung zu gewährleisten.

aber bereits immer nach dem Befehlt

Code:
 avrdude -p t13 -c usbasp -n

kommt folgende Fehlermeldung:

Code:
 avrdude: warning: cannot set sck period. please check for usbasp firmware update
.
avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
        Double check connections and try again, or use -F to override
        this check.
avrdude done.  Thank you.

Ja, ich habe alle Verbindungen überprüft. Aber ich komme nicht weiter. Hat irgendwer eine Idee, an was es liegen könnte ?

Würde mich rießig über etwas Hilfe freuen ;)

LG Michael
 

fritz15

Flashaholic**
8 Mai 2011
1.008
1.626
113
Aalborg, Dänemark
Ist schon etwas länger her, dass ich mich damit beschäftigt habe, aber eventuell ist die Programmierfrequenz (Weiß den korrekten deutschen Begriff nicht) zu hoch. Diese sollte bei höchstens 1/4 des Prozessortakts sein.

Hier übrigens mal eine Firmware, die ich mal implementier habe. Geeignet für einen einzelnen Taster passt sie mit Programmiermenü gerade noch auf einen Attiny13A. Falls wer Probleme mit meinem grausamen Englisch hat kann ich es gerne auf deutsch übersetzen.

Code:
/*
* moui_v2_menu.c
*
* Created: 21.04.2014 12:42:34
*  Author: fritz
*/

/*
* License: Free for private, non commercial use
*
* use Fuses:
* low  0x75
* high 0xFF
* Compiler optimization set to '-Os' (optimize for size)
* 1016 Bytes used
*
* Some comments:
*
* The UI is similar to the one from NovaTac lights (with some additional features)
*
* click (c): pressing the switch for not more than 'presstime' * 5ms (default 250ms)
* press (p): pressing the switch for more than 'presstime' * ms (default 250ms)
* ('presstime' defined below)
*
* This UI features a BURST mode and the light will dim from 'BURST' to 'mode4' after 'BURSTtime' * 1.28 seconds
* (Only if constant ON BURST, at momentary ON BURST the light will not dim down.)
* If you do not want a BURST mode just set 'BURST' the same as 'mode4'
*
*
* UI description:
* From OFF:
* 'click' switches the light on to 'mode1'
* With a 'press' you get momentary 'mode1'
* With 'click' and 'press' you get momentary 'BURST'
*
* When ON:
* You can toggle between 'mode1' and mode2' with 'click''click'
* With 'click''click''click' you get to 'mode3'
* From 'mode3' you get back to 'mode1' with 'click''click'
*
* From any mode you reach momentary 'BURST' with 'press'. As soon as you release the switch you get back to your last mode.
*
* You reach constand on 'BURST' with 'click''press' from any mode
* You get back to 'mode1' with 'click''click'
*
*
*
* To do:
*
* (0) Bugfixes
*        Done! (more or less...)
*
*        While my usage there did not occour any bugs, so please tell me, if you find some.
*
* (1) Set Attiny to sleep mode, when light was turned of for more than 250ms
*        Done! Consumes when switched OFF from .2 to 6 µA (depends on locator flash ON or OFF)
*
*        I added a locator flash. It flashes every 8 seconds for .01 second at brightness 'locator' (default 5)
*        calculate time until battery is empty (draintime in years):
*        first calculate
*        drain current drc:
*
*        WDTint = Watchdog Interrupt time (8 sec by default)
*        BattAmp = maximal BATTERY Current
*
*        drc = [WDTint * 6 * 10^-6 + 0.01 * BattAmp * locator/255]/8.01
*
*        BattC = Battery Capacity in Ah
*
*        draintime = BattC/(drc * 24 * 365)  
*
*        Example: 2.8A driver, 18650 Battery with 3Ah Capacity, locator = 5
*        drc = 0.000075A
*        draintime > 4 years
*
*        If you do NOT want a locator flash you can disable it in the programming menu
*        See the point "programming menu" below.
*        When the locator flash is disabled an 18650 battery lasts for more than 500 years...
*      
* (2) Implement programming menu
*        Done!
*
*        You can change the brightness of any mode by switching to the mode and then 'click', 'click', 'click' and 'press'.
*        After you release the switch you can ramp up by a single 'click' and save your selected brightness by a single 'press'
*      
*        Example:
*        (c) --> Mode1 (c)(c)(c)(p) --> programming menu for Mode1
*        (c)(c)(c)(c)(c)(c) (6 clicks) --> 7 of 255 selected (p) --> Mode1 is from now on 7 until the next Battery change.
*        Light goes back to Mode1
*
*        By clicking the light 8 or more times you get to the programming menu.
*        Here you can switch the locator flash ON/ OFF, enable or disable mode memory and store your programmed modes in the
*        EEPROM so that they do not get deleted after a battery change.
*
*        Once you entered the programming menu you can select what you want to do by clicking (1) to (3) times and then select the option by a single press.
*        After you pressed the switch the light will flash 1 to 3 times to indicate, which option is/ was selected.
*
*        (1) Toggle locator flash ON or OFF                                                        (the light will flash once)
*        (2) Toggle mode memory ON or OFF                                                        (the light will flash twice)
*        (3) Save your programmed modes so that they are not deleted after a battery change        (the light will flash three times)
*
*        If you click more than three times you leave the programming menu
*
*
*
* The following data has to be stored in the EEPROM:
*
*  reg0:   5 = 0x05                                        <-- brightness for 'mode1'
*  reg1:  20 = 0x14                                        <-- brigthness for 'mode2'
*  reg2:  90 = 0x5A                                        <-- brightness for 'mode3'
*  reg3: 165 = 0xA5                                        <-- brightness for 'mode4'
*  reg4: 255 = 0xFF                                        <-- brightness for 'BURST'
*
*  reg5:   1 = 0x01                                        <-- Locatorflash default ON (0 for default OFF)
*  reg6:   1 = 0x01                                        <-- Memory default OFF (0 for default ON)
*
*  reg7:   1 = 0x01
*  reg8:   2 = 0x02
*  reg9:   3 = 0x03
* reg10:   4 = 0x04
* reg11:   5 = 0x05                                        <-- default 'mode1'
* reg12:   7 = 0x07
* reg13:   9 = 0x09
* reg14:  14 = 0x0E
* reg15:  20 = 0x14                                        <-- default 'mode2'
* reg16:  30 = 0x1E
* reg17:  45 = 0x2D
* reg18:  60 = 0x3C
* reg19:  75 = 0x4B
* reg20:  90 = 0x5A                                        <-- default 'mode3'
* reg21: 105 = 0x69
* reg22: 125 = 0x7D
* reg23: 145 = 0x91
* reg24: 165 = 0xA5                                        <-- default 'mode4'
* reg25: 185 = 0xB9
* reg26: 205 = 0xCD
* reg27: 230 = 0xE6
* reg28: 255 = 0xFF                                      
*              
* you can create a .hex file with the following content:

:10000000051446A5FF0101010203040507090E14AA
:100010001E2D3C4B5A697D91A5B9CDE6FFFFFFFF30
:10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:00000001FF

*/

#include <avr/interrupt.h>                                    // Include some headers...
#include <avr/sleep.h>
#include <avr/io.h>
#define F_CPU 4800000                                        // Prescaler is set
#include <util/delay.h>  
#include <avr/wdt.h>

#define WDTflag 0                                            // Bit for Watchdog interrupt
#define PCINTflag 1                                            // Bit for Pin Change interrupt

/*
* 'OFFtime * 5ms' is the the time, which the light has to be turned ON or OFF to reset 'clicked'
* If you hold the switch for longer than 'presstime * 5ms' --> 'press', otherwise 'click'
* Both values can be changed (should be in [30, ..., 100])
* Default 250ms for both
*/
#define OFFtime 50
#define presstime 50

/*
* Set 'BURSTtime', here. If you do not want a Burst mode set 'BURST' to the same as 'mode4' (by writing different data in the hex file for the EEPROM or by programming the brightness)
*/
#define BURSTtime 11                                        // (BURSTtime + 1) * 1.28sec (default 15.4 seconds)

/*
* define 'locator' to your preferred brightness in [1, ..., 255]. 4 > is save for 7135 drivers
*/
#define locator 5

/*
* The address for mode1, -2, -3, -4 and BURST in the EEPROM are defined here. Do NOT change.
*/  
#define mode1addr 0
#define mode2addr 1
#define mode3addr 2
#define mode4addr 3
#define BURSTaddr 4

uint8_t lastmode = 0;                                        // Memorize the last mode
volatile uint8_t INTflag = 0;                                // watchdog flag for the locator flash
uint8_t modes[] = {0, 0, 0, 0, 0};                            // Mode Array, do NOT change this

uint8_t click();                                            // Function declaration for click (tests if you click of press the switch)
void momentary();                                            // Function declaration for momentary
void wait_5ms();                                            // Name says it all...
void wait_ms(uint8_t time);                                    // Wait for 'time' * 5ms.
void setmode(uint8_t mode);                                    // Sets OCR0B to 'modes[mode]'
void bedtime();                                                // Sends ATtiny to sleep mode
void ramping(uint8_t mode);                                    // Ramps up and sets new brightness to 'modes[]'
void blink();                                                // Blinks...
uint8_t EEPROM_read(uint8_t EEPROM_address);                // EEPROM read
void EEPROM_write(uint8_t EEPROM_adress);                    // EEPROM write
void programming();                                            // Programming menu
void blinkblinkblink();                                      


ISR(PCINT0_vect)
{
    INTflag = (1 << PCINTflag);                                // Set 'INTflag' to 2 (Important for programming menu)
}  

ISR(WDT_vect)                                                // Watchdog Timer Interrupt (locatorflash)
{
    INTflag = (1 << WDTflag);                                // Set 'INTflag' to 1
}

int main(void)
{
    uint8_t time = 0;                                        // Measure ON/ OFF time and some other things
    uint8_t clicked = 0;                                    // Count how many clicks have been made
    uint8_t memory = 0;                                        // Memorizes last mode for programming
    uint8_t bursttimer = 0;                                    // Used to count time to ramp down
    uint8_t memory_ON_OFF = 0;

    set_sleep_mode(SLEEP_MODE_PWR_DOWN);                    // Use Power Down Sleep mode. Wakes up with Pin Change Interrupt or Watchdog Interrupt

    DDRB = (1 << DDB1);                                        // Define PB1 as output
    PORTB = (1 << PINB3);                                    // Define pull-up switch ON

    GIMSK = (1 << PCIE);                                    // Pin Change Interrupt Enable (switch is pressed --> interrupt)
    PCMSK = (1 << PCINT3);                                    // Enable Pin Change Interrupt at PINB3

    TCCR0A = 0b00100001;
    TCCR0B = 0b00000001;                                    // PWM setup

/*
* Watchdog Interrupt interval
*
* WDP3 WDP2 WDP1 WDP0 timer   ~seconds
*    0    1    0    1  512 mS       .5
*    0    1    1    0 1024 mS        1
*    0    1    1    1 2048 mS        2
*    1    0    0    0 4096 mS        4
*    1    0    0    1 8192 mS        8
*/  

    WDTCR |= (1 << WDP3) | (1 << WDP0);                        // Set Watchdog prescaler to 8 sec
    if ((EEPROM_read(5) & 1) == 1)
        WDTCR |= (1 << WDTIE);                                // Enable Watchdog Interrupts if Locatorflash enabled...

    modes[mode1addr] = EEPROM_read(mode1addr);                // Mode, when light is switched ON
    modes[mode2addr] = EEPROM_read(mode2addr);                // Mode accessed with two clicks
    modes[mode3addr] = EEPROM_read(mode3addr);                // Mode accessed with three clicks
    modes[mode4addr] = EEPROM_read(mode4addr);                // Mode accessed when switch is hold while the light is ON
    modes[BURSTaddr] = EEPROM_read(BURSTaddr);                // Burst mode. The light will step down from 'BURST' to 'mode4' after 'BURSTtime' * 1.28sec

    OCR0B = 0;                                                // 'Switch on brightness' after getting getting power.
                                                            // Change if you want 'Power ON' (useful for lights with two switches)
    while(1)
    {
        memory_ON_OFF = EEPROM_read(6);
        if ((PINB & 8) == 0)                                // When the button is pressed (PINB3 pulled down)
        {
            if (OCR0B == 0)                                    // When light was switched OFF
            {
                if (memory_ON_OFF == 1)                        // Mode memory switched OFF
                    OCR0B = modes[mode1addr];                // Set brightness to 'mode1', do not use setmode(mode1) otherwise it will not switch to 'mode2' after a 2 clicks
                else
                    OCR0B = modes[memory];
                clicked += click();                            // Test if 'click' or 'press'
                if (clicked == 0)                            // Press                                
                    momentary();                            // --> momentary ON with 'mode1' (or 'memory' if memory enabled)
                if (clicked == 1)                            // Light was switched OFF and button is pressed
                {
                    if (memory_ON_OFF == 1)                    // Mode memory switched OFF
                        lastmode = mode1addr;                // Set 'lastmode' to mode1 that it will switch to 'mode2' after 2 clicks
                    else
                        lastmode = memory;                    // Set 'lastmode' to 'memory' (so that it will switch to 'mode1' after two clicks)
                    if ((PINB & 8) == 0)                    // If switch is still pressed
                    {
                        setmode(BURSTaddr);                    // Set brightness to 'BURST'
                        momentary();                        // But you have to release the switch sometime, therefore is momentary()
                        OCR0B = modes[BURSTaddr];            // momentary() sets brightness to 0 --> set it back to 'BURST'
                    }  
                }
                if (clicked == 2)                            // Light was switched OFF and ON again
                {
                    if ((PINB & 8) == 0)                    // If switch is still pressed
                    {
                        OCR0B = modes[BURSTaddr];            // Momentary 'BURST'
                        momentary();
                        clicked = 0;
                    }
                    else
                    {
                        if (lastmode == mode1addr)            // Decide which mode and set new mode...
                            setmode(mode2addr);                  
                        else
                            setmode(mode1addr);
                    }
                }              
            }
            else                                            // Light is already switched ON
            {
                clicked +=click();
                if (clicked == 0)                            // Light is ON and switch is pressed
                {
                    OCR0B = modes[BURSTaddr];                // Brightness is set to 'BURST'
                    momentary();                            // While button is pressed...
                    OCR0B = modes[lastmode];                // Brightness is set to 'lastmode' again
                }
                if (clicked == 1)                            // Switch was pressed (and perhaps released)
                {
                    OCR0B = modes[BURSTaddr];                // Momentary 'BURST'
                    momentary();                            // --> switch light OFF  
                }
                if (clicked == 2 || (clicked > 3))
                    OCR0B = 0;                                // --> switch light OFF
                if (clicked == 3)                            // Access 'mode3' or ramping mode
                {
                    setmode(mode3addr);
                    if ((PINB & 8) == 0)                    // If switch is still pressed -> ramping mode is entered
                    {
                        blinkblinkblink();
                        ramping(memory);                    // Set new brightness for the selected mode
                        clicked = 0;                        // Reset clicked
                        momentary();                        // Wait until switch is release
                        OCR0B = modes[memory];                // And set brightness to the new mode
                    }
                }
                if (clicked > 7)                            // Save new modes in EEPROM
                {
                    INTflag = 0;
                    blinkblinkblink();                        // Blink three times to indicate entering the programming menu
                    OCR0B = 0;
                    programming();                            // Enter programming menu
                    clicked = 0;                            // Reset click counter
                }
            }
            time = 0;                                        // Set 'time' to 0 to tell programm the light just was switched ON or OFF
            bursttimer = 0;                                    // Reset 'bursttimer'
        }
        wait_5ms();
        if (time > OFFtime)                                    // More than OFFtime * 5ms without doing anything passed
        {
            memory = lastmode;
            clicked = 0;                                    // Reset 'click' (counter) and
            if (OCR0B == 0)                                    // If light is switched OFF
                bedtime();                                    // --> send ATtiny to sleep mode
            if (time > 254)
                bursttimer++;                                // Increase Burst timer when time is overflowing
        }
        if ((bursttimer > BURSTtime) && (lastmode == BURSTaddr))
            setmode(mode4addr);                                // Ramp down
        if ((INTflag & (1 << WDTflag)) == 1)                // WDT Interrupt occurred
        {
            INTflag = 0;                                    // Set 'INTflag' to 0 again
            OCR0B = locator;                                // Set Brightness to 'locator'
            wait_5ms();
            wait_5ms();
            OCR0B = 0;                                        // After 10ms switch light OFF again
            time = OFFtime;                                    // Set 'time' to OFFtime to enter sleepmode again
        }
        time++;                                                // Reset 'time' not needed, just creates an overflox. Important for BURSTtimer
    }
}

uint8_t click()                                                // Decide if click or press...
{                                                            // if click --> return 1
    uint8_t press_timer = 0;
    while(press_timer < presstime)                            // if press --> return 0 (pressed for more than 50 * 5ms)
    {                                                              
        if ((PINB & 8) == 0)                                // When the button is pressed (PINB3 pulled down)
        {
            press_timer++;                                    // Increase 'time' while switch is pressed
            wait_5ms();                                        // And wait 5ms
        }
        else
            return 1;                                        // Switch was clicked
    }
    return 0;                                                // Switch is pressed
}

void momentary()                                            // Allows momentary function.
{
    while((PINB & 8) == 0)                                    // While switch is pressed wait
        wait_5ms();                                            // Wait 5ms for debouncing
    OCR0B = 0;                                                // When switch is released set brightness to 0
}

void wait_5ms()                                                // Waits for 5ms
{                                                            // This way you use less memory than
    _delay_ms(5);                                            // Always writing _delay_ms(double argument)
}

void setmode(uint8_t mode)                                    // Sets OCR0B to 'modes[mode]'
{                                                            // Also uses less memory than always writing
    OCR0B = modes[mode];                                    // OCR0B = 'modes[mode]';
    lastmode = mode;                                        // lastmode = 'mode';
}

void bedtime()                                                // Send ATtiny to sleep mode
{
    sei();                                                    // Enable global interrupts
    sleep_mode();                                            // Go to sleep and wait for interrupt...
    cli();                                                    // Disable global interrupts
}

void ramping(uint8_t mode)                                    // Ramping mode
{
    uint8_t new_brightness = 0;                                // Define some new variables
    uint8_t click_counter = 0;
    uint8_t dummy = 0;
    momentary();                                            // Wait until the switch is released
    while (1)                                                // Go into a never ending loop except you reach the mode you like and press
    {
        if (new_brightness > 22)                            // 22 brightness settings are stored in the EEPROM
        {
            new_brightness = 0;                                // This avoids getting a wrong adress
            click_counter = 0;
        }
        OCR0B = EEPROM_read(new_brightness + 7);            // OCR0B is set to the current brightness
        if ((PINB & 8) == 0)                                // If switch is pressed
        {
            dummy = click_counter;                      
            click_counter += click();                        // If switch is clicked the light will continue ramping up
            new_brightness = click_counter;
            if (dummy == new_brightness)                    // if dummy == new_brightness then the switch was pressed
            {
                blinkblinkblink();                            // Blink three times to indicate that the new mode is set
                click_counter = EEPROM_read(new_brightness + 7);
                modes[mode] = click_counter;
                return;                                        // Return to main
            }
        }
        wait_5ms();                              
    }
}

void blink()                                                // Blinks with OFFtime 250ms, ontime 250ms and brightness 20
{
    OCR0B = 0;                                                // Set brightness to '0'
    wait_ms(50);
    OCR0B = 20;                                                // Set brightness to 20
    wait_ms(50);
}

uint8_t EEPROM_read(uint8_t EEPROM_address)                    // For more information about this function look in the datasheet
{
    while(EECR & (1 << 1));                                    // Wait for completion of previous write
    EEARL = EEPROM_address;                                    // Set up address register
    EECR |= (1 << EERE);                                    // Start eeprom read by writing EERE
    return EEDR;                                            // Return data from data register
}

void EEPROM_write(uint8_t EEPROM_adress)                    // For more information about this function look in the datasheet
{
    while(EECR & (1 << 1));                                    // Wait for completion of previous write
    EECR = (0 << EEPM1) | (0 >> EEPM0);                        // Set Programming mode
    EEARL = EEPROM_adress;                                    // Set up address and data registers
    if (EEPROM_adress == 5)
        EEDR = EEPROM_read(5) ^ 1;
    if (EEPROM_adress == 6)
        EEDR = EEPROM_read(6) ^ 1;
    if (EEPROM_adress < 5)
        EEDR = modes[EEPROM_adress];
    EECR |= (1 << 2);                                        // Write logical one to EEMPE
    EECR |= (1 << 1);                                        // Start eeprom write by setting EEPE
}

void wait_ms(uint8_t time)                                    // Wait time * 5ms with using wait_5ms()
{
    while ((time > 0) && ((INTflag & (1 << PCINTflag)) == 0))
    {
        wait_5ms();
        time--;
    }
}

void programming()
{
    uint8_t counter = 0;                                    // Define some new variables
    uint8_t click_counter = 0;
    uint8_t dummy = 0;
    while (click_counter < 4)                                // Leave programming menu after 4 clicks      
    {
        INTflag = 0;
        sei();
        wait_ms(50);
        while ((counter > 0) && (INTflag & (1 << PCINTflag)) == 0)
        {
            blink();
            counter--;
        }
        cli();
        OCR0B = 0;
        if ((PINB & 8) == 0)                                // If switch is pressed
        {
            dummy = click_counter;
            click_counter += click();                        // Decide if switch is clicked or pressed
            counter = click_counter;
            if (dummy == counter)                            // Switch was pressed
            {  
                momentary();
                if (dummy == 1)
                {
                    EEPROM_write(5);                        // Toggle Locatorflash ON/ OFF          
                }
                if (dummy == 2)
                {
                    EEPROM_write(6);                        // Toggle mode memory ON/ OFF
                }
                if (dummy == 3)
                {
                    EEPROM_write(mode1addr);                // Update 'mode1'
                    EEPROM_write(mode2addr);                // Update 'mode2'
                    EEPROM_write(mode3addr);                // Update 'mode3'
                    EEPROM_write(mode4addr);                // Update 'mode4'
                    EEPROM_write(BURSTaddr);                // Update 'BURST'
                }
            }
        }
        wait_5ms();
    }
}

void blinkblinkblink()                                        // Blinks three times...
{
    blink();
    blink();
    blink();
}
 
  • Danke
Reaktionen: RC-Drehteile

nofear87

Flashaholic*
25 März 2014
393
53
28
moin zusammen,

ich wollte mich auch mal ans flashen wagen. ich habe mir alle nötigen Komponenten besorgt.

Programmer ist USBASP V2.0 von LC Technology
Treiber ist installiert,

habe mich genau an diese Anleitung gehalten:

http://flashlightwiki.com/AVR_Drivers#USBasp_Driver

avrdude ist installiert, die Belegung passt auch, habe zu Beginn die Klammer benutzt, jetzt habe ich aber einfach die Kabel direkt an den Attiny angelötet, um eine sichere Verbindung zu gewährleisten.

aber bereits immer nach dem Befehlt

Code:
 avrdude -p t13 -c usbasp -n

kommt folgende Fehlermeldung:

Code:
 avrdude: warning: cannot set sck period. please check for usbasp firmware update
.
avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
        Double check connections and try again, or use -F to override
        this check.
avrdude done.  Thank you.

Ja, ich habe alle Verbindungen überprüft. Aber ich komme nicht weiter. Hat irgendwer eine Idee, an was es liegen könnte ?

Würde mich rießig über etwas Hilfe freuen ;)

LG Michael

Hast du schon einmal die andere Jumperposition auf dem Programmer probiert? Das hatte damals soweit ich weiß bei mir geholfen. (hierdurch wird die versorgungsspannung des attiny beeinflusst)
 
  • Danke
Reaktionen: RC-Drehteile

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.205
6.284
113
danke euch beiden,

habe eben tatsächlich die erste Firmware flashen können:

Code:
C:\avrusb>flash BLFA6

C:\avrusb>avrdude -p t13 -c usbasp -u -Uflash:w:BLFA6.hex:a -Ulfuse:w:0x75:m -Uhfuse:w:0xFF:m

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e9007
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "BLFA6.hex"
avrdude: input file BLFA6.hex auto detected as Intel Hex
avrdude: writing flash (1022 bytes):

Writing | ################################################## | 100% 1.06s

avrdude: 1022 bytes of flash written
avrdude: verifying flash memory against BLFA6.hex:
avrdude: load data flash data from input file BLFA6.hex:
avrdude: input file BLFA6.hex auto detected as Intel Hex
avrdude: input file BLFA6.hex contains 1022 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.82s

avrdude: verifying ...
avrdude: 1022 bytes of flash verified
avrdude: reading input file "0x75"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0x75:
avrdude: load data lfuse data from input file 0x75:
avrdude: input file 0x75 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0xFF"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xFF:
avrdude: load data hfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified

avrdude done.  Thank you.

der Fehler lag an der Verkabelung. Die ist anscheinend abweichend von der beschriebenen hier:

http://flashlightwiki.com/AVR_Drivers#USBasp_Driver

habe mir die Beschaltung aus einem Youtube Video rausgesucht, neu verkabelt und siehe da, der Attiny 13 antwortet. der oben gezeigte Code ist die Antwort, die mir AVR-Dude gibt.

soweit sogut, jetzt habe ich nur ein Problem: die Treiber funktionieren nicht. Habe einmal probiert lucidrv zu flashen, einmal die hier gezeigte BLFA6 firmware.

bei der lucidrv firmware kam gar kein Licht, bei der BLF A6 hat der Treiber nur 100% durchgeschaltet. Die Treiber waren beide neu. Muss ich auf noch irgendwas achten ?

LG Michael
 

fritz15

Flashaholic**
8 Mai 2011
1.008
1.626
113
Aalborg, Dänemark
Vielleicht die falsche Pin Belegung in der Firmware?
Was ich sehr praktisch zum testen finde ist ein Steckbrett mit Jumper Kabeln, einem passenden Attiny, eine 5mm Led mit passendem Vorwiderstand und einem Taster/ Schalter. Dann muss man nicht immer den Treiber einbauen und irgendwie bestromen sondern kann gleich die USB Versorgung vom Programmer verwenden. Zum testen/ debuggen von Firmware ist das optimal.
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.205
6.284
113
hey Fritz,

einmal hab ich den Fehler gefunden, die BLF A6 Firmware ist ja für FET-Treiber gemacht. Dass die auf dem 105C nicht geht, hätte mir eigentlich klar sein müssen. und die Lucidrv habe ich auf einen Treiber geflashed, den ich vorher mit falscher Belegung angeschlossen hatte, vielleicht hat der auch schon einen weg. Ich werde einfach mal testen,

mit dem Testaufbau ist eine gute Idee, habe aber keinen einzelnen Attiny da, ich werde einfach den Treiber an ne große LED anschließen und mit nem Akku mit Lötfahne testen. Dazu ein Zangenamperemeter und ich kann die Stromstärke testen.

LG Michael

edit: Eben ein Testblinken in C geschrieben, compiliert und geflashed, klappt 100%. mit Try % Error sollte es jetzt weiter gehen ;)
 
Zuletzt bearbeitet:

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.205
6.284
113
hi zusammen,

ich habe eine kleine Frage bezüglich den Nanjg 105C Treibern.

Habe eine Version vom DrJones MiniMo umgeändert. Am Schaltvorgang habe ich eigentlich nichts geändert, nur eine Batterieüberwachung eingefügt, die aber nicht über die Haupt-LED, sondern über zwei kleine Statusleds den Akkustand anzeigt. Nach einigem Probieren klappt das auch fehlerfrei. Aber ich habe das Problem, dass die LED im ausgeschalteten Zustand leuchten kann. Das heißt, PWM Signal = 0, aber die LED glimmt in Firefly Helligkeit. Im Code habe ich nichts außergewöhnliches gefunden und die Tatsache, dass das ganze nur sporadisch auftritt, die LED also auch manchmal aus ist, wie sie soll, lässt mich vermuten, dass es an der Hardware liegt.
Eben lief alles wie es soll, komme von Toilette wieder und die LED glimmt, obwohl der Treiber nichts durchlassen sollte. Woher kann das kommen ?

Habe eben auch nochmal die originale MiniMo Firmware geflashed, da ist es genauso.

Ich verwende am Treiber eine XP-L, Eingangsseitig das Labornetzteil, tritt aber mit Akku genauso auf.

Den Taster habe ich auf Star 2 gelegt, an Star 3 und 4 sind gegen GND die LEDs mit Vorwiderstand geschaltet.

Hat irgendwer eine Idee ?

LG Michael
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.205
6.284
113
mh, ich hab mal drüber geschaut, eigentlich nichts gesehen. Habe jetzt einfach mal nen komplett neuen Treiber aufgebaut, bis jetzt bleibt die LED dunkel. Hoffentlich bleibt sie das auch ;)

LG Michael
 
28 Dezember 2015
38
3
8
Mal ne Frage Leute,

wo ist eigentlich DrJones? Finde nichts dazu.

Da ich bisher guppydrive und moppydrive 105cs immer vom mtnelectronics gekauft hatte, mir aber jetzt der Versand irgendwie doch
auf dauer zu viel wird, wollte ich andere Wege gehen. Entweder selber flashen, nur DrJones Firmwares gibt´s (außer eine oder zwei) nicht for free und DrJones meldet sich auch seit zwei Wochen nach Forennachrichten nicht.

Kann mich wer dazu erhellen? Würde gerne diese beiden Firmwars (guppydrive & moppydrive(e-switch)) aus DE oder EU beziehen oder selber flashen...

LG
Gortha
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.205
6.284
113
Hey, DrJones Firmware gibt es nicht viel öffentlich, Schau mal weiter oben im Thread, da ist ein Link zu einer ganzen Sammlung von einigen Firmware, unter anderen auch von DrJones.

Gibt aber auch Bistro-UI und andere sehr gute Firmware als Quellcode, sodass du selbst flashen kannst.

DrJones hatte in seiner letzten PN an mich gesagt, dass er im Moment so viele andere Sachen um die Ohren hat, dass er sogar kleine Wünsche von mir abgelehnt hat. Gönnt ihm ein bisschen Ruhe, er wird sich schon melden, wenn er fürs Hobby wieder mehr Zeit hat.

LG Michael
 

fritz15

Flashaholic**
8 Mai 2011
1.008
1.626
113
Aalborg, Dänemark
[...]Aber ich habe das Problem, dass die LED im ausgeschalteten Zustand leuchten kann. Das heißt, PWM Signal = 0, aber die LED glimmt in Firefly Helligkeit. Im Code habe ich nichts außergewöhnliches gefunden und die Tatsache, dass das ganze nur sporadisch auftritt, die LED also auch manchmal aus ist, wie sie soll, lässt mich vermuten, dass es an der Hardware liegt.
[...]

Klingt sehr nach Hardware. Vielleicht kannst du dein Programm mal debuggen am PC und dann das PWM Register im Auge behalten. Dann siehst du auf jeden Fall, ob sich irgendwas eingeschlichen hat, was das PWM wieder auf 1 oder so etwas hoch setzt.
Aber klingt so als gäbe es ein Problem mit der Hardware. Vielleicht auch mal mit dem Multimeter überprüfen ob irgendwo ein Kontakt ist oder ein Bauteil defekt ist oder sowas.
[...]selber flashen...
Gortha

Wie Michael schon erwähnt hat gibt es inzwischen viele Firmwares, die denen von DrJones in nichts nachstehen und zustätzlich Open Source sind. Beispielsweise habe ich weiter oben eine Firmware für einen Taster vorgestellt, du kannst ja mal schauen ob dir das User Interface gefällt.
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.205
6.284
113
habe nochmal eine Frage,

wenn ich statt dem Attiny 13A einen 25er flashen will-was genau muss ich da alles anpassen ?

im avrdude von t13 auf t25
die Taktfrequenz im C-File ?
was ist mit den Fuses ?

habe einiges probiert, bin aber noch nicht wirklich weiter gekommen.

LG Michael