Hallo, Ich habe einen Arduino Mikro Pro und muss für ein paar WS2812b LEDs die Library FastLED einsetzen. Leider habe ich bemerkt und dann nachgelesen, dass diese Lib den Interrupt deaktiviert. Ich möchte nun noch mit einem RCModul 433Mhz Signale empfangen. Dazu habe ich die Library RCSwitch verwendet. Und es sieht so aus: sobald ich den Befehl FastLED.Show verwende, empfange ich keine RC Signale mehr. Der Interrupt wird nicht mehr ausgelöst. Auch wenn ich nach FastLED.Show den Interrupt neu aktiviere, kommt dennoch kein Interrupt mehr durch. FastLED empfiehlt in diesem Fall 2 getrennte Mikrokontroller zu verwenden. Ich kann das aus Platzgründen nicht machen. Noch eine Info zu der RC Sache: Ich muss hier extrem wenig senden. 1 Byte pro Sekunde reicht. Muss auch nicht sonderlich abgesichert sein. Habt ihr eine Idee, was ich noch tun könnte? Gibt es eine RC Library, die keinen Interrupt benötigt? Gibt es Module, die einfach gestrickt sind und einfach nur Senden/Empfangen ohne Protokoll. Mir reicht eine AM mit an/aus. Viele Grüße
dost0011 schrieb: > Gibt es eine RC Library, die keinen Interrupt benötigt? Wohl nicht, da die hereinkommenden Bits Timer-Interrupt-ge- steuert einzeln zu einem Byte zusammengesetzt werden (müssen). dost0011 schrieb: > Gibt es Module, > die einfach gestrickt sind und einfach nur Senden/Empfangen ohne > Protokoll. Nein, es gibt weniger einfach gestrickte Module. Diese werden über SPI gesteuert und abgefragt, man kann das so programmieren dass man keinen Interrupt benötigt. Hier z.B. (es gibt noch andere Module, bin zu faul zum Suchen): https://www.ebay.de/itm/163941413757
Du könntest deine eigenen libraries Schreiben. Dann könntest du es so realisieren, dass sie sich nicht gegenseitig blockieren.
Nun ja, Das Init der LED-Steuerung rükgängig machen, deine Daten senden (hoffentlich schnell genug) und das LED-Init wieder ausführen. Da musst du schon schauen was das genau macht. o/ Anselm
Da machst du time-multiplexing. Heisst RC und led-ansteuerung finden nie gleichzeitig statt. In der praxis wird RC relativ selten sein, und nach einem RC befehl steuerst du die led an. Deine rc-lib musst du eventuell nach jedem led.show neu initialisieren, also mach led-show nicht in einer schleife sondern nur wenn nötig.
dost0011 schrieb: > Habt ihr eine Idee, was ich noch tun könnte Ja ja, so ist das bei Arduino. Es passen halt nicht immer die Legosteine so zusammen, wie man sich das wünschen würde. Lern halt richtig programmieren, dann geht das schon auch mit diesen Modulen, auch auf einem ATmega328. Maschinenbauingenieure bauen schliesslich auch nicht mit Lego. Technisch erwarten die WS2812b eine ununterbrochende Bitfolge, das lässt sich natürlich einfacher programmieren wenn man die Interrupts sperrt. Aber die restliche Zeit könnte man auf Empfang warten. Wenn dann gerade während der Übertragungszeit zu den LED gesendet wird, Pech,,hat man das Kommando halt verpasst. Bei Funk muss man eh mit Storungen rechnen, also ausfalltolerant sein. Was die FastLED Library alles verstellt, so das kein einfaches enable von Interrupts danach mehr ausreicht - keine Ahnung, der code enthält ein Umprogrammieren des Timer0 mit eigenen millis und mikros Funktionen, aber auskommentiert. Der typische open source Codeverhau also.
Anderer Ansatz: Schau Dir diese Appnote an: https://ww1.microchip.com/downloads/en/AppNotes/00001606A.pdf Da werden konfigurierbare Logikelemente, PWM und SPI dazu verwendet, um das Timing für solche LEDs vollständig in Hardware zu generieren. Die Methode ist realtiv genial. Du könnst natürlich einen PCI mit einer CLC Einheit verwenden. Nach der Übernahme von Atmel durch Microchip sind aber auch neue AVRs entstanden, die auch etwas vergleichbares enthalten. (Atmega 4808, AVR128DA28,...) Das würde dann vieles einfacher machen. fchk
Eine Software Lösung (neue Lib selber schreiben) schließe ich aus. Der Aufwand lohnt nicht. Ein LoRa Modul kann ich auch nicht verwenden, weil die Reichweite zu groß ist - klingt blöd, ist aber so. Meine Lösung wäre folgende: Gibt es einen RF Sender/Empfänger, der ganz ohne Protokoll auskommt? Sprich der Empfänger gibt ein HIGH aus, wenn der Sender sendet und ein LOW aus, wenn der Sender nicht sendet. Das wäre perfekt. Kennt ihr so ein Sender/Empfänger Modul? Vielen Dank.
Stephan D. schrieb: > klingt blöd Nö, klingt nicht nur blöd sondern ist auch blöd. Denn man kann die Reichweite durch Einstellen der Sendeleistung oder Verschlechtern der Antennenstrahlung deutlich einschränken.
Stephan D. schrieb: > Meine Lösung wäre folgende: Und die ist so scheisse da es schon sehr viele probiert haben und kläglich daran gescheitert sind. Genau deswegen gibt es eine RCSwitch und VirtualWire Library.
dost0011 schrieb: > FastLED empfiehlt in diesem Fall 2 getrennte Mikrokontroller zu > verwenden. Ich kann das aus Platzgründen nicht machen. Und FastLED kann aus Timing-Gründen nicht zulassen, dass während der Datenübertragung Interrupts dazwischen bratsen.
Was für ein RC-Modul ist das. ??? Weil die normalen China-Module brauchen kein Interrupt ? Da sollte eine Dauerschleife zum Abhören reichen die durch den Interrupt halt unterbrochen wird.
Stephan D. schrieb: > Gibt es einen RF Sender/Empfänger, der ganz ohne Protokoll auskommt? > Sprich der Empfänger gibt ein HIGH aus, wenn der Sender sendet und ein > LOW aus, wenn der Sender nicht sendet. Das wäre perfekt. Kennt ihr so > ein Sender/Empfänger Modul? Das geht nicht. Denn die einfachen Sender/Empfänger verwenden OOK als Übertragungsprotokoll (OOK = On-Off-Keying). Und wenn nichts gesendet wird, wird halt Müll empfangen, da das einfache Regenerativ-Empfänger sind. Und für Müll bräuchtest du dann einen dritten Zustand.
Stephan D. schrieb: > Gibt es einen RF Sender/Empfänger, der ganz ohne Protokoll auskommt? > Sprich der Empfänger gibt ein HIGH aus, wenn der Sender sendet und ein > LOW aus, wenn der Sender nicht sendet. Das wäre perfekt. Kennt ihr so > ein Sender/Empfänger Modul? Such nach JDY-40. Sind aber 2.4 GHz. Beitrag "JDY-40 ein neuer Geniestreich aus China?" usw.
dann zeig mal den Code. FastLED zusammen mit der den RC-Switch "Libs". Arduino Pico hab ich nicht in meiner "IDE", hab halt nen anderen "kleinen" genommen. kompiliert schonmla und braucht 3.9K als leeres Gerüst. Ist wohl dann so.
:
Bearbeitet durch User
schreib mal über setup() #define FASTLED_ALLOW_INTERRUPTS 1 in deinen Code. obs dann geht?
andere scheinen das Problem auch zu haben: https://stackoverflow.com/questions/51269801/arduino-ignoring-serial-interrupts-when-using-fastled
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.