Forum: Projekte & Code Glühwürmchen in Rotkohlglas gefangen


von chris_ (Gast)


Lesenswert?

> Man kann also sowas wie ein
> gepulstes Nachleuchten wie eine Welle die durch den Schwarm läuft
> beobachten.
Dazu das Video 2 hier:
http://tinkerlog.com/2009/06/25/64-synchronizing-fireflies/
Ich vermute, dass der Lichtsensor des einzelnen "Glühwürmchens" nicht 
alle anderen sehen kann, sondern nur seine Nachbarn. Trotzdem entsteht 
keine Welle.

von Hagen R. (hagen)


Lesenswert?

als sich fortpflanzende Welle, meinte ich. Ich habe damals einiges an 
Abhandlungen zu Glühwürmchens gelesen, besonders war ich auf der Suche 
nach digitalisierten Leuchtmustern.

Das von dir angesprochene Viedeo zeigt beide angesprochenen Effekte. 1. 
werden sich lange Dunkelperioden ergeben und dann durch wenige 
Glühwürmchens veranlasst leuchten in deren Umgebung immer mehr 
gleichzeitig auf. 2. der Impuls, eg. die Wellenfront pflanzt sich fort. 
Ist eigentlich auch logisch da ja die Glühwürmchens evolutionär keinen 
Vorteil hätten wenn sie auf 100'erte Kilometer Entfernung einem Weibchen 
antworten würden. Aus Sicht eines größeren örtlich verteilten Schwarmes 
muß es also dann so aussehen das igrendwo im Schwarm das Leuchten 
einsetzt, die umliegenden Glühwürmchens angeregt werden und dadurch 
ihrerseits weiter entfernte Glühwümchens zum Leuchten bringen. Die Welle 
pflanzt sich durch den Schwarm fort.

Übrigens meine ich auch das deine verlinkte Simulation nicht korrekt 
modelliert wurde. Die Glühwürmchen antworten schon als Masse in Wellen 
auf ein Reizsignal. Das heist aber eben nicht das sie sich von ihrem 
Timing her auf die Zukunft betrachtet hin synchronisieren. So als ob sie 
einen inneren Zeitgeber hätten, am Anfang unsynchronisiert jeder mit 
seiner eigenen Frequenz und am Ende hin alle schlagartig.
Dies widerspricht dem evolutionären Sinn des Ganzen. Es geht um 
Fortplanzung und das Anlocken möglichst vieler Männchen aus Sicht der 
Weibchens. Was ich aus wissenschaftlichen Abhandlung weiß deutet eher 
darauf hin das es immer die Weibchen sind die das Leuchten auslösen. 
Ergo heist dies für ein gutes Modell: es müssen zwei unterschiedliche 
Arten von Glühwürmchens modelliert werden, einmal Weibchens und ein 
anders Mal Männchen. Und beide unterscheiden sich in ihrem Verhalten wie 
sie auf Leuchtmuster anderer reagieren werden.

Warum sollte in einem Schwarm aus par wenigen Weibchens und ne Handvoll 
Männchens auch die zur Zeit nicht blinkenden Weibchens entschließen, 
quasi Energie opfern, und synchron mit allen anderen Glühwürmchens 
zusammen zu leuchten ? Sie haben keinen Vorteil gegenüber ihrer 
Fortpfanzungskonkurrentinnen wenn sie so wie Männchen auf das Leuchten 
der Konkurrentinnen reagieren würden.

In einem guten Modell kann der Zustand "alle leuchten demnächst zum 
gleichen Zeitpunkt" garnicht vorkommen dürfen.

Gruß hagen

von chris_ (Gast)


Lesenswert?

> es müssen zwei unterschiedliche
> Arten von Glühwürmchens modelliert werden, einmal Weibchens und ein
> anders Mal Männchen.

Wobei man vermuten könnte, das es ausreicht, wenn nur ein Geschlecht 
leuchtet.

