Zu 1: Wenn Du SUMD benutzt, kommen bei der MX-12 alle 6 (bzw. 8) Kanäle über K6 an. Über K5 läuft die Telemetrie. Du kannst immer noch an K1..4 Servos anschliessen. Es sind aber dadurch nicht mehr Kanäle, sondern die gleichen.
Zu 2: Was willst Du machen? ein 800KHz-Signal an einem PWM-Pin ausgeben? Wenn ich mir die pdf zum WS2812 ansehe, wird die RGB-Info über das Tastverhältnis bitweise übertragen. 1,25µs pro Bit, 24Bit pro LED, bei 20LEDs. Damit komme ich auf 600µs. Bei Arduino wird es über SPI realisiert und ohne! abschalten von Interrupts. Ich sehe da nur 2 Wege: a) eigenen SPI Treiber in Taulabs benutzen, was aufwendig wird und höchst wahrscheinlich nicht in den Hauptcode mangels Nachfrage übernommen wird. b) einen ProMicro über einen USART anschliessen und die Info zum Ausgeben über eigenes Protokoll übertragen - wo wir wieder bei PicoC sind.
Interrupts abzuschalten hat auf dem STM32 wenig Sinn. Anders als Multiwii läuft Taulabs im Multitasking. Wenn Du die Interrupts ausschaltest, bringst Du das ganze System durcheinander. Die Prozessorarchitektur ist nicht wie auf den Kleinen über direkten Registerzugriff gelöst, sondern es ist eine Art Embedded-CPU über ein Bussystem mit der Peripherie mit allen Latenzen und Prioritäten verbunden. Du kannst also nicht einfach alle Interrupts abschalten und mit einem Timerregister eine Prozessorschleife laufen lassen und dabei einen GPIO-Pin klingeln lassen (noch dazu im genauem Timing). Das musst Du schon der Peripherie überlassen. Das wäre so, als ob Du auf einem PC mit xGHz und yGFLOPs einen Pin am Parallelport dazu bringen wolltest einen Rechteck Deiner Wahl auszugeben. Funktioniert schon wegen der Cache nicht.
PS: Für Arduino gibt es dafür eine FastSPI. Wenn ich mich nicht irre...
Zu 2: Was willst Du machen? ein 800KHz-Signal an einem PWM-Pin ausgeben? Wenn ich mir die pdf zum WS2812 ansehe, wird die RGB-Info über das Tastverhältnis bitweise übertragen. 1,25µs pro Bit, 24Bit pro LED, bei 20LEDs. Damit komme ich auf 600µs. Bei Arduino wird es über SPI realisiert und ohne! abschalten von Interrupts. Ich sehe da nur 2 Wege: a) eigenen SPI Treiber in Taulabs benutzen, was aufwendig wird und höchst wahrscheinlich nicht in den Hauptcode mangels Nachfrage übernommen wird. b) einen ProMicro über einen USART anschliessen und die Info zum Ausgeben über eigenes Protokoll übertragen - wo wir wieder bei PicoC sind.
Interrupts abzuschalten hat auf dem STM32 wenig Sinn. Anders als Multiwii läuft Taulabs im Multitasking. Wenn Du die Interrupts ausschaltest, bringst Du das ganze System durcheinander. Die Prozessorarchitektur ist nicht wie auf den Kleinen über direkten Registerzugriff gelöst, sondern es ist eine Art Embedded-CPU über ein Bussystem mit der Peripherie mit allen Latenzen und Prioritäten verbunden. Du kannst also nicht einfach alle Interrupts abschalten und mit einem Timerregister eine Prozessorschleife laufen lassen und dabei einen GPIO-Pin klingeln lassen (noch dazu im genauem Timing). Das musst Du schon der Peripherie überlassen. Das wäre so, als ob Du auf einem PC mit xGHz und yGFLOPs einen Pin am Parallelport dazu bringen wolltest einen Rechteck Deiner Wahl auszugeben. Funktioniert schon wegen der Cache nicht.
PS: Für Arduino gibt es dafür eine FastSPI. Wenn ich mich nicht irre...
Zuletzt bearbeitet: