[BASCOM] Sprawdzenie kodu

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
Manerus
-
Posty: 52
Rejestracja: 05 cze 2011, 20:31
Lokalizacja: Wrocław

[BASCOM] Sprawdzenie kodu

Post autor: Manerus » 04 lip 2013, 8:16

Witam

Z wycinków kilku programów chciałem zrobić jeden duży barkuje kilku rzeczy
i zwiazku z tez pytania


W jaki sposób mogę zwiększyć ilość wejść i wyjść żeby zmieścić wszystko ? ( patrz 1 PINY )

brakuje ustawiania podlewania względem kalendarza zielonego pojęcia nie mam jak z pcf mogłbym ustawić godzinę i czas podlewania np 18:00]przez 1 min ?

brakuje lcd , i dobrze ustawionych pinów ale szukam narazie samego procesora który opsłuży 12 urządzeń ewentualnie zmienie na 2 procesory

Kod: Zaznacz cały

-----------------------PINY
Config 1wire = Portd.7
 
Dht_put Alias Portb.6                                       ' PODŁACZONY CZUJNIK DHT11
Dht_get Alias Pinb.6                                        ' PODŁACZONY CZUJNIK DHT11
Dht_io_set Alias Ddrb.6                                     ' PODŁACZONY CZUJNIK DHT11
Grzalka1
Grzałka2
Grzałka3
Grzałka4
Lampa1
Lampa2
Lampka2
Lampka1
Pompa1
Pompa2
 
 
 
 
--------------------zakres wilgotności
 
Locate 1 , 1
      Lcd "  Humilidity ""%"
      Locate 2 , 1
      Lcd "USTAW: " ; Liczba ; Chr(0) ; "C"
      Waitms 100
 
      If Pinb.1 = 0 Then
               Incr Liczba
      End If
      Waitms 200
 
      If Pinb.2 = 0 Then
               Decr Liczba
      End If
 
      If Liczba > 95 Then Liczba = 95
      If Liczba < 20 Then Liczba = 20
 
 
--------------------zakres temperatury 1 czujnik ?
Sub Ustaw_temp1 
Debounce Pind.4 , 0 , Up 
Debounce Pind.3 , 0 , Down 
 
   Temp = Fusing(i2 , "00.0") 
   Cls 
   Locate 1 , 2 
   Lcd "Ustaw temp1:"; 
 
   Locate 2 , 6 
   Lcd Temp ; Chr(0); 
 
 
 
   If Pind.3 = 1 And Pind.4 = 1 Then 
   Waitms 10 
   Incr Aktywnosc 
   End If 
 
   If Aktywnosc = 500 Then 
   A = I2 
   Writeeeprom A , 1 
   Goto Main 
   End If 
End Sub 
 
Up: 
Aktywnosc = 0 
Incr I2 
Goto Ustaw 
 
Down: 
Aktywnosc = 0 
Decr I2 
Goto Ustaw
--------------------zakres temperatury 2 czujnik ?
Sub Ustaw_temp2 
Debounce Pind.4 , 0 , Up 
Debounce Pind.3 , 0 , Down 
 
   Temp = Fusing(i2 , "00.0") 
   Cls 
   Locate 1 , 2 
   Lcd "Ustaw temp1:"; 
 
   Locate 2 , 6 
   Lcd Temp ; Chr(0); 
 
 
 
   If Pind.3 = 1 And Pind.4 = 1 Then 
   Waitms 10 
   Incr Aktywnosc 
   End If 
 
   If Aktywnosc = 500 Then 
   A = I2 
   Writeeeprom A , 1 
   Goto Main 
   End If 
End Sub 
 
Up: 
Aktywnosc = 0 
Incr I2 
Goto Ustaw 
 
Down: 
Aktywnosc = 0 
Decr I2 
Goto Ustaw
--------------------zakres temperatury 3 czujnik ?
Sub Ustaw_temp3 
Debounce Pind.4 , 0 , Up 
Debounce Pind.3 , 0 , Down 
 
   Temp = Fusing(i2 , "00.0") 
   Cls 
   Locate 1 , 2 
   Lcd "Ustaw temp3:"; 
 
   Locate 2 , 6 
   Lcd Temp ; Chr(0); 
 
 
 
   If Pind.3 = 1 And Pind.4 = 1 Then 
   Waitms 10 
   Incr Aktywnosc 
   End If 
 
   If Aktywnosc = 500 Then 
   A = I2 
   Writeeeprom A , 1 
   Goto Main 
   End If 
End Sub 
 
Up: 
Aktywnosc = 0 
Incr I2 
Goto Ustaw 
 
