Witam
to mój pierwszy post na tym forum, stąd możecie mi wierzyć jak bardzo jestem zrozpaczony:) jeśli temat jest w złym miejscu to prosiłym moderatora o przeniesiegnie i z góry przepraszam:) zwykle staram się rozwiazywać wszystkie problemy sam ale tym razem mam coś czego nie jestem w stanie zrozumieć.
Pracuję chwilę nad programem którego działanie polega na tym że liczy czas stanu wysokiego i zależności od czasu trwania generuje impuls po odpowiednim upływie czasu od zbocza opadającego.
Program w moim odczuciu uważam prawie za gotowy gdyby nie to że po kilku nieprzespanych nocach i wielu nieudanych próbach doszedłem do wniosku że timer źle zlicza mi ilość impulsów/czas trwania stanu wysokiego.
W oparciu o drugą atmegę mam zrobiony generator PWM z dobraną odpowiednio długością stanu wysokiego. I mimo iż nawet na oscyloskopie impuls mieścił się w poprawnych granicach czasu to według programu przyjmuje on wartość większą niż występująca w ostatnim warunku sprawdzajacego długość czasu stanu wysokiego. >140000us. Komenatrz z wartością "//o=12000" i "//dalrade=1;" służyły jedynie do potwierdzenia moich wątpliwości.
Prosiłbym was o udzielenie komentarza co może być przyczyną takiego niepoprawnego zliczania czasu?
Atmega pracuje z czestotliwością 8MHz, Timer ma ustawiony prescaler na 8, 1clk=1us dla timera, fusebity: hFuse D9, lFuse E4.
[/code]
Dodatkowo mam jeszcze jedno pytanie.
Mianowicie czy jeśli zadeklarujemy sei(); to czy na końcu przerwań musimy dodawać reti(); ? Podczas ich dokładania układ nie generował mi interesującego mnie impulsu. Natomiat w takiej wersji jak jest(czyli bez reti) z kometarzami z ostatniego warunku pomiaru czasu je generował.
Z góry dziękuje za wszelkie odpowiedzi i sugestię co może być nie tak.
Pozdrawiam.
to mój pierwszy post na tym forum, stąd możecie mi wierzyć jak bardzo jestem zrozpaczony:) jeśli temat jest w złym miejscu to prosiłym moderatora o przeniesiegnie i z góry przepraszam:) zwykle staram się rozwiazywać wszystkie problemy sam ale tym razem mam coś czego nie jestem w stanie zrozumieć.
Pracuję chwilę nad programem którego działanie polega na tym że liczy czas stanu wysokiego i zależności od czasu trwania generuje impuls po odpowiednim upływie czasu od zbocza opadającego.
Program w moim odczuciu uważam prawie za gotowy gdyby nie to że po kilku nieprzespanych nocach i wielu nieudanych próbach doszedłem do wniosku że timer źle zlicza mi ilość impulsów/czas trwania stanu wysokiego.
W oparciu o drugą atmegę mam zrobiony generator PWM z dobraną odpowiednio długością stanu wysokiego. I mimo iż nawet na oscyloskopie impuls mieścił się w poprawnych granicach czasu to według programu przyjmuje on wartość większą niż występująca w ostatnim warunku sprawdzajacego długość czasu stanu wysokiego. >140000us. Komenatrz z wartością "//o=12000" i "//dalrade=1;" służyły jedynie do potwierdzenia moich wątpliwości.
Prosiłbym was o udzielenie komentarza co może być przyczyną takiego niepoprawnego zliczania czasu?
Atmega pracuje z czestotliwością 8MHz, Timer ma ustawiony prescaler na 8, 1clk=1us dla timera, fusebity: hFuse D9, lFuse E4.
[/code]
Kod: C / C++
Dodatkowo mam jeszcze jedno pytanie.
Mianowicie czy jeśli zadeklarujemy sei(); to czy na końcu przerwań musimy dodawać reti(); ? Podczas ich dokładania układ nie generował mi interesującego mnie impulsu. Natomiat w takiej wersji jak jest(czyli bez reti) z kometarzami z ostatniego warunku pomiaru czasu je generował.
Z góry dziękuje za wszelkie odpowiedzi i sugestię co może być nie tak.
Pozdrawiam.
