Witam,
Temat dotyczy uP, ale wrzucam go tu bo cały projekt w temacie grupy.
Mam działający układ pomiaru odległości wyciągnięty z polaroida. Podłączony pod 8515 działa i mierzy odległość. Jedyny problem, że ciut mało precyzyjnie. Prawdopodobnie to wina softu dlatego proszę o podpowiedź.
Która instrukcja bascom (avr) faktycznie uruchamia Timer? Czy samo enable timer1 powoduje już włączenie timerka, czy koniecznie start timer1? Nie używam przerwania on timer, więc nawet enable timer nie jest mi potrzebne - ale czy aby na pewno?
Zadanie polega na zmierzeniu czasu od wystawienia 1 na portb.0 do momentu otrzymania echa na int0 (portd.2). Jeśli uruchomię Timer1 poleceniem START TIMER1 to mam potem jeszcze wystawienie 1 na portb.0, co zajmuje ileś tam (chyba 2) cykli zegara. Zatem od rzeczywistego czasu pomiaru trzeba odjąć te dwa cykle. Dobrze myślę?
Potem po odebraniu echa w procedurze ON INT0 ma zostać wszystko wyzerowane i obliczony czas w cyklach. Kiedy zatrzymany zostaje Timer1? Po komendzie STOP TIMER1? Ona zajmuje też 2-3 cykle, więc czy trzeba je odjąć od czasu pomiaru? Jest jeszcze IF... do odjęcia.
Czy komus udało się dokonać w miarę dokładnych pomiarów wyjętymi z polaroida modułami?? U mnie różnica pomiaru na 1m wynosi ok +850 cykli, co przy moim kwarcu daje błąd rzędu ok +4cm
Temat dotyczy uP, ale wrzucam go tu bo cały projekt w temacie grupy.
Mam działający układ pomiaru odległości wyciągnięty z polaroida. Podłączony pod 8515 działa i mierzy odległość. Jedyny problem, że ciut mało precyzyjnie. Prawdopodobnie to wina softu dlatego proszę o podpowiedź.
Która instrukcja bascom (avr) faktycznie uruchamia Timer? Czy samo enable timer1 powoduje już włączenie timerka, czy koniecznie start timer1? Nie używam przerwania on timer, więc nawet enable timer nie jest mi potrzebne - ale czy aby na pewno?
do
if cos_tam then 'wejscie do pomiaru odleglosci
timer1 = 0
ov = 0 'zmienna inkrementowana w proc obslugi przepelnienia - zlicza przekrety licznika gdyby odleglosc byla kosmiczna i ew. okresla timeouta do wyzerowania polaroida
pom = 1 'zapobiega wskakiwaniu w obsluge int0 w niepozadanym czasie
enable int0 'linia ECHO z polaroida podpieta pod int0 wywolywane zboczem rosnacym
enable timer1
start timer1
set portb.0 'aktywacja polaroida - INIT
end if
loop
Echo_in: 'obsluga ON INT0
If Pom = 1 Then
Stop Timer1
Incr Ile
Reset Portb.0
Lcd Ile
Locate 2 , 1
Lcd Ov ; " * " ; Timer1
Pom = 0
End If
Return
Overflow: 'obsluga ON OVF1
Incr Ov
If Ov = 255 Then 'wyzerowanie linii INIT po okreslonym czasie(timeout)
Lcd " blad"
Reset Portb.0
End If
Return
Zadanie polega na zmierzeniu czasu od wystawienia 1 na portb.0 do momentu otrzymania echa na int0 (portd.2). Jeśli uruchomię Timer1 poleceniem START TIMER1 to mam potem jeszcze wystawienie 1 na portb.0, co zajmuje ileś tam (chyba 2) cykli zegara. Zatem od rzeczywistego czasu pomiaru trzeba odjąć te dwa cykle. Dobrze myślę?
Potem po odebraniu echa w procedurze ON INT0 ma zostać wszystko wyzerowane i obliczony czas w cyklach. Kiedy zatrzymany zostaje Timer1? Po komendzie STOP TIMER1? Ona zajmuje też 2-3 cykle, więc czy trzeba je odjąć od czasu pomiaru? Jest jeszcze IF... do odjęcia.
Czy komus udało się dokonać w miarę dokładnych pomiarów wyjętymi z polaroida modułami?? U mnie różnica pomiaru na 1m wynosi ok +850 cykli, co przy moim kwarcu daje błąd rzędu ok +4cm