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

[atmega8][bascom]Pomiar czasu

kielon23 09 Wrz 2010 10:15 1837 2
REKLAMA
  • #1 8491423
    kielon23
    Poziom 10  
    Witam!
    Bawię się czujnikiem ultradźwiękowym mierzącym odległość, z którym komunikuje się za pomocą interfejsu I2C. Dane z czujnika za pośrednictwem amtegi8 (8MHz) wyrzucam na kompa za pomocą RS-232 (9600 baudrate). Problem polega na tym aby obliczyć czas jaki upływa pomiędzy kolejnymi pomiarami i wyświetlać go z resztą danych na komputerze. Trochę poczytałem i pogrzebałem i chyba najrozsądniejsze wydaje się użycie TIMER1, który odmierzałby czas upływający pomiędzy kolejnymi zdarzeniami, ale niestety nie wiem jak się za to zabrać. Poniżej zamieszczam wycinek kodu z pętlą główna, w której odczytuje i numeruje kolejność pomiarów.

    
       $regfile = "m8def.dat"             
       $crystal = 8000000
       $lib "i2c_twi.lbx"
       $baud = 9600  
                
       'konfiguracja interfejscu I2C
       Config Scl = Portc.5
       Config Sda = Portc.4
       Config Twi = 100000
       I2cinit
    
       'pętla głowna
    
       Dim I As Integer
    
       Do
       For I = 1 To 5000
       Call Sonar_pomiar
       Print "pomiar " ; I ; "  dystans  " ; Sonar_odczyt() ; "  czas  "
       Next I
       Loop
    
    
    
  • REKLAMA
  • #2 8492577
    xury
    Specjalista automatyka domowa
    Co prawda ten przykład co podam poniżej dotyczy liczenia sekundy, ale nic nie stoi na przeszkodzie przerobić kod wg swoich potrzeb.
    Generalnie przy 8 mhz i preskalerze 256 timer zlicza 31250 na sekundę.
    Czyli w przyblizeniu 31 na milisekundę. Odejmując jedną próbkę od drugiej otrzymamy czas pomiaru.
    Polecam zastosować timer w trybie CTC jaki podał mi kolega @emarcus.
    https://www.elektroda.pl/rtvforum/topic1758870.html
  • #3 8497470
    kielon23
    Poziom 10  
    Dzięki xury za linka z tematem. Bardzo mi pomógł, odliczam czas jak chciałem, co prawda pojawia się malutki błąd czasu wynikający z tego ze nie ma pełnych 31 impulsów tylko 31,25 ale na tak mała niedokładność mogę sobie pozwolić
REKLAMA