Witam!
Po próbach wyszukania włąściwej odpowiedzi postanowiłem zapytać kolegów o następujący problem -
muszę dosyć precyzyjnie wygenerować przerwanie w Bascomie , używam do tego timer0 i odpowiedniego przerwania on timer0.
Dziwny dla mnie jest fakt że programik :
on timer0 etykietaprzerwania
....
etykietaprzerwania:
portb7 = not portb.7
timer0 = 200
return
przy kwarcu 10mhz . na porcie wyjsciowym otrzymuje przebieg o okresie 25us i nie chce być mniej , na moja marną logikę jesli ustawiam timer na wartość 200 to przerwanie powinno nastąpić po 55 cyklach zegara , kiedy rejestr timera sie przepełni.
jednak tak nie jest. Oczywiście nie potrzebuje tego przerwania do generacji przebiegu , na porcie sprawdzam to tylko "diagnostycznie"
Kiedy dla testu pisze takie coś :
main:
portb.7 = not portd.7
goto main
to okres przebiegu wynosi 1,2us - czyli jednak procesor może pracować szybciej. Gdzieś sie "zagipsowałem" w swoich poszukiwaniach i zrozumieniu działania timerów w avr.
Te same rezultaty mam przy próbie używania przerwania compare , na mój blady rozum , przerwanie to powinno następować jesli wartość timera jest równa wartośći compare , jest tak ale dla wyższych wartości compare > 100 , jesli zamarze o przerwaniu co np 10 cykli zegara to otrzymuje "magiczne i nieprzekraczalne" 25us , które zaczyna rosnąc dopiero po compare > 100. Pewnie to dla kolegów proste , a ja chętnie bym to zrozumiał.
Pozdrawiam
Robert
Po próbach wyszukania włąściwej odpowiedzi postanowiłem zapytać kolegów o następujący problem -
muszę dosyć precyzyjnie wygenerować przerwanie w Bascomie , używam do tego timer0 i odpowiedniego przerwania on timer0.
Dziwny dla mnie jest fakt że programik :
on timer0 etykietaprzerwania
....
etykietaprzerwania:
portb7 = not portb.7
timer0 = 200
return
przy kwarcu 10mhz . na porcie wyjsciowym otrzymuje przebieg o okresie 25us i nie chce być mniej , na moja marną logikę jesli ustawiam timer na wartość 200 to przerwanie powinno nastąpić po 55 cyklach zegara , kiedy rejestr timera sie przepełni.
jednak tak nie jest. Oczywiście nie potrzebuje tego przerwania do generacji przebiegu , na porcie sprawdzam to tylko "diagnostycznie"
Kiedy dla testu pisze takie coś :
main:
portb.7 = not portd.7
goto main
to okres przebiegu wynosi 1,2us - czyli jednak procesor może pracować szybciej. Gdzieś sie "zagipsowałem" w swoich poszukiwaniach i zrozumieniu działania timerów w avr.
Te same rezultaty mam przy próbie używania przerwania compare , na mój blady rozum , przerwanie to powinno następować jesli wartość timera jest równa wartośći compare , jest tak ale dla wyższych wartości compare > 100 , jesli zamarze o przerwaniu co np 10 cykli zegara to otrzymuje "magiczne i nieprzekraczalne" 25us , które zaczyna rosnąc dopiero po compare > 100. Pewnie to dla kolegów proste , a ja chętnie bym to zrozumiał.
Pozdrawiam
Robert