Forum: Mikrocontroller und Digitale Elektronik 433 MHz Kommunikation ohne Interrupt


von dost0011 (Gast)


Lesenswert?

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

von uff basse (Gast)


Lesenswert?

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

von Kevin M. (arduinolover)


Lesenswert?

Du könntest deine eigenen libraries Schreiben. Dann könntest du es so 
realisieren, dass sie sich nicht gegenseitig blockieren.

von Anselm (Gast)


Lesenswert?

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

von Alt G. (altgr)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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.

von Frank K. (fchk)


Lesenswert?

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

von Stephan D. (dost0011)


Lesenswert?

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.

von OMG (Gast)


Lesenswert?

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.

von OMG (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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.

von Helmut -. (dc3yc)


Lesenswert?

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.

von Εrnst B. (ernst)


Lesenswert?

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.

von Axel R. (axlr)


Angehängte Dateien:

Lesenswert?

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
von Axel R. (axlr)


Lesenswert?

schreib mal über setup()
#define FASTLED_ALLOW_INTERRUPTS 1
in deinen Code. obs dann geht?

von Axel R. (axlr)


Lesenswert?


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.