Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla 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

23 Mar 2009 18:21 1296 8
  • 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 :)
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • 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:
  • 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
  • Pomocny post
    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ć
  • 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 :)
  • Pomocny post
    Poziom 21  
    czasu mam mało, ale jak będziesz miał problem postaram się pomóc:!::D
  • Poziom 12  
    Piotr5000 twój pomysł funkcjonuje bardzo dobrze - jeszcze raz dzięki i pozdrawiam!!!
  • Poziom 21  
    Bardzo się cieszę.
    Z jaką dokładnością wypada 10-cio sekundowy okres wyznaczony czasem wykonywania pętli ??
  • 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.