Performance Probleme

Halli Hallo,

nach sehr langer Zeit melde ich mich hier mit einem neuen Problem zurück.
Derzeit versuche ich mit den berühmt-berüchtigten Neopixeln(WS2812b) und einer RTC(DS3231) eine Binäruhr zu basteln.
Für mehr Komfort habe ich vor, die Farbe der LEDs mithilfe einer kleinen Infrarot-Fernbedienung(NEC-Protokoll) bequem von dem Sofa aus zu steuern.
Die RTC in Kombination mit den Neopixeln, und damit die Anzeige der Uhrzeit in binär-Format läuft bereits problemlos.
Die Abfrage des Infrarot-Empfängers(TSOP 4836) habe ich zunächst in einem separaten Quelltext erfolgreich umsetzen können und die einzelnen Codes der jeweiligen Tasten abgespeichert – läuft also auch soweit.
Versuche ich nun allerdings aus den beiden separaten Quelltexten einen zu machen, werden plötzlich andere Hex-Codes empfangen, sodass die Fernbedienung nutzlos ist.
Wichtig hierbei ist zu erwähnen, dass anders als bei dem separaten Quelltext jedes Mal ein anderer Hex-Code empfangen wird.

Bisher kann ich mir das nur damit erklären, dass entweder die Abfrage des Infrarot-Empfängers in Verbindung mit den anderen Abfragen für die Binäruhr nicht ordnungsgemäß durchgeführt wird oder die verschiedenen Libraries nicht mit einander harmonieren.
Folgende Librarys nutze ich: Time.h, TimeLib.h, DS3232RTC.h, Adafruit_NeoPixel.h(erster Teil)
Problematisch wird es nun, wenn ich die IRremote.h-Library mit einbinde und versuche alles unter einen Hut zu bringen.
Hat Jemand schon einmal Erfahrung mit der IRremote.h-Library in Verbindung mit anderen Elementen gemacht, also bei der Einbettung in ein bereits vorhandenes Programm?
Ich hoffe das Problem wurde deutlich - für weitere Details bitte einfach kurz anklopfen!

Besten Dank und nasse Grüße
Reuter

Die Bibliothek für die NeoPixel schaltet für die Übertragung der Daten an die WS2812 jeglichen Interrupt ab. IRremote funktioniert aber mit Interrupt.

Wie oft updatest Du die WS2812?
Die meisten Fernsteuerungen funktionieren mit 38kHz Modulierung. Wieso hast Du einen 36kHz Empfänger?

Grüße Uwe

Danke für die schnelle Rückmeldung.
Im Umkehrschluss würde dies dann bedeuten, dass ich auf die IR-Fernsteuerung verzichten müsste?
Da ich davon ausgehe, dass vergleichbare IR-Librarys auch mit Interrupts arbeiten, würde eine andere Library-Kombination wahrscheinlich auch nichts bezwecken.
Bisher update ich die NeoPixel bei jedem Programmdurchlauf - ließe sich natürlich auch so gestalten, dass dies nur sekündlich geschieht - würde dies etwas an dem Problem ändern?
Den 36kHz Empfänger hatte ich noch irgendwo ausgegraben und nicht extra für dieses Projekt besorgt - nach erfolgreichem Test habe ich mir darum deshalb keine Sorgen gemacht.

Es gibt keinen Grund den WS Daten zu schicken wenn keinen Änderung in den Daten ist. Wenn Du es nur 1x pro sekunde machst ist der Arduino nur 1 mal pro Sekunde für einige ms blockiert. Die genaue Zeit kenne ich nicht weil ich nicht weiß wieviele WS Du hast. Man könnte die Zeit nich mehr verringern wenn Du die Sekunden WS von den Minuten und Stunden Ws trennst und so jede Sekunde nur einige wenige Byte schicken mußt. Der Update der Miuten ist dann so selten daß er auch länger dauern kann. Dauer eines Datenpacketes ist 50µs+1,25µs*(38Anzahl WS).
Grüße Uwe

reuter328:
Im Umkehrschluss würde dies dann bedeuten, dass ich auf die IR-Fernsteuerung verzichten müsste?

