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

Czy to zadziała w normalnym życiu - at8 sterownik klimatu

28 Sie 2008 08:12 2043 19
  • Poziom 20  
    Mam prośbę o sprawdzenie poprawności schematu który wstępnie wykonałem. Układ będzie miał za zadanie sterować agregatem i wentylatorami w chłodni przemysłowej do przechowywania jedzonka. Założenia były takie :
    -pięć kanałów izolowanych optycznie ma sterować wentylatorami oraz niewielkimi grzałkami do rozmrażania parownika.
    -dwa kanały podłączone pod linie PD5 PD6 mają sterować przekaźnikami włączającymi agregat trzy fazowy
    Może wam się wydać dziwne że do sterowania jednego agregatu jednej grzałki i wentylatorów zaangażowanych jest aż 7 linii ale musi być rezerwa gdyby np w niedziele w nocy uszkodził sie triak sterujący grzałką i jej np nie wyłączył. Tak jak mówiłem chłodnia przechowuje około 2 tony jedzonka i tyle. Do linii PB4 i PB5 zamierzam dołączyć część układu która będzie zczytywać temperaturę w chłodni i na parowniku czyli w 2 miejscach. Niestety nie bardzo mam pomysł jak to zrobić i tu proszę o pomoc tzn. jakiś pomysł tylko jak to zrobić w miarę prosto.
    Za wszelkie sugestie będę baaaardzo wdzięczny.
  • Relpol przekaźniki
  • Poziom 20  
    No sugestia jak najbardziej dobra tyle że :
    -tylko 2 wolne linie a trzeba czytać z 4 czujników (2 zapasowe)
    -a dobrze by było jeszcze wpleść do tego choć jeden czujnik tem. zewnętrznej (bo chłodnia stoi w środku w budynku w dość ciasnym pomieszczeniu) który informowałby układ o zmianie trybu pracy wentylatora na chłodnicy agregatu (gorąco - szybciej albo dodatkowy albo alarm).

    Tak sobie myśle czy nie dołożyć jeszcze jednego jakiegoś małego kontrolera co by zajął się obsługą dsów i np klawiatury tylko czy PB0 ...PB5 wystarczy do komunikacji między tymi kontrolerami?
  • Relpol przekaźniki
  • Poziom 28  
    cepelia napisał:

    Tak sobie myśle czy nie dołożyć jeszcze jednego jakiegoś małego kontrolera co by zajął się obsługą dsów i np klawiatury tylko czy PB0 ...PB5 wystarczy do komunikacji między tymi kontrolerami?

    Skoro to ma być takie niezawodne to nie polecam wkladania jeszcze jednego uC i klawiatury. Z doświadczenia wiem że programiści najwięcej błędów popełniają przy obsłudze przerwań a komunikacja i współdzielenie danych to już ogólnie masakra jest pod względem bardzo rzadko występujących ciężkich do wykrycia błędów.
  • Poziom 20  
    Zdaje sobie z tego sprawę i dlatego właśnie założenie było takie żeby zrobić to na kontrolerze (jednym) który "wytrzyma wszystko" .
    Nie bardzo rozumiem jak to jest z tym termometrem na magistrale 1-wire tzn. piszesz że można podpiąć ich kilka pod jeden port kontrolera (a jak rozpoznać która temperatura będzie z którego czujnika?), choć w dokumentacji jest napisane że jeżeli jeden czujnik ustawi się jako master to reszta będzie wysyłać dane po kolei ale właśnie jakiej kolei?

    Niech ktoś dużo mądrzejszy popatrzy na schemat elektryczny i powie czy to ma szanse powodzenia. Proszę.
  • Poziom 23  
    Każde urządzenie podłączane pod 1-wire ma swój indywidualny numer i właśnie po tym numerze wybierasz który czujnik ma podać ci temperaturę. Poczytaj trochę o 1-wire w internecie to zrozumiesz o co chodzi
  • Poziom 38  
    Co ma schemat elektryczny do warstwy opisującej protokół.
    Maxim-ic.com zajrzyj na czym polega 1wire podpowiedź... unikalne adresy.
  • Poziom 28  
    Zamieść schemat w PDFie i nie spakowany, to może ktoś do niego zajrzy.
  • Poziom 38  
    Ja nie zaglądam do schematów innych niż *.sch Eagle.
    :-)
  • Poziom 20  
    Troszkę zmieniona koncepcja at8 na at16, będzie zrobione na ds18b20 czyli magistrala 1wire, zastanawiam się czy potrzebny będzie jakiś zegarek w układzie ponieważ wymagane jest by sterownik raz na 6 godzin włączył grzałkę na parowniku i odszronił go. Poza tym wentylatory na parowniku które zdmuchują szron z niego też powinny działać w pewnych zaprogramowanych odstępach czasowych.

    Schemat który dodałem jest w eaglu spakowany bo skrypt na stronie nie pozwolił na taki załącznik z końcówką sch ale jak tam chcecie teraz jest jako obrazek .png .
  • Poziom 28  
    1. Powinieneś użyć tranzystorów PNP a nie NPN. W obecnej konfiguracji może to i działa ale wogóle bez tranzstorów też by działało.
    2. C8 masz chyba zwarty.
    3. Bezpiecznik 500mA na grzałke i wentylatory????
    4. Dałbym raczek osobne bezpieczniki na każdy odbiornik.
    5. LCD nie ma podpiętego VCC, a właściwie to ma do masy.
    6. OKA6 i OKA7 są bezsensownie połączone, czyżbyś zapomniał masy dorysować?

    Dodano po 3 [minuty]:

    7. Stabilizator ma pomylone wyjście z wejściem.
    8. Reset zawsze jest dobrze gdzieś podwiesić.
  • Poziom 20  
    Właśnie o to chodziło . Dzięki !!
  • Poziom 20  
    No i minęły dwa dni troche wiedzy zaczerpnąłem i wypociłem coś takiego co teoretycznie ma sterować termostatem ale brakuje mi paru pomysłów jak zrobić niektóre rzeczy a mianowicie :
    jak ustawić tem ujemną?
    jak ograniczyć wartość którą można ustawić?
    i jeszcze jedno który kontroler będzie odpowiedni żeby ustawić na nim około 40 parametrów (sterować będzie tylko 5 wyjściami), parametry będą dotyczyły opóźnień startów sprężarki wiatraków itp drobiazgi a mnie tu sie w atmedze po ustawieniu 3 parametrów z histerezami miejsce kończy.
    Code:


    $regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
    $crystal = 1000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
    'Deklaracja portów od wyświetlacza LCD
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.2 , Rs = Portb.0

    Config Lcd = 20 * 4                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)

    '*************************************WAŻNE**********************************************
    'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
    Config 1wire = Portb.4                                      'deklaracja portu na którym będą podpięte DS18b20

    Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    Dim I3 As Integer
    'Dim I4 As Integer
    Dim I11 As Integer                                          ' przechowuje poprzednią wartoś temp
    Dim I22 As Integer                                          ' przechowuje poprzednią wartoś temp
    Dim I33 As Integer                                          ' przechowuje poprzednią wartoś temp
    'Dim I44 As Integer                                          ' przechowuje poprzednią wartoś temp

    Dim Tx1 As Byte                                             'przechowuje wynik odejmowania temperatury zadanej od zmierzonej dla 1 czujnika
    Dim Tx2 As Byte                                             'dla drugiego
    Dim Tx3 As Byte                                             'dla trzeciego
    'Dim Tx4 As Byte                                             ' i czwartego

    Dim Tx11 As Byte                                            'przechowuje temperature zadana na pierwszym kanale
    Dim Tx22 As Byte                                            'na drugim czujniku
    Dim Tx33 As Byte                                            'na trzecim
    'Dim Tx44 As Byte                                            ' i na czwartym

    Dim Dsib1(8) As Byte
    Dim Dsib2(8) As Byte
    Dim Dsib3(8) As Byte
    'Dim Dsib4(8) As Byte
    Dim B As Byte                                               'deklaracja zmiennej do odczytu kodów ID
    Dim W As Byte                                               'deklaracja zmiennej do odczytu ilośc czujników
    Dim H1 As Byte                                              'pierwsza histereza
    Dim H2 As Byte
    Dim H3 As Byte
    'Dim H4 As Byte                                              ' i ostatnia histereza


    Deflcdchar 0 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32          'znak stopnia Celsjusza
    Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            ' strzałka góra
    Deflcdchar 2 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            ' strzałka dół

    Cursor Off                                                  'Wyłącza kursor
    Cls
    Locate 1 , 6                                                'Funkcja CLS czyści ekran
    Lcd "Termometr" ;                                           'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Locate 2 , 7
    Lcd "ver 1.03"
    Locate 4 , 2
    Lcd "Upgrade 31.08.08"
    Waitms 200
    Cls

    W = 1wirecount()
    Lcd "Ilosc czujnikow:"                                      'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
    Waitms 500
    Lcd W
    Wait 3
    Cls                                                         'Znajdź pierwszy czujnik podpięty do portu
    Dsib1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
    Dsib2(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu
    Dsib3(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu
    'Dsib4(1) = 1wsearchnext()

    '*******************Odczyt numerów ID czujników temperatury*********************

    If Dsib1(8) = Crc8(dsib1(1) , 7) Then                       'ta opcja pojawia się tylko przy włączaniu urządzenia
     Locate 1 , 1
     Lcd "CRC OK Czujnik 1 ID"
     'Waitms 750
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsib1(b))
     Next
    End If
    'Wait 2

    If Dsib2(8) = Crc8(dsib2(1) , 7) Then
     Locate 2 , 1
     Lcd "CRC OK Czujnik 2 ID"
     'Waitms 750
     Locate 2 , 1
     For B = 1 To 8
     Lcd Hex(dsib2(b))
     Next
    End If
    'Wait 2

    If Dsib3(8) = Crc8(dsib3(1) , 7) Then
     Locate 3 , 1
     Lcd "CRC OK Czujnik 3 ID"
     'Waitms 750
     Locate 3 , 1
     For B = 1 To 8
     Lcd Hex(dsib3(b))
     Next
    End If
    'Wait 2

    'If Dsib4(8) = Crc8(dsib4(1) , 7) Then
    ' Locate 4 , 1
    ' Lcd "CRC OK Czujnik 4 ID"
    ' 'Waitms 750
    ' Locate 4 , 1
    ' For B = 1 To 8
    ' Lcd Hex(dsib4(b))
    ' Next
    'End If
    'Wait 2
    Cls

    '****ustawienie temeratur potrzebnych do dzialania termostatu tx11,tx22,tx33,tx44
    Config Portc.0 = Input
    S1 Alias Pinc.0
    Set Portd.0
    Config Pinc.1 = Input
    S2 Alias Pinc.1
    Set Portc.1
    Config Portc.2 = Input
    S3 Alias Pinc.2
    Set Portc.2
    Goto 1strefa

    '******pierwsza strefa****************
    1strefa:
    Locate 1 , 2
    Lcd "pierwa strefa"
    Locate 2 , 18
    Lcd " + "
    Locate 3 , 18
    Lcd " - "
    Locate 4 , 17
    Lcd "ok"

    '******   wstepne dane histerezy i temperat w strefach********

       H1 = 2
       H2 = 2
       H3 = 5
      ' H4 = 5

       Tx11 = 50
       Tx22 = 50
       Tx33 = 30
      ' Tx44 = 100
     Do

       Ss = Str(tx11)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "Zadana:" ; Ss ; Chr(0)

       If S1 = 0 Then
       Waitms 25
       If S1 = 0 Then
       Do
       Incr Tx11
       Waitms 200
       Loop Until S1 = 1
       End If
       End If

       If S2 = 0 Then
       Waitms 25
       If S2 = 0 Then
       Do
       Decr Tx11
       Waitms 200
       Loop Until S2 = 1
       End If
       End If

       If S3 = 0 Then
       Waitms 25
       If S3 = 0 Then
       Cls
       Locate 2 , 9
       Lcd "OK"
       Waitms 800
       Cls

       '****ustawienia histerezy*******
          Locate 1 , 5
          Lcd "histereza"
          Locate 2 , 3
          Lcd " dla strefy 1 "
          Locate 2 , 18
          Lcd " + "
          Locate 3 , 18
          Lcd " - "
          Locate 4 , 17
          Lcd "ok"


       Waitms 800

       Do
       Ss = Str(h1)
       Ss = Format(ss , " 0.0")
       Locate 3 , 1
       Lcd "Zadana:" ; Ss ; Chr(0)

       If S1 = 0 Then
       Waitms 25
       If S1 = 0 Then
       Do
       Incr H1
       Waitms 200
       Loop Until S1 = 1
       End If
       End If

       If S2 = 0 Then
       Waitms 25
       If S2 = 0 Then
       Do
       Decr H1
       Waitms 200
       Loop Until S2 = 1
       End If
       End If

       If S3 = 0 Then
       Waitms 25
       If S3 = 0 Then
       Cls
       Locate 2 , 9
       Lcd "OK"
       Waitms 800
       Cls

       Goto 2strefa

       End If
       End If

       Loop
       '****ustawienia histerezy*******

       Goto 2strefa
       End If
       End If


     Loop

    '*****************koniec *************

    '*****************poczatek 2 strefy***********************
    2strefa:

    Locate 1 , 2
    Lcd "druga strefa"
    Locate 2 , 18
    Lcd " + "
    Locate 3 , 18
    Lcd " - "
    Locate 4 , 17
    Lcd "OK"

     Do

       Ss = Str(tx22)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "Zadana:" ; Ss ; Chr(0)

       If S1 = 0 Then
       Waitms 25
       If S1 = 0 Then
       Do
       Incr Tx22
       Waitms 200
       Loop Until S1 = 1
       End If
       End If

       If S2 = 0 Then
       Waitms 25
       If S2 = 0 Then
       Do
       Decr Tx22
       Waitms 200
       Loop Until S2 = 1
       End If
       End If

       If S3 = 0 Then
       Waitms 25
       If S3 = 0 Then
       Cls
       Locate 2 , 9
       Lcd "OK"
       Waitms 800
       Cls

       '****ustawienia histerezy*******
          Locate 1 , 5
          Lcd "histereza"
          Locate 2 , 3
          Lcd " dla strefy 2 "
          Locate 2 , 18
          Lcd " + "
          Locate 3 , 18
          Lcd " - "
          Locate 4 , 17
          Lcd "ok"


       Waitms 800

       Do
       Ss = Str(h2)
       Ss = Format(ss , " 0.0")
       Locate 3 , 1
       Lcd "Zadana:" ; Ss ; Chr(0)

       If S1 = 0 Then
       Waitms 25
       If S1 = 0 Then
       Do
       Incr H1
       Waitms 200
       Loop Until S1 = 1
       End If
       End If

       If S2 = 0 Then
       Waitms 25
       If S2 = 0 Then
       Do
       Decr H1
       Waitms 200
       Loop Until S2 = 1
       End If
       End If

       If S3 = 0 Then
       Waitms 25
       If S3 = 0 Then
       Cls
       Locate 2 , 9
       Lcd "OK"
       Waitms 800
       Cls

       Goto 3strefa

       End If
       End If

       Loop
       '****ustawienia histerezy*******

       Goto 3strefa
       End If
       End If


        Loop

    '***********************koniec ************

    '*****************poczatek 3 strefy***********************
    3strefa:

    Locate 1 , 2
    Lcd "trzecia strefa"
    Locate 2 , 18
    Lcd " + "
    Locate 3 , 18
    Lcd " - "
    Locate 4 , 17
    Lcd "OK"

     Do

       Ss = Str(tx33)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "Zadana:" ; Ss ; Chr(0)

       If S1 = 0 Then
       Waitms 25
       If S1 = 0 Then
       Do
       Incr Tx33
       Waitms 200
       Loop Until S1 = 1
       End If
       End If

       If S2 = 0 Then
       Waitms 25
       If S2 = 0 Then
       Do
       Decr Tx33
       Waitms 200
       Loop Until S2 = 1
       End If
       End If

       If S3 = 0 Then
       Waitms 25
       If S3 = 0 Then
       Cls
       Locate 2 , 9
       Lcd "OK"
       Waitms 800
       Cls
       '****ustawienia histerezy*******
          Locate 1 , 5
          Lcd "histereza"
          Locate 2 , 3
          Lcd " dla strefy 2 "
          Locate 2 , 18
          Lcd " + "
          Locate 3 , 18
          Lcd " - "
          Locate 4 , 17
          Lcd "ok"


       Waitms 800

       Do
       Ss = Str(h3)
       Ss = Format(ss , " 0.0")
       Locate 3 , 1
       Lcd "Zadana:" ; Ss ; Chr(0)

       If S1 = 0 Then
       Waitms 25
       If S1 = 0 Then
       Do
       Incr H3
       Waitms 200
       Loop Until S1 = 1
       End If
       End If

       If S2 = 0 Then
       Waitms 25
       If S2 = 0 Then
       Do
       Decr H3
       Waitms 200
       Loop Until S2 = 1
       End If
       End If

       If S3 = 0 Then
       Waitms 25
       If S3 = 0 Then
       Cls
       Locate 2 , 9
       Lcd "OK"
       Waitms 800
       Cls

       Goto Potwierdz

       End If
       End If

       Loop
       '****ustawienia histerezy*******
       Goto Potwierdz
       End If
       End If


        Loop

    '***********************koniec 3 strefy************

    '*****************poczatek 4 strefy***********************
    '4strefa:

    'Locate 1 , 2
    'Lcd "czwarta strefa"
    'Locate 2 , 15
    'Lcd "gora"
    'Locate 3 , 16
    'Lcd "dol"
    'Locate 4 , 10
    'Lcd "zatwierdz"

    ' Do

    '   Ss = Str(tx44)
    '   Ss = Format(ss , " 0.0")
    '   Locate 2 , 1
    '   Lcd "Zadana:" ; Ss ; Chr(0)

    '   If S1 = 0 Then
    '   Waitms 25
    '   If S1 = 0 Then
    '   Do
    '   Incr Tx44
    '   Waitms 200
    '   Loop Until S1 = 1
    '   End If
    '   End If

    '   If S2 = 0 Then
    '   Waitms 25
    '   If S2 = 0 Then
     '  Do
     '  Decr Tx44
     '  Waitms 200
     '  Loop Until S2 = 1
     '  End If
     '  End If

      ' If S3 = 0 Then
      ' Waitms 25
      ' If S3 = 0 Then
      ' Cls
      ' Locate 2 , 9
      ' Lcd "OK"
      ' Waitms 800
      ' Cls
      ' Goto Potwierdz
      ' End If
      ' End If


      '  Loop

    '***********************koniec 4 strefy************
      Potwierdz:

    Locate 2 , 1
    Lcd "temperatury zadane"
    'Waitms 800
    Cls

       Ss = Str(tx11)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "strefa 1:" ; Ss ; Chr(0)

       Ss = Str(h1)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "his strefa 1:" ; Ss ; Chr(0)
       Waitms 800
       Cls

       Ss = Str(tx22)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "strefa 2:" ; Ss ; Chr(0)

       Ss = Str(h2)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "his strefa 1:" ; Ss ; Chr(0)
       Waitms 800
       Cls

       Ss = Str(tx33)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "strefa 3:" ; Ss ; Chr(0)

       Ss = Str(h3)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "his strefa 3:" ; Ss ; Chr(0)

       Waitms 800
    '   Cls

    '   Ss = Str(tx44)
    '   Ss = Format(ss , " 0.0")
    '   Locate 1 , 1
    '   Lcd "strefa-4:" ; Ss ; Chr(0)
    '
    '   Ss = Str(h4)
    '   Ss = Format(ss , " 0.0")
    '   Locate 2 , 1
    '   Lcd "his strefa-1:" ; Ss ; Chr(0)
    '
    '   Waitms 800
    '   Cls
    Wait 2
    Cls

    Locate 1 , 2
    Lcd "temp. poprawne ?"
    Locate 2 , 16
    Lcd "tak"
    Locate 4 , 16
    Lcd "nie"

      Do
       If S2 = 0 Then
       Waitms 25
       If S2 = 0 Then
       Goto 1strefa
       End If
       End If

       If S3 = 0 Then
       Waitms 25
       If S3 = 0 Then
       Cls
       Locate 2 , 9
       Lcd "OK"
       Waitms 800
       Cls
       Goto Glowny
       End If
       End If
      Loop




    '*******************koniec odczytu ID czujników temperatury*********************
    Glowny:
    Do
       1wreset
       1wwrite &H55
       1wverify Dsib1(1)                                        'wysyłamy adres pierwszego czujnika
       1wwrite &HBE
       I1 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsib2(1)                                        'wysylam adres drugiego czujnika
       1wwrite &HBE
       I2 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsib3(1)                                        'wysylam adres trzeciego czujnika
       1wwrite &HBE
       I3 = 1wread(2)
    '---------------------------------
    '   1wreset
    '   1wwrite &H55
    '   1wverify Dsib4(1)                                        'wysylam adres czwartego czujnika
    '   1wwrite &HBE
    '   I4 = 1wread(2)
    '--------konwersja temp dla wszystkich dsow
       1wreset
       1wwrite &HCC
       1wwrite &H44
    Wait 1

    '****Jeśli pracujesz z wyświetlaczem innym niż 2x20 to tutaj trzeba wprowadzić zmiany w LOCATE********




       I1 = I1 * 10
       I1 = I1 / 16
       If I1 >= I11 Then
       I11 = I1
       If I1 > 0 Then
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "Zewnetrzna : " ; Ss ; Chr(0) ; Chr(1) ;
       Else
       Ss = Str(i1)
       Ss = Format(ss , "0.0")
       Locate 1 , 1
       Lcd "Zewnetrzna : " ; Ss ; Chr(0) ; Chr(1) ;
       End If
       Else
       I11 = I1
       If I1 > 0 Then
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "Zewnetrzna : " ; Ss ; Chr(0) ; Chr(2) ;
       Else
       Ss = Str(i1)
       Ss = Format(ss , "0.0")
       Locate 1 , 1
       Lcd "Zewnetrzna : " ; Ss ; Chr(0) ; Chr(2) ;
       End If
       End If

    '****procedura termostatu i histerezy dla pierwszego czujnika****'

       If I1 > Tx11 Then
          Tx1 = I1 - Tx11
       If Tx1 >= H1 Then
       Set Portc.3                                              'Jezeli Tx1 Bedzie Wieksza od zadanej histerezy to wlaczy sie jeden
                                                               ' moc na pierwszym kanale
                                                              ' znaczy sie wlaczy sie agregat i bedzie chlodniej
       End If
       End If
    '*****************dalej normalnie*************
       I2 = I2 * 10
       I2 = I2 / 16
       If I2 >= I22 Then
       I22 = I2
       If I2 > 0 Then
       Ss = Str(i2)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "Parownik   : " ; Ss ; Chr(0) ; Chr(1) ;
       Else
       Ss = Str(i2)
       Ss = Format(ss , "0.0")
       Locate 2 , 1
       Lcd "Parownik   : " ; Ss ; Chr(0) ; Chr(1) ;
       End If
       Else
       I22 = I2
       If I1 > 0 Then
       Ss = Str(i2)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "Parownik   : " ; Ss ; Chr(0) ; Chr(2) ;
       Else
       Ss = Str(i2)
       Ss = Format(ss , "0.0")
       Locate 2 , 1
       Lcd "Parownik   : " ; Ss ; Chr(0) ; Chr(2) ;
       End If
       End If


       I3 = I3 * 10
       I3 = I3 / 16
       If I3 >= I33 Then
       I33 = I3
       If I3 > 0 Then
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 3 , 1
       Lcd "Chlodnia : " ; Ss ; Chr(0) ; Chr(1) ;
       Else
       Ss = Str(i3)
       Ss = Format(ss , "0.0")
       Locate 3 , 1
       Lcd "Chlodnia : " ; Ss ; Chr(0) ; Chr(1) ;
       End If
       Else
       I33 = I3
       If I1 > 0 Then
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 3 , 1
       Lcd "Chlodnia : " ; Ss ; Chr(0) ; Chr(2) ;
       Else
       Ss = Str(i3)
       Ss = Format(ss , "0.0")
       Locate 3 , 1
       Lcd "Chlodnia : " ; Ss ; Chr(0) ; Chr(2) ;
       End If
       End If

    '
    '   I4 = I4 * 10
    '   I4 = I4 / 16
    '   If I4 >= I44 Then
    '   I44 = I4
    '   If I1 > 0 Then
    '   Ss = Str(i4)
    '   Ss = Format(ss , " 0.0")
    '   Locate 4 , 1
    '   Lcd "Chlodnia_2 : " ; Ss ; Chr(0) ; Chr(1) ;
    '   Else
     '  Ss = Str(i4)
    '   Ss = Format(ss , "0.0")
    '   Locate 4 , 1
    '   Lcd "Chlodnia_2 : " ; Ss ; Chr(0) ; Chr(1) ;
    '   End If
    '   Else
    '   I44 = I4
    '   If I4 > 0 Then
    '   Ss = Str(i4)
    '   Ss = Format(ss , " 0.0")
    '   Locate 4 , 1
    '   Lcd "Chlodnia_2 : " ; Ss ; Chr(0) ; Chr(2) ;
    '   Else
    '   Ss = Str(i4)
    '   Ss = Format(ss , "0.0")
    '   Locate 4 , 1
    '   Lcd "Chlodnia_2 : " ; Ss ; Chr(0) ; Chr(2) ;
    '   End If
    '   End If

    Loop

  • Poziom 21  
    at8 powinna być dobra, at16 już na pewno by wystarczyła ... ale mówię o pisaniu w C ... Ty piszesz pod Bascomem ... tu może być główny problem szybkiego wyczerpywania się miejsca.
    następna jest mega32, z proporcjonalną ilościa kB flasha, później już obudowy do lutowania smd
  • Poziom 26  
    Atmega 8 na taki banał...sorki ale to "łyknie" 89C2051 i jeszcze miejsca zostanie spokojnie i pod Bascomem, którego jeśli zna się dobrze (i jego "wnętrze") to można "cudeńka" zrobić - przecie te procedury są napisane w asmie - polecam lekturę bibliotek :-) jak i konstrukcję procedur... robiw
  • Poziom 21  
    kolega napisał, że już kończ mu się miejsce przy 3 parametrach, a chce ich mieć 12razy więcej ... nie znam Bascoma, ale skoro kolega wyżej pisze w Bascomie i twierdzi że kończy mu się miejsce więc pewnie tak jest, no chyba że Ty piszesz w innym Bascomie gdzie są inne funkcje vel procedury.

    rozumiem że można wkleić wstawki asemblerowe do bascoma, nawet napisać cały program jako wstawkę i pisać to pod Bascomem ... ale chyba nie o to tutaj chodzi :)
  • Poziom 26  
    A widzisz tam gdzieś procedury dla powtarzających się fragmentów kodu? A widzisz może stałą znakową dla tych samych lub bardzo podobnych napisów? Zobacz jak skomplikowano warunki (niepotrzebnie), ile razy używano rozkazu Locate zamiast "ubrać" to w procedurę, nie stosowano lcd chr(xx), stosowano wyświetlenie zmiennych w najprostszy, pamięciożerny sposób typu lcd zmienna, korzystano z funkcji konwersji itp. itd. Nie polecam także stosowania Goto. Wiem co piszę. Bez wstawek asemblerowskich robisz coś takiego na 89C2051, kwestia wprawy.

    pozdrawiam... robiw
  • Poziom 20  
    Wiem wiem ja prosty wy nie ale to mój pierwszy program napisany po 2 dniach doświadczeń z bascomem i atmegą. Poza tym i tak ma błędy w inicjowaniu lcd bo za pierwszym razem nie zadziałał. Poszedłem za radą kolegi i chcę wyciągnąć z niego podprogramy po czym program główny zrobić tylko na zmiennych. Po wstępnej analizie znalazłem tam baaardzo dużo opasłych fragmentów kodu którego zresztą nie używam do niczego więc zostały wywalone i nagle zrobiło się jak by luźniej.
    Mam jeszcze jedną prośbę czy może mi ktoś podsunąć jakieś rozwiązanie odnośnie ustawiania i temperatury ujemnej ? Nawiązując do tego kodu który był zamieszczony wcześniej to próbowałem zmienić rodzaj zmiennej z byte na integer który w założeniu ma przechowywać liczby ujemne ale za cholerę nie mogę z tym dojść do ładu. Program zachowuje się tak jak by nadal zmienna w której przechowuje się byte bo po przekroczeniu zera używając funkcji decr przeskakuje na 255, choć nawet gdybym źle napisał procedurę wyświetlania znaku czy coś to i tak nie powinno zwrócić liczby 255 tylko 1 z plusem lub minusem a tu 255 i dupa.
    Teraz będę cierpliwie czekał na "pomysła" w cieniu ćwicząc dołożenie zegarka który będzie włączał port po upływie zadanego czasu, i załączał alarm po wykryciu sprzecznych danych środowiska.

    Pozdrawiam