logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

wicy 17 Kwi 2005 21:38 1392 3
REKLAMA
  • #1 1414436
    wicy
    Poziom 22  
    Posty: 670
    Pomógł: 30
    Ocena: 111
    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?

    
    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
  • REKLAMA
  • #2 1414698
    ucy74
    Poziom 20  
    Posty: 539
    Pomógł: 22
    Ocena: 10
    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.
  • REKLAMA
  • #3 1416677
    wicy
    Poziom 22  
    Posty: 670
    Pomógł: 30
    Ocena: 111
    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??
  • #4 1416936
    ucy74
    Poziom 20  
    Posty: 539
    Pomógł: 22
    Ocena: 10
    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...
REKLAMA