Wurkkos Taschenlampen

Skilhunt Taschenlampen

Spannungsmessung Attiny13A

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
hi zusammen,

ich sitze grade an einer neuen Firmware für die üblichen Nangj 105C Treiber.

Als Basis zur Spannungserkennung habe ich die Battcheck-Firmware von Toykeeper genutzt, und zur Modiweiterschaltung den Minimo von DrJones.

http://bazaar.launchpad.net/~toykeeper/flashlight-firmware/trunk/files/178/ToyKeeper/battcheck

Code:
/*
 * This firmware simply helps calibrate values for voltage readings.
 * It is not intended to be used as an actual flashlight.
 *
 * It will read the voltage, then read out the raw value as a series of
 * blinks.  It will provide up to three groups of blinks, representing the
 * hundreds digit, the tens digit, then the ones.  So, for a raw value of 183,
 * it would blink once, pause, blink eight times, pause, then blink three times.
 * It will then wait longer and re-read the voltage, then repeat.
 *
 * NANJG 105C Diagram
 *           ---
 *         -|   |- VCC
 *  Star 4 -|   |- Voltage ADC
 *  Star 3 -|   |- PWM
 *     GND -|   |- Star 2
 *           ---
 *
 * CPU speed is 4.8Mhz without the 8x divider when low fuse is 0x75
 *
 * define F_CPU 4800000  CPU: 4.8MHz  PWM: 9.4kHz       ####### use low fuse: 0x75  #######
 *                             /8     PWM: 1.176kHz     ####### use low fuse: 0x65  #######
 * define F_CPU 9600000  CPU: 9.6MHz  PWM: 19kHz        ####### use low fuse: 0x7a  #######
 *                             /8     PWM: 2.4kHz       ####### use low fuse: 0x6a  #######
 *
 * Above PWM speeds are for phase-correct PWM.  This program uses Fast-PWM,
 * which when the CPU is 4.8MHz will be 18.75 kHz
 *
 * FUSES
 *      I use these fuse settings
 *      Low:  0x75
 *      High: 0xff
 *
 * STARS (not used)
 *
 */
// set some hardware-specific values...
// (while configuring this firmware, skip this section)

#define F_CPU 4800000UL
#define EEPLEN 64
#define DELAY_TWEAK 950
#include <avr/io.h>
#include <util/delay.h>



/*
 * =========================================================================
 * Settings to modify per driver
 */

#define OWN_DELAY   // Should we use the built-in delay or our own?

#define BLINK_PWM   10




#include <util/delay.h>


#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <avr/eeprom.h>
#include <avr/sleep.h>

#define STAR2_PIN   PB0
#define STAR3_PIN   PB4
#define STAR4_PIN   PB3
#define PWM_PIN     PB1
#define VOLTAGE_PIN PB2
#define ADC_CHANNEL 0x01    // MUX 01 corresponds with PB2
#define ADC_DIDR    ADC1D   // Digital input disable bit corresponding with PB2
#define ADC_PRSCL   0x06    // clk/64

#define PWM_LVL     OCR0B   // OCR0B is the output compare register for PB1

inline void ADC_on() {
    ADMUX  = (1 << REFS0) | (1 << ADLAR) | ADC_CHANNEL; // 1.1v reference, left-adjust, ADC1/PB2
    DIDR0 |= (1 << ADC_DIDR);                           // disable digital input on ADC pin to reduce power consumption
    ADCSRA = (1 << ADEN ) | (1 << ADSC ) | ADC_PRSCL;   // enable, start, prescale
}

inline void ADC_off() {
    ADCSRA &= ~(1<<7); //ADC off
}

uint8_t get_voltage() {
    // Start conversion
    ADCSRA |= (1 << ADSC);
    // Wait for completion
    while (ADCSRA & (1 << ADSC));
    // See if voltage is lower than what we were looking for
    return ADCH;
}

void noblink() {
    PWM_LVL = (BLINK_PWM>>2);
    _delay_ms(5);
    PWM_LVL = 0;
    _delay_ms(200);
}

void blink() {
    PWM_LVL = BLINK_PWM;
    _delay_ms(100);
    PWM_LVL = 0;
    _delay_ms(200);
}

