Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pomiar odległości, Timery w 8515 i takie tam problemy

wicy 17 Kwi 2005 21:38 1089 3
  • #1 17 Kwi 2005 21:38
    wicy
    Poziom 22  

    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?

    Code:

    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

    0 3
  • #2 17 Kwi 2005 22:57
    ucy74
    Poziom 20  

    Zamieściłem na tym forum plik na 2313 do czytania z sonaru z Polaroid'a w Bascom'ie.
    Spróbuj czy może jest dokładniejszy.

    0
  • #3 18 Kwi 2005 18:31
    wicy
    Poziom 22  

    Dzięki...
    Pomogło o tyle, że zamiast skołowanych procedur obsługi int0 mam pomiar tylko od bitwait do bitwait.
    Aha... i błąd pomiaru spadł do 3,8 cm :) Teraz testuję, czy jest to stały błąd dający się w jakiś sposób wyeliminować.

    Mam jeszcze pytanie:
    czemu ma służyć BITWAIT XLOG, SET po daniu Polaroidowi INIT'a?? Nie można mierzyć czasu już od samego SET Vsw??
    I co to za zmienna CALIB? Też ma eiminować jakiś stały błąd pomiaru?

    I jeszcze... w jakim przedziale odległości mierzył Twój czujnik??

    0
  • #4 18 Kwi 2005 20:00
    ucy74
    Poziom 20  

    wicy napisał:
    ...czemu ma służyć BITWAIT XLOG, SET po daniu Polaroidowi INIT'a?? Nie można mierzyć czasu już od samego SET Vsw????
    Jest odstęp czasu pomiędzy zezwoleniem Vsw na wysłanie impulsu a jego emisją - ładuje się cewka czy kondensator. Dopiero sygnał Xlog oznajmia że puls został wysłany.
    Cytat:
    ...I co to za zmienna CALIB? Też ma eiminować jakiś stały błąd pomiaru...
    Dokładnie - o ile pamiętam wychodziło ok. 1cm
    Cytat:
    ...I jeszcze... w jakim przedziale odległości mierzył Twój czujnik...
    Zaczynałem od 80cm, a dalej niż 3m nie chciało mi się sprawdzać, podobno można do 8m...

    0