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] Prosty termostat

zimzia@ 25 Gru 2010 20:54 2844 8
REKLAMA
  • #1 8912368
    zimzia@
    Poziom 12  
    Witam
    Chce zrobić prosty termostat, napisałem do niego program ale nie wiem czy jest poprawny. Chce żeby termostat działał tak: włączam główne zasilanie ale program nie startuje (nic się nie dzieje), dopiero po wciśnięciu microswitcha startuje program (nie wiem co tu zrobić aby po puszczeniu microswitcha program szedł dalej i czy może być podłączony pod obojętnie jaki PORT czy tylko INT0 ?), następnie zostaje zmierzona temp jeżeli jest mniejsza niż 2 stC zostaje włączony przekaźnik który włącza grzałkę gdy temperatura podniesie się do 10 stC przekaźnik wyłącza grzałka i następne sprawdzenie czy temp jest mniejsza od 2stC za 20 min i tak w kółko, jeszcze żeby ponowne wciśniecie microswitcha spowodowało start programu od nowa omijając to sprawdzanie za 20min.

  • REKLAMA
  • Pomocny post
    #2 8912802
    Matejkos
    Poziom 20  
    Proponuje dodać dodatkową zmienną pomocniczą której zadaniem będzie pamiętanie że program zaczął działać nie jestem pewien tego rozwiązania z bascomem miałem doczynienia dość dawno temu ale możesz spróbować tego
    $regfile = "attiny25.dat"
    $crystal = 4000000
    
    Config Portb.3 = Output                                     'przekażnik
    Config Portb.2 = Input                                      'włącznik typu microswitch
    Config 1wire = Portb.5                                      'termometr, DS18B20
    
    Dim I1 As Integer
    Dim Temp As Integer
    dim dodatkowa as bit
    Declare Sub Pomiar_temperatury
    Declare Sub Termostat
    
    
    '------Start programu
    dodatkowa=0
    Do
    Do
    
    Loop Until Portb.2 = 1 or dodatkowa=1
    dodatkowa=1
    Pomiar_temperatury
    Termostat
    Loop
    Return
    
    '------Pomiar_temperatury
    
    Pomiar_temperatury:
    
    1wreset
    1wwrite &HCC
    1wwrite &H44
    
    Waitms 750
    
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    
    I1 = 1wread(2)
    
      I1 = I1 * 10
      I1 = I1 / 16
      Temp = I1 / 10
    
    Return
    
    '------Termostat
    Termostat:
    
    If Temp < 2 Then
    Wait 1
    Portb.3 = 0
    
    End If
    
    If Temp < 10 Then
    Wait 1
    Portb.3 = 1
    Wait 1200
    
    End If
    
    Return

    sprawa będzie wyglądała tak
    przy włączeniu zasialania w dodatkowej zmiennej wpisujesz 0 program wchodzi do głównej pętli programu do... loop a następne do dodatkowej pętli do ... loop until i w tej pętli wychodzi w momencie kiedy dodatkowa zmienna będzie 1 lub wciśnięty będzie przycisk po wyjściu z tej pętli ustawisz zmienną dodatkową na 1 wykonasz określone działania i zamknie się 1 pętla a że już dodatkowa jest ustawiona to nie będzie czekał dalej na wciśnięcie przycisku.

    Mam nadzieję że pomogłem

    Pozdrawiam Matejkos
  • REKLAMA
  • #3 8912864
    zimzia@
    Poziom 12  
    na symulacji działa, ja jeszcze wymyśliłem coś takiego przycisk musi być podłączony pod INT.



    działa tylko nie wiem czy ponowne wciśniecie przycisku uruchamia program od nowa bo w symulancia omija "Wait".

    A te linijki są poprawne, czy będzie załączać grzałkę przy 2stC i wyłączać przy 10 stC ??

  • Pomocny post
    #4 8913343
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 8913462
    zimzia@
    Poziom 12  
    emarcus napisał:
    Warunki włączenia/ wyłączenia grzałki są podane zakresem temperatur min. do max., i to powinno wystarczyć; po co więc dodatkwo występuje przycisk i na dodatek miałby być w interrupcie?


    Niestety musi być tak jak napisałem w pierwszym poście, przecież bym sobie życia nie utrudniał. A może da się to zrobić inaczej jeszcze raz napisze jak ma to działać, naciskam przycisk następnie puszczam i ruszają mi podprogramy Pomiar_temperatury i Termostat które działają aż do wyłączenia zasilania.

    Próbowałem z tym INT ale nie wiem co wpisać żeby uruchamiały mi się te podprogramy.

  • REKLAMA
  • Pomocny post
    #6 8914636
    sp3ots
    Poziom 38  
    Witam !
    Spróbuj tak:
    
    Do
    if przycisk=0 then
    bitwait przycisk, set
    gosub praca
    end if 
    loop
    praca:
    do
    'tu cały program
    loop
    return
    

    Wesołych Świąt życzę. Stefan
  • #7 8915174
    zimzia@
    Poziom 12  
    sp3ots napisał:
    Witam !
    Spróbuj tak:
    
    Do
    if przycisk=0 then
    bitwait przycisk, set
    gosub praca
    end if 
    loop
    praca:
    do
    'tu cały program
    loop
    return
    

    Wesołych Świąt życzę. Stefan


    Również Wesołych Świąt

    zrobiłem tak jak proponujesz i w symulacji po puszczeniu przycisku zatrzymuje się na "bitwait przycisk, set" dopiero ponowne wciśniecie powoduje przeskok do pod programu.
  • Pomocny post
    #8 8915267
    sp3ots
    Poziom 38  
    Napisałem taki program i sprawdziłem go z ATTiny13 (nie mam ATTiny25):
    
    $regfile = "ATtiny13.DAT"
    $crystal = 1000000
    Config Pinb.0 = Input
    Portb.0 = 1
    Przycisk Alias Pinb.0
    Config Pinb.1 = Output
    Portb.1 = 1
    Led Alias Portb.1
    Do
    If Przycisk = 0 Then
    Waitms 100
    Bitwait Przycisk , set
    Gosub Praca
    End If
    Loop
    End
    Praca:
    Led = 0
    Wait 1
    Led = 1
    Return
    

    Cytat:
    Naciskam przycisk następnie puszczam i ruszają mi podprogramy.

    Ta część programu działa.


    Po wciśnięciu przycisku program czeka na puszczenie przycisku, po rozłączeniu przycisku wykonuje się "PRACA"
  • #9 8920480
    zimzia@
    Poziom 12  
    sp3ots napisał:
    Napisałem taki program i sprawdziłem go z ATTiny13 (nie mam ATTiny25):
    Naciskam przycisk następnie puszczam i ruszają mi podprogramy.
    Ta część programu działa.
    Po wciśnięciu przycisku program czeka na puszczenie przycisku, po rozłączeniu przycisku wykonuje się "PRACA"


    Ten sposób działa :D

    Do układu dodałem czujnik, gdy jest za mało wody to buzer daje sygnał a program nie pozwala przejść do podprogramu załączającego grzałkę.
REKLAMA