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

Bascom, Sprawdzenie poprawności kodu

cichy999 07 Sie 2011 14:04 1768 11
REKLAMA
  • #1 9800017
    cichy999
    Poziom 20  
    Witam!!
    Można prosić o sprawdzenie poprawności kodu.
    Czy jest dobrze ( logicznie napisany).

    If Pina.6 = 0 Then                                          ' Wyłączenie/włączenie wyświetlacza lcd
    Waitms 100
    Toggle Portd.4
    End If
    If Portd.4 = 0 Then
    Pwm1b = 0
    Else
    Pwm1b = Zmienna(33)
    End If


    Założenie jest takie że po naciśnięciu przycisku pwm ma wartość 0 a po kolejnym odczytuje wartość wcześniej ustawioną z eproma.

    A może jakoś inaczej powinno być to napisane??

    Pozdrawiam
  • REKLAMA
  • #2 9800079
    elektryk101
    Warunkowo odblokowany
    Brak deklaracji procesora, brak konfiguracji portów i brak deklaracji zmiennych.
  • REKLAMA
  • #3 9800114
    piotrva
    VIP Zasłużony dla elektroda
    Bez sensu, po co pierwsze zmieniasz rejestr port, po ro by go odczytać? Pozatym gdzie eliminacja drgań styków?
  • #4 9800144
    elektryk101
    Warunkowo odblokowany
    piotrva napisał:
    Pozatym gdzie eliminacja drgań styków?

    Mógł zrobic to sprzętowo, ale kod jak dla mnie i tak nie pójdzie, poza tym autor ujawnił za małą jego częśc aby mu w czymkolwiek pomóc.
  • #5 9800166
    cichy999
    Poziom 20  
    Tak to jest tylko fragment kodu.
    Procesor, przyciski itd jest zdefiniowane.
    Drgania eliminuje poprzez waitms 100 tak mi się wydaje.

    Założenie jest takie że jak raz nacisnę przycisk to mam mi zgasić LCD a po kolejnym naciśnięciu ma go odpalić na wartości pwm wcześniej w programie ustawionej.

    Ten fragment kodu działa mi tylko pytam czy jest to logicznie napisane czy powinno być jakoś inaczej.

    Tak w ogóle to mam wiele pytań odnośnie bascoma.
  • REKLAMA
  • #6 9800193
    kiler129
    Poziom 27  
    cichy999 napisał:
    Drgania eliminuje poprzez waitms 100 tak mi się wydaje.

    To kompletnie źle ci się wydaje :)
    Od drgań jest debounce
  • #7 9800195
    elektryk101
    Warunkowo odblokowany
    cichy999 napisał:

    Drgania eliminuje poprzez waitms 100 tak mi się wydaje.

    W bascomie jest takie specjalne polecenie, żeby wyeliminowac drgania styków, nazywa się "debounce". Poczytaj o tej funkcji.
  • #8 9800222
    snnaap
    Poziom 25  
    Witam

    Dla mnie ten kod nie jest nazbyt dobrze napisany, przyczyna leży w złym algorytmie.
    Nie wiem jak dla innych.

    Wg mnie kod powinien być napisany wg następującego schematu.

    1. Sprawdzasz czy masz wciśnięty przycisk jeżeli tak to czekasz ok 50ms i sprawdzasz ponownie. Jeżeli po ponownym sprawdzeniu na porcie jest 1 to znaczy że było to jakieś zakłócenie i nic nie robisz.
    2. Jeżeli po ok 50ms przycisk jest nadal wciśnięty to znaczy że wszystko jest prawidłowo i rzeczywiście ktoś wcisnął przycisk. Teraz czekasz ,aż przycisk zostanie puszczony.
    3. Następnie zmieniasz stan zmiennej odpowiedzialnej za przechowywanie stanu podświetlenia na przeciwny. (Tak jak Ty to robisz lecz dla Ciebie zmienną tą jest port - co nie jest prawidłowe). Można również sprawdzić co masz w Pwm1b jeżeli 0 to znaczy że podświetlenie jest wyłączone jeżeli zmienna <> 0 wtedy wiadomo że podświetlenie działa.
    4. Teraz odpowiednio do stanu zmiennej lub Pwm1b powinieneś włączyć lub wyłączyć podświetlenie

    Tak jak koledzy piszą wyżej pkt 1 i 2 można zastąpić funkcją "debounce".

    Pozdrawiam
  • #9 9800268
    cichy999
    Poziom 20  
    Czyli jak to powinno z tym drganiem styków wyglądać??

    A tak ogólnie to jak powinien wyglądać program odnośnie naciśnięcia przycisku.
    Że po naciśnięciu ma coś tam zrobić, ale np jak odczytuje temp przez ds18b20 to i tak odczyt zajmuje 750ms, idzie to jakoś obejść?? bo niestety jak jest w trakcie odczytu to i tak przyciski nie działają
  • REKLAMA
  • #11 9801338
    xury
    Specjalista automatyka domowa
    cichy999 napisał:
    ale np jak odczytuje temp przez ds18b20 to i tak odczyt zajmuje 750ms, idzie to jakoś obejść?? bo niestety jak jest w trakcie odczytu to i tak przyciski nie działają

    Odczyt zajmuje kilka milisekund, a 750 ms zajmuje dallasowi konwersja temperatury.
    W tym czasie mikrokontroler może robić inne pożyteczne rzeczy. Rozwiązaniem jest całkowite zrezygnowanie z funkcji takich jak wait, a skorzystać z timerów do liczenia czasu.
  • #12 9801652
    Fredy
    Poziom 27  
    Nie czyta się z rejestru PORT tylko z rejestru PIN.
    Zamiast if PORT ma być if PIN
REKLAMA