Układy PCF8574 sterowane magistralą I2C pozwalają zwiększyć ilość pinów cyfrowych o 8
Pokaż soft, który realizuje PWM na PCF8574, napisz jakie ma parametry (rozdzielczość i częstotliwość) i jak obciąża mikrokontroler. To, że sie da wycisnąć ponad 40Hz przy 8-bit PWM to ja wiem. Pytam jednak o gotowca, bo obsługa I2C w Arduino na przerwaniach jest dla wielu ściana nie do przebicia. Inna sprawa, dlaczego używać archaicznego PCF8574 skoro sa nowsze, lepsze układy? Mają 16-wyjśc, pracują na 400kHz a nie na 100. Mają wyjścia PP a nie pseudo dwukierunkowe jak w 8051 gdzie podłączenie np ULN2803 wymaga dodatkowych elementów. Przy 400kHz i ośmiu wyjściach uzyskam nie 43Hz a ponad 170 lub 43Hz ale 12-bit.
40Hz to trochę za mało na PWM dla LED, min to 80...100Hz nieosiągalne dla PCF8574 , chyba, że zmniejszy się rozdzielczość to np 6-bit, wtedy PCF wyciągnie ponad 170Hz. 6-bit dla LED przy płynnej zmianie intensywności świecenia to w zasadzie dolna granica, poniżej zmiany będą w pewnym zakresie skokowe, co wynika z nieliniowej charakterystyki oka ludzkiego i nieliniowej zależności prądu LED do intensywności świecenia.
Ostatecznie można użyć PCF ale to tak jakby używać Z-80 z EEPROM/RAM/CTC/ zamiast AVR lub ARM.
Na przyszłość proponowałbym
przeprowadzić podstawowe obliczenia zanim zaproponuje się jakieś rozwiązanie popularne w "sieci"
to sterowania przekaźników w roli PWM.
Układy PCA9785 mają minimalną częstotliwość 40Hz, więc miganie zielonego i pomarańczowego sygnału trzebaby rozwiązac programowo.
Co ma miganie do częstotliwości PWM? Jeśli PWM-em chcesz zrealizować miganie światła, to chyba nie wiesz co to jest, do czego służy i jak działa PWM. Teoretycznie, ustawiając PWM na 50% i częstotliwość na np 1Hz uzyska się efekt migania światła, ale będą to dwa stany, świeci/nie świeci a powinno być rozjaśnia się, świeci, ściemnia się, jest wygaszone, itd.
Płynne rozjaśnianie i ściemnianie świateł trzeba zrealizować programowo. Sprzętowo to można zrobić na mikrokontrolerze, który ma DMA. Zewnętrzne PWM jak PCA9785, nie mają mikrokontrolera, tym samym DMA. Ich budowa jest dość prosta i sprzętowo potrafią wygenerować PWM o zadanych parametrach. Jeśli ma sie on zmieniać w czasie, to trzeba do PCA9785 wysyłać zmienne w czasie nastawy. W sumie jest to proste (np dla mnie) ale dla wielu
ściana nie do przebicia, wysyłać na przerwaniach dane do PCA9785 a w innym przerwaniu realizować płynne rozjaśnianie i ściemnianie. Może zaproponujesz RTOS? Jest na Arduino, tyle, że pisanie na RTOS tylko pozornie jest łatwe. Semafory, mutexy itp wymagają pewnego sposobu pisania softu, gdzie tylko można trzeba zwalniać czas CPU dla innych zadań a
i tak pewnie nie uniknie się napisania obsługi I2C na przerwaniach zwłaszcza na AVR, bo na ARM może by się nawet to udało, tyle, ze dla ARM, npSTM32, CubeMX wygeneruje gotowy kod do komunikacji po I2c na przerwaniach a nawet i na DMA więc problemu nie ma.
Inna sprawa, to
po co dodawać zewnętrzny układ zamiast dać inny mikrokontroler z większą liczbą PWM? Kombinacja mikrokontroler + PCA9785 wyjdzie drożej niż mikkrokontroler z większą liczba PWM. Program na "większy" mikrokontroler pisze się łatwiej i szybciej niż na mikrokontroler + PCA9785.
Podsumowując:
Hasło "weź PCF8574, pełno przykładów w Internecie", to porada jak zbuduj wielki piec i wypal sobie żeliwo. Nie sądzę aby autor wątku był ekspertem od mikrokontrolerów skoro pisze o Arduino. Stara sie pomagać osoba, też nie za bardzo znająca mikrokontrolery. W takiej sytuacji jedynym wyjściem jest konkretny link do rozwiązania.