• Hallo Zusammen, Aufgrund der aktuellen Situation setzten wir die Möglichkeit aus, sich mit Gmail zu registrieren. Wir bitten um Verständnis Das RCMP Team

Tech-Frage Blinklichsteuerung (Arduino) Nano mit Zusatzschaltung

  • Ersteller des Themas Deleted member 1492
  • Erstellungsdatum

BAXL

Admin
Mitarbeiter
Warum beschäftigt ihr euch mit dem Blinken der LEDs? Euch ist schon klar, dass ein Arduino zig tausende Befehle pro Sekunde abarbeiten kann, ohne dass ihr etwas davon mitbekommt. Selbst die Verzögerung durch das Schalten von ein paar LEDs mehr werdet ihr nicht wahrnehmen können. Von dem her ist eine autonome Blinkschaltung nur ein Zusatzaufwand, der nicht sein muss und auch keine nennenswerten Vorteile bringt.
Das Problem entsteht dadurch, dass der Nano bereits mit dem Auslesen der RC-Kanäle und deren Auswertung sowie die Portsteuerung schon gut beschäftigt ist. Im Moment ist die Krux der pulseIn() Befehl. Da kommt man schon bei zwei RC-Kanälen ordentlich ins Schwimmen. Benutzt man die üblichen digitalWrite()-Befehle, werden jede Menge Prozessortakte vergeudet, darum arbeite ich parallel schon an der direkten Portmanipulation. ;). Das spart enorm Zeit. Ich probiere aber gerade noch herum und kann nicht aus dem Stand eine ausgefeilte Lösung raushauen, es bleibt aber immernoch Zeit mal Teillösungen rechts und links des Weges in Betracht zu ziehen. Und es ist nun mal so, um zu Blinken muß der Nano eben immer wieder Ports umschalten. Wenn er nur einen Port ein, oder ausschalten braucht und das Blinken reine Hardware erledigt, hat er mehr Zeit für andere Dinge.
 

yoshi

Betreiber
Mitarbeiter
Euer Problem ist ein anderes: Ihr denkt in Arduino.

Was ist ein delay? Das ist eine Verzögerung einer bestimmten Zeit.
Wie kann man das erreichen? 1. Der Prozessor macht in der Zeit Bullshit und dreht sich im eigenen Saft. Der Nachteil ist halt, dass der Controller in der Zeit nichts anderes mehr machen kann. 2. Man nutzt die Timer des Controllers und lässt einen Zähler hochlaufen. Das passiert über die Hardware und das Programm kann weiterhin abgearbeitet werden.
Warum ist das beim Arduino ein Problem? So ziemlich jedes bestehende Script nutzt den gleichen Timer für seine zeitrelevanten Aktionen. Die Hardware ist aber nur einmal vorhanden. Von dem her kann ein delay, der über den Timer1 läuft, nicht mit einem ServoIn, der ebenfalls über Timer1 läuft kombiniert werden. (delay und ServoIn sind von mir ausgedachte Beispiele. Keine Ahnung ob es die wirklich gibt.)
Was wäre die Lösung? Ein zentrales Script, dass den Timer1 nutzt und einen Zähler hochlaufen läßt. Jedes andere Script muss diesen Zähler nutzen, nicht den Timer1 selber.

Da aber beim Arduino-Projekt viele kleine Amateure ihre eigene Suppe kochen, wird es zu solchen kooperativen Lösungen eher nicht kommen.
 

uwe_q

Mitglied
Genau so kann man den Delay-befehl umgehen, und "während der Wartezeit im Kreis" andere Sachen "als multiplex-verwandt " ausführen.
Ein Delay über mehrere Hunderstel Sekunden ist sonst die reinste Bremse.

Ich persönlich benutze Delay inzwischen nicht mehr.

LG Uwe
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Ich nutze den delay-Befehl für gewöhnlich auch nicht mehr, es ist eben programmiertechnisch mehr Aufwand. Für die Lichsteuerung habe ich bereits die Abfrage der Kanäle per Interrupt ins Auge gefasst. Dass das alles geht weiß ich auch, es dauert aber eben bis das aus- und aufgearbeitet ist, sodass ich es auch verstehe und aus dem ff kann. Auf blauen Dunst rumprobieren ist doof. Und wie gesagt, programmtechnisch macht man das nicht mal eben. Ich könnte mich auch jetzt 2 Wochen hinsetzen und am Ende einen Post machen in dem steht, hey, das geht über Interrupt und und interne Timer usw. und das fertige Programm ist in den Ressourcen. Fertig. Das kann doch keine Sau nachvollziehen, solche Quellen findet man zuhauf im Internet.

Das ist aber nicht meine Intention. ;)

Und ab und zu sollte man auch mal innovativ sein und um die Ecke denken, warum keinen separaten Blinkgeber, der nur per Port aktiviert wird?
 

uwe_q

Mitglied
So war das auch nicht gemeint.
Sollte nur eine kleine Anmerkung nebenbei sein, denn auch Einsteiger-Neulinge sollten es mal gelesen haben.

Dein Vorgehen ist schon das richtige !!, lass Dich also nicht davon abbringen es idiotensicher nachvollziehbar zu gestalten.

Wem es nicht gefällt, kann es ja selber verbessern.

LG Uwe
 
D

Deleted member 1492

Gast
Warum nicht einfach eine klassische Blinkschaltung?

Sowas z.B., die Werte der Bauteile können in einem relativ weiten Bereich angepasst werden.:

Blinkschaltung.jpg
Und der Klassiker, astabiler Multivibrator als Wechselblinker:

Astabiler Multivibrator.jpg
 

DFENCE

Mitglied
Das Blinken kannst auch einfach it nem NE555 realisieren, der bekommt das Statische Signal vom Arduino und Wandelt das in ein Getaktetes Signal um.
Unbenannt.jpg

Vor 50 Jahren die Anfänge der Digital Schaltungen vor 30-40 Jahren war das doch ne Grundschaltung die Jeder gemacht hat in der "Schule" Digitale Flip Flop Schaltung mit nem 555 ? Oder einfach nur Blinklicht mittels NE555. Das Teil war damals schon im Kosmos Elektronikbaukasten drin als Digitaler Taktgeber glaub ich mich zu Erinnern :unsure:
 
Blinklichter lassen sich sehr einfach mit meiner Arduino library erstellen. Ich steuere alle LED in meinen Fahrzeugen damit. Auch im ESP32 sound und Lichtcontroller:

Einfach im Arduino Libraries Ordner installieren. Ein hoffentlich selbsterklärendes Beispiel ist inbegriffen. Die Library funktioniert komplett ohne delay() und stört andere, auf dem gleichen Arduino ablaufende Vorgänge somit nicht. Mittels vorgefertigten Schrittketten lassen sich auch komplexe Blinksequenzen sehr einfach programmieren.
 

BAXL

Admin
Mitarbeiter
Es ist ja eigentlich kein Arduino sondern ein Esp32 wesentlich schneller und potenter. :)
 
Top Bottom