Milisekundowa choinka startowa

Technologia się zmienia, technologia zmienia świat...
Na imprezie tuningowej naszego klienta (pozdrawiamy) uczestnik korzystając z szybkiej kamery w trybie SlowMotion 200 klatek/sekundę zarejestrował moment przełączania choinki startowej z ostatniego pomarańczowego na zielone. Była to choinka podwójna, siedmiopunktowa, czyli ma 3 pomarańczowe, zielone, czerwone dla każdego toru osobno, oraz 4 światła pre-stage i stage.
Filmu ukazywał że przy dużym spowolnieniu widać że światła zielone nie zaświecają się jednocześnie, dzieliło je jedna czy dwie klatki, czyli tysięczne części sekundy. Po przeanalizowaniu stwierdziliśmy że nie ma to realnego wpływu na przebieg pomiarów, gdyż ludzkie oko nie zarejestruje tak małej różnicy bez nowoczesnego sprzętu... ale pozostał lekki niedosyt, więc podnieśliśmy rzuconą rękawice.
W efekcie przeglądu firmware, software dla windowsa i hardware udało się uzyskać sporo optymalizacji i tak:
  • Na pierwszy ogień poszła prędkość transmisji komend pomiędzy choinką oraz komputerem. Podnieśliśmy ją 24 razy, do 230kbps, lecz przy tej prędkości zachodziła obawa o stabilność i odporność na zakłócenia w warunkach polowych - ostatecznie pozostała niższa - co dało przyśpieszenie transmisji 12 razy.
  • Kolejne były same komendy firmware. Choć już i tak minimalistyczne, jednak to one były odpowiedzialen w głównej mierze za różnicę wizualną - gdyż lewa i prawa część choinki dostawała osobne polecenie. Różnica i tak nie byłaby widoczna gdyby nie kochany windows... Interfejs UART jest zbudowany tak, że wysyłając słownie bajty na raz - potrafi wysłać pierwszy, zrobić sobie przerwę na kawę, sprawdzić co w necie, obsłużyć inne procesy, pogmerać po dysku i dopiero wysłać drugi bajt. Efekt: prawe zielone zapala się szybciej niż lewe. Po kilku przeliczeniach udało się skompresować polecenie dla lewej choinki, polecenie dla prawej choinki oraz dane kontrolne w jeden bajt. Dzięki tym zabiegom komenda była niepodzielna i wpływała do firmware choinki w jednym czasie dla lewej i prawej strony (2x szybciej)
  • Problem został zdławiony ale pozostał pewien niedosyt... programista wie, że komenda która dociera do mikroprocesora choinki jest obsługiwana po kolei dla każdego światła (punktu). Każde takie polecenie trwa około 3.5 mikrosekundy, plus do tego instrukcja warunkowa. Czy da się coś z tym zrobić ? Ano okazuje się że się da. Stary dobry asembler przychodzi z pomocą. Napisałem prosty i skuteczny odpowiednik instrukcji włączania światła który trwał... tylko 0,19 mikrosekundy - 17 razy szybciej.
Podsumowując, szybsza transmisja, krótsza komenda, szybszy firmware oraz atomowa(nieprzerywalna) operacja : 12x 2x 17 = 408 razy szybciej, bez zmiany sterownika. Ostateczne testy przy nagrywaniu 960 klatek/sekundę nie pokazują żadnej różnicy w przełączaniu (programista wie że jakaś jednak jest), czekamy na dostępność szybszych kamer (:
Copyright © 2024 Sectro Timing Systems.
Parse Time: 0.148 - Number of Queries: 119 - Query Time: 0.11476888247681