Hallo Mitglieder, die Frage wird jetzt ein wenig länger und Stundenlanges recherchieren hat mich da nicht weitergebracht und da ich schon am Ende mit meinem Latein bin hoffe ich hier um rat. ich habe momentan ein Projekt wo ich nach und nach 12 LEDs nacheinander schalten möchte mit eingestellter Zeitverzögerung evtl. durch die Programmierung im IC in verbindung mit einem Timer NE555 oder durch einen Poti. Ich möchte, dass die erste LED beim Anlegen der Spannung sofort losleuchtet und alle anderen LED's sich zeitverzögert zuschalten und alle gemeinsamm dann anbleibem und beim Entfernen der Spannung wieder gemeinsam ausgehen. Ich bin nicht so fit in der IC-Programmierung, dass ich ein Programm schreiben könnte und weiß nicht genau was ich dafür brauche. Ich bin gerne bereit einen Fertigen Baustein zu kaufen a la 16-Kanal Lauflicht von Conrad/Voelkner http://www.voelkner.de/products/218878/16-Kanal-LED-Lauflichtsteuerung-fertig-programmierter-Baustein-5-18-V-DC.html Jedoch hat der 16 kanal Baustein von Conrad eine Loop-Schleife drin die ich nicht so gerne mag. Könnte ich mir dem 16 Kanal Baustein zum Beispiel die LEDs nacheinander zeitverzögert schalten jedoch in unregelmäßigen zeitabstand? 1 --> 2 LED 2ms; 2-->3 LED 3ms; 3.-->4.LED 2ms Ich würde auch einen AVR-Mikrocontroller nutzen als fertigen Baustein wo ich die LEDs mit Vorwiederstand einfach anlöten kann und fertigprogrammiere. Ich würde mich um Antworten sehr freuen. Gruß aus Wiesbaden!
Redi Z. schrieb: > Ich würde auch einen AVR-Mikrocontroller nutzen als fertigen Baustein wo > ich die LEDs mit Vorwiederstand einfach anlöten kann und > fertigprogrammiere. Das würde ich ehrlich gesagt als die sinnvollste Lösung ansehen. Ein Arduino Board gibt es für wenig Geld (und in mehreren unterschiedlichen Konfigurationen) bei EBay. Ob das Lauflicht Modul die gewünschte Funktionalität zustande bringt oder nicht, müsste man ergründen. Mit so einem Arduino bist du jedoch flexibel genug, das in Eigenregie zu programmieren. So eine Licht-'Show' ist eigentlich DAS Standardbeispiel, mit dem man anfängt. Und genau für solche Leute, die mit Programmieren nichts am Hut haben (Künstler etc.) war der Arduino ursprünglich gedacht.
:
Bearbeitet durch User
Karl H. schrieb: > n Arduino Board gibt es für wenig Geld (und in mehreren > unterschiedlichen Konfigurationen) bei EBay. Klasse Antwort. Auf den Arduino bin ich noch nicht gestoßen. Was bedeutet denn für wenig Geld? Ich finde bei Ebay baugleiche Unos anscheinend nicht von Arduino für 9,95 Euro. Im Web bei Amazon z.B. finde ich den für 21,95 Euro. Wo liegt der Unterschied? Baugleich? Ich würde gerne den Arduino mit einer 12 Volt Spannung betreiben, wäre das machbar beim Uno R3? Scheint wirklich Kinderleicht zu sein. Ich brauch jetzt nur noch die Programmierung die mir folgendes Lauflicht auf 12 Kanäle erlaubt. PIN0 --> PIN11 100000000000 110000000000 111000000000 111100000000 usw. Ich habe folgende Programmierung gefunden zwar 14 Kanal aber im Moment ist das nicht schlimm:
1 | id setup() { |
2 | pinMode( 0, OUTPUT); |
3 | pinMode( 1, OUTPUT); |
4 | pinMode( 2, OUTPUT); |
5 | pinMode( 3, OUTPUT); |
6 | pinMode( 4, OUTPUT); |
7 | pinMode( 5, OUTPUT); |
8 | pinMode( 6, OUTPUT); |
9 | pinMode( 7, OUTPUT); |
10 | pinMode( 8, OUTPUT); |
11 | pinMode( 9, OUTPUT); |
12 | pinMode(10, OUTPUT); |
13 | pinMode(11, OUTPUT); |
14 | pinMode(12, OUTPUT); |
15 | pinMode(13, OUTPUT); |
16 | |
17 | }
|
18 | |
19 | |
20 | void loop() { |
21 | digitalWrite( 0, HIGH); |
22 | |
23 | delay(zeit); digitalWrite( 0, LOW); |
24 | |
25 | digitalWrite( 1, HIGH); |
26 | |
27 | delay(zeit); digitalWrite( 1, LOW); |
28 | |
29 | digitalWrite( 2, HIGH); |
30 | |
31 | delay(zeit); digitalWrite( 2, LOW); |
32 | |
33 | digitalWrite( 3, HIGH); |
34 | |
35 | delay(zeit); digitalWrite( 3, LOW); |
36 | |
37 | digitalWrite( 4, HIGH); |
38 | |
39 | delay(zeit); digitalWrite( 4, LOW); |
40 | |
41 | digitalWrite( 5, HIGH); |
42 | |
43 | delay(zeit); digitalWrite( 5, LOW); |
44 | |
45 | digitalWrite( 6, HIGH); |
46 | |
47 | delay(zeit); digitalWrite( 6, LOW); |
48 | |
49 | digitalWrite( 7, HIGH); |
50 | |
51 | delay(zeit); digitalWrite( 7, LOW); |
52 | |
53 | digitalWrite( 8, HIGH); |
54 | |
55 | delay(zeit); digitalWrite( 8, LOW); |
56 | |
57 | digitalWrite( 9, HIGH); |
58 | |
59 | delay(zeit); digitalWrite( 9, LOW); |
60 | |
61 | digitalWrite(10, HIGH); |
62 | |
63 | delay(zeit); digitalWrite(10, LOW); |
64 | |
65 | digitalWrite(11, HIGH); |
66 | |
67 | delay(zeit); digitalWrite(11, LOW); |
68 | |
69 | digitalWrite(12, HIGH); |
70 | |
71 | delay(zeit); digitalWrite(12, LOW); |
72 | |
73 | digitalWrite(13, HIGH); |
74 | |
75 | delay(zeit); digitalWrite(13, LOW); |
76 | |
77 | }
|
Müsste die Programmierung für mein Vorhaben wie folgt Aussehen?:
1 | void loop() { |
2 | digitalWrite( 0, HIGH); |
3 | delay(zeit); digitalWrite( 1, HIGH); |
4 | |
5 | delay(zeit); digitalWrite( 2, HIGH); |
6 | |
7 | delay(zeit); digitalWrite( 3, HIGH); |
8 | |
9 | delay(zeit); digitalWrite( 4, HIGH); |
10 | |
11 | delay(zeit); digitalWrite( 5, HIGH); |
12 | |
13 | delay(zeit); digitalWrite( 6, HIGH); |
14 | |
15 | delay(zeit); digitalWrite( 7, HIGH); |
16 | |
17 | delay(zeit); digitalWrite( 8, HIGH); |
18 | |
19 | delay(zeit); digitalWrite( 9, HIGH); |
20 | |
21 | delay(zeit); digitalWrite(10, HIGH); |
22 | |
23 | delay(zeit); digitalWrite(11, HIGH); |
24 | |
25 | delay(zeit); digitalWrite(12, HIGH); |
26 | |
27 | delay(zeit); digitalWrite(13, HIGH); |
28 | |
29 | }
|
:
Bearbeitet durch User
Redi Z. schrieb: > Müsste die Programmierung für mein Vorhaben wie folgt Aussehen?: so in etwa. Es gibt aber auch Sachen, die die Angelegenheit vereinfachen: Schleifen und Felder (Arrays)
STK500-Besitzer schrieb: > so in etwa. > Es gibt aber auch Sachen, die die Angelegenheit vereinfachen: > Schleifen und Felder (Arrays) Danke für die Antwort ich werde mich in dem Thema mal einlesen. Wie gesagt was Programmierung angeht total am Anfang.
Es ist im Prinzip ziemlich simpel: ganz oben:
1 | #define LED_ZEIT 1000 //1000Millisekunden = 1Sekunde hier Zeit einstellen
|
2 | |
3 | void loop() |
4 | {
|
5 | for(byte i;i<16;i++) //Eine schleife die 16 mal aufgerufen wird, |
6 | //bei jedem Aufruf wird i um 1 erhöht 0-15
|
7 | {
|
8 | if(i<14) digitalWrite( i, HIGH);//Ich erhöhe die Pins 0-13 |
9 | else if(i==14)digitalWrite( A0, HIGH);//Ist i = 14 Kommt AnalogPin 0 |
10 | else if(i==15)digitalWrite( A1, HIGH);//AnalogPin 1 |
11 | delay(LED_ZEIT); |
12 | }
|
13 | //Ausgänge Zeitgleich zurück setzen.
|
14 | for(byte i;i<13;i++) |
15 | {
|
16 | digitalWrite( i, LOW); |
17 | }
|
18 | digitalWrite( A0, LOW); |
19 | digitalWrite( A1, LOW); |
20 | delay(LED_ZEIT); |
21 | }
|
Ich hab hier mal was ungetestetes zusammengetragen
:
Bearbeitet durch User
So, Ich werde mal ein paar Tests machen und schauen ob ich mit der Programmierung klarkomme. Ich habe da noch eine Frage. Der Arduino arbeiter ja mit der 5V und 6-12VInput wären laut Handbuch machbar. Ich möchte jetzt einen Bleiakku mit 12V dranschalten, jedoch würde das bedeuten, dass der Arduino 7V Spannung abbauen muss, wird der nicht sehr heiß? Sollte ich denn einen 12V-->9V Festspannungsregler vorschalten? Und der Arduino hat ja so einen runden Netzteilanschluss, gibt es dafür Adapter die ich einfach auf + und - vorschalten kann auf einem Bleiakku? Gibt es den Uno REV 3 denn als Lötausführung wo die Pins nicht gesteckt, sondern gelötet werden?
Arduino Pro Mini http://www.exp-tech.de/arduino-pro-mini-328-5v-16mhz FTDI-Adapter (zum Programmieren, kann später für weitere Projekte genutzt werden) http://www.exp-tech.de/sparkfun-ftdi-basic-breakout-5v StepDown Wandler (Reduziert 12V auf 5V. Kann direkt an 5V angeschlossen werden) http://www.exp-tech.de/pololu-5v-1a-step-down-voltage-regulator-d24v10f5
Microcontroller und NE555 zu kombinieren ist totaler Unsinn. Dann kannste auch nen NE555 und zwei Stück CD4017 für 25Cent nehmen und kaskadieren, so wie die Conrad Lauflichter es seit 30 Jahren tun.
Man kann auch mehr als nur den ersten Post bzw. nur die ersten Zeilen desselben lesen, bevor man eine Antwort schreibt.
Ich habe mir jetzt einen Arduino mini pro gekauft und der step down wandler auf 5V. Wie ich den USB anstecke ist schon klar. Jedoch wie schließe ich den Step down wandler genau an? Und kann ich die 12 LEDs mit einem Vorwiderstand ab "Pin 2" bis "Pin 13" einfach anlöte und die anode zum GND verbinde? Was ist "PG" und "SHDC" am Step down wandler? Folgende idee: 12V Akku wird an den step down wandler angeschlossen. Plus kommt an "Vin" und Minus an "GND". "Vout" wird mit dem arduino an "VCC" angelötet und "GND" vom arduino am "GND" vom Step down wandler. Die LEDs dann an den digitalen Pins? Soweit richtig?
ARDUINO MINI PRO schrieb: > Was ist "PG" und "SHDC" am Step down wandler? > Folgende idee: > > 12V Akku wird an den step down wandler angeschlossen. > Plus kommt an "Vin" und Minus an "GND". PG steht für "Power Good": Arbeitet der Wandler korrekt, so liegt an dem Ausgang ein positiver Pegel an. /SHDN steht für Shutdown: Wird der Eingang auf Masse gelegt, so wird der Step-Down Regler deaktiviert. Viele Grüße, Marcel
ARDUINO MINI PRO schrieb: > 12V Akku wird an den step down wandler angeschlossen. > Plus kommt an "Vin" und Minus an "GND". > > "Vout" wird mit dem arduino an "VCC" angelötet und "GND" vom arduino am > "GND" vom Step down wandler. Ja, sofern du die 5V-Version des Arduino-Boards hast, ist dies so korrekt. Viele Grüße, Marcel
Ich brauche die "PG" und "SHDC" funktion nicht. Kann ich die freilassen oder müssen die belegt werden ? Der microcontroller wird durch spannung gestartet, diese beiden funktionen benötige ich im grunde genommen nicht. Hab mal was gelesen, dass ich "SDHC" mit "GND"verbinden soll.
ARDUINO MINI PRO schrieb: > Ich brauche die "PG" und "SHDC" funktion nicht. > Kann ich die freilassen oder müssen die belegt werden ? Den Ausgang "PG" kannst du auch frei lassen. Ich kenne zwar nicht obigen Chip und die entsprechende Schaltung, jedoch wird normalerweise "/SHDN" über einen internen oder externen Pull-Up bereits auf High gezogen. In diesem Fall kannst du den Eingang auch offen lassen. > Hab mal was gelesen, dass ich "SDHC" mit "GND"verbinden soll. Wenn du "/SHDN" auf Masse legst wird der Schaltregler deaktiviert. Der "/" steht für einen invertierenden Eingang. Viele Grüße, Marcel
Super. Was die Schaltung angeht ist alles super. Jedoch hänge ich bei der Programmierung. Ich möchte den Arduino Mini Pro wie folgt programmieren: 12 LED's schalten, jedes LED hat seinen eigenen Pin. Digitalpin "2" bis "13" wird jeweils eine LED angesteckt/angelötet und sollewie folgt angesteuert werden: Bevor der Arduino eine LED schaltet will ich eine Zeitverzögerung von 400ms bis die erste LED erleuchtet nach Spannung. Zwischen der ersten LED und der zweiten soll eine Zeitverzögerung von 50ms bestehen, bis diese ebenfalls eingeht. Zwischen der zweiten und dritten LED ebenfalls 50ms usw. Ich weiss nicht wie ich die Zeitvariablen definiere im Programm soll verbildlicht so aussehen: + Steht an ...400ms.. erste LED geht an ... 50ms... zweite LED geht an ... 50ms... dritte LED geht an... usw bis zur 12. LED. Dann sollten die LEDs am ende einfach anbleiben solange Spannung ansteht. Es muss im grunde keine Schleife sein, da der arduino an sich NICHT Zeitgesteuert sein soll bei der Anschaltung, sondern der Akku. Die Batterie schaltet den Arduino nach 9 Sekunden ab, nachdem das lauflicht durchgegangen ist
ARDUINO MINI PRO schrieb: > + Steht an > ...400ms.. erste LED geht an ... 50ms... zweite LED geht an ... 50ms... > dritte LED geht an... usw bis zur 12. LED. Dann sollten die LEDs am ende > einfach anbleiben solange Spannung ansteht. Machs nicht kompliziert. In der Ardunion Programmierung schreibst du 2 Funktionen.
1 | void setup() |
2 | {
|
3 | ...
|
4 | }
|
5 | |
6 | void loop() |
7 | {
|
8 | |
9 | }
|
In setup kommt rein, was einmalig passieren muss. In loop kommt rein, was danach ständig passieren soll. Deine LED Abfolge soll einmalig passieren. Also wo wirst du die reingeben? > Ich weiss nicht wie ich die Zeitvariablen definiere im Programm Was ist falsch mit delay? Auch als Profi nimmt man die einfachste Lösung. Wenn der µC nichts weiter zu tun hat, als am Anfang eine Sequenz von LED einzuschalten, von denen man den zeitlichen Abstand kennt, dann benutzt auch er delay. Einfache Lösung. Nur weil man das auch komplizierter machen kann, muss man das noch lange nicht auch tun. Du hattest doch vor gut einem Monat schon einen Vorschlag gebracht, der nicht so schlecht ausgesehen hat (für einen Neuling). Was ist damit? Warum hast du denn das nicht zum Laufen gebracht und getestet? Man muss nicht nicht für jeden Quatsch immer Gutachten einholen. Man darf auch ruhig selber experimentieren und sich selbst ein bischen was beibringen. Ein paar LED einschalten in zeitlichem Abstand ist jetzt ja wirklich nicht Raketentechnik.
:
Bearbeitet durch User
Wow, sehr vorbildliche Antwort! Danke! Also mein "Programm" habe ich als "void loop" geschrieben, müsste das umändern in "void setup". Ahh als "delay" könnte ich wie folgt schreiben im programm: delay(zeit) delay(400); digitalWrite( 2, HIGH); delay(50); digitalWrite( 3, HIGH); delay(50); digitalWrite( 4, HIGH); delay(50); digitalWrite( 5, HIGH); delay(50); digitalWrite( 6, HIGH); Würde das so passen?
Sicher. Kann man doch einfach mal probieren. Und auch mal ein paar Minuten "verschwenden", die Arduino-Doku zu lesen! https://www.arduino.cc/en/Reference/HomePage
Soweit hat alles geklappt, das Programm sitzt und die LEDs schalten sich alle nacheinander ein. Musste ein wenig experimentieren, aber ich habs geschafft. Jedoch stehe ich vor einem neuen Problem: Der Arduino hat vor dem Eingang einen Taster, wenn man den Taster betätigt, setzt Spannung an. Der Arduino braucht jedoch nach Spannungseingang ca 1 Sekunde bis das Programm geladen ist und sobald man den Taster loslässt, wird das Lauflicht nicht zuende ausgeführt, sondern bricht mitten drin ab, was auch verständlich ist. Welche Möglichkeiten bieten sich, ohne Dauerplus den Arduino schneller das Programm booten zu lassen und durch den Ausgeführten Tastdruck das Lauflicht durchgehen zu lassen? Ansonsten müsste ich mir eine 12Kanalsteuerung doch mit einem oder zwei NE555 oder gar NE556 und einem Transistor und Elko zusammenbauen richtig?
ARDUINO MINI PRO schrieb: > Welche Möglichkeiten bieten sich, ohne Dauerplus den Arduino schneller > das Programm booten zu lassen und durch den Ausgeführten Tastdruck das > Lauflicht durchgehen zu lassen? Karl H. schrieb: > Was ist falsch mit delay?
Nichts ist falsch daran. Die sache ist die, der Arduino braucht 1 Sekunde um das Programm nach Spannungseingang abzuspielen, dies dauert aber zu lange. Kann man den Bootloader so programmieren, dass er sofort das Programm startet? Der Arduino sollte nur einmal programmiert werden und wird nicht mehr weiter programmiert. Ausserdem möchte ich, dass das Lauflicht nach Spannungsabbruch trotzdem durchläuft, evtl mit Kondensator arbeiten?
@ ARDUINO MINI PRO (Gast) >Die sache ist die, der Arduino braucht 1 Sekunde um das Programm nach >Spannungseingang abzuspielen, dies dauert aber zu lange. Das ist die Wartezeit vom Bootloader, der wartet auf ein mögliches Signal vom PC. >Ausserdem möchte ich, dass das Lauflicht nach Spannungsabbruch trotzdem >durchläuft, evtl mit Kondensator arbeiten? Welcher Spannungsabbruch? Wenn jemand den Saft abdreht? Wovon soll der Arduino dann leben? Dann braucht er eine zusätzliche Batterie.
Okay verstehe. Kann ich anhand dieser Anleitung: https://www.arduino.cc/en/Guide/ArduinoISP Den Bootloader mit einem ISP Programmer (evtl. Arduino ISP) mit einem Skatch überschrieben? D.h. Ich spiele ein Skatch mit einem Arduino ISP auf mein Arduino Mini Pro und überschreibe somit den Bootloader, somit fällt die Gedenksekunde weg? Damit ich die IDE meines Mini Pros wieder nutzen kann muss ich den Bootloader wieder mit einem Arduino ISP wieder programmieren richtig?
Die meisten IDEs haben sicherlich auch Support für ISPs. Als ich mit den Arduinos angefangen habe, habe ich nie die USB-Verbindung benutzt. Musst halt gucken, dass du die Pinbelegung für den ISP rausfindest. Sind halt 8 Pins statt einfach nur USB einstecken ;) Nicht, dass das für dich jetzt eine Rolle spielt, aber der Bootloader belegt auch wertvollen Flash, das dir mit einem ISP (und dadurch gekickten Bootloader) natürlich voll zur Verfügung steht.
ARDUINO MINI PRO schrieb: > Die sache ist die, der Arduino braucht 1 Sekunde um das Programm nach > Spannungseingang abzuspielen, dies dauert aber zu lange. Was steht denn dazu in der Doku? Ich kann mir nicht vorstellen, daß das nicht konfigurierbar ist. Vielleicht muß man auch nur einen Pin auf high oder low setzen, damit der Bootloader übersprungen wird.
Christian S. schrieb: > Nicht, dass das für dich jetzt eine Rolle spielt, aber der Bootloader > belegt auch wertvollen Flash, das dir mit einem ISP (und dadurch > gekickten Bootloader) natürlich voll zur Verfügung steht. Jemandem, der nicht einmal ISP von ISDN unterscheiden kann etwas über »gekickte« Bootloader zu erzählen, zumal es noch keine Rolle spielt, ist hiermit geadelter Altruismus (oder Selbstinszenierung). Peter D. schrieb: > Vielleicht muß man auch nur einen Pin auf high oder low setzen, damit > der Bootloader übersprungen wird. Soetwas geht in der Tat und hängt vom Bootloader ab. Manche prüfen etwa, ob ein RESET vorkam und starten nur dann. Nach direktem POWER ON wird ohne Umweg das Sketch geladen. Manchmal muss man eben den Bootloader aktualisieren oder Alternativen einsetzen. Liest man die Handbücher zur Hardware, wird darauf oft hingewiesen und selbst die Arduino-IDE bietet dafür Menüpunkte (und Hilfetexte). Der CD4017 ist nur bedingt einsatzfähig, da keiner oder immer nur einer der 10 Ausgänge sich von den übrigen bzgl. des Potenzials unterscheidet. Wenn die bereits durchlaufenen LEDs angeschaltet bleiben sollen, muss je Ausgang ein Latch nachgeschaltet werden. Wer es analog mag, der nutzt zwei LM3914 und schraubt sich analog eine schöne Steuerkurve zusammen. Je nachdem welche Spannung die Steuerkurve bewirkt, stellt der Anzeigetreiber die passende Zahl Leuchtpunkte an. Ich freue mich schon auf das Netzwerk, um unregelmäßige Millisekunden-Spannen zu erzeugen. (Im einfachsten Fall eine R-C-Kombination, im komplexestmöglichen ein DA-Wandler samt Anschluss an ein Echtzeitsystem, um auch wirklich im vorgegebenen Millisekunden-Rahmen schalten zu können.)
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.