Nein, folgende Lösungsansätze:

  • Die WS2812 nimmst Du für die Weihnachtsbeleuchtung und erwirbst stattdessen APA102 oder vergleichbare, die Daten und Takt getrennt haben. Das habe ich bei meiner LED-Uhr so gemacht.
  • Du verwendest einen eigenen µC für die Fernbedienung und läßt beide mittes I2C (und ggf. Meldeleitung) kommunizieren. Das habe ich bei meinem MP3-Player mit UNO und ATtiny85 so gemacht. Anstelle ATtiny85 geht auch Nano oder ProMini.

Statt einen zweiten Controller könnte man auch einen anderen Controller Typ nehmen.

Hier gibt es z.B. eine nicht blockierende WS2812 Lib für Teensy 3.x und LC
https://www.pjrc.com/non-blocking-ws2812-led-library/

Theoretisch sollte das Prinzip auch auf manche andere ARM basierte Arduinos übertragbar sein.

Und solltest du dich doch für einen 2.Controller entscheiden, dann findest du hier in Post 314 ein Beispiel, wie du es bauen könntest.

Vielen Dank für die zahlreichen Antworten und Anstöße.
Dank diesem eigentlich doch banalem Tipp:

uwefed:
Es gibt keinen Grund den WS Daten zu schicken wenn keinen Änderung in den Daten ist. Wenn Du es nur 1x pro sekunde machst ist der Arduino nur 1 mal pro Sekunde für einige ms blockiert.

..läuft alles so, wie ich es mir vorgestellt habe, danke!

Über die Variante mit einem zweiten Controller(Vergleichbares habe ich bereits schon bei einem Arduino-Fahrradcomputer umsetzen können) habe ich vor ein paar Tagen auch schon nachgedacht, ich wollte allerdings eine kompakte Lösung und nicht unnötig Ressourcen aus dem Fenster werfen.

Sobald die finale Software steht und der Holzrahmen für die LEDs poliert ist, werde ich noch einmal einen kleinen Post mit Bildern hinterlassen;)

Beste Grüße
Reuter

Hier kommen die versprochenen und abschließenden Worte&Bilder zu meiner fertigen Binary-Clock!
Der Zusammenbau des Holzrahmens hat letztendlich doch mehr Zeit in Anspruch genommen, als ursprünglich geplant, weshalb ich mich hier erst so spät zurückmelde. Dafür lässt sich dieser jetzt aber auch ganz gut sehen.

Die Hardware basiert auf einem Atmega328 mit externem 16MHz-Quartz, einer RTC(DS3231), 40 NeoPixeln(WS2812B) und einem IR-Empfänger(TSOP 4836). Über eine einfache IR-Fernbedienung lässt sich neben zahlreichen Farben auch der ein oder andere Effekt, die Helligkeit oder die Temperatur(von der RTC abgegriffen) bequem vom Sofa aus anzeigen. Zur Versorgung nutze ich ein 5V-Netzteil(5W).

Falls Interesse an dem Code oder dem Platinenlayout besteht, einfach kurz anklopfen!

Zu den Bildern:
Die Uhr ist so aufgebaut, dass für die Sekunden, Minuten und Stunden jeweils zwei Spalten reserviert sind. So sind ganz rechts die Sekunden abzulesen, mittig die Minuten(und bei entsprechendem Modus die Temperatur) und auf der linken Seite die Stunden.

https://we.tl/JyYPnkNmOf

Beste Grüße
Reuter

Das ist ja recht "kurzlebig" (wie eben so üblich bei WeTransfer) :slight_smile:

Dateien werden in 7 Tage(n) gelöscht

Mach die Bilder doch ein wenig kleiner und poste sie direkt hier im Forum. Dann sind sie auch nach 7 Tagen noch sichtbar.

Hi

Nachdem ich den AGB zustimmen durfte, wurde mir angezeigt, daß die Bilder in 7 Tagen gelöscht würden.
Meinst Du nicht, die Bilder wären hier auf dem Foren-Server besser aufgehoben?
Auch in drei Jahren will sich wer an Deinem Können erfreuen - und spätestens dann werden die Bilder wohl Geschichte sein.

(Holzrahmen von vorne)
Die Holzarbeiten sehen sauber aus, obwohl, oben rechts könnte eine Lücke sein :o
Nee, passt schon!

MfG

Hier die Fotos: