Oto przykład charlieplexowania, który zbudowałem.
Jest to symulator wiązki latarni morskiej i wykorzystuje serię 12 diod LED oznaczonych jako 4 GPIO do zamiatania wiązki światła wokół dysku. Tutaj jest film .
Projekt jest oparty na PIC, używam PIC12f683, który jest również 8-pinowym uP i można go uznać za porównywalny z 8-pinowymi AVR.
Intensywność diody LED jest sterowana przez przerwanie, które zapewnia 32-stopniowy PWM przy około 60 Hz. Tylko dwie diody LED mogą świecić jednocześnie, co daje 50% cła na każdą diodę, ponieważ to było wszystko, czego potrzebowałem. Daje również dobry kompromis częstotliwości odświeżania PWM w stosunku do rozdzielczości.
Kodowanie użycia charlieplexowania jako właściwie całkiem proste, jeśli trzymasz się „klasycznej” metody zapalania tylko jednej diody LED w dowolnym momencie z bardzo dużą częstotliwością odświeżania. Wymagane PORT i TRIS (rejestry specyficzne dla zdjęć) najpierw opracowuję na papierze, a następnie przechowuję wyniki w tablicy statycznej. Aby zapalić LED x, PIC musi po prostu sprawdzić wartość na indeksie tablicy [x] i zapisać je bezpośrednio do PORTU (z odrobiną maskowania, aby zachować stan innych pinów nieużywanych w charliplexie)
Mój projekt ma tylko 12 diod LED, a nie 15 lub maksymalnie 20, na które pozwala 5 GPIO, ponieważ chciałem zachować jedną zapasową GPIO na przyszły rozwój.
W każdym razie ... Pomyślałem, że może być przydatny przykład działania podobny do twojego żądania.
Pełny kod źródłowy i schematy są dostępne na moim blogu.