uint8_t modes[]={0,15,255};          //PWM values, 5..255 - LEAVE THE "0" THERE
int main(void)
{
    // Set PWM pin to output
     DDRB=2; PORTB=8;                       //define PB1 as output and pull-up switch on PB3

    // Set timer to do PWM for correct output pin and set prescaler timing
    TCCR0A = 0x21; // phase corrected PWM is 0x21 for PB1, fast-PWM is 0x23
    TCCR0B = 0x01; // pre-scaler for timer (1 => 1, 2 => 8, 3 => 64...)

    // Turn features on or off as needed
    ADC_on();
    ACSR   |=  (1<<7); //AC off

 

    uint16_t voltage;
    uint8_t i;
    uint8_t count=0,mode=0,lastmode=1,waspressed=0; //define some variables used below
    voltage = get_voltage();

    while(1) {
        

        // get an average of several readings
        voltage = 0;
        for (i=0; i<8; i++) {
            voltage += get_voltage();
            _delay_ms(3);
        }
        voltage = voltage/8;

if ((PINB&8)==0) {                   //when the button is pressed (PB3 pulled down)
    count++;                           //count length of button press
    if (count==16) {                    //pressed long (8*50ms)
        if (mode>0) {lastmode=1; mode=0;}  //was on?  -> off, but remember the mode
        else mode=lastmode;                   //was off? -> on, with previous mode.
    }
    waspressed=1;                      //remember that the button was pressed, see below
}
else {                               //button not pressed
    if (waspressed) {                    //but it was pressed, so it has just been released!
        waspressed=0;                      //reset that
        if (count<16 && mode>0) {           //really was a short press AND the light is on
            mode++; if (mode>=sizeof(modes)) mode=1; //next mode
        }
        count=0;                           //reset counter
    }
}

OCR0B=modes[mode];                     //set PWM level (0 is off)

if(voltage <=150){                      
    if (mode > 0){
        
        OCR0B=0;                           
    }
}
else{
    OCR0B=modes[mode];                     //set PWM level (0 is off)
}
_delay_ms(1);                         //wait a bit before checking again, important for counting
      

    }
}

die liefert mir je nach Spannung einen Wert zwischen 0 und 254. Mit Messungen kann ich diese Werte dann den entsprechenden Spannungen zuordnen. soweit kein Problem.

ich habe dann zum Testen einfach mal nach der Modiwahl per Taster eingefügt:

Code:
if(voltage <=150){                       
    if (mode > 0){
        OCR0B=0;
}
}

Habe den Treiber damit geflashed und am Netzteil betrieben.

Mein Problem: Wenn ich in der hellsten Stufe bin und ich drehe die Spannung runter, geht die LED ab 3,6V aus. Wenn ich in der dunkleren Stufe bin, geht die LED ab 3,2V aus.

Warum sind die Abschaltspannungen denn Modiabhängig ? Der Treiber hängt am Netzteil, das kann die Spannung konstant halten, egal welcher Strom fließt ?

Bin ein wenig ratlos, das gleiche Problem hatte ich schonmal bei einem früheren Projekt, habe dann die Akkustandsanzeige dann nur im Standby aktiviert.

Bin für jeden Ratschlag dankbar.

Lg Michael
 
  • Danke
Reaktionen: Liquidity

Wieselflinkpro

Flashaholic***
1 Dezember 2014
5.462
3.053
113
Goslar
Kann es sein, dass du derart große Spannungsabfälle zwischen Stromquelle und Treiber hast, so dass eigentlich korrekt bei 3V abgeriegelt wird?
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
was heißt denn korrekt bei 3V ?

Ich geh vom Netzteil mit recht kurzen 4mm² Kabeln direkt über Krokoklemmen an den Treiber. + an die Feder, - an ein angelötetes Kabel. Da sollte das eigentlich passen. Aber ich messe gleich mal nach.

LG Michael
 

Wieselflinkpro

Flashaholic***
1 Dezember 2014
5.462
3.053
113
Goslar
4mm² kling ja recht "vernünftig". War jedenfalls so ne Vermutung.
Ich habe vermutet, dass der Treiber bei 3V abregeln soll, daher "korrekt".

So viel Erfahrung habe ich mit Treiber-Programmieren auch noch nicht. Bei den 6V LEDs habe ich es aufgegeben, die Unterspannungswarnung mit Widerständen oder einer Code-Anpassung zu korrigieren.

P.S. es gibt von Tyokeeper auch einen Spannungsmonitor, der nur dazu da ist, um die Spannungswarnung zu kalibrieren. Damit wird die Spannung ausgeblinkt.
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
die Vermutung macht ja Sinn. Den Wert 150 habe ich einfach mal aus der Luft gegriffen, war jetzt keine konkrete Spannung sondern nur ein Test.

Ich habe aber irgendwo einen enormen Spannungsabfall im Treiber. in der dunklen Stufe zieht der Treiber etwa 0,1A, das Netzteil steht bei 4,2V, die LED bei 2,9V. Sobald ich die Spannung absenke, wird die LED sichtbar dunkler und der Strom sinkt auch ab. Das wären ja 1,3V Dropspannung

in der hohen Stufe zieht die LED 2,8A, am Netzteil kann ich bis 3,7V runter regeln, bis der Strom abfällt, die LED hat da 3,4V, 0,3V Dropspannung macht durch die Diode Sinn.

Ich schreibe jetzt immer Spannung am Netzteil, habe den Spannungsabfall über die Kabel gemessen, der ist zu vernachlässigen.

bin ein wenig ratlos, mit einem anderen Treiber habe ich das gleiche Problem. Daran liegt es also auch nicht.
 

Clamant

Stammgast
3 August 2016
57
18
8
Ohne mir das Layout angeschaut zu haben (bin nur am Handy), wie bekommt denn der Attiny seine Spannungsreferenz bzw. wo wird die Spannung abgegriffen?
Für mich hört es sich danach an, dass die Masse "verschoben" wird wenn bei verschiedenen Strömen unterschiedliche Schaltschwellen auftreten.
 

Tobias

Flashaholic**
22 Februar 2011
1.467
692
113
Aachen
Sieht so aus, als ob da etwas schwingt. Miß mal mit dem Oszilloskop.

Und löte mal einen keramischen Kondensator mit 0,1 uF sowie einen Elko mit 10-100 uF direkt am Treiber parallel zur Stromversorgung.
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
Das ist auch meine 1. Frage. Außerdem macht der Treiber doch eine PWM, oder. Wie misst du da die Spannung an der LED?

ja, der Treiber macht ne PWM. Aber ist nen Multimeter nicht träge genug, um das zu mitteln ? Selbst wenn nicht, spätestens bei 100% hat man keine PWM mehr.

Sieht so aus, als ob da etwas schwingt. Miß mal mit dem Oszilloskop.

Und löte mal einen keramischen Kondensator mit 0,1 uF sowie einen Elko mit 10-100 uF direkt am Treiber parallel zur Stromversorgung.

hab leider weder ein Oszilloskop, noch die passenden Kondensatoren. letztere kann ich aber bestellen.

Aber ich kann doch nicht der einzige mit dem Problem sein, es gibt doch unzählige Treiber mit Spannungsüberwachung ?

LG Michael
 

Clamant

Stammgast
3 August 2016
57
18
8
Ich seh jetzt auf der Website leider keinen Schaltplan und im Kopf bekomm ich das grade nicht hin, ohne Papier tu ich mich da immer schwer, ein nicht bandbegrenztes Signal auf nen ADC zu geben, ist eine Totsünde aber hier wahrscheinlich nicht das Problem. Könntest du mal den Spannungsabfall zwischen GND und LED minus an den verschiedenen IC's messen?
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
bei 4,2V eingangsspannung beträgt der Spannungsabfall auf kleiner Stufe: 1,7V, bei höchster Stufe 0,7V

gemessen zwischen GND und dem äußeren linken ( wenn man von vorne auf die Kontakte schaut ) Beinchen des AMC7135
 

Tobias