Down: 
Aktywnosc = 0 
Decr I2 
Goto Ustaw
--------------------zakres temperatury 4 czujnik ?
Sub Ustaw_temp4 
Debounce Pind.4 , 0 , Up 
Debounce Pind.3 , 0 , Down 
 
   Temp = Fusing(i2 , "00.0") 
   Cls 
   Locate 1 , 2 
   Lcd "Ustaw temp4:"; 
 
   Locate 2 , 6 
   Lcd Temp ; Chr(0); 
 
 
 
   If Pind.3 = 1 And Pind.4 = 1 Then 
   Waitms 10 
   Incr Aktywnosc 
   End If 
 
   If Aktywnosc = 500 Then 
   A = I2 
   Writeeeprom A , 1 
   Goto Main 
   End If 
End Sub 
 
Up: 
Aktywnosc = 0 
Incr I2 
Goto Ustaw 
 
Down: 
Aktywnosc = 0 
Decr I2 
Goto Ustaw
 
---------------------------ustawienie świecenia światła1
Sub Ustaw_świecenie1
 
 
 
If T > Liczba Then
             Przek = 1
                Led = 1
End If
 
 
If T < Tmin Then
            Przek = 0
               Led = 0
end
If Pinb.3 = 0 Then
 
 
  Waitms 500
      Do
 
      Cls
      Locate 1 , 1
      Lcd "  Swiecenie "
      Locate 2 , 1
      Lcd "USTAW lampa1: " ; Liczba ; Chr(0) ; "C"
      Waitms 100
 
      If Pinb.1 = 0 Then
               Incr Liczba
      End If
      Waitms 200
 
 
      If Pinb.2 = 0 Then
               Decr Liczba
      End If
 
 
      If Liczba > 80 Then Liczba = 80
      If Liczba < 20 Then Liczba = 20
 
If Pinb.3 = 0 Then
      Writeeeprom Liczba , Eliczba
      Waitms 100
      Exit Do
End If
---------------------------ustawienie świecenia światła2
Sub Ustaw_świecenie2
 
 
 
If T > Liczba Then
             Przek = 1
                Led = 1
End If
 
 
If T < Tmin Then
            Przek = 0
               Led = 0
end
If Pinb.3 = 0 Then
 
 
  Waitms 500
      Do
 
      Cls
      Locate 1 , 1
      Lcd "  Swiecenie "
      Locate 2 , 1
      Lcd "USTAW lampa2: " ; Liczba ; Chr(0) ; "C"
      Waitms 100
 
      If Pinb.1 = 0 Then
               Incr Liczba
      End If
      Waitms 200
 
 
      If Pinb.2 = 0 Then
               Decr Liczba
      End If
 
 
      If Liczba > 80 Then Liczba = 80
      If Liczba < 20 Then Liczba = 20
 
If Pinb.3 = 0 Then
      Writeeeprom Liczba , Eliczba
      Waitms 100
      Exit Do
End If
 
 
----------------------------krata sd
******************** Deklaracje zmiennych karty SD 
 
Dim Blad_sd As Bit 
Dim Zapisano As Bit 
Dim B As Word 
'********************* Deklaracje Aliasów 
 
Sd_dioda Alias Porta.6 
Dioda Alias Porta.7                                         'Przypisanie przyjaznych nazw do poszczególnych portów do których 
 
'********************* Konfiguracja SD/MMC 
 
'MMC -->ATMega32 
'DATA3 -> PORTB.4 
'DI    -> PORTB.5 
'CLK   -> PORTB.7 
'DATA0 -> PORTB.6 
 
 
'********************* Konfiguracja SD/MMC 
 
'MMC -->ATMega32 
'DATA3 -> PORTB.4 
'DI    -> PORTB.5 
'CLK   -> PORTB.7 
'DATA0 -> PORTB.6 
 
Const Cmmc_soft = 0                                         'SPI Sprzętowe 
 
   ' Podanie pinu wyboru układu 
   Config Pinb.4 = Output                                   'wskazanie, który Pin jest CS karty MMC/SD 
   Mmc_cs Alias Portb.4 
   Set Mmc_cs 
 
   ' Definiowanie Pinu układu HW-SPI, który ma sygnał SS 
   Config Pinb.7 = Output                                   ' definowanie Pin'u sygnału SPI SS 
   Spi_ss Alias Portb.7 
   Set Spi_ss                                               ' Set SPI-SS to Output and High por Proper work of 
                                                  ' SPI as Master 
 
   ' HW-SPI konfigurowane dla szybszej pracy 
  Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1       'Config Spi = Soft , Din = Pinb.3 , Dout = Portb.2 , Ss = Portb.0 , Clock = Portb.1 
   Spsr.0 = 1                                               ' Podwójna prędkość na ATMega128 
   Spiinit                                                  ' Inicjowanie SPI 
 
