Witam. Pisze właśnie 48 kanałowy moduł PWM. Procesor to atmega 169. problem Polega na tym że odświeżanie jest trochę za wolne jak na moje oko - nie wiem czy nie przegiąłem z liczbą kanałów obsługiwanych przez jeden procesor. Pierwotnie napisałem program w bascomie - działa ale zdecydowanie za bardzo miga. Metoda chyba najszybsza z możliwych czyli programowy licznik który liczy od 0 do 128 i w każdym przebiegu licznika porównuję ten licznik z danymi z tabeli jeżeli któraś jest równa to wyłączam kanał odpowiadający tej zmiennej - przed licznikiem włączam wszystkie kanały. Postanowiłem program przepisać na asembler już w zasadzie działa i jest szybciej ale nadal nie tak szybko jak bym chciał... Metoda postępowania ta sama - włączam wszystko i wpadam w pętlę w której sprawdzam czy któraś dana z tablicy odpowiada licznikowi i wyłączam dany kanał. Problem jest w tym sprawdzaniu. Obecnie robię to tak:
R30 to mój licznik z którym porównuje inne rejestry. Mam jednak tylko 32 rejestry a kanałów 48 trzeba więc porównywać z zawartością ramu a nie rejestru i tu pytanie - czy istnieje polecenie działające jak cpse tylko zamiast dwóch rejestrów porównujące rejestr z komórką pamięci ram albo dwie komórki pamięci? czy jedyna metoda to przerzucenie danej z komórki ramu do rejestru i dopiero porównanie przez cpse ?
cpse r30,r17
jmp tam
cbi PORTe,6
tam:
cpse r30,r18
jmp tam1
cbi PORTe,7
tam1:
.
.
.
R30 to mój licznik z którym porównuje inne rejestry. Mam jednak tylko 32 rejestry a kanałów 48 trzeba więc porównywać z zawartością ramu a nie rejestru i tu pytanie - czy istnieje polecenie działające jak cpse tylko zamiast dwóch rejestrów porównujące rejestr z komórką pamięci ram albo dwie komórki pamięci? czy jedyna metoda to przerzucenie danej z komórki ramu do rejestru i dopiero porównanie przez cpse ?