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

pomiar częstotliwości (temperatury)

martin819 26 Lis 2004 20:09 2414 4
  • #1 26 Lis 2004 20:09
    martin819
    Poziom 11  

    Witam
    Zbudowałem termometr na AT89C2051 z czujnikiem LM335 i przetwornikiem U/f LM331. Termometr działa, ale pomiar częstotliwości (3-5 kHz) odbywa się przy pomocy procedury Wait, wiem że nie nadaje się ona do takich rzeczy i aby uzyskać w miarę równe i poprawne wyniki musiałem zmniejszyć czas z 1 s do 780 ms i brać średnią z 10 pomiarów. Mimo to termometr co chwilę skacze o 2 st. w górę lub w dół.
    Wiem że można do pomiaru czasu zaprzęgnąć drugi timer, ale nie wiem jak to wykonać, jestem początkujący i sam sobie nie poradzę, byłbym wdzięczny jeśli ktoś pomógł by mi w poniższym programie wstawić obsługę drugiego timera, który odliczałby dokładnie sekundę po której odczytywany będzie stan pierwszego timera.

    Config Sda = P1.2
    Config Scl = P1.3
    Config Timer0 = Counter , Gate = External , Mode = 1
    Dim D As Byte
    Dim A As Byte
    Dim C As Word
    Dim Freq As Word
    Dim Temp As Byte
    Dim X As Byte
    Start Counter0

    Do
    C = 0
    For A = 1 To 10

    Freq = 0
    Counter0 = 0
    Start Counter0
    Waitms 250
    Waitms 250
    Waitms 250
    Waitms 30
    Stop Counter0
    Freq = Counter0

    Freq = Freq - 3560
    Freq = Freq / 10
    X = Freq
    C = C + X
    Next A
    C = C / 10

    I2cstart
    I2cwbyte 112
    Temp = Makebcd(c)
    I2cwbyte Temp
    I2cstop
    Wait 15

    Loop

    Dziękuję za każdą pomoc

    0 4
  • Szkolenia elektronika Udemy
  • #2 26 Lis 2004 23:00
    yarpen2
    Poziom 22  

    napisz coś więcej o układzie, jaki masz kwarc ?

    0
  • Szkolenia elektronika Udemy
  • #3 27 Lis 2004 08:10
    martin819
    Poziom 11  

    kwarc standard 11,059, układ zbudowany jest na podstawie tego schematu:
    http://www.elektroda.net/dla_domu/termometr1.html
    z tym, że zamiast zwykłego 4-segm. wyświetlacza dałem 2 duże cyfry sterowane przez i2c (układ z EP AVT-859). Termometr ma mierzyć temperature na piecu (do 90 st.C)

    0
  • #4 27 Lis 2004 14:06
    frohme
    Poziom 21  

    Staram się nie wchodzić w Basic bo to zawsze wiązało się z problemami. Co jest prawie 100% pewne to przy tym kwarcu na pewno nie odmierzasz podanych opóźnień, tylko coś zbliżonego. Drugie - jak powyższe jest prawdą to nie licz na przyzwoity wynik, coś tam się oblicza. Jeżeli mógłbym doradzić to wycofaj się w procedurach pomiarowych z wait() a zamiast tego zastosuj przerwania ( brzmi groźnie, a jak to się robi w Basicu nie będę chyba wiedział nigdy) i wtedy masz pewność stabilnego pomiaru odcinka czasu. Nie musi to być koniecznie jakaś ładna okrągła jednostka typu 1 sek, wystarczy, że zawsze taka sama i mierzysz ile okresów drgań przyszło wtedy z przetwornika. Resztę ma przeliczyć program i podać to w czytelnej postaci.

    0
  • #5 27 Lis 2004 15:38
    yarpen2
    Poziom 22  

    daj może kwarc 12MHz, licz czas na 16 bitowym liczniku, dodatkowo zadeklaruj jakąś zmienną która bedzie liczyć ilość przepełnień licznika i wtedy przy 12 MHz bedziesz miał takt 1us więc musisz ich zliczyć 1000000 żeby była 1 s
    czyli np. licznik musi zliczyć 50000 a zmienną za każdym przepełnieniem inkrementujesz i gdy osiągnie 20 to masz równo 1 sekundę. W tym czasie counter musiałby liczyć impulsy. ilość impulsów w czasie tej sekundy to mierzona częstotliwość - to tylko przykład

    0