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

Bascom - Zerowanie zmiennej Licznik po operacjach ADC, jak temu zapobiec?

ziguś 28 Gru 2013 17:12 2118 10
  • #1 13108216
    ziguś
    Poziom 23  
    Mam problem z jedną zmienną, a mianowicie :

    Dim Licznik As Byte
    Licznik = 0

    Do

    Incr Licznik

    Wart_adc = Getadc(0)
    V = Wart_adc * 0.011730206
    U_wy = Fusing(v , "#.&")


    Locate 1 , 5 : Lcd Licznik

    Loop


    Dlaczego po wykonaniu operacji

    Wart_adc = Getadc(0)
    V = Wart_adc * 0.011730206 '
    U_wy = Fusing(v , "#.&")

    Zmienna licznik jest automatycznie zerowana i jak to zrobić żeby tak się nie działo ?
  • #2 13108558
    yokoon
    Poziom 29  
    ziguś napisał:
    Mam problem z jedną zmienną, a mianowicie :

    Dim Licznik As Byte
    Licznik = 0

    Do

    Incr Licznik

    Wart_adc = Getadc(0)
    V = Wart_adc * 0.011730206
    U_wy = Fusing(v , "#.&")


    Locate 1 , 5 : Lcd Licznik

    Loop


    Dlaczego po wykonaniu operacji

    Wart_adc = Getadc(0)
    V = Wart_adc * 0.011730206 '
    U_wy = Fusing(v , "#.&")

    Zmienna licznik jest automatycznie zerowana i jak to zrobić żeby tak się nie działo ?


    Witam.

    Myślę, iż chodzi o wartość zmiennej Licznik jako byte, która może przyjmować wartość od 0 do 255. Instrukcja Incr zwiększa do 255, następuje przepełnienie i przyjmuje wartość zero. Musisz w którymś miejscu zatrzymać np. instrukcją IF licznik = 100 then
    licznik = 0
    itd.
  • #3 13108673
    ziguś
    Poziom 23  
    Tak też robiłem ale to nic nie dawało. Wyświetlacz cały czas pokazuje zero. On wogóle tej zmiennej nie zwiększa.
    W kość daje ta linijka
    U_wy = Fusing(v , "#.&")
    ona powoduje wyzerowanie zmiennej licznik i za cholerę nie mogę dojść dlaczego.
  • #4 13109022
    yokoon
    Poziom 29  
    ziguś napisał:
    Tak też robiłem ale to nic nie dawało. Wyświetlacz cały czas pokazuje zero. On wogóle tej zmiennej nie zwiększa.
    W kość daje ta linijka
    U_wy = Fusing(v , "#.&")
    ona powoduje wyzerowanie zmiennej licznik i za cholerę nie mogę dojść dlaczego.


    Spróbuj tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Zmienna licznik nie potrzebna.
  • #5 13109051
    ziguś
    Poziom 23  
    Bez zmian.
  • Pomocny post
    #6 13109282
    tank_driver
    Poziom 17  
    Kod: text
    Zaloguj się, aby zobaczyć kod


    U mnie działa bez problemu (a w zasadzie z jednym, nie masz obsługi czysczenia wyświetlacza w przypadku zmiany liczby cyfr w liczbie "Licznik", choć widzę że to raczej tylko test), aczkolwiek sam zadeklarowałem brakujące zmienne.
  • #7 13109465
    ziguś
    Poziom 23  
    Twoje działa, ale moje nie działa. Wklej mój kod w kompilator i zobacz co się dzieje


    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #8 13109594
    tank_driver
    Poziom 17  
    E tam, nic strasznego....

    Tu masz błąd:
    Dim U_wy As String * 2

    Zwiększ to na:
    Dim U_wy As String * 3

    I leci aż miło.

    Nie mieścisz się w zmiennej, that's all:)

    Poza tym skonfiguruj watchdog oraz TIMER.
    Pewnie jeszcze coś tam siedzi (wyświetlanie bez wymazywania poprzednich, większych o rząd wartości na przykład) ale to tak na szybko.

    Pozdrawiam,
    TD
  • #9 13109784
    ziguś
    Poziom 23  
    Dzięki, a ja tyle się z tym namęczyłem. Potrzebuję użyć tej zmiennej do wyświetlenia co 100 wyniku - bo jak użyłem do tego timera0 to co jakiś czas w nierównomiernych odstępach czasu zawieszała się atmega.
  • #10 13109840
    tank_driver
    Poziom 17  
    Nie ma problemu! Na następny raz:

    1. Wstaw "loop" wcześniej w kodzie - w ten sposób zawęzisz krąg poszukiwań,
    2. Zaremuj wszystko to, co nie jest konieczne - watchdogi, timery itp.
    3. Wyłącz przerwania (cli lub disable interrupts),
    4. Zawężaj program do procedur które nie działają, a po rozwiązaniu problemu dopisuj resztę, za każdym razem testując działanie programu,
    5. Zapisuj postępy w osobnych plikach (v1,v2 itp) - po dużych modyfikacjach i wciśnięciu F7 łatwiej będzie powrócić do poprzedniej wersji.

    Powodzenia,
    Dziękuję i pozdrawiam,
    TD
  • #11 13201711
    ziguś
    Poziom 23  
    Problem rozwiązany. Dziękuję.
REKLAMA