'Spiinit 
 
' Błędy 
Const Cperrdrivereset = 225                                 ' Error response Byte at Reset command 
Const Cperrdriveinit = 226                                  ' Error response Byte at Init Command 
Const Cperrdrivereadcommand = 227                           ' Error response Byte at Read Command 
Const Cperrdrivewritecommand = 228                          ' Error response Byte at Write Command 
Const Cperrdrivereadresponse = 229                          ' No Data response Byte from MMC at Read 
Const Cperrdrivewriteresponse = 230                         ' No Data response Byte from MMC at Write 
Const Cperrdrive = 231 
Const Cperrdrivenotsupported = 232                          ' return code for DriveGetIdentity, not supported yet 
Waitms 700 
Dim Gbdriveerror As Byte                                    ' General Driver Error register 
Dim Gbdriveerrorreg As Byte                                 ' Driver load Error-Register of HD in case of error 
Dim Gbdrivestatusreg As Byte                                ' Driver load Status-Register of HD on case of error 
Dim Gbdrivedebug As Byte 
$lib "MMC.LIB"                                              ' link do biblioteki drivera 
$external _mmc 
 
'********************* Wartości początkowe 
 
Zapisano = 0 
Blad_sd = 0 
Ot1 = 0 
Ot2 = 0 
T = 300 
***********************  Obsługa zapisu na SD 
 
Sub Write_to_sd() 
Local Errorcode As Byte                                     ''() 
     Gbdriveerror = Driveinit() 
    If Gbdriveerror = 0 Then 
      Errorcode = Initfilesystem(1) 
      If Errorcode <> 0 Then 
         Blad_sd = 1 
      Else 
         Reset Sd_dioda                                     'Zapala diodę LED 
         Open "pomiar.txt" For Append As #2                 'otwórz plik pomiar.txt aby dopisać dane 
         Write #2 , Data_pcf , "," , Czas_pcf , "," , "Pokoj" , Ss1 , "," , "Kaloryfer" , Ss2 , "," , "Zewnatrz" , Ss3       'zapisz dane: data, czas , odczyt temperatury 
         Flush #2                                           'zapisz bufor pliku na karcie SD 
         Close #2                                           'zamknij kanał transmisji sprzętowego urządzenia 
         Blad_sd = 0                                        'ustaw zmienna na 0 
         Set Sd_dioda                                       'zgaś diodę LED 
      End If 
    Else 
      Reset Sd_dioda                                        'zapala diodę LED 
      Blad_sd = 1 
   End If 
 
End Sub                                                     ' Write_to_sd() 
 
'*********************** Podprogram określający kiedy dokonać pomiarów oraz zapisu na SD 
 
Sub Pomiar 
If S = 0 Or S = 30 Then                                     'jeśli sekundy wynoszą 0 lub 30 
 
      Reset Dioda                                           'Zapala diodę LED 
      Call Gettime()                                        'Skocz do podprogramu pobierania czasu z pcf8583 
      Call Ds_odczyt1                                       'Skocz do podprogramu odczytu temperatury z DS18b20 
      Call Ds_odczyt2                                       'Skocz do podprogramu odczytu temperatury z DS18b20 
      Call Ds_odczyt3                                       'Skocz do podprogramu odczytu temperatury z DS18b20 
 
      If M = 0 Or M = 5 Or M = 10 Or M = 15 Or M = 20 Or M = 25 Or M = 30 Or M = 35 Or M = 40 Or M = 45 Or M = 50 Or M = 55 Then       'Jeśli minuty = np. 10 to idzie zapisać wynik na SD 
         If S = 0 Then 
            If Zapisano = 0 Then 
               Call Write_to_sd()                           'Idzie zapisać wyniki 
               Zapisano = 1                                 'Ustawia flaga zapisania na SD 
            End If 
         End If 
      End If 
      Set Dioda                                             'Gasi diodę LED 
End If 
 
If S = 10 Then                                              'jeśli sekundy wynoszą 10 
   If Zapisano = 1 Then                                     'Jeśli zmienna zapisano (na SD) wynosi 1 
      Zapisano = 0                                          'Wtedy ustaw 0 
   End If 
End If 
 
End Sub
 
---------------------------data I godzina
Dim S As Byte                                               'sekunda
Dim M As Byte                                               'minuta
Dim K As Byte                                               'pomocnicza
Dim G As Byte                                               'godzina
Dim P As Bit                                                'chyba pomocnicza :D
Dim R As Integer                                            ' rok
Dim Mi As Byte                                              'miesiac
Dim D As Byte                                               'dzien
Dim Y As Byte                                               'yogi i bubu :D  nie mam zielonego pojecia po co tego uzylem
Dim Dd As String * 3 , Md As String * 3                     'dzien slownie
Dim Dmax As Byte                                            'dlugosc miesiaca
Dim Dl As Integer                                           ' chyba pomocnicza
Dim A As Byte , B As Byte , C As Byte                       ' pomocnicze zmienne
Dim Z As Integer
Dim Dz As Integer
Dim Dy As Single
 Dim Ddd As Byte
Config Pind.7 = Input
Config Pinb.0 = Input
Portd.7 = 1
Portb.0 = 1
Zmien Alias Pind.7
Nastepny Alias Pinb.0
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
 
Config Timer1 = Timer , Prescale = 256
Enable Interrupts
Enable Timer1
On Timer1 Mierzymy
Cursor Off
Start:
K = 0
G = 0
M = 0
S = 0
R = 2005
D = 1
Mi = 1
-------------------------------
Cls
Lcd "   Ustawienia   "
Lowerline
Lcd "     zegara     "
Wait 2
 
'---------------------wpisywanie roku
 
Petla:
   Cls
   Lcd "Rok "
   Lcd R
   Waitms 500
   Debounce Nastepny , 0 , Petla1
   If Zmien = 0 Then
            R = R + 1
 
      End If
   Goto Petla
'-----------------------------wpisywanie miesiaca
 
 
Petla1:
   Cls
   Lcd "Miesiac "
   Lcd Mi
   Waitms 500
   Debounce Nastepny , 0 , Petla2
   If Zmien = 0 Then
            Mi = Mi + 1
      If Mi > 12 Then
      Mi = 1
 
      End If
 
   End If
   Goto Petla1
'-------------------------- wpisywanie dni
 
 
Petla2:
   Gosub Iledni
   Cls
   Lcd "Dzien "
   Lcd D
   Waitms 500
   Debounce Nastepny , 0 , Petla3
   If Zmien = 0 Then
            D = D + 1
      If D > Dmax Then
      D = 1
 
      End If
 
   End If
   Goto Petla2
'-------------------godzina
 Petla3:
   Cls
   Lcd "Godzina "
   Lcd G
   Waitms 500
   Debounce Nastepny , 0 , Petla4
   If Zmien = 0 Then
            G = G + 1
      If G > 23 Then
      G = 0
   End If
   End If
   Goto Petla3
  '-------------------minuty
 Petla4:
   Cls
   Lcd "Minuty "
   Lcd M
   Waitms 500
   Debounce Nastepny , 0 , Dalej
   If Zmien = 0 Then
            M = M + 1
      If M > 59 Then
      G = 0
   End If
   End If
   Goto Petla4
Dalej:
 
 Cls
Lcd "     Koniec     "
Lowerline
Lcd "    ustawien    "
Wait 3
Cls
 
 
 
 
 
 
 
Start Timer1
'------------------koniec ustawiania
 
 
Do
Upperline
Lcd "    "
Gosub Jakidzien
If G < 10 Then
   Lcd "0"
   End If
   Lcd G
 
Lcd ":"
If M < 10 Then
Lcd "0"
End If
Lcd M
Lcd ":"
If S < 10 Then
Lcd "0"
End If
Lcd S
Lcd " "
'+--------------------dolna linijka
 
Lowerline
Gosub Jakimiesiac
 
Lcd Dd
Lcd "  "
If D < 10 Then
Lcd " "
End If
Lcd D
Lcd " "
Lcd Md
Lcd " "
Lcd R
 
Lcd "     "
Gosub Jakirok
 
 Waitms 400
Loop
 
 
'-------------------------------
Mierzymy:
 
Timer1 = 36735
Incr S
If S = 60 Then
   S = 0
   Incr M
   If M = 60 Then
      M = 0
      Incr G
       If G = 24 Then
        S = 00
        M = 00
        G = 00
        Incr D
          Incr Ddd
           If D > Dmax Then
            D = 1
             Incr Mi
            Ddd = 0
              If Mi > 12 Then
              Mi = 1
              Incr R
             End If
           End If
 
       End If
   End If
End If
 
 
Return
'---------------------------------
 
Iledni:
Gosub Jakirok
Select Case Mi
    Case 1 : Dmax = 31
    Case 3 : Dmax = 31
    Case 5 : Dmax = 31
    Case 7 : Dmax = 31
    Case 8 : Dmax = 31
    Case 10 : Dmax = 31
    Case 12 : Dmax = 31
    Case 2 : Dmax = 28 + Dl
    Case Else : Dmax = 30
  End Select
  Return
 '--------------------------------------nazwa miesiaca