von chris_ (Gast)


Lesenswert?

Das hier beschriebene Verfahren
http://www.rlocman.ru/i/File/2007/10/24/2006_WSL_Firefly_Synchronization_Ad_Hoc_Networks.pdf

zur Synchronisation der Glühwürmchen schein ja recht einfach zu sein, 
wie in dem Bild zu sehen ist:
http://cdn.instructables.com/FMB/LST2/F03GBAW2/FMBLST2F03GBAW2.LARGE.jpg

Es wird eine Phase linear bis zu einem Schellwert erhöht. Wenn der 
Schwellwert erreicht ist, blitzt das Glühwürmchen. Es kann früher 
blitzen, wenn es andere Glühwürmchen sieht.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal eine Simulation mit 8x8 Glühwürmchen.

Der Algorithmus für ein einzelnes Glühwürmchen ist im wesentlichen 
folgender:
1
phase++; 
2
phase+=seeLight(x,y)/20*phase/255;

Wobei seeLight(x,y) im die Summe der Helligkeiten der Farbe Grün der 
benachbarten Glühwürmchen zurück gibt.

von Der_Kochloeffel (Gast)


Lesenswert?

Hallo,
eine Frage an jemanden der sich hier gut auskennt?

Habe die Glühwürmchen nachgebaut, und Funktioniert ganz gut.
Nun die Fragen:

1. was muss ich wo am Code weglassen, oder verändern, wenn ich keine 
Spannungsüberwachung des Akkus und der Solarzelle wünsche, so das die 
Würmchen gleich loslegen wenn ich einen Akku einsetzte, b.z.w. die 
Elektronik einer Gartensolarlampe auf Nacht schaltet und meinen mC mit 
Energie versorgt?
Also völlig ohne Tag/Nacht und Akku Überwachung.

2. wenn ich statt des Tiny 45 einen Tiny44 20 PU also einen mit 14 
Beinchen einsetzten möchte, habe ich den Code, also die Befehle 
entsprechend angepasst laut beiden Datenblättern, aber ich bekomme das 
Programm einfach nicht zum Laufen?
Das einzige das ich nicht anpassen konnte waren die 2,5v Interne 
Reverenz Spannung, bei meinem Tiny44 sind das 1,1V oder leitung zum 
entsprechenden Port mit VCC also 5V Legen, und hatte dann testhalber 
Akkuspannung von 1,2 V drann und auch 5 V aber das hat nicht 
funktioniert, oder es liegt an etwas anderem was nicht so ganz passend 
ist?


Ziel hiervon wäre ein bis Zwei mehr LED Ports und Externen Oszilator 
verwenden und dann auch eventuell noch mehr LED Ports zu verwenden.

Da aber das Programm auf meinem Tiny44 scheinbar nichts macht, also 
nichts an den LED's erkennbares, kann ich auch nicht Testen ob sich das 
Programm, wie weiter oben als Tip von Hagen beschrieben erweitern lässt?

Geflasht habe ich alles ohne Bootloader, einfach nur das Hexfile das 
nach anwendung von Make ensteht habe ich auf den mC übertragen.


Wäre sicherlich für andere auch Hilfreich, da eine Solarlampe schon fast 
alles mit sich bringt was man zum Laden und Tag / Nacht erkennung 
benötigt, und die Sorte die ich zum Basteln hier habe, hat eine sehr 
gute Diode verbaut, Spannungsverlust Solarpanel zum Akku 0,1 V konnte 
ich Messen.

Von da her ist es ja eigentlich einfacher das der Zweckentfremdetetn 
Electronic der Lampe zu überlassen oder?




Mit Freundlichem Gruß
Michael

von Der_Kochloeffel (Gast)


Lesenswert?

Hallo,
hab das Problem selbst gelöst bekommen, hier der Code ohne die Solar und 
Akku Messung und damit Zwei freien Pin's ähem Port's!

Wenn es Jetzt Nacht ist bekommt der Attiny von der ehemaligen 
Gartenlampe, also der Stepup erst Energie, und dann läuft das Programm 
einfach und die Glühwürmchen fangen an zu Leuchten!

Lg
Michael
zuerst die firefly.c
1
#include "firefly.h"
2
3
firefly_t fireflies[12];                            // 12 fireflies
4
uint8_t   ocr_data[6];                              // OCR0A and DDRB datas for Timer0 Compare Match ISR, computed PWM Dutycycles
5
uint16_t  hungry_threshold;                         // threshold for lightning fireflies
6
7
// 12 fixed registers assigned to speedup ISRs, Timer0 Overflow and Output Compare
8
register uint16_t  _saveZ    asm("r2");             // save Z register
9
register uint16_t  _saveY    asm("r4");             // save Y register
10
register uint8_t   _saveSREG asm("r6");             // save SREG
11
register uint8_t   _zero     asm("r7");             // zero Register
12
register uint8_t*  _ocr_ptr  asm("r8");             // pointer to current ocr_data[] entry
13
register firefly_p _fly_ptr  asm("r10");            // pointer to current firefly[] entry
14
register uint8_t   _ddr_idx  asm("r16");            // index into ddr_data[] entry, 0 upto 15 in +4 steps
15
register uint8_t   flags     asm("r17");
16
17
18
static void init(void) {
19
  // init global registers
20
    _fly_ptr = (firefly_p)&fireflies;
21
    _zero    = 0;
22
    _ddr_idx = 0;
23
    flags    = 0;
24
  // enable watchdog ISR
25
    wdt_reset();
26
    WDTCR |= (1 << WDE) | (1 << WDCE);
27
    WDTCR  = (1 << WDIE);
28
  // Port
29
    PORTB  = 0;
30
  DDRB   = 0;
31
  // Power Reduction, enable ADC for setup
32
    PRR    = (1 << PRTIM1) | (1 << PRTIM0) | (1 << PRUSI);
33
  //  AC/ADC
34
    ACSR   = (1 << ACD);
35
    ADCSRA = 0;
36
    ADCSRB = 0;
37
    DIDR0  = (1 << ADC0D) | (1 << ADC2D) | (1 << ADC3D) | (1 << AIN1D) | (1 << AIN0D);
38
  // Power Reduction, enable Timer0
39
    PRR    = (1 << PRTIM1) | (1 << PRUSI) | (1 << PRADC);
40
  // Pin Change Mask on PB2, for calling Bootloader
41
    GIMSK  = 0;
42
    PCMSK  = (1 << PCINT2);
43
  // Timer0, Overflow & Compare Match ISR used
44
    TCCR0A = 0;
45
    TCCR0B = 0;
46
    OCR0A  = 0;
47
    TCNT0  = 0;
48
    TIMSK  = (1 << OCIE0A) | (1 << TOIE0);
49
    TIFR   = (1 << OCF0A) | (1 << TOV0);
50
  // init PRNG, load last seed from EEPROM, calculate next seed and store back to EEPROM, use another polynom as in lfsr()
51
    eeprom_read_block((uint8_t *)&seed, (uint8_t *)(0), 4);
52
    lfsr_poly(32, 0x8140C9D5);
53
    eeprom_write_block((uint8_t *)&seed, (uint8_t *)(0), 4);
54
}
55
56
static uint16_t update_fireflies(void) {
57
58
  // update waves
59
    firefly_p fly = (firefly_p)&fireflies;
60
    firefly_p cur;
61
    for (uint8_t i = 12; i > 0; i--) {
62
      if ((fly->wave_ptr == 0) && (fly->hungry == 0)) {
63
        uint16_t* data = (uint16_t*)&wave_data[lfsr(5)];                // choose wave for lightning from a set of 32 waves randomly
64
        cur = fly;
65
        uint16_t ptr = pgm_read_word_inc(data);
66
        cur->wave_end = pgm_read_word_inc(data);
67
        cli();
68
        cur->wave_ptr = ptr;
69
        flags |= FLAG_TIMER;
70
        sei();                                                          // update next energy points, each neighbor fly becomes half of energy points
71
        uint16_t energy = pgm_read_word_inc(data);
72
        while (energy > 0) {
73
          cur->energy += energy;
74
          if (++cur >= &fireflies[12]) cur = (firefly_p)&fireflies;
75
          energy /= 2;
76
        }
77
      }
78
      fly++;
79
    }
80
  // calc feeding step and update fireflies hungry value
81
    uint16_t food = 0xFFFF;
82
    uint16_t threshold = hungry_threshold;
83
    fly = (firefly_p)&fireflies;
84
    for (uint8_t i = 12; i > 0; i--) {
85
      uint16_t hungry = fly->hungry;
86
      if (fly->energy > 0) {
87
        if ((hungry == 0) || (hungry > threshold)) {
88
          uint16_t max = 0xFFFF - fly->energy;
89
          if (hungry < max) hungry += fly->energy;
90
            else hungry = 0xFFFF;
91
          if (threshold < 0xFFF0) threshold += 3;
92
        } else if (threshold > 1) {
93
          threshold -= 2;
94
        }
95
      }
96
      if (hungry < food) food = hungry;
97
      fly->hungry = hungry;
98
      fly->energy = 0;
99
      fly++;
100
    }
101
  // hungry_threshold ensures that fireflies with low hungry is ligthning early and so we get a ligthing in periodic intervals of groups of fireflies,
102
  // eg. or some longer delays of no lightning dependend on how many energy is consumed by the ligthning waves
103
    hungry_threshold = threshold;
104
  // feeding
105
    fly = (firefly_p)&fireflies;
106
    for (uint8_t i = 12; i > 0; i--) {
107
      fly->hungry -= food;
108
      fly++;
109
    }
110
  // return minimal watchdog timer cycles for sleep mode, eg. food
111
    return food;
112
}
113
114
static void measure_isnight(void) {
115
116
    flags &= ~FLAG_ISNIGHT;
117
  // enable ADC Noise Reduction Sleep Mode
118
    MCUCR  = (1 << SE) | (1 << SM0);
119
  // first dummy reading, VRef=2.56V
120
121
  // read battery voltage
122
123
 // read solar panel voltage
124
  flags |= FLAG_ISNIGHT;
125
  // disable ADC
126
    ADCSRA = 0;
127
    PRR    = (1 << PRTIM1) | (1 << PRUSI) | (1 << PRADC);
128
}
129
130
static uint16_t wdt_setup(uint16_t time) {
131
132
  // setup watchdog to next highest timeout that match time
133
    uint16_t res = 1;
134
    uint8_t  idx = 1;
135
    while ((res <= time) && (idx < 10)) {
136
      res += res;
137
      idx++;
138
    }
139
    res /= 2;
140
    if (--idx > 7) idx = (idx & 0x0F) | (1 << WDP3);
141
    idx |= (1 << WDIE);                                                 // enable WDT-ISR
142
    wdt_reset();
143
    WDTCR |= (1 << WDE) | (1 << WDCE);
144
    WDTCR  = idx;
145
    return res;
146
}
147
148
int main(void) {
149
150
    init();
151
    sei();
152
153
    uint16_t timeout = 0;   // remaining time in WDT cycles a 16ms upto next event
154
    uint16_t measure = 0;   // remaining time upto next measurement
155
156
    while (1) {
157
    // check for update, FLAG_UPDATE is set in Watchdog ISR
158
      if (flags & FLAG_UPDATE) {
159
        flags &= ~FLAG_UPDATE;
160
        if (timeout == 0) {
161
          if (flags & FLAG_ISNIGHT) {
162
            timeout = update_fireflies();
163
            if (measure <= timeout) {
164
              measure = MEASURE_INTERVAL;
165
              flags |= FLAG_MEASURE;
166
            } else measure -= timeout;
167
          } else {
168
            measure = MEASURE_INTERVAL;
169
            timeout = measure;
170
            flags |= FLAG_MEASURE;
171
          }
172
        }
173
        timeout -= wdt_setup(timeout);
174
      }
175
    // check iff we playing waves
176
      if (flags & FLAG_TIMER) {
177
      // enable PWM-Timer0, XTAL / 64
178
        TCCR0B = (1 << CS01) | (1 << CS00);
179
      // sleep mode idle
180
        MCUCR  = (1 << SE);
181
        sleep_cpu();
182
      } else {
183
      // disable Timer0
184
        TCCR0B = 0;
185
        OCR0A  = 0;
186
        TCNT0  = 0;
187
      // enable deep Power Down Sleep Mode
188
        MCUCR  = (1 << SE) | (1 << SM1);
189
      // enable Pin Change for Bootloader on PB2
190
        PORTB  = 0;
191
        DDRB   = 0;
192
        cli();
193
        GIMSK  = (1 << PCIE);
194
        GIFR   = (1 << PCIF);
195
        sei();
196
        sleep_cpu();
197
        GIMSK  = 0;
198
      // check iff we must measure battery and solar panel
199
        if (flags & FLAG_MEASURE) {
200
          flags &= ~FLAG_MEASURE;
201
          measure_isnight();
202
        }
203
      }
204
    }
205
}

