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

Bascom - program inkubatora zatrzymuje się w trakcie działania funkcji

24 Kwi 2019 01:06 450 6
  • Poziom 9  
    Witam. Mam zbudowany od 3 lat inkubator na jaja kurze, gęsie i kacze. Cała konstrukcja działa w oparciu czujnik temperatury i wilgotności DHT22. Stary program działa bardzo dobrze, ptaszynki klują się ładnie. Ale żeby nie było tak pięknie to co jakiś czas, powiedzmy raz a może dwa razy na sezon coś się zawiesza i zamiast 37,7 stopni temperatura rośnie dalej np. do 42 stopni. W tym sezonie już miałem taki przypadek. Dlatego napisałem nową prostszą wersję - bez timera, i ograniczyłem funkcje do najbardziej potrzebnych. W starym programie wywoływałem funkcję do mierzenia temperatury i działało a w nowej wersji ta sama funkcja się zatrzymuje w połowie. Dodałem co kawałek kod wyświetlający napis na ekranie i tak to wyśledziłem. Podpowiedzcie co jest nie tak z kodem. Nowy kod też mi jest potrzebny bo dodałem funkcję sterującą przez przekaźnik wilgotnością. Załączam oba kody. Dajcie choćby wskazówkę co jest źle. Pozdrawiam


    Nowy kod. Zatrzymuje się w funkcji na wyświetleniu cyfry 5
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Stary kod

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    [/tex]
  • Poziom 28  
    Jak się czasem coś potrafi zawiesić to może użyj Watchdoga. W razie zawieszenia się wszystko się zrestartuje.
  • Poziom 9  
    Ta funkcja sama wykrywa zawieszenie? Z helpa widzę, że jakieś małe czasy można tylko wybrać i jest dodana np w funkcjach if a ja nie niem gdzie dokładnie się zawiesza jak przegrzewa zawartość - chyba, że źle rozumiem jej działanie. Będę teraz stopniowo dodawał kod programu i może odnajdę przyczynę problemów z kodem. Pozdrawiam
  • Poziom 28  
    Watchdog to taki licznik który się inkrementuje i jak dojdzie do końca licznika to generuje reset mikrokontrolera. W swoim kodzie musisz umieścić procedurę kasowania licznika w czasie krótszym niż czas potrzebny na przepełnienie licznika Watchdog. Jak główny program z jakiegoś powodu nie zdąży skasować licznika (np. program się zawiesi) to całość się zresetuje.
  • Poziom 33  
    Rezygnacja z timera to krok w złą stronę. Wstawienie wyświetlania na wyświetlaczu wprowadzi opóźnienia, które mogą mieć wpływ na działanie programu, więc to wyśledzenie może być nietrafne.
    Sam pisałeś obsługę czujnika? Tego Waitus 20 nie powinno być - tam ma być podciąganie a nie wymuszony stan wysoki. Składanie bitów robi się na przesunięciu i alternatywie (or).
    Można jeszcze tak napisać program by obsługiwał błędy w komunikacji z czujnikiem.
  • Poziom 9  
    Witajcie. Ja cały czas wyświetlałem różne dane na wyświetlaczu aby widzieć czy się coś dzieje. Teraz jak wiem to będę analizował działanie przez print w konsoli. Przez to, że program się czasem zawiesił chciałem go uprościć jak najbardziej aby to ryzyko zminimalizować. Może kiedyś timer wróci. Program pisałem sam ale odczyt danych z czujnika pobrałem z internetu. Pewnie wiele dałoby się poprawić na lepsze ale ja programistą nie jestem :) Ciekawe jest to, że obsługa czujnika w starym kodzie działa a w nowym się zawiesza. Gdy pobrałem z internetu inną wersję kodu do dht22- głównie z innymi czasami przerw to funkcja ta działa. Ta wersja nowsza ma tam obsługę właśnie nietypowych zachowań czujnika. Teraz dodaję sobie kod do sterowania wilgotnością w inkubatorze.
  • Poziom 9  
    Witajcie. Dodałem za radą funkcje watchdog. Na początku ją skonfigurowałem i dałem start. Później reset dałem w funkcji aby reset przebiegał częściej niż 2048ms. Inkubator działa i będę obserwował czy pomogło. Obecnie można uznać temat za rozwiązany. W kodzie wygląda to tak.
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Jeszcze raz dzięki.