Flashaholic**
22 Februar 2011
1.467
692
113
Aachen
hab leider weder ein Oszilloskop, noch die passenden Kondensatoren. letztere kann ich aber bestellen.
Schalte Dein Multimeter auf Wechselspannungsmessung (AC Volt). Am unbelasteten Netzteil sollte es fast 0 Volt anzeigen. Miß damit direkt am Eingang des Treibers und schalte die LED ein. Jetzt wird eine Spannung zu messen sein. Das kommt von der PWM und der Reaktion des Netzteils darauf. Auf dem Oszilloskop könntest Du das sehen: es ist alles möglich, von Spannungsspitzen bis zu Schwingungen mit allen möglichen Frequenzen.
Dadurch wird der µC beeinflußt, evtl. auch nur die Spannungsmessung.
Das ganze ist natürlich spekulativ, Ferndiagnosen sind immer schwierig. Was hast Du für ein Netzteil?
 

Tobias

Flashaholic**
22 Februar 2011
1.467
692
113
Aachen
Das Netzteil macht einen brauchbaren Eindruck. Kein Edelgerät von einem der großen Hersteller aber auch kein Schrott.

Deine Messung bestätigt meine Vermutung. Wahrscheinlich kommt der Regler des Netzteils mit den PWM-Impulsen nicht zurecht. Um die Leitungen als Fehlerursache auszuschließen: ist die überlagerte Wechselspannung in etwa gleich groß, wenn Du am Netzteil bzw. am Treiber mißt?

Ich nehme an, daß das Problem mit den vorgeschlagenen Kondensatoren gelöst werden kann. Evtl. muß der Elko etwas größer sein.
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
ja, bin recht zufrieden mit dem Teil.

Also direkt am Treiber habe ich in etwa 0,2V AC gemessen, am Netzteilausgang 0,0V.

Kann das tatsächlich an den Leitungen liegen ?
 

chouster

Flashaholic**
22 Dezember 2010
1.528
904
113
Probier es doch mal mit Akku bzw. in einer Lampe. Ich habe kein Labornetzeil, die Spannungsanzeige und -abschaltung funktionieren in meinen Lampen mit Treibern auf 105C-Basis recht akkurat.
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
mh, da werden die tests aber ungleich schwieriger, da man ja "warten" muss, bis der Akku entsprechend entladen ist. Zum Testen eines neuen Treibers eigentlich keine wirkliche option.
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
hab es jetzt trotzdem mit akkus probiert. im Moment entspricht dieser Wert von 150 etwa einer Spannung von 3,6V.

Akku 3,7V: kleine Stufe geht, große nicht. Macht Sinn, da bei 3A die Spannung einbricht.

Akku 3,5V: Treiber geht gar nicht, macht auch Sinn. Also liegt das wohl wirklich am Treiber in Verbindung mit dem Netzteil. Das hätte ich jetzt nicht gedacht.

Kann man eventuell am Netzteil Kondensatoren zur Glättung anbringen, um damit wenigstens die Treiber testen zu können. ? Wenn ich weiß, dass die Treiber später in der Lampe dann funktionieren, kann ich damit leben.

LG Michael
 

chouster

Flashaholic**
22 Dezember 2010
1.528
904
113
Ich würde mal versuchen die Diode am Treiber zu überbrücken und dann nochmal mit Netzteil testen.

Versuch einer Erklärung:

PWM kommt einem schnellen Schalten einer induktiven Last gleich, ->Spannungspitzen, diese Laden den Kondensator über Versorgungsspannung, da die Diode ein Entladen verhindert (Stichwort Ladungspumpe) -> MCU sieht höhere Spannung als Versorgungsspannung.


An die Elektronikgurus: ich bin keiner von euch, bitte lyncht mich nicht.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: RC-Drehteile

Tobias

Flashaholic**
22 Februar 2011
1.467
692
113
Aachen
Kurz von Unterwegs:

- Den Treiber mit einem Akku versorgen und den Spannungsteiler am Analogeingang des µC variabel machen (Potentiometer).

- Die Kondensatoren nicht ans Netzteil anschließen sondern direkt an den Treiber.
 
Zuletzt bearbeitet:

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113

Habe die Diode überbrückt. Jetzt schlägt die Abschaltung am Netzteil in 100% bei 3,3V zu, in der kleinen Stufe ab 3,5V. Das sind auf jeden Fall schonmal bessere Werte, die enger zusammenliegen. Aber wieso bringt das brücken der Diode was ? Das ist doch in erste Linie die Diode für den Verpolungsschutz ?

@Tobias: Gute Idee mit dem Poti am spannungsteiler. Werde ich probieren. passende Kondensatoren habe ich keine da.
 
  • Danke
Reaktionen: chouster

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
habe jetzt nochmal einen Test mit Akku gemacht. Dazu das Programm etwas geändert, 3 Modi statt zwei: 10,100 und 255

und beim Unterschreiten der Spannung nicht ausschalten, sondern einen Modi reduzieren.

Als akku habe ich einen halb vollen 16340 genommen, bei 100% hat er bei 3,0V komplett ausgeschaltet, bei der mittleren Stufe hat er bei 3,2V eine Stufe runtergeschaltet. Und auf der kleinen gar nicht, da lag die Spannung noch bei 3,4V. Werde die Brücke der diode wieder entfernen und nochmal versuchen.
 
  • Danke
Reaktionen: chouster

chouster

Flashaholic**
22 Dezember 2010
1.528
904
113
Habe die Diode überbrückt. Jetzt schlägt die Abschaltung am Netzteil in 100% bei 3,3V zu, in der kleinen Stufe ab 3,5V. Das sind auf jeden Fall schonmal bessere Werte, die enger zusammenliegen. Aber wieso bringt das brücken der Diode was ? Das ist doch in erste Linie die Diode für den Verpolungsschutz ?
Das hatte ich in Beitrag #25 bereits versucht zu erklären, war ein nachträgliches Edit.
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
ah, das hatte ich nicht gesehen.

also auch mit einer Batterie ist die Überwachung nicht so, wie es sein sollte. Ich werde das mit Kondensatoren probieren.
 

Tobias

Flashaholic**
22 Februar 2011
1.467
692
113
Aachen
Habe die Diode überbrückt. Jetzt schlägt die Abschaltung am Netzteil in 100% bei 3,3V zu, in der kleinen Stufe ab 3,5V. Das sind auf jeden Fall schonmal bessere Werte, die enger zusammenliegen. Aber wieso bringt das brücken der Diode was ? Das ist doch in erste Linie die Diode für den Verpolungsschutz ?
Die Diode macht das, was unter dem Schaltplan steht. Neben dem Verpolungsschutz sorgt sie dafür, daß der µC bei 6 Volt Versorgungsspannung nicht zerstört wird. Die meisten 5 V-µC können noch mit 5,5 V betrieben werden, so daß das bei einem Spannungsabfall von 0,5-0,7 V gerade noch geht.
Außerdem sorgt sie dafür, daß der µC beim kurzzeitigen Ausschalten (Moduswechsel) für einige Zeit von C1 versorgt wird und die Tastendrücke zählen kann. Ohne die Diode würde C1 über die LED entladen und der µC jedesmal neu gestartet.
Ich bin mir nicht so ganz im Klaren darüber, warum die Spannungsmessung hinter D1 erfolgt. Damit ist die gemessene Spannung von der Temperatur (erwünscht?), von der Belastung durch den µC (nur minimal) und von der Durchlassspannung von D1 abhängig. Warum wird nicht direkt an Vin gemessen? Will man die wahrscheinlich minimale Tiefpaßfilterwirkung von C1 und D1 nutzen, um dem ADC im µC ein saubereres Signal anzubieten?

Durch das Überbrücken der Diode sieht der µC eine etwas höhrer Spannung und damit einen "volleren Akku", was zu einer späteren Abschaltung führt.
 
  • Danke
Reaktionen: light-wolff

Tobias

Flashaholic**
22 Februar 2011
1.467
692
113
Aachen
@Tobias: Gute Idee mit dem Poti am spannungsteiler. Werde ich probieren. passende Kondensatoren habe ich keine da.
Hast Du alte Computerplatinen? Da sitzen ganz gute Elkos und Keramikkondensatoren drauf.

Noch ein Tip: wenn es nur um den Softwaretest geht, kannst Du den Strom durch die LED mit einem Vorwiderstand soweit reduzieren, daß die (wechselnde) Last keine Probleme verursacht.
 

chouster

