Das stimmt natürlich - bei 8 MHz ist ja ein einziger Zählschritt schon 125 ns lang - da gibts nicht viel zu PWMen... umso weniger versteh ich, warum hier dauernd von PWM die Rede ist.
Die Port-Bits direkt im Prozessortakt mit Befehlen anzusprechen, ist natürlich schneller.
Beim WS2812B ist die Zykluszeit 1250 ns (900 ns high + 350 ns low für 1 und 350 ns high + 900 ns low für 0) - das entspräche 10 Prozessortakten. In deinem Code hätte ich jetzt jeweils 10 Befehle erwartet, die das Portbit auf 1,1,1,1,1,1,1,0,0,0 oder 1,1,1,0,0,0,0,0,0,0 setzen. Stattdessen seh ich nur 1,1,1,1 und 1,1,0,0.
Wird der Pin für die restliche Zeit, die durch Schleifen und Bedingungen verbraucht wird auf 0 gehalten?
Etwas mehr zeit hat man ja - laut Datenblatt bis zu 50 µs Low-Time, bevor ein Reset ausgelöst wird. In meinem Link oben hat das jemand getestet und bekam den Reset bei knapp 9 µs. Na, immerhin sind das ja einige Taktzyklen.
Wie machen das denn die Libraries? Wenn die alle mit solchem Bitgeschubse arbeiten, kann das eigentlich mit einem µC nicht wirklich sauber laufen, oder?
- - - Aktualisiert - - -
Das würd ich auch probieren. Undfalls sie sich in die Quere kommen, kann man sie ja auch immer wieder löschen und für den gewünschten Pin neu erstellen...
Lesezeichen