> 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.
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
> 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.
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.
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.
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
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
|
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
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
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
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
Hallo, wird es denn nochmal Platinen geben. Bestellt da vielleicht jemand welche in näherer Zukunft?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.