dann noch die firefly.h
1
#ifndef FIREFLY_H
2
#define FIREFLY_H
3
4
#include <inttypes.h>
5
#include <avr/eeprom.h>
6
#include <avr/pgmspace.h>
7
#include "lfsr32.h"
8
#include "wave.h"
9
10
/*
11
   PB2 =      = InOut = LED0
12
   PB1 =      = InOut = LED1
13
   PB0 =      = InOut = LED2
14
   PB5 =      = InOut = LED3
15
16
17
   connection schemata for LEDs are:
18
   - two antiparallel connected LEDs to two wire, makes six such wires
19
   - connect these wires to PB0-PB1, PB0-PB2, PB0-PB5, PB1-PB2, PB1-PB5, PB2-PB5
20
   - the order of these connections are not relevant
21
   
22
   setup:
23
   - install AVRootloader.HEX on AVR
24
   - setup fuses to XTAL=8Mhz, no Brownout Detection, no WDTON
25
   - connect RS232 on PB2 and test Bootloader (reading/writing EEPROM)
26
   - setup fuses to disable RESET Pin and lockbits
27
   - connect with bootloader an program FireFly.HEX
28
*/
29
30
#define FLAG_WAVE           (1 << 0)                    // PWM is active for a LED
31
#define FLAG_TIMER          (1 << 1)                    // PWM is active
32
#define FLAG_UPDATE         (1 << 2)                    // Watchdog signaled a update
33
#define FLAG_ISNIGHT        (1 << 3)                    // is at night
34
#define FLAG_MEASURE        (1 << 4)                    // measure battery and solarpanel
35
36
#define MEASURE_INTERVAL    (uint16_t)(1 *  1200)       // each 6 minutes measure interval
37
#define BATTERY_OK          (uint16_t)(0 * 400)       // 0.9 Volt
38
39
// LED Rows, Pins connected to LEDs
40
#define R0  (1 << PB0)
41
#define R1  (1 << PB1)
42
#define R2  (1 << PB2)
43
#define R3  (1 << PB5)
44
45
// bitmasks for driving LEDs on PORTB and DDRB, first value are for PORTB (always 1), 
46
// next 3 values for DDRB to connect LEDs to GND (on) or as high-Z input (off)
47
// you can reorder this array iff needed so long as each row depends to only one PORTB value,
48
// means in each row you can savely reorder the colums and/or you can savely reorder the rows.
49
prog_uint8_t ddr_data[16] = {
50
    R0, R0^R1, R0^R2, R0^R3,
51
    R1, R1^R0, R1^R2, R1^R3,
52
    R2, R2^R0, R2^R1, R2^R3,
53
    R3, R3^R0, R3^R1, R3^R2};
54
55
// a Firefly
56
typedef struct {
57
    uint16_t wave_end;                              // pointer to end of wave samples
58
    uint16_t wave_ptr;                              // pointer to current wave sample == PWM Dutycylce of one LED
59
    uint16_t hungry;                                // energy points that must be feed to activate lightning of firefly
60
    uint16_t energy;                                // next energy points to add to hungry
61
} firefly_t;                                        // one energy/hungry point relates to one WDT cycle of 16ms
62
63
typedef firefly_t* firefly_p;
64
65
// some macros, don't use WinAVR GCC default macros because these produce inefficient compiled code
66
#define  wdt_reset()         asm volatile("wdr")
67
#define  cli()               asm volatile("cli")
68
#define  sei()               asm volatile("sei")
69
#define  sleep_cpu()         asm volatile("sleep")
70
71
// read word from FLASH with postincrement addresspointer
72
#define pgm_read_word_inc(addr) \
73
(__extension__({                \
74
    uint16_t __result;          \
75
    __asm__                     \
76
    (                           \
77
        "lpm %A0, Z+" "\n\t"    \
78
        "lpm %B0, Z+" "\n\t"    \
79
        : "=r" (__result),      \
80
          "=z" (addr)           \
81
        : "1" (addr)            \
82
    );                          \
83
    __result;                   \
84
}))
85
86
87
#endif

