Hallo ich habe eine 9x12 Matrix aus Neopixeln.
Zusätzlich gibt es eine UART Kommunikation.
Nun kann ich leider nicht die UART pollen während die Matrix beschrieben wird.
Kann mir jemand sagen, wie ich ermitteln kann, wie lange es dauert bis alle LEDs beschrieben wurden?
Kann man das irgendwie messen? oder vielleicht sogar berechnen?
Wie genau sind dann diese Werte? Können diese auch variieren?
Wenn Du Dir das Datenblatt anschaust dann siehst Du, daß die Übertragungsfrequenz 800kHz ist. Die Zeiten (1,25 µS pro Bit) müssen auf 150nS pro Pegelwechsel genau sein. Bei 24 Bit pro LED sind das 30µS. Bei 108 LED 3,24mS mit einer Genauigkeit von ca +/- 0,8mS. Am Anfang der Übertragung raucht es ein Restimpuls von mindestens 50µS. Also im ganzen für die Übertragung ca 3,3mS+/- 0,7mS.
Die Wiederholbarkeit der Zeiten ist sehr genau und die Ungenauigkeit hängt vom Taktgenerator ab. Der Fehler der Taktfrequenz liegt maximal bei einem Arduino mit Resonator ( zB Arduino UNO) bei +/- 0,1% bei einem mit Quarz wie zB beim Arduino Leonardo bei +/-0,001%.
Messen kannst du immer ganz einfach indem du vorher und nachher micros() aufrufst und die Werte voneinander subtrahierst, die Differenz ist die Zeit in Mikrosekunden. Wenn du von Anfang bis ende der loop misst und 1000000 durch diesen Wert teilst hast du sozusagen die framerate.
Wenn es am Interface mangelt könntest du den Wert testweise auch mal binär auf den ersten 32 Pixeln der LED Matrix ausgeben, abzählen, und umrechnen. Oder als "Morsecode" auf der pin13-Led ausblinken.
Alternativ kannst du messen indem du durch Portmanipulation (oder digitalWriteFast() ) einen Ausgang vor der Übertragung einen Pin High und danach auf Low setzt und die Pulsbreite mit einem Oszilloskop misst.