Flashaholic**
22 Dezember 2010
1.528
904
113
Die Diode macht das, was unter dem Schaltplan steht. Neben dem Verpolungsschutz sorgt sie dafür, daß der µC bei 6 Volt Versorgungsspannung nicht zerstört wird. Die meisten 5 V-µC können noch mit 5,5 V betrieben werden, so daß das bei einem Spannungsabfall von 0,5-0,7 V gerade noch geht.

Dass diese Treiber für 6V Versorgungsspannung ausgelegt sind, wäre mir neu. Bei den meisten Bezugsquellen findet sich eine Angabe von max. 4,5V. Und aufgrund der wahrscheinlich unabsichtlich integrierten Boost-Funktion wäre es auch nicht ratsam 6V in Kombination mit PWM anzulegen.
Außerdem sorgt sie dafür, daß der µC beim kurzzeitigen Ausschalten (Moduswechsel) für einige Zeit von C1 versorgt wird und die Tastendrücke zählen kann. Ohne die Diode würde C1 über die LED entladen und der µC jedesmal neu gestartet.
So funktionieren diese Treiber meines Wissens aber nicht. Der µC startet wirklich jedes mal neu. Zuvor hat er sich gemerkt wie lange man in einem bestimmten Modus war und und ruft dann entsprechend den gleichen oder den nächsten auf.
Ich bin mir nicht so ganz im Klaren darüber, warum die Spannungsmessung hinter D1 erfolgt. Damit ist die gemessene Spannung von der Temperatur (erwünscht?), von der Belastung durch den µC (nur minimal) und von der Durchlassspannung von D1 abhängig. Warum wird nicht direkt an Vin gemessen? Will man die wahrscheinlich minimale Tiefpaßfilterwirkung von C1 und D1 nutzen, um dem ADC im µC ein saubereres Signal anzubieten?
Wahrscheinlich weil niemand in den Dschungel zog und die Banane gerade bog. Nein, im Ernst: das Layout ist suboptimal. Auch der Kondensator wäre wohl vor der Diode besser aufgehoben als dahinter.
Durch das Überbrücken der Diode sieht der µC eine etwas höhrer Spannung und damit einen "volleren Akku", was zu einer späteren Abschaltung führt.
Das ist klar, gilt aber nur für den PWM-freien Betrieb. Der Unterschied der Abschaltspannung zischen dem 100%-Mode und dem PWM-Mode ist so allerdings geringer, da der Boost-Schaltkreis eliminiert ist.
 

RC-Drehteile

TaschenlampeneigenbauSpezi & Ehrenmitglied
4 Juli 2010
6.096
5.098
113
Dann bau dir doch eins, dafür gibts passende Bausätze.
Ich habe mir auch mal eins zusammengelötet, bei dem die SMDs aber schon drauf waren.

gute Idee, das werde ich mir mal bestellen. Danke

an die anderen: Ich danke euch allen für eure tatkräftige Unterstützung. Ich will die Treiber möglichst so betreiben, wie ich ihn kaufen kann, also nicht viel dran rumbasteln, sondern meine Firmware drauf flashen und fertig, da ich mich mit der Elektronik einfach kaum auskenne.

Ich habe erstmal einen befriedigenden Workaround gefunden: meine 100% Stufe sind jetzt nicht mehr 255, sondern nur noch 254. In der Helligkeit macht sich das nicht bemerkbar, in der Spannungsmessung allerdings schon. Bei 3,1V wird jetzt von der hellsten in die mittlere Stufe geschaltet, bei 3,0V von der mittleren in die dunklere und wieder bei 3,0V geht die Lampe dann ganz aus. Ist so wirklich brauchbar. Für die Zukunft werde ich mir da trotzdem was anderen überlegen, für ein aktuelles Projekt aber ausreichend.

LG Michael
 

Tobias

Flashaholic**
22 Februar 2011
1.467
692
113
Aachen
gute Idee, das werde ich mir mal bestellen. Danke
Überlege es Dir gut. Ich wollte mir auch eins bestellen und habe es mir glücklicherweise vorher bei jemandem angekuckt. Es ist ein nettes Spielzeug für unterwegs aber meiner Meinung nach kein Ersatz für ein richtiges Oszilloskop.
Nimm besser ein einfaches für 200-500 Euro von Rigol, UNI-T usw. Davon hast Du deutlich mehr als von so einem Einfachstoszilloskop.

