19-08-2018, 01:32
(19-08-2018, 00:57)Robson Kerman napisał(a): Tak sobie myślę, ale tylko myślę (alkohol, łikend, itp.), że może by użyć RTOS'a.
(...)
Mam sterowanie odkurzacza zrealizowane na Arduino_FreeRTOS (detekcja przejścia przez zero, sterowanie fazą, wyświetlacz OLED, przyciski) i muszę powiedzieć, że jest moc.
RTOS nie rozwiąże problemu pomiarów krótkich czasów. To trzeba zrobić sprzętowo ewentualnie na przerwaniach od timera. Pomocny będzie natomiast w "równoległym" wykonywaniu długotrwałych obliczeń i wyświetlania wyników.
Na wyświetlacz jest jednak prosta rada, wybrać odpowiedni tym (SPI, I2C) i komunikację zrobić przez DMA (Xmega, ARM, Z-80 - tak, tak, Z-80 mógł działać z DMA) lub na przerwaniach. Tyle, że do tego trzeba RAM aby cały bufor wyświetlacza zmieścił się uC. Więc należy zapomieć o Mega328, min to 4kB RAM.
PS
Co do odkurzacza, przejście przez zero co 20ms gdzie dokładność 1ms wystarcza to można spokojnie na Z-80 1MHz zrobić.
Robiłem sterowniki fazowe zarówno na AVR jak i ARM http://avt.4ra.pl/viewtopic.php?id=31. Pętla główna niewiele robi (wyświetlanie wyników, przeliczanie, oscyloskop). Wszystkie obliczenia i obsługa LCD wykonywane sa co 100ms, trwają kilka ms, resztę czasu procek śpi.
Samo sterowanie fazowe i wykrywanie zera załatwia w 90% sprzęt (generowanie impulsu dla triaka przez timer).