Np. taki pseudokod, oddajacy ideę programowego PWM wielokanałowego (pisane na kolanie):
while (true)
{
for (j = 0; j < LICZBA_PORTOW; ++j)
{
if (pwm_portu[j] > 0)
wlacz_port(j);
}
for (i = 0; i < LICZBA_KROKOW_PWM; ++i)
{
delay(CZAS_KROKU_PWM);
for (j = 0; j < LICZBA_PORTOW; ++j)
{
if (pwm_portu[j] < j)
wylacz_port(j);
}
}
}
Oczywiście, będzie problem z wykonaniem czegoś takiego, jeżeli wymagana czestotliwość PWM jest wysoka. Żeby to działało, czas wykonania całego powyższego kodu musi być pomijalny w porównaniu do opóźnienia wprowadzanego funkcją delay().
-----------------
Powyższe to była odpowiedź na pytanie z postu o 3 do góry
-------------------
grafiksaba napisał:
Tak na szybko to sobie wyobrażam tak:
dla ułatwienia steruje 6 diodami przez atmega8, każda dioda ma być sterowana przez sygnał PWM z zakresu 0 do 255.
generuje sygnał PWM 8 bitowy na jednym wyjściu (oc1a) będzie on służył do sterowania jasnością wszystkich 6 diod
To mimo wszystko jest to PWM sprzętowe.
Cytat:
Konfiguruje timer który będzie odpowiedzialny za włączanie diod multipleksowo tak jak wyświetlacz led cyfr,
czyli najpierw włączę 1 diodę,
zostanie ona wyłączona
później kolejna i tak do sześciu
jak będzie szybko to oko da się oszukać że są cały czas włączone.
Musi ten timer chodzić z czestotliwościa co najmniej 40Hz * ilość diod.
Cytat:
diodę podłącze z jednej strony do 5V pomiędzy opornik 550 a z drugiej strony do wyjścia pb1(oc1a), a pomiędzy wstawię triaka sterowanego
Triak się nie nadaję. Musisz użyć tranzystorów.
Cytat:
Czyli jeśli włączę triaka ustawiając poziom niski na PD0 to sygnał PWM zostanie przekazany na diodę D1, później wyłączę triaka ustawiając poziom wysoki, ustawie nowa wartość PWM na oc1a, ustawię poziom niski na PD1 co włączy drugiego triaka i przekaże nowy sygnał PWM na diodę2 itd. Jako sygnał wejściowy do triaka będzie OC1A czyli właśnie PWM.
W zasadzie tak, tylko czestotliowość PWM musi być albo duuużo wyższa, niż tego timera. Jeżeli PWM 8-mio bitowy, to co najmniej 256 razy większa, pod warunkiem, że to wszystko chodzić bedzie synchronicznie.
Ponieważ jesteś początkujący, to napisz co dokładnie chcesz zbudować. Będzie łatwiej coś konkretnego doradzić.