Jakimiesiac:
 
 Select Case Mi
   Case 1 : Md = "Sty"
    Case 2 : Md = "Lut"
   Case 3 : Md = "Mar"
    Case 4 : Md = "Kwi"
    Case 5 : Md = "Maj"
    Case 6 : Md = "Cze"
    Case 7 : Md = "Lip"
     Case 8 : Md = "Sie"
    Case 9 : Md = "Wrz"
   Case 10 : Md = "Paz"
    Case 11 : Md = "Lis"
    Case 12 : Md = "Gru"
 
End Select
 
 
Return
 
 
Jakirok:
   A = R Mod 4
   B = R Mod 100
   C = R Mod 400
     If A = 0 And B <> 0 Or C = 0 Then
       Dl = 1
     Else
    Dl = 0
End If
Return
 
 
 
Jakidzien:
  Dz = 0
  Dy = 0
  Z = 0
 
  If Mi < 3 Then
  Z = R - 1
  Else
  Z = R
    End If
  If Mi >= 3 Then
  C = 2
  Else
  C = 0
  End If
 
  Dz = 23 * Mi
    Dy = Dz / 9
   Dz = Int(dy)
   Dz = Dz + D
   Dz = Dz + 4
   Dz = Dz + R
   Dy = Z / 4
   Dz = Dz + Int(dy)
   Dy = Z / 100
   Dz = Dz - Int(dy)
   Dy = Z / 400
   Dz = Dz + Int(dy)
   Dz = Dz - C
   Z = Dz
   Ddd = Z Mod 7
 
   Select Case Ddd
    Case 0 : Dd = "Czw"
    Case 1 : Dd = "Pia"
    Case 2 : Dd = "Sob"
    Case 3 : Dd = "Nie"
    Case 4 : Dd = "Pon"
    Case 5 : Dd = "Wto"
    Case 6 : Dd = "Sro"
    End Select
  Return
 
 
