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

[ATMEGA8] [BASCOM] - Termostat

kimi9 23 Kwi 2013 19:32 3174 11
  • #1 23 Kwi 2013 19:32
    kimi9
    Poziom 10  

    Mógłbym prosić kogoś o poprawienie kodu termostatu który będzie obsługiwał 3 wentylatory?

    Czujnik temperatury, którego będę używał to DS18B20.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Dodano po 4 [godziny] 19 [minuty]:

    Tutaj postarałem się przerobić inny kod, wydaje mi się że powinno być nieco lepiej niż z tym 1...

    Kod: text
    Zaloguj się, aby zobaczyć kod

    1 11
  • #3 23 Kwi 2013 21:39
    kimi9
    Poziom 10  

    Układ pod którym ma działać program.
    https://obrazki.elektroda.pl/8890958900_1366226591.png

    Program ma za zadanie sterowanie 3 wentylatorami (załączanie w tej samej chwili). Dobrze by było gdyby miał histerezę. Układ posiada 1 czujnik temperatury. Chcę aby wentylatory utrzymywały zadaną temperaturą w pomieszczeniu. Po przekroczeniu granicznej temp włączają się i wydmuchują ciepłe powietrze, gdy już to zrobią i temp będzie na poziomie żądanej wtedy się wyłączają.

    0
  • #4 24 Kwi 2013 00:12
    emarcus
    Poziom 35  

    kimi9 napisał:
    Układ pod którym ma działać program.
    https://obrazki.elektroda.pl/8890958900_1366226591.png

    Program ma za zadanie sterowanie 3 wentylatorami (załączanie w tej samej chwili). Dobrze by było gdyby miał histerezę. Układ posiada 1 czujnik temperatury. Chcę aby wentylatory utrzymywały zadaną temperaturą w pomieszczeniu. Po przekroczeniu granicznej temp włączają się i wydmuchują ciepłe powietrze, gdy już to zrobią i temp będzie na poziomie żądanej wtedy się wyłączają.


    Pierwsza uwaga do programu to brak jest konzystencji pomiędzy programem a diagramem, oraz sam program odbiega od poprawnego przebiegu.
    Po pierwsze: diagram pokazuje że switches do ustawień zmiennych w menu winny byc podłączone do pinów C.3, C.4, C.5; to dlaczego w programie referujesz je jakby były na B.1, B.2 i B.3 mimo że na poczatku programu są one konfigurowane prawidłowo.
    Druga uwaga to:Jeżeli ventylatory sa sterowane 'pinami' PORTU C.1:3

    Went1 Alias Pinc.0
    Went2 Alias Pinc.1
    Went3 Alias Pinc.2
    to aliasy winny raczej byc referowane do PORT a nie do PIN ( to są jednak wyjścia).

    I trzecia uwaga odnośnie "readeeprom":
    Readeeprom winien byc odczytany podczas inicjacji processora przed Do...Loop.
    Nie ma potrzeby ciągle go odczytywac. W nim są zachowane kopie aktualnych zmiennych po to aby po reset albo nastepnym włączeniu te ustawienia nie były gubione.

    Ps. Ten program albo jego częśc już tu kiedyś widziałem i zwróciłem uwagę na błedny wynik rachunku temperatury dla temperatur ujemnych. Jeżeli ten układ będzie pracował w zakresie temp. tylko dodatnich to tą uwagę możesz sobie podarowac.
    Jeszcze jedno:
    Jeżeli "hist" nie jest zmienną to możesz ja skonfigurowac jako 'const'.

    e marcus

    0
  • #5 24 Kwi 2013 06:49
    Kuniarz
    Moderator Projektowanie

    kimi9 napisał:
    Program ma za zadanie sterowanie 3 wentylatorami (załączanie w tej samej chwili)

    Czyli od strony programu, sterujesz jednym wyjściem, co wiele upraszcza.
    Pytanie zasadnicze - pisałeś już coś w Bascom i oczekujesz wskazówek, czy gotowego programu (wówczas nie ten dział...) ?

    1
  • #6 24 Kwi 2013 10:30
    kimi9
    Poziom 10  

    Jestem początkującym, znalazłem w sieci podobny kod i spróbowałem go przerobić do swoich potrzeb. Chodzi mi o to aby pomóc mi napisać ten program aby działał poprawnie.

    Program będzie wykorzystywany wyłącznie do temperatur dodatnich.

    Wprowadziłem zmiany o których mówiłeś. Tak to ma wyglądać?


    Kod: text
    Zaloguj się, aby zobaczyć kod

    0
  • #7 24 Kwi 2013 15:22
    emarcus
    Poziom 35  

    kimi9 napisał:


    Program będzie wykorzystywany wyłącznie do temperatur dodatnich.

    Wprowadziłem zmiany o których mówiłeś. Tak to ma wyglądać?



    Nie poprawiłeś wszystkiego o czym pisałem:
    W dalszym ciągu w instrukcjach warunkwych masz odwołania do pinów portu b: B.1, B.2 , B.3 zamiast C.3 , C.4 , C.5 np:

    "If Pinb.3 = 0 Then"
    winno byc :
    'If PINC.3 = 0 Then'... i.t.d. odpowiednio pozostałe piny
    Dalej, zamiast
    'Dim Hist As Single'
    raczej daj:
    'Const Hist = 2' - to nie zajmuje pamięci.
    Wyeliminuj deklaracje sub
    'Declare Sub Menu
    'Declare Sub Zapis

    Nie używasz ich w ogóle. W programie masz subrutyny jako Labels (etykiety),
    Inaczej wywołujesz wejście do Sub i powrót (Call/ End Sub); dla etykiety masz: Gosub/Return.
    I ostatnie co zauważyłem, to brak jest instrukcji załączania alarmu i jego kasowania, mimo że jest wymiarowana dla niego zmienna i w programie istnieje procedura ustawiana temperatury dla buzzera (ALARM!).
    Na schemacie też go nie ma.

    e marcus

    0
  • #8 24 Kwi 2013 16:40
    kimi9
    Poziom 10  

    No tak, bo ja nie mam w zamiarze mieć alarmu dźwiękowego.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #9 24 Kwi 2013 19:07
    emarcus
    Poziom 35  

    kimi9 napisał:
    No tak, bo ja nie mam w zamiarze mieć alarmu dźwiękowego.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Więc usuń z programu także deklaracje odnosnie wymiarowania zbędnych zmiennych i uzupełnij poprawki j.w.
    Wytestuj program w symulatorze running "step into code" (F8) i w odpowiednich momentach kodu uzupełniaj 'ręcznie' zmiany logiczne pinów a także symulowane wartości zmiennych (np: odczyt temperatury z DS , etc.).

    e marcus

    0
  • #10 27 Kwi 2013 16:12
    kimi9
    Poziom 10  

    Jeszcze wprowadziłem pewną modyfikację,tak aby kolejny wentylator włączał się dopiero przy wyższej temp. Jest to zrobione poprawnie?

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #11 27 Kwi 2013 18:02
    emarcus
    Poziom 35  

    kimi9 napisał:
    Jeszcze wprowadziłem pewną modyfikację,tak aby kolejny wentylator włączał się dopiero przy wyższej temp. Jest to zrobione poprawnie?

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    To ci może pracowac; czy jest poprawnie?............
    Owszem, wentylatory bedą włączac się stopniowo, ale wyłączenie ich nastąpi jednocześnie po osiągnięciu temp poniżej 'min'.

    Ten fragment programu powyżej może powodowac błędy w wyswietleniu.

    Dlaczego nie korzystasz z symulatora?
    Na większośc pytań tu zadanych miałbyś odpowiedź w ciągu 20 sec.

    e marcus

    0
  • #12 27 Kwi 2013 19:48
    kimi9
    Poziom 10  

    Korzystam z symulatora, lecz błąd ten nie był dla mnie bardzo ważny (zamiast C wyświetlało CMP, itp.).

    Jeżeli chodzi o poprawność działania to właśnie o takie coś mi chodziło.

    Po kilku próbach doszedłem chyba w końcu do poprawnej formy?:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Pomyślałem jeszcze że można by dodać sygnalizację braku czujnika temp. Kod wstawiłbym na początku odczytu; jest to poprawne?
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0