Witam
Tworzę program pod ATMEGA88 do falownika. Wykorzystuje sprzętowy PWM. Co 0,1ms generuje przerwanie na wykonanie którego mam jedynie 2000cykli (taktowanie 20MHZ). W każdym przerwaniu muszę wyliczyć wartość próbki przebiegu sinusoidalnego no i mam problem... Otóż, operując na zmiennych globalnych (PI, licznik, fpwm) przeliczenie i wygenerowanie wartości sinusa zajmuje ponad 3000cykli... Zauważyłem że jeśli będą to wartości zadeklarowane wewnątrz przerwania, jako lokalne, wyliczenie nowej próbki zajmuje ok. 100 cykli, jednakże jak wiadomo po wyjściu z przerwania tracę wartości tych zmiennych które są mi potrzebne w następnym wywołaniu tego przerwania.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
UWAGA! funkcja "proba" jest tutaj w zastępstwie dla przerwania, gdyż symulator AVR Studio nie dawał rady inaczej. Proszę traktować jako przerwanie.
Nie mogę zmniejszać częstotliwości PWM dla otrzymania większej ilości cykli na obsługę przerwania gdyż to mija się z celem.
Proszę mi powiedzieć co zrobić? Już kombinowałem nad tym by co przerwanie wrzucać wartości zmiennych globalnych do lokalnych i operacje wyliczenia sinusa wykonać na lokalnych ale on wtedy znów robi to przez ok 3000 taktów. Próbowałem też na zmiennych static - zachowuje się tak jak na globalnych.
Pomożecie?