Dass diese Treiber für 6V Versorgungsspannung ausgelegt sind, wäre mir neu. Bei den meisten Bezugsquellen findet sich eine Angabe von max. 4,5V. Und aufgrund der wahrscheinlich unabsichtlich integrierten Boost-Funktion wäre es auch nicht ratsam 6V in Kombination mit PWM anzulegen.
Ich beziehe mich auf das, was unter dem verlinktes Schaltplan steht und da steht "6 V", auch wenn man das mit Batterien oder Akkus nicht sinnvoll erreichen kann. Selbst vier frische Alkali-Mangan-Batterien (in Reihe geschaltet) haben etwas mehr als 6 V.

So funktionieren diese Treiber meines Wissens aber nicht. Der µC startet wirklich jedes mal neu. Zuvor hat er sich gemerkt wie lange man in einem bestimmten Modus war und und ruft dann entsprechend den gleichen oder den nächsten auf.
Ich bin kein Programmierer und habe den Code nur "quergelesen". Liegen die Variablen in einem nichtflüchtigen Speicher? Der Text unter dem Schaltplan sagt auch, daß die Diode dafür sorgt, daß der Kondensator nur über den µC entladen wird. Welchen Sinn, außer den µC nach dem Abschalten für kurze Zeit weiterlaufenzulassen und den Speicher zu erhalten, sollte das haben?

Wahrscheinlich weil niemand in den Dschungel zog und die Banane gerade bog. Nein, im Ernst: das Layout ist suboptimal. Auch der Kondensator wäre wohl vor der Diode besser aufgehoben als dahinter.
Dann würde die o. g. und unter dem Schaltplan erwähnte Funktion fehlen.
Kondensatoren an der Stromversorgung halte ich prinzipiell für Sinnvoll. Allerdings fehlt in einer Taschenlampe oft der Platz und direkt an einem Akku sind sie oft verzichtbar.
 
Zuletzt bearbeitet von einem Moderator:

Beaker

Flashaholic*
20 Januar 2016
541
266
63
Berlin
Ich beziehe mich auf das, was unter dem verlinktes Schaltplan steht und da steht "6 V".
Ja, ist aber falsch. Die 105C werden auch mit Schottky-Dioden ausgeliefert, bei tatsächlich angelegten 6V würde die max. spezifierte Versorgungsspannung des Attiny von 5,5V überschritten.
Ich bin kein Programmierer und habe den Code nur "quergelesen". Liegen die Variablen in einem nichtflüchtigen Speicher? Der Text unter dem Schaltplan sagt auch, daß die Diode dafür sorgt, daß der Kondensator nur über den µC entladen wird. Welchen Sinn, außer den µC nach dem Abschalten für kurze Zeit weiterlaufenzulassen und den Speicher zu erhalten, sollte das haben?
Die Standard-Firmware des 105C arbeitet mit ontime-memory, d. h. nach Verwenden eines Modes für einen bestimmten Zeitraum wird dieser im EEPROM gespeichert.
 
Zuletzt bearbeitet:

Clamant

Stammgast
3 August 2016
57
18
8
Was mir grade zum Quellcode aus dem Startpost auffällt:
voltage = get_voltage(); vor der while(1) kann raus.
OCR0B=modes[mode]; //set PWM level (0 is off)

if(voltage <=150){
if (mode > 0){

OCR0B=0;
}
}
else{
OCR0B=modes[mode]; //set PWM level (0 is off)
}
kann man einfach zu
if(voltage <=150)
{
mode=0;
}
OCR0B=modes[mode]; //set PWM level (0 is off)
umbauen, etwas eleganter und besser wartbar: keine magic numbers im Quellcode.

Zur Diode: die Stromaufnahme vom Attiny ist ja leider spannungsabhängig, damit schwankt die Durchlassspannung der Diode auf jeden Fall etwas (plus Temperatureinfluss), dementsprechend, führt das Überbrücken zu konstanteren Ergebnissen.
Dann würde ich den Code noch so anpassen, dass der ADC die Spannung nur in der High- oder Lowphase der PWM messen darf, damit dürfte schon etwas definierteres Verhalten vorliegen.
 
  • Danke
Reaktionen: Maiger