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

BASCOM edycja programu termostatu

krychu0505 26 Sty 2014 22:19 2523 19
  • #1 26 Sty 2014 22:19
    krychu0505
    Poziom 20  

    Witam chcę zbudować termostat który sterował by silniczkiem który ma za zadanie odkręcać lub zakręcać grzejnik. Jestem początkujący i nie wiem czy to dobre rozwiązanie :D ponieważ najlepszy był by silniczek krokowy ale posiadam zwykły 12v z dość silną przekładnią i pomyślałem żeby go w ten sposób wykorzystać gdyż mam trudne dojście do odkręcania swego grzejnika ;)
    Jako iż jestem początkujący postanowiłem poszukać bazy do tego rozwiązania znalazłem prosty układzik termostatu z tej stronki: http://mirley.firlej.org/trawiarka_plytek
    Zbudowałem sobie układzik w symulatorku no i zacząłem kombinować. Zedytowałem program w taki sposób aby sterował przekaźnikami lecz niestety coś jest nie tak ponieważ układ resetuję się co kilka sekund i nie pokazuje aktualnej temperatury. Moim zdaniem coś jest z komendą wait gdyż jeśli ustawię 100ms przekaźniki nie uruchamiają się a układ mierzący temperaturę działa poprawnie. poniżej fragment kodu Moje pytanie brzmi czy kod jest poprawny wobec odnośników.

    Code:
    '***********************************************
    
    '*****************  Sterowanie    **************
    Sterowanie:
      Tdif = Tu - Tm
      Tdif = Tdif + 7
      If Tdif <= 0 Then Set Przek1                              'jeśli temperatura mniejsz od zadanej włacz Przek1
       Wait 4                                                   'czekaj 4s
       Reset Przek1                                             'wyłącz Przek1
      If Tdif > 0 Then Set Przek2                               'jeśli temp. większa od zadanej włącz Przek2
       Set Przek1                                               'włacz Przek1
       Wait 4                                                   'czekaj 4s
       Reset Przek1                                             'wyłacz Przek1
       Reset Przek2                                             'wyłącz Przek2
      If Tm >= 280 Then                                         'jeśli temperatura wyższa od 28
        Reset Przek1                                            'wyłącz Przek1
        Toggle Buzz
      Else
        Buzz = 1
      End If

    0 19
  • Relpol
  • Relpol
  • #3 27 Sty 2014 18:29
    krychu0505
    Poziom 20  

    Dzięki kolego układ trochę skomplikowany jak na mnie ;D ale podsunął mi pomysł na odczytywanie pozycji silnika przez potencjometr tylko muszę poszukać coś pod tiny 2313.
    Co do fragmentu kodu to chciałbym aby ktoś podpowiedział czy nie ma błędów wszelkie uwagi na pewno się przydadzą chodzi głównie o komendy if... then... ;)

    0
  • #4 27 Sty 2014 22:45
    Mateusz@
    Poziom 17  

    Nie wiem jaki masz pomysł na odczytywanie pozycji silnika przez potencjometr skoro attiny2313 nie ma ADC.
    Symulujesz program a czy tez wpisujesz przykładowe wartości danych które spodziewasz się w rzeczywistym układzie.
    Przed wejściem w obsługę podprogramu wpisz przykładowe wartości zmiennych Tu i Tm. Wtedy zobaczysz jak program się zachowa.

    0
  • #5 27 Sty 2014 23:33
    krychu0505
    Poziom 20  

    Pierwszym założeniem było aby silnik obracał się przez dany czas czyli np. 4s po czym gdy temperatura wzrośnie uC daje sygnał na przekaźnik zmieniający kierunek obrotu silnika włącza go drugim przekaźnikiem i cofa się przez 4s ;) Ale wątpię czy zawsze by wracał do tego samego położenia dlatego pomyślałem o potku ale widzę że na tym uC nie da rady (może jakaś nie droga atmega ? ;) ) Jeśli chodzi o zmienne to powinno być ok bo nic w nich nie zmieniałem. Jedyne co tu jest źle to komendy po then gdyż realizuje to Then Set Przek1
    a to co pod set przek1 nie jest wykonywane a gdy napiszę
    if... then
    set...
    reset...
    wyskakuję błąd przy komplikowaniu programu.
    W dodatku natrafiłem na problem sprzętowy, gdyż zaprogramowałem fusy na wew. 8MHz bez dzielnika, a procek chodzi tylko i wyłącznie z generatorem 8MHz bez niego ani rusz. nie wiem co jest nie tak :C

    0
  • #6 27 Sty 2014 23:44
    Mateusz@
    Poziom 17  

    Kolego masz polskiego helpa?
    tu jest fragment:

    IF wyrażenie THEN
    ciąg_instrukcji
    [ ELSEIF wyrażenie THEN ciąg_instrukcji ]
    [ ELSE ciąg_instrukcji ]
    END IF

    Czyli brakowało Ci end if.

    To podaj wartości fuse bitów na jakie zaprogramowałeś.

    0
  • #7 28 Sty 2014 06:58
    sp3ots
    Poziom 36  

    Witam !
    Jeśli chodzi o pomiar napięcia przez Attiny2313 jest to do wykonania na tym uP.
    W katalogu Bascoma/Samples jest plik BG30dB_LCD.bas.
    W nim jest program i prosty schemat jak to zrobić.
    W oryginale jest użyty AT90S2313-10 ale można zastosować ATtiny2313 po zmianie jednego lub dwóch fuse bitów.
    Pozdrawiam. Stefan

    0
  • #8 28 Sty 2014 18:42
    krychu0505
    Poziom 20  

    Cytat:
    Kolego masz polskiego helpa?
    tu jest fragment:

    IF wyrażenie THEN
    ciąg_instrukcji
    [ ELSEIF wyrażenie THEN ciąg_instrukcji ]
    [ ELSE ciąg_instrukcji ]
    END IF

    Czyli brakowało Ci end if.

    To podaj wartości fuse bitów na jakie zaprogramowałeś.

    Tak kolego brakował mi właśnie end if. Masz rację muszę poczytać sobie helpa ;)
    A poniżej ustawione fusy

    BASCOM edycja programu termostatu

    Cytat:
    Witam !
    Jeśli chodzi o pomiar napięcia przez Attiny2313 jest to do wykonania na tym uP.
    W katalogu Bascoma/Samples jest plik BG30dB_LCD.bas.
    W nim jest program i prosty schemat jak to zrobić.
    W oryginale jest użyty AT90S2313-10 ale można zastosować ATtiny2313 po zmianie jednego lub dwóch fuse bitów.
    Pozdrawiam. Stefan

    Dzięki kolego na pewno się przyda:D

    Edit:
    Zmieniłem program aby był bez komend wait po długiej rozkminie :D wymyśliłem aby użyć zmiennej do której zostanie dodana jedynka przy temperaturze niższej niż zadana wygląda to jakoś tak :
    Code:
    '*****************  Sterowanie    **************
    
    Sterowanie:
      Tdif = Tu - Tm
      Tdif = Tdif + 7
      If Tdif > 0 Then Set Przek1
      If Tdif > 0 Then Silnik = Silnik + 1
      If Silnik = 10 Then Reset Przek1

      If Tdif <= 0 Then Set Przek1
      If Tdif <= 0 Then Silnik = Silnik + 1
      If Silnik = 10 Then Reset Przek1
    Return
    '***********************************************

    i znowu nic a chcę a by wyglądało to tak
    jeśli temp mniejsza niż zadana(Tdif>0) włącz silnik na ok 4s wyłącz czekaj aż tdif <=0
    jeśli temp większa niż zadana(Tdif <=0) włącz silnik na ok 4s wyłącz czekaj aż tdif > 0
    Ma ktoś jakiś pomysł ? :C
    Nadal proszę o pomoc w sprawię procka :\

    0
  • #9 10 Lut 2014 11:38
    madiz08
    Poziom 14  

    BASCOM edycja programu termostatu

    Chciałbym poprosić o pomoc, przerabiam kurs bascoma z EDW i za każdym razem przy kompilowaniu jeżeli użyje END IF wyskakują mi błędy

    Dlaczego???

    0
  • #10 10 Lut 2014 12:28
    MArSTER_1
    Poziom 18  

    Masz jedną instrukcję End If za mało. Kompilator ci o tym przypomina. Policz, że instrukcji If masz o jedną więcej niż End if.

    0
  • #11 10 Lut 2014 13:57
    madiz08
    Poziom 14  

    BASCOM edycja programu termostatu

    nie bardzo rozumiem, czy chodziło o dodanie end if tam gdzie zielona strzałka, ogólnie, w każdym najprostszym kodzie użycie end if wywala mi błąd, czy mógłbyś na tym rysunku zaznaczyć gdzie jeszcze brakuje end if?

    kazdy kod spisany z kursu z uzyciem end if wywala błąd

    0
  • #12 10 Lut 2014 14:30
    MArSTER_1
    Poziom 18  

    Muszę pomysleć, bo chyba źle spojrzałem na kod.....

    Możesz zamieścić ten wklejony z printscreena kod tak abym nie musiał go przepisywać tylko sprawdzić w Bascomie? Trzeba użyć znacznika code.

    Jaką masz wersję Bascoma?

    0
  • #13 10 Lut 2014 14:52
    madiz08
    Poziom 14  

    Kod: bascom
    Zaloguj się, aby zobaczyć kod

    0
  • #14 10 Lut 2014 14:58
    MArSTER_1
    Poziom 18  

    Działający kod:


    $regfile = "attiny2313.dat"
    $crystal = 4000000
    Config Portb = &B11111111
    Portb = &B11111111
    Config Portd = &B11111100
    Portd = &B11111111
    Dim Jednostki As Byte , Dziesiatki As Byte , Zmiana As Bit , Pomoc As Byte
    Jednostki = 0
    Dziesiatki = 0
    Pomoc = 0
    Do
    Waitms 10
    Toggle Zmiana

    Incr Pomoc
    If Pomoc = 10 Then
    Pomoc = 0
    Incr Jednostki
    End If
    If Jednostki = 10 Then
    Jednostki = 0
    End If
    If Dziesiatki = 10 Then
    Dziesiatki = 0
    End If

    Portd = 255
    If Zmiana = 0 Then
    Portd.3 = 0
    Portb = Lookup(jednostki , Tabela)
    End If
    If Zmiana = 1 Then
    Portd.4 = 0
    Portb = Lookup(dziesiatki , Tabela)
    End If
    Loop
    End





    Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144

    0
  • #16 10 Lut 2014 15:57
    emarcus
    Poziom 35  

    madiz08 napisał:
    BASCOM edycja programu termostatu

    Chciałbym poprosić o pomoc, przerabiam kurs bascoma z EDW i za każdym razem przy kompilowaniu jeżeli użyje END IF wyskakują mi błędy

    Dlaczego???


    Dlatego, że piszesz w cudzym temacie!!!
    Załóż swój temat i nadaj my sensowny tytuł ...

    e marcus

    0
  • #17 10 Lut 2014 20:29
    MArSTER_1
    Poziom 18  

    Kolego krychu0505. Czy możesz zamieścić cały program? W tym podprogramie sterowanie nie widzę żadnego End if. Czy tak ma być?

    0
  • #18 11 Lut 2014 18:26
    krychu0505
    Poziom 20  

    Niestety aktualnie nie mam możliwości zamieścić całego programu a błędu end if mi nie wywala czyli jest ok. Tylko program nie spełnia moich założeń jakie napisałem wyżej.

    0
  • #19 12 Lut 2014 07:19
    emarcus
    Poziom 35  

    krychu0505 napisał:
    ................ program nie spełnia moich założeń jakie napisałem wyżej.


    Nie spełnia, bo niepotrzebnie komplikujesz cały projekt.
    Zamiast operować różnicą temperatur, o wiele wygodniej jest ustalić dwa lub nawet trzy poziomy temperatury do których porównujesz odczyt aktualnej temperatury otoczenia lub wybranego miejsca i na tej podstawie ustalasz odpowiednią decyzję zgodnie z algorytmem otwarcia lub zamknięcia zaworu (całkowitego lub częściowego).
    Przecież nie stosujesz kontroli zaworem w trybie PID (!?)
    Ja rozumiem, że chcesz wykorzystać posiadane elementy elekto-mechaniczne, lecz nie zawsze jest to najlepsza i najtańsza droga. Zaczym to wszystko zmontujesz, dopasujesz napedy, sprzeżenia zwrotne itd, zabierze to ogromny nakład pracy i możliwie pociągnie pewne dodatkowe nakłady finansowe.
    Popatrz na to z innej strony.
    Standardowo grzejniki w domowych instalacjach wodnych zasilane są poprzez 1/2 calowy (najtańszy jaki można znależć) zawór pokrętny przeznaczony do operacjii ręcznej.
    Wymieniając ten zawór na kulowy dwu lub nawet trzy-drożny, ułatwia diametralnie cały projekt, który można wykonać w czasie nie współmiernie krótszym niż oryginalnie zakładasz. Prawdopobnie też przu niższych ogólnych kosztach.
    Do kontroli takiego zaworu potrzebowałbyś tylko jeden lub dwa przekaźniki (dwa jeżeli zawór trzy-drożny). Sam program kontrolny jest absolutnie banalny, w zupełności wystarczy Attiny2313 nawet z programowaniem i wyświetlaniem zadanych poziomów temperatur, a także aktualnej temperatury czytanej przez czujniki typu 1-wire (DS18B20, lub Ds1820).
    Odnośnie zaworów; zainteresuj się takim czymś:
    http://www.winner-hvac.com/en/productDetails.aspx?id=29
    Ta strona oferuje zawory o różnego rodzaju napędach; od zwykłych dwu-pozycyjnych az do proprcjonalnych, oraz z napedem silnikami krokowymi.
    Inna metoda; zamiast gotowego zmotoryzwanego zaworu j.w możesz dać również zawór kulowy zwykły i napędzać go przez odpowiedniej wielkości RC servo.

    e marcus

    0