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] Najprostszy termostat na Attiny13

yogi009 28 Gru 2011 21:57 2425 0
REKLAMA
  • #1 10316041
    yogi009
    Poziom 43  
    Próbuję, czytając kody innych, sklecić banalny programik wykonujący pracę termostatu. Potrzebuję termostatu utrzymującego zawsze temperaturę np. 80°C, żadnego sterowania, zero wyświetlaczy LCD czy LED, jedynie dwie diody LED (czerwona i zielona) sygnalizujące moment grzania i moment osiągnięcia zadanej temperatury. Wyjście będzie sterować optotriakiem (wzorcowo widziałem MOC3041, ale w szufladzie mam MOC3020, czy da się go zastosować?), dalej tyrystor Sanken TM1661S 600V/16A włączający grzałkę 230V o mocy 350W.

    Oto moja pierwsza próba zapisu (kompiluje się bez przeszkód, zajmuje 71% pamięci procka):

    $regfile = "attiny13.dat"                                   'etykietka mikrokontrolera
    $crystal = 9200000                                          'standardowy zegar wewnetrzny
    
    'Nie pamietam, ktore porty w Attiny13 trzeba raczej zostawic, zeby umozliwic programowanie ISP.
    
    Config Portb.1 = Output                                     'LED Green - temperatura osiagnieta
    Config Portb.4 = Output                                     'LED Red - grzalka wlaczona
    Config Portb.3 = Output                                     'optotriak MOC3041, potem triak i grzalka
    Config 1wire = Portb.5                                      'termometr, DS18B20
    
    
    Dim I1 As Integer
    Dim Temp As Integer
    
    Declare Sub Pomiar_temperatury
    Declare Sub Termostat
    
    
    '------ Start programu ----------
    
    ' Na poczatek uklad scieci obiema diodami na powitanie - gdyby brakowalo pamieci w procku, wyrzucic !
    
    Portb.4 = 0                                                 'obie diody LED zapalone przez ok. sekunde
    Portb.1 = 0
    Waitms 1000
    Portb.4 = 1                                                 'obie diody LED wygaszone
    Portb.1 = 1
    
    ' Teraz do pracy
    
    Do
    
    Pomiar_temperatury
    
    Termostat
    
    Loop
    
    Return
    
    '------Pomiar_temperatury -------
    
    Pomiar_temperatury:
    
    1wreset
    1wwrite &HCC
    1wwrite &H44
    
    Waitms 750                                                  'podobno ten czujnik musi miec okolo 700ms na podanie odczytu
    
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    
    I1 = 1wread(2)
    
      I1 = I1 * 10                                              'jeszcze nie rozgryzlem tych przeliczen, ale widze je w kilku zrodlach
      I1 = I1 / 16
      Temp = I1 / 10
    
    Return
    
    '------ Termostat -------
    Termostat:
    
    If Temp < 70 Then                                           'czy 70 stopni podajemy jako 70, czy jako 700 ?
          Wait 1
          Portb.3 = 0                                           'wyjasnic, czy stan 0 oznacza port uruchamiajacy optotriak, czy odwrotnie
          Portb.4 = 0                                           'czerwona dioda LED sygnalizuje grzanie
          Portb.1 = 1                                           'zielona dioda LED zgaszona
    
       Else
          Portb.3 = 1
          Portb.4 = 1                                           'czerwona dioda LED zgaszona
          Portb.1 = 0                                           'zielona dioda LED sygnalizuje osiagniecie zadanej temperatury
    End If
    
    Return
    '------ Koniec programu ------


    Proszę o wskazanie błędów i ew. propozycje korekt. Jakiej mniej więcej histerezy można się spodziewać po takim układzie? Pozdrawiam Kolegów :-)

    ====== EDIT =======

    Dziękuję za udział w dyskusji, temat zamknięty :-)
  • REKLAMA
REKLAMA