End
-------------------------czujniki temp
Dim I1 As Integer , Ss As String * 6 
Dim I2 As Integer 
Dim Dsid1(8) As Byte 
Dim Dsid2(8) As Byte                                        'deklaracja zmiennej do odczytu kodów ID 
Dim Dsid3(8) As Byte
Dim Dsid4(8) As Byte
Dim Dsid5(8) As Byte
Dim W As Byte 
Dim B As Byte                                               'deklaracja zmiennej do odczytu ilośc czujników 
W = 1wirecount() 
Cls 
Locate 1 , 1 
Lcd W 
Wait 1 
Cls 
Curssor off
cls
lcd "growbox 2013"
wait 5
cls
lcd "Welcome"
lcd "ilość czujników:"
waitms 500
cld w
wait 3
cls
Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu 
Dsid2(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu 
Dsid3(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu 
Dsid4(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu 
 
 
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             'znak stopnia Celsjusza 
 
   1wreset 
   1wwrite &H55 
   1wverify Dsid1(1)                                        'wysyłamy adres pierwszego czujnika 
   1wwrite &HBE 
   I1 = 1wread(5) 
'--------------------------------- 
   1wreset 
   1wwrite &H55 
   1wverify Dsid2(1)                                        'wysylam adres drugiego czujnika 
   1wwrite &HBE 
   I2 = 1wread(5)
 
 1wreset 
   1wwrite &H55 
   1wverify Dsid3(1)                                        'wysylam adres drugiego czujnika 
   1wwrite &HBE 
   I2 = 1wread(5) 
 1wreset 
   1wwrite &H55 
   1wverify Dsid4(1)                                        'wysylam adres drugiego czujnika 
   1wwrite &HBE 
   I2 = 1wread(5)
 
------------------------------czujnik wilgotności
Dim I As Byte , Tmp As Byte
Dim J As Byte
Dim Mybyte As Byte
Dim Wenshi As String * 40
Dim Tmp_str8 As String * 8
Dim Count As Byte
 
Enable Interrupts
 
Set Dht_io_set
Set Dht_put
 
 
 
 
Sub Get_wenshidu(wendu As Byte , Shidu As Byte)
 
   Count = 0
   Wenshi = ""
   Set Dht_io_set
   Reset Dht_put
   Waitms 20
 
 
   Set Dht_put
   Waitus 40
   Reset Dht_io_set
   Waitus 40
   If Dht_get = 1 Then
      Shidu = 255
      Exit Sub
   End If
 
   Waitus 80
   If Dht_get = 0 Then
      Shidu = 255
      Exit Sub
   End If
 
   While Dht_get = 1 : Wend
 
   Do
      While Dht_get = 0 : Wend
 
      Waitus 30
      If Dht_get = 1 Then
         Wenshi = Wenshi + "1"
         While Dht_get = 1 : Wend
         Else
         Wenshi = Wenshi + "0"
      End If
      Incr Count
   Loop Until Count = 40
 
   Set Dht_io_set
   Set Dht_put
 
 
   Tmp_str8 = Left(wenshi , 8)
   Shidu = Binval(tmp_str8)
 
 
   Tmp_str8 = Mid(wenshi , 17 , 8)
   Wendu = Binval(tmp_str8)
 
 
   Tmp_str8 = Right(wenshi , 8)
   Tmp = Binval(tmp_str8)
 
   Mybyte = Wendu + Shidu
   If Mybyte <> Tmp Then
      Shidu = 255
   End If
End Sub
 
 
---------------------------grzałki
If grzałka1 = 35>38
Reset grzałka1
Else
If grzałka1=30
Set grzałka
End if
If grzałka2=35>38
Reset grzałka2
Else
If grzałka2=30
Set grzałka2
End if
If grzała3=30>34
Reset grzała
Else
If grzała3=26
Set grzałka3
End if
If Grzała4=20>25
Reset grzałka4
Else
If Grzała4=15
Set grzałka4
End if
---------------------pomopa2
If wilgotnosc >45-55  (65-80%)
Reset pompa1
Else
If wilgotność >42
Set pompa2
End if
Else
If Wilgotność <55
Reset pompa2
 
--------------Podlewanie pompa1

Awatar użytkownika
kayron
Użytkownik
Posty: 2086
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 04 lip 2013, 21:37

Kolega od szklarni, jak pamięć nie myli :).
A ostrzegałem że robienie samemu sterownika na procesorze, to pewna droga w maliny.
Ale skoro podjął kolega wyzwanie, to tak.
1. budowanie programu z kawałków kodu, różnych ludzi to pewna droga do nikąd. Najpierw musisz mieć sprzęt, potem możesz pisać pod niego program. W dodatku musisz mieć pojęcie o tym, to nie są klocki LEGO.
2. PCF to nie jest najszczęśliwszy układ RTC. Popularny, ale toporny w programowaniu.
3. wybór procesora to nie jest taka prosta sprawa, bez specyfikacji czujników układów wykonawczych, to praktycznie nie możliwe. Dodatkowo i tak pewnie będziesz musiał go obudować dodatkowymi układami.

Ta bym sie zastanowił jeszcze. TUTAJ masz tanie sterowniki, z instrukcjami po polsku. 500zł za sterownik to praktycznie za darmo jest.

Awatar użytkownika
joon
Użytkownik
Posty: 2078
Rejestracja: 30 cze 2007, 22:56
Lokalizacja: Kraków, Przemyśl, Warszawa
Kontakt:

Post autor: joon » 04 lip 2013, 21:58

Nie przesadzajmy, po nauce 4 miesięcznej w c jestem (tak mi się wydaje) napisać odpowiedni program ;)
Ale dobrze napisałeś: bez znajomości procesora i jego "wnętrza" bez posiadania wiedzy o zastosowanym sprzęcie i jego możliwościach to porywanie się z motyką na szklarnie ;D

Awatar użytkownika
matrix
Użytkownik
Posty: 1805
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 05 lip 2013, 15:32

Podstawowe pytanie jakie się rodzi to ile musisz obsłużyć wyjść i ile wejść łacznie z RTC ?

Awatar użytkownika
kayron
Użytkownik
Posty: 2086
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 06 lip 2013, 20:52

Tak patrząc po programie, a raczej jego zarysie, to kolega potrzebuje procesor, z przynajmniej 2KB RAMu, bo chce obsługiwać MMC/SD, wyświetlacz pewnie też by chcial graficzny, w miarę mozliwość, więc FLASHU powinno być MIN 32KB, a lepiej 64KB. Czyli potrzebna jest co najmniej ATMega 32, taktowana 16MHz biorąc pod uwagę BASCOMa.
Koszty w AVT:
ATMEGA 32 - 20zł
LCD 4x16 - ok 20zł, zależy jaki chce, ale taki by musiał być, żeby czytelnie coś wyświetlić.
Jakaś tam drobnica do otoczenia CPU liczmy też 20zł
PCF8583 - 5,50zł
Trafo do druku ok 10zł
Triaki, opto-triaki i reszta badziejstwa do sterowania mocą, liczmy że razem z 50zł.
Elementy inne, jak DS1820 x2 - 11zł + coś tam co może być potrzebne 40zł, to daje kolejne 50zł.
Materiały do zrobienia PCB liczmy 30zł.
WOW - prawie 220zł + plus czas na zrobienie tego i oprogramowanie, czyli niewycenialne.
Sądzę że to nie jest koszt minimalny.
Dla kontrastu za 230zł można już kupić termoregulator, który spokojnie może sterować klimatyzacją, ma PID, wyjście alarmu, dwa wyjścia sterujące, i może współpracować z szeroką gamą czujników temperatury.

Awatar użytkownika
Pikczu
Użytkownik
Posty: 755
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 07 lip 2013, 14:22

Zgadzam się Kayronem.
Warto zastanowić się nad sterownikiem PLC cały hardware masz już gotowy.
Projektując od początku nie skończy się na jednej płytce PCB na pewno popełnisz jakiś błąd lub w trakcie programowania wyjdzie ze jednak nie na tej nodze masz podpięty ten lub inny układ wej?wyj.

Awatar użytkownika
kayron
Użytkownik
Posty: 2086
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 07 lip 2013, 17:41

Tzn. TAK. Doświadczony konstruktor pewnie sobie z tym poradzi, natomiast początkujący, prędzej czy później zastrzeli się przy temu. No chyba że jest tak zdeterminowany, aby dojść do końca.

Ja osobiście najwięcej obaw mam przy czujnikach temperatury. Nie wiem czy taki DS1820, będzie dobrze działał na przewodzie o długości do 10m, bo z takimi długościami należy się liczyć.

Szczerze sam bardzo nie wiem jak się za to zabrać, aby w maliny nie poleźć.
inna sprawa, że aby to zbudować, trzeba mieć, zaplecze, a do diagnostyki ewentualnych uszkodzeń, też jest potrzebny sprzęt i umiejętności.
Na nawet najprostszym sterowniku jak widać na załączonym obrazku zrobienie podlewania w szklarni to raptem 4 bloczki, wraz z komunikatem alarmu działania pompy. Zajęło mi to może z 7 minut, bo musiałem poznać program.
Po przeczytaniu TEJ Dokumentacji można praktycznie bez problemu zaprojektować samemu sterowanie na sterowniku o którym wspominałem wcześniej.
Całość po Polsku oczywiście.
Załączniki
Szklarnia.jpg

Manerus
-
Posty: 52
Rejestracja: 05 cze 2011, 20:31
Lokalizacja: Wrocław

Post autor: Manerus » 08 lip 2013, 11:34

W odpowiedzi na pytanie kolegi matrixa

potrzebuje 10 wejść i wyjść dla urządzeń plus klawiatura ( 4 przyciski ) lcd 4x40 czujniki ds (5) sht(1) lub dht(1)

A propo lcd
Czy jest wiekszy ? widziałem gdzieś na elektrodzie że ktoś podpiął normalny monitor i miał podzielone temp wilg czas itp to fajna opcja :wink:


Ja już wiem że na pewno nie wyjdzie za pierwszym razem sterownik, jak to tutaj kolega powiedział jestem początkującym ale już trawiłem 3 płytki z tego każda miała jakieś braki w ścieżce , może samą robotę wykonania płytki zleciłbym komuś na politechnice za 1 lub 2 flaszki ? :mrgreen:

pytam się was czy ta "sklejka" będzie działać oraz czy piny w atmega32/64
( lub nawet axtmega64 bo widziałem że ma więcej pinów ) to mogę tylko dawać na adc czy na większość ? bo jeżeli atmega ma tylko 8 wejść i wyjść adc to braknie mi 2 co za tym idzię będę musiał dodać jeszcze jedną atmege/attiny ?

Kolega Kayron jak zawsze pomocny :cool: te sterowniki na stronie są tanie i wystarczające I BARDZO CI DZIĘKUJE że podałeś te strony bo coś sobie napewno wybiorę

Ale brakuje jednej dla mnie bardzo ważnej opcji zapis czynności które program wywołuje (przed wszystkim zapis temperatur)
jest tylko sterownik na 8 urządzeń max za mało

jakaś część tego sterownik będę musiał wykonać chociażby dla 2 urządzeń

Ale jest też coś więcej nawet jakbym musiał wydać tysiąc to chciałbym móc zrobić ten sterownik bo spełnia moje oczekiwania ale nie ukrywam że liczę na pomoc forum bo całkowicie sam popełnił bym DUŻO więcej błędów i być może bym się zniechęcił co tym bardziej by mnie drażniło że poszedł czas na marne

Pozdrawiam

Awatar użytkownika
kayron
Użytkownik
Posty: 2086
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 08 lip 2013, 14:16

Kolega Kayron jak zawsze pomocny :cool: te sterowniki na stronie są tanie i wystarczające I BARDZO CI DZIĘKUJE że podałeś te strony bo coś sobie napewno wybiorę
Ależ proszę :).
Ale brakuje jednej dla mnie bardzo ważnej opcji zapis czynności które program wywołuje (przed wszystkim zapis temperatur)
Żaden problem wystarczy, panel HMI z MMC/SD, tylko niestety cena zaporowa. :( Natomiast tanie panele mają funkcję rysowania wykresu, dowolnej zmiennej, więc monitorowanie temperatury jak najbardziej jest osiągalne.
jest tylko sterownik na 8 urządzeń max za mało
Ale jest do niego dostępny moduł rozszerzeń co daje 16 wyjść i 20 wejść.
Reasumując diabeł tkwi w szczegółach. Postaram sie znaleźć taki sterownik i panel który ci to zrealizuje co chcesz, bez MMC/SD, ale i tak moim zdaniem w atrakcyjny sposób bo graficzny.
Załączniki
Sample.jpg
Jak widać można zbierać dane nie mając MMC/SD i je wyświetlać.

Awatar użytkownika
matrix
Użytkownik
Posty: 1805
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 08 lip 2013, 15:38

Jeśli dobrze wyliczyłem to potrzeba Ci 32 we/wy co atmega32 spełni ale na styk i bez obsługi kart czy innej pamięci zewnętrznej a o zegarze RTC nie wspomnę. Natomiast ja czegoś takiego na przykład nie preferuję (na styk).
W związku z czym proponuję atmega64, choć tu jeśli zaczniesz rozwijać program to żeby pamięci Ci nie zabrakło.

Awatar użytkownika
Pikczu
Użytkownik
Posty: 755
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 08 lip 2013, 16:20

Polecam od razu skoczyć na coś większego.
Możesz wybrać gotowy moduł np TEN ARDUINO 2560 z mega256 na pokładzie w cenie 14 dolarów nie ma szans żebyś zrobił to taniej i zaoszczędzisz sporo czasu.
----------------------Edit-----21:19 --------------------
Znalazłem troszkę czasu i przeczytałem kod masakra taka ze klękajcie narody
wyraźnie widać ze sklejany na żywca nie ma prawa działać
wypadało by dodać źródła z kąd te kody są.
najlepiej wywal wszytko i zacznij od nowa.

Manerus
-
Posty: 52
Rejestracja: 05 cze 2011, 20:31
Lokalizacja: Wrocław

Post autor: Manerus » 09 lip 2013, 1:50

najlepiej wywal wszytko i zacznij od nowa.
WoW Pikczu na serio nic nie da rady z tym zrobić ??

Rozumiem że to jest sklejka i że kolejność może jest jakaś nieprawidłowa albo brakuje opcji do...loop albo są jakieś śmieszne znaki przez które program nie może być realizowany ale .... OD NOWA ? piny to pestka ale to co znalazłem z opisu autorów starczyło mi jak mam do licha to samo ale inaczej ?

Awatar użytkownika
matrix
Użytkownik
Posty: 1805
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 09 lip 2013, 5:42

Chodzi o to że jak zaczniesz od nowa to ogarniesz cały kod i będziesz wiedział gdzie co jest. W tej chwili to tylko zlepek, jak się coś wysypie to godzinami będziesz szukał.

Awatar użytkownika
Pikczu
Użytkownik
Posty: 755
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 09 lip 2013, 10:01

Zacznij od nowa, to mus mieć sens nie można tego tak po prostu wkleić.
Każdy ma swój sposób pisania i żeby użyć czyjegoś kodu musisz go najpierw zrozumieć
a co dopiero jak masz trzy takie kody zwyczajnie polegniesz i mocno się zniechęcisz.
Użyj tych kodów ale w mądry sposób.
wybierz sobie konkretne procedury a nie przeklejaj wszystkiego.

Awatar użytkownika
kayron
Użytkownik
Posty: 2086
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 09 lip 2013, 14:43

Kolejność jest taka, tworzenia programu i sprzętu.
1. Określić potrzeby i wybrać sprzęt. Ja bym ci proponował ATMegę 128. Jest to doże opisany procesor, także w BASCOMie., ma wystarczająco pinów, pamięci. Oradżam Arduina, to raczej sa zestawy edukacyjne, i ciężko to zaadaptować.
2. Stworzyć schemat elektryczno, funkcyjny.
3, Stworzyć schemat funkcyjny programu.
4. Rozpocząć pisanie programu, metoda małych bolków. Przy czym w twoim przypadku program będzie musiał, mieć cechy RTOS, czyli systemu operacyjnego ze względu na MMC. w bascomie bardzo dużo roboty przy tym będzie, a i wydajnośc będzie licha, lepszy byłby C do tego.

ODPOWIEDZ