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.

Bascom - warunek do programu z pomiarem napięcia

maroel 23 Mar 2009 18:21 1248 8
  • #1 23 Mar 2009 18:21
    maroel
    Poziom 12  

    Jak skonstruować instrukcję w bascomie8051, która sprawdzi czy napięcie mierzone zmieni się co najmniej 8 razy (może więcej ,ale nie mniej niż 8 ) w ciągu 10 sekund w zakresie od 0,4 do 0,65V, napięcie mierzone musi co najmniej osiągnąć wartości graniczne oraz może je przekroczyć. Pomiar jest dokonywany za pomocą przetwornika PCF8591 oraz mikrokontrolera AT89S8253.

    Za wszelką pomoc z góry dziękuje :)

    0 8
  • #2 24 Mar 2009 04:17
    piotr5000
    Poziom 21  

    ile razy w ciągu tych 10 sek. chcesz odczytywać napięcie?
    czy 10 sek musi być odmierzone b. dokładnie?
    czy sygnał odczytywany ma charakter ciągły , czyli może płynnie narastać od 0 V do 0,5 V i następnie zmniejszać swoją wartość do np 0,3 V i czy to też traktujesz jak zmianę stanu czy nie?
    Czy może wartość napięcia będzie zmieniać się skokowo z zakresu 0,1...0,2 V na 0,7..0,9 V w czasie np. 1 msek. :?::arrow::idea:

    0
  • #3 24 Mar 2009 12:23
    maroel
    Poziom 12  

    Mikroprocesor pracuje na zegarze 11.059 MHz.
    Jeśli jest to możliwe to chciałbym 10s odmieżać w miarę jak najdokładniej.
    Jako jeden cykl zmian jest traktowana zmiana napięcia np. od 0,5V do 0,65V a następnie spadek z 0,65V do 0,5V. Sygnał mierzony jest sygnałem wolnozmiennym i zmienia się cyklicznie w zakresie od 0,5
    do 1Hz. Zamieszczam przykładowy przebieg mierzonego sygnału.

    Bascom - warunek do programu z pomiarem napięcia

    0
  • Pomocny post
    #4 24 Mar 2009 17:22
    piotr5000
    Poziom 21  

    Temat ciekawy. Nie mam "gotowca" ale

    potrzebujesz zmienne:

    "Licznik" - ilość odczytów napięcia
    "Nap" - odczytane napięcie
    "licznik_zmian"
    "Wartosc" - 0 - gdy "Nap"<0,4V albo 1- gdy Nap>0,65V
    "wartosc_pop" - wartość z poprzedniego odczytu

    Licznik =0
    Do ' pętla główna
    incr licznik
    call Odczyt_nap ' skok do procedury odczytu nap
    call sprawdz ' sprawdzenie czy była zmiana i zwiększenie licznika_zmian
    if licznik_zmian > 8 then
    call Procedura_reakcji
    else
    waitms 1
    end if
    if licznik > 200 then
    licznik = 0
    licznik_zmian = 0
    end if
    waitms 48
    Loop

    W procedurze Odczyt_nap , po pobraniu napięcia i porównaniu z wartościami granicznymi podstawiasz pod "Wartosc" 0 albo 1
    jeżeli nap było pomiędzy 0,4 ... 0,65 to "wartość" = "wartość_pop"

    w procedurze "sprawdz" jeżeli "wartość" <> "wartosc_pop" to zwiększasz "licznik_zmian" ( incr "licznik_zmian" ) i następnieWartosc_pop = wartosc

    "procedura_reakcji" zawiera instrukcje wykonujące coś zależnego od ilości zmian w czasie , tu musisz wyzerować "licznik" i "licznik_zmian"

    waitms 1 po else to opóźnienie które mniej / więcej trwa tyle co procedura _reakcji

    waitms 48 - to opóźnienie dające ok 200 próbek na 10 sek.

    JEST O SZKIELET programu
    wymaga deklaracji zmiennych itp.
    zrezygnowałem z TIMEROW bo powtarzalność czasów jest mniejsza ale łatwo prześledzić działanie programu , a timery mogą się jeszcze przydać bo nie wiem co dalej chcesz zrobić

    0
  • #5 25 Mar 2009 10:11
    maroel
    Poziom 12  

    Z timerów nie będę korzystał, zajmę się rezlizacją twojej podpowiedzi.
    Jak juz coś wykombinuję to się odezwę, może mi to trochę zająć ponieważ to mój pierwszy program.
    Dzięki piotr5000 :)

    0
  • Pomocny post
    #6 25 Mar 2009 10:32
    piotr5000
    Poziom 21  

    czasu mam mało, ale jak będziesz miał problem postaram się pomóc:!::D

    0
  • #7 31 Mar 2009 18:51
    maroel
    Poziom 12  

    Piotr5000 twój pomysł funkcjonuje bardzo dobrze - jeszcze raz dzięki i pozdrawiam!!!

    0
  • #8 31 Mar 2009 19:50
    piotr5000
    Poziom 21  

    Bardzo się cieszę.
    Z jaką dokładnością wypada 10-cio sekundowy okres wyznaczony czasem wykonywania pętli ??

    0
  • #9 01 Kwi 2009 06:49
    maroel
    Poziom 12  

    Błąd zawiera się w granicach 0.2 do 0.3 sekundy. Jak dla mnie jest to w zupełności wystarczające.

    0