von Der_Kochloeffel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
noch ne Frage, ich habe Versucht die Tierchen zu erweitern um genau Zwei 
LED Port's, alles war ein wenig extrem schwer für mich, und es tut sich 
absolut nichts an meinen LED's auch nicht wenn ich nur Einen Port mehr 
hineinschreibe, und 6 LED Ports scheinen gar unmöglich zu sein?

Mir gehen einfach die Register aus, also gehen bei diesem Programm 
scheinbar nur Maximal 4 eventuell 5 Port's für die LED's.

Kann das denn sein, ich hänge gerade mal mein beim Registerumherschieben 
entstandenes Wunderwerk als Datei an, und Hoffe auf Ratschläge?

Ach ja Umschreiben auf andere Mega's oder Tiny's scheint ja auch nicht 
so einfach, da andere Typen die Befehle oder gar andere Voraussetzungen 
garnicht erfüllen können?

Gibt's wirklich nur 32 Register, wo ich auch dann nur noch die oberen 15 
für einige Dinge verwenden kann und darf?

Über Antworten würde ich mich riesig freuen, versuche mich schon ne 
ganze Ecke an dem Projekt.
LG
Michael

von Bernhard M. (boregard)


Lesenswert?

Hi,

was meinst Du mit 2 LED Ports? Willst Du um 2 LEDs erwitern, oder um 
wirklich um 2 Anschlüsse, also das Charlieplexing mit dann 30?? LEDs?
Da kommt doch vom Multiplexen gar nicht mehr viel raus, da wird das 
Puls-Pausen Verhältnis reichlich schlecht.

Bedenke dabei auch, daß Hagen hier das Charlieplexing in den 
Interruptroutinen ziemlich optimiert hat, mit fest vergebenen Registern 
u.ä.

Bevor Du den Code nicht genau verstanden hast (habe ich auch einige Zeit 
gebraucht ...), und nicht weisst, wie der Compiler mit den Registern 
umgeht, wirst Du das nicht erweitern können.

Dann ist allerdings das Umschreiben auf andere AVRs auch nicht mehr 
schwer.

Gruß,
Bernhard

von Der_Kochloeffel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Bernhard,

ja das hatte ich eigentlich vor, ziel der Sache ist das es noch 
realistischer wirkt.

Es sollen eigentlich nicht mehr gleichzeitig leuchten, sondern eher das 
sich die Stellen an denen die Tierchen auf dem Grünzeug angebracht sind 
besser verteilen, so das es nach mehr Zufall aussieht.

Oder auch das mehr zur gleichen Zeit Leuchten?

Die Hardware ist schon fertig, 30 SMD LED's in Grün mit Schwarzen 0,1 mm 
Drähtchen die mit winzigen Heißklebetropfen auf einem recht echt 
aussehenden, aus Drei Verschiedenen Pflanzen bestehenden Gestrüpp 
sitzen, die Drähte sind sogar wenn man es weiß, nahezu unsichtbar um die 
Ästchen gewickelt, und damit es weniger Eckig aussieht hat jede LED 
einen winzigen Tropfen Heißkleb oben drauf bekommen, ich Schick meinen 
letzten Versuch, mit Änderungen an der isrs.S Datei mit, in dem ich 
Versuchte Zwei LED Ports auf 4 Register zu Packen, aber es hat sich 
nichts getahn.
LG
Michael

von Der_Kochloeffel (Gast)


Angehängte Dateien:

Lesenswert?

Nachtrag:

Hier noch die Bilder der Hardware, zur Zeit noch mit Kabeln zu einem 
mini Steckbrett, da die Fassung mitten in dem Gebüsch versteckt ist, und 
so das Testen einfacher ist.

Überlege noch ob ich die Tiere unter eine Art Käseglocke packen soll?
könnte eventuell noch besser aussehen, auf den Boden etwas Sand und Erde 
oder Torf???

Habe auch ein Video gemacht das halt nur 12 angesteuerte von den 30 in 
Aktion zeigt.
Einstellungen am Prescaler ziemlich unten in der firefly.c ist auf 8 
gestellt anstatt 64, und der eine Timerwert in der firefly.h ist auf 1 * 
250 gestellt.
Und das Programm hat das Batterie und Nacht Flag dauernd gesetzt.


http://www.youtube.com/watch?v=lXky5xcLvwU&feature=youtu.be

LG
Michael

von T.M .. (max)


Lesenswert?

Hallo,

wird es denn nochmal Platinen geben. Bestellt da vielleicht jemand 
welche in näherer Zukunft?

von Der_Kochloeffel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
habe einen Versuch mit einem Tiny44 und der MIK Variante gemacht, indem 
ich die Spannungsmessung entfernt habe, und versucht habe 30 LED's 
anzusteuern, aber in der Firefly.h komme ich oben nicht über 26 und 
weiter unten nicht über 28 hinaus, sobald ich nur eine Zahl höher 
reinschreibe tut sich garnix mehr, und die Würmchen hören nach kurzer 
Zeit auf zu Leuchten und fangen nur wieder an wenn ich die Spannung 
unterbreche und wieder anschliese!

ALso es leuchten auf jeden fall mehr als die 12 Orginalen Würmchen, aber 
nicht alle werden angesteuert, woran kann das liegen???

Habe den gesammten Ordner mit allen Dateien angehängt.

LG
Michael

von chris_ (Gast)


Lesenswert?

Hackaday bastelt auch Glühwürmchen:
http://hackaday.com/2014/01/27/low-power-smd-fireflies/

von Karsten W. (lsmod)


Lesenswert?

Hagen Re schrieb:
>
> Wenn gewünscht poste ich auch noch die Dateien für die Simulation in
> LTSpice.
> Idee stammt von hier
> http://library.solarbotics.net/circuits/misc_switching.html
>
> Gruß Hagen

Ein wirklich spätes interesse, aber diesen Teil der Schaltung finde ich 
sehr interessant.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.