Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[ATMEGA8][BASCOM] - Termostat. Pomiar temperatury w przerwaniu.

---trafopowielacz--- 03 Apr 2015 23:09 2001 15
Tespol
  • #1
    ---trafopowielacz---
    Level 23  
    Witam. Posiadam inkubator i sterownik do niego. Wszystko jest okej gdy program działa na wait'ach. Chcę przepisać go do przerwania na timerze ale program mi się zawiesza po wgraniu. Po uruchomieniu nie zawsze pokaże temperaturę, po wyjściu z "menu" również czysty ekran zamiast pomiarów.
    Cała konstrukcja składa się z:
    *czterech przycisków Sw1-Sw4
    *dwóch czujników temperatury DS18B20 1wire na jednej linii
    *wyświetlacza 2x16
    *dwa przekaźniki opisane jako "Przekaźnik1" i Przekaźnik2"

    Gdzie w programie popełniłem błąd?
    Liczę na pomoc z waszej strony.

    Code: basic4gl
    Log in, to see the code
  • Tespol
  • Helpful post
    #2
    User removed account
    User removed account  
  • Tespol
  • #3
    ---trafopowielacz---
    Level 23  
    Bardzo dziękuje! Wczoraj walczyłem z eeprom'em i dlatego został wpis na początku. Przekaźniki same mi pstrykały co ułamek sekundy i przy zapisie, odczycie miałem tylko "-0.0".
    Poczytam helpa i postaram się zrozumieć jak działa program poprawiony przez Ciebie.

    Dodano po 6 [minuty]:

    Tylko jedna sprawa. Zmienna Termostat i Histereza potrzebne są z przecinkiem. Jak to osiągnąć? Być może miałem problemy bo chciałem zapisać zmienną single do eeprom'u
  • Helpful post
    #4
    User removed account
    User removed account  
  • #5
    ---trafopowielacz---
    Level 23  
    Super, w najbliższym czasie przeanalizuje dokładnie program. Drugi przekaźnik jest jako alarmowy, załącza syrenę po przekroczeniu zadanych temperatur, ale z tym dam radę :) Jeszcze raz dziękuje :)
    Sterownik zyskał obudowę to program też by się przydał :P
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=14586825#14586825
  • #6
    ---trafopowielacz---
    Level 23  
    Nadszedł czas na pytania jeśli oczywiście można.

    Po Pierwsze:
    Dlaczego zostały użyte funkcje jeśli? Nie można ich pominąć? Przy okazji, jak to jest zrobione, że na końcu warunku nie ma "end if"? Piszę programy amatorsko, z tego co potrafię.
    Code: basic4gl
    Log in, to see the code



    Po Drugie:
    Na początek powiem jak to rozumiem:
    Code: basic4gl
    Log in, to see the code

    Jest zmienna "Status" od której zależy gdzie znajdziemy się w programie. Jeśli będzie ona wynosiła 0 to ujrzymy pierwszy, główny program odczytu temperatury.

    Po Trzecie:
    Nie rozumiem tej części i dalej. Mianowicie, dlaczego reszta tego się nie wyświetla? To tylko i wyłącznie dlatego że zmienna "Status" jest równa 0?
    Code: basic4gl
    Log in, to see the code



    Widzę że wszystko się kręci wokół zmiennej Status. Nie mogę tego załapać :D Jeśli uda się jakoś wyjaśnić wyżej przedstawione zagadki, myślę że włączy się u mnie bardziej logiczne myślenie :)
    (W programie dopisałem wg wzorów ustawienie temperatury maksymalnej i minimalnej przy jakich ma się załączyć alarm)


    Pozdrawiam Serdecznie.

    Dodano po 19 [minuty]:

    Mogę użyć zmiennej 1s do pomiaru czasu?
  • Helpful post
    #7
    User removed account
    User removed account  
  • #8
    ---trafopowielacz---
    Level 23  
    Dobra, skończyłem jak na razie "pracę" nad programem. Więcej było gapienia się w niezrozumiałe funkcje i polecenia ale już prawie program czaje w całości :)
    Oznaczyłem go jako V.2.2 ^^
    Zmiany:
    *Możliwość ustawienia skrajnych temperatur uruchamiających alarm
    *kasowanie alarmu poprzez wejście do menu i zapisanie zmiennych
    *zmiana stopnia regulacji zmiennych
    *poprawiona histereza bo jakoś dziwnie była zapisana i nie wyłączało się przy zadanej temperaturze tylko jakoś inaczej
    *liczenie czasu załączonego przekaźnika (ogrzewania) z liczeniem zużycia w kilowatogodzinach [i tu jest pewien problem z niedokładnością, śpieszy o 1,5 sekundy, a nie chce uruchamiać kolejnego timera czy coś bo w innych projektach miałem problem z szalejącymi pomiarami z czujników w czasie przerwań]
    Code: basic4gl
    Log in, to see the code


    Proszę o sprawdzenie czy nie ma jakichś poważnych błędów. Nie umiem pisać poprawnie. Umiem pisać tak żeby działało. Jak coś jest nie tak, wrzucam do pętli głównej.

    Dla zobrazowania co widnieje na wyświetlaczu:
    [ATMEGA8][BASCOM] - Termostat. Pomiar temperatury w przerwaniu.
  • #9
    User removed account
    User removed account  
  • #10
    ---trafopowielacz---
    Level 23  
    niveasoft wrote:
    Zmieniłem lekko obliczanie watogodzin. Powinno już po 5 min pokazać 0,01kWh

    Coś źle poprawiłeś, bo warunek wykona się raz na godzinę

    Code: basic4gl
    Log in, to see the code

    Poprawiłem to i testuje. Powiem Ci, że pomysł na wyłączanie alarmu bez ponownego uruchomienia jest świetny!

    Czyli z tego co widzę, według twoich obliczeń wystarczy minutę odliczać :) Dzięki. Zawsze więcej miejsca na bajery :P
  • #11
    User removed account
    User removed account  
  • #12
    ---trafopowielacz---
    Level 23  
    Wszystko pięknie działa, ale myślę nad jedną opcją. Inkubator będzie trzebalo chłodzić. Chciałbym z menu wywołać program, który odliczal by 15 min i przez ten czas nie grzać. Jest to wykonalne?
  • #13
    User removed account
    User removed account  
  • #14
    ---trafopowielacz---
    Level 23  
    Bardzo dziękuję ;) Mam pewność że kurczaki mi się nie ugotują. Jak mogę się Panu odwdzięczyć? Teraz sterownik będzie wykorzystywany w 99% :D
    Mam jeszcze pytanie. W jakich okolicznościach nieulotna pamięć eeprom może mi się ulotnić?
    Drugie pytanie to bardziej sprzętowe. Zasilam to zasilaczem impulsowym 12V i stabilizuje na 5V. Czasem mam tak, że atmega nie wystartuje poprawnie, tzn. na lcd wyświetla się pasek, zdarzało się że temperatury zmieniły się na 85*C. Zawsze pomaga wyjęcie wtyczki zasilającej i ponowne podłączenie.
  • #15
    User removed account
    User removed account  
  • #16
    dondu
    Moderator on vacation ...
    ---trafopowielacz--- wrote:
    W jakich okolicznościach nieulotna pamięć eeprom może mi się ulotnić?
    Drugie pytanie to bardziej sprzętowe. Zasilam to zasilaczem impulsowym 12V i stabilizuje na 5V. Czasem mam tak, że atmega nie wystartuje poprawnie, tzn. na lcd wyświetla się pasek, zdarzało się że temperatury zmieniły się na 85*C. Zawsze pomaga wyjęcie wtyczki zasilającej i ponowne podłączenie.

    Należy rozpocząć od pokazania schematu, a dodatkowo zapoznać się z działem Zasilanie i zakłócenia:
    http://mikrokontrolery.blogspot.com/p/spis-tresci.html#dzial_zasilanie_zaklocenia

    Objawy, które opisujesz to z reguły problem schematu lub nieodpowiednio zabezpieczonych urządzeń współpracujących z mikrokontrolerem, ale także i programu pod kątem tzw. dobrych praktyk.
    Przeczytaj w szczególności artykuł: Zakłócenia w pracy mikrokontrolerów
    Każdy punkt przeanalizuj pod swoim kątem.