Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[mega8][bascom] Pomoc w sprawidzeniu kodu.

superhiro2 15 Jan 2011 14:58 1784 14
  • #1
    superhiro2
    Level 15  
    Pisze sterownik wytrawiarki. Napisałem część bez pompki napowietrzającej. Proszę kogoś doświadczonego o sprawdzenie czy nie ma w nim błędów.

    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000

    Dim A As Byte                                               'obecna
    Dim D As Byte                                               'zadana
    D = 40
    Dim E As Byte
    E = 120                                                     'czas

    Pinb.1 = Input                                              'up temperatura
       Reset Pinb.1 = 0
    Pinb.2 = Input                                              'down temperatura
       Reset Pinb.2 = 0
    Pinb.3 = Input                                              'czas +
       Reset Pinb.3 = 0
    Pinb.4 = Input                                              'czas -
       Reset Pinb.4 = 0
    Pinb.5 = Output                                             'buzzer
       Reset Pinb.5 = 0
    Pinb.6 = Input                                              'grzalka na przekaznik
       Reset Pinb.6 = 0

    Deflcdchar 0 , 32 , 32 , 7 , 4 , 4 , 31 , 14 , 4            'do konca
    Deflcdchar 1 , 4 , 10 , 10 , 10 , 10 , 17 , 31 , 14         'temperatura
    Deflcdchar 2 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32           'zank stopnia
    Deflcdchar 3 , 14 , 17 , 21 , 21 , 23 , 17 , 17 , 14        'zegar do czasu
    Cls                                                         'czyszcenie po definiowaniu


    If Pinb.1 = 1 Then D + 1
    Waitms 80
    End If
    If Pinb.2 = 1 Then D - 1
    Waitms 80
    End If

    If Pinb.3 = 1 Then E + 20
    Waitms 80
    End If
    If Pinb.4 = 1 Then E - 20
    Waitms 80
    End If

    Do E -1 Wait 1 Loop [until E = 0]
    If E = 0 Then Pinb.5 = 1 Wait 2
    End If



    If E > 1 Then Pinb.6 = 1
    Elseif E = 0 Then Pinb.6 = 0
    End If

    '**************właczenie przetwornika****************

    Config Adc = Single , Prescaler = Auto , Reference = Internal

    A = Getadc(0) * 3                                           'odczyt z kanału 0 razy 3

    '*****************CONFIG LCD*******************
    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

    '******************powitanie********

    Cls
    Locate 1 , 5
    Lcd "Witamy"
    Waitms 350
    Cls

    '******LCD*******************
    Locate 1 , 1
    Lcd Chr(1)
    Locate 1 , 3
    Lcd A
    Locate 1 , 5
    Lcd Chr(2) ; "C"
    Locate 1 , 8
    Lcd D
    Locate 2 , 1
    Lcd Chr(3)
    Locate 2 , 3
    Lcd E
    Locate 2 , 7
    Lcd Chr(0)
    Locate 2 , 9
    If E > 0 Then Lcd "run"                                     'grzalka on
    Elseif E = 0 Then Lcd "no run"                              'grzelka off


    Dodam że dopiero zaczynam pisać programy z książką M. Wiazania.
  • #2
    Wojtek75
    Level 24  
    Kod jak malowany tyle, że bez sensu. Gdzie ty tam w książce bądź helpie widzisz takie kwiatki?
    Code:
    Pinb.1 = Input


    Code:
    Do E -1 Wait 1 Loop [until E = 0]


    Code:
    A = Getadc(0) * 3                                           'odczyt z kanału 0 razy 3

    itd... itp...
    Składnia na razie leży na całej linii.
    Z Ds'm układu też się zapoznaj rejestry PINx w m8 są tylko do odczytu więc takie coś:
    Code:
    Reset Pinb.1 = 0

    również ci nie przejdzie.
  • #3
    Krauser
    Level 26  
    1.
    Code:
    Pinb.1 = Input 
    ma być
    Code:
    Config Pinb.1 = Input

    2.
    Code:
    Reset Pinb.1 = 0
    co właściwie chcesz zrobić
    3.
    Code:
    If Pinb.1 = 1 Then D + 1
    itp. ja bym dał
    Code:
    D = D + 1

    4. Gdzie jest pętla główna programu?
    5. Z której książki korzystasz?
  • #4
    alien_audio
    Level 21  
    Poprawiłem zgrubnie kod oczywiście tylko ze względu na składnie, należy jeszcze
    popracować i ująć pętlę główną tak aby program wykonywał sie w kółko.




    Code:


     $regfile = "m8def.dat"
    $crystal = 8000000

    Dim A As Byte                                               'obecna
    Dim D As Byte                                               'zadana
    D = 40
    Dim E As Byte
    E = 120                                                     'czas

    Config Pinb.1 = Input                                       'up temperatura
       Reset Portb.1
       Config Pinb.2 = Input
                                          'down temperatura
       Reset Portb.2
    Config Pinb.3 = Input                                       'czas +
       Reset Portb.3
    Config Pinb.4 = Input                                       'czas -
       Reset Portb.4
    Config Portb.5 = Output                                     'buzzer
       Reset Portb.5
    Config Pinb.6 = Input                                       'grzalka na przekaznik
       Reset Portb.6

    Deflcdchar 0 , 32 , 32 , 7 , 4 , 4 , 31 , 14 , 4            'do konca
    Deflcdchar 1 , 4 , 10 , 10 , 10 , 10 , 17 , 31 , 14         'temperatura
    Deflcdchar 2 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32           'zank stopnia
    Deflcdchar 3 , 14 , 17 , 21 , 21 , 23 , 17 , 17 , 14        'zegar do czasu
    Cls                                                         'czyszcenie po definiowaniu


    If Pinb.1 = 1 Then
    D = D + 1
    Waitms 80
    End If

    If Pinb.2 = 1 Then
    D = D - 1
    Waitms 80
    End If

    If Pinb.3 = 1 Then
    E = E + 20
    Waitms 80
    End If

    If Pinb.4 = 1 Then
    E = E - 20
    Waitms 80
    End If


    'Do E -1 Wait 1 Loop [until E = 0]     ' nalezy zmienic zła składnia .


    If E = 0 Then
    Portb.5 = 1
    Wait 2
    End If

    If E > 1 Then
    Portb.6 = 1
    Else
    if E = 0 Then Pinb.6 = 0
    End If

    '**************właczenie przetwornika****************

    Config Adc = Single , Prescaler = Auto , Reference = Internal

    A = Getadc(0) * 3                                           'odczyt z kanału 0 razy 3

    '*****************CONFIG LCD*******************
    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

    '******************powitanie********

    Cls
    Locate 1 , 5
    Lcd "Witamy"
    Waitms 350
    Cls

    '******LCD*******************
    Locate 1 , 1
    Lcd Chr(1)
    Locate 1 , 3
    Lcd A
    Locate 1 , 5
    Lcd Chr(2) ; "C"
    Locate 1 , 8
    Lcd D
    Locate 2 , 1
    Lcd Chr(3)
    Locate 2 , 3
    Lcd E
    Locate 2 , 7
    Lcd Chr(0)
    Locate 2 , 9
    If E > 0 Then
    Lcd "run"                                                   'grzalka on
    Else
    If E = 0 Then Lcd "no run"                                  'grzelka off
    End If

  • #5
    superhiro2
    Level 15  
    No może trochę lepiej:

    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000

    Do

    Dim A As Byte                                               'obecna
    Dim D As Byte                                               'zadana
    D = 40
    Dim E As Byte
    E = 240                                                     'czas

    Config Pinb.1 = Input                                       'up temperatura
        Pinb.1 = 1
    Config Pinb.2 = Input                                       'down temperatura
        Pinb.2 = 1
    Config Pinb.3 = Input                                       'czas +
        Pinb.3 = 1
    Config Pinb.4 = Input                                       'czas -
        Pinb.4 = 1
    Config Pinb.5 = Output                                      'buzzer
        Pinb.5 = 1
    Config Pinb.6 = Input                                       'grzalka na przekaznik
        Pinb.6 = 1
    Config Pinb.7 = Input                                       'pompka powietrza
        Pinb.7 = 1

    Deflcdchar 0 , 32 , 32 , 7 , 4 , 4 , 31 , 14 , 4            'do konca
    Deflcdchar 1 , 4 , 10 , 10 , 10 , 10 , 17 , 31 , 14         'temperatura
    Deflcdchar 2 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32           'zank stopnia
    Deflcdchar 3 , 14 , 17 , 21 , 21 , 23 , 17 , 17 , 14        'zegar do czasu
    Cls                                                         'czyszcenie po definiowaniu


    If Pinb.1 = 0 Then D = D + 1
    Waitms 80
    End If

    If Pinb.2 = 0 Then D = D - 1
    Waitms 80
    End If

    If Pinb.3 = 0 Then E = E + 20
    Waitms 80
    End If
    If Pinb.4 = 0 Then E = E - 20
    Waitms 80
    End If

    Do E - 1 Wait 1 Loop Until E = 0

    If E = 0 Then Pinb.5 = 0 Wait 2 Pinb.5 = 1
    End If

    If E > 1 ; D > A Then Pinb.6 = 0
    Elseif E = 0 ; D <= A Then Pinb.6 = 1
    End If

    If E > 0 Then Pinb.7 = 0
    Elseif E = 0 Then Pinb.7 = 1
    End If

    '**************właczenie przetwornika****************

    Config Adc = Single , Prescaler = Auto , Reference = Internal



    Dim T As Word
    Dim T1 As Single
    Dim T2 As String * 3

    A = T2

    Start Adc
    Do
       T = Getadc(0)                                            'odczyt z kanału 0
       T1 = T * 0.0049
       T2 = Fusing(t1 , * * )
       Waitms 80
    Loop

    '*****************CONFIG LCD*******************
    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

    '******************powitanie********

    Cls
    Locate 1 , 5
    Lcd "Witamy"
    Waitms 350
    Cls

    '******LCD*******************
    Locate 1 , 1
    Lcd Chr(1)
    Locate 1 , 3
    Lcd A
    Locate 1 , 5
    Lcd Chr(2) ; "C"
    Locate 1 , 8
    Lcd D
    Locate 2 , 1
    Lcd Chr(3)
    Locate 2 , 3
    Lcd E
    Locate 2 , 7
    Lcd Chr(0)
    Locate 2 , 9
    If E > 0 Then Lcd "run"                                     'grzalka on
    Elseif E = 0 Then Lcd "no run"                              'grzelka off

    Loop


    A i do C raczej nie przejdę bo ja go nie mogę jakoś załapać.
  • #6
    piotrva
    VIP Meritorious for electroda.pl
    Matko przenajświętsza....
    ujmę to krótko: masakra...
    to nawet nie ma prawa działać....
    jest tyle błędów składni bascoma, że aż oczopląsu dostaję...
    1. po co w pętli głównej ujmujesz deklaracje zmiennych, konfigurację pinów??
    2. co to jest?
    Code:
    Do E - 1 Wait 1 Loop Until E = 0 
    to nie ma prawa działać
    3. po co odczyt z przetwornika w pętli? tu program się zawiesi i nie ruszy dalej....
    4. konfiguracje wszystkich peryferiów (lcd, przetwornik) też przed pętlę główną...
    5. po co powitanie w pętli głównej??
    (...)
    i tak dalej...
    radzę zacząć od nauki podstaw bascoma, krok po kroku, bo kolega rzuca się na głęboką wodę i niby jakieś tam pojęcie o tym i tamtym ma, ale sklejenie tego w całość to dramat...
  • #7
    superhiro2
    Level 15  
    Oj powiedz co poprawić bo 30% jest dobrze.:?:

    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000


    Dim A As Byte                                               'obecna
    Dim D As Byte                                               'zadana
    D = 40
    Dim E As Byte
    E = 240                                                     'czas

    Config Pinb.1 = Input                                       'up temperatura
        Pinb.1 = 1
    Config Pinb.2 = Input                                       'down temperatura
        Pinb.2 = 1
    Config Pinb.3 = Input                                       'czas +
        Pinb.3 = 1
    Config Pinb.4 = Input                                       'czas -
        Pinb.4 = 1
    Config Pinb.5 = Output                                      'buzzer
        Pinb.5 = 1
    Config Pinb.6 = Input                                       'grzalka na przekaznik
        Pinb.6 = 1
    Config Pinb.7 = Input                                       'pompka powietrza
        Pinb.7 = 1

    Deflcdchar 0 , 32 , 32 , 7 , 4 , 4 , 31 , 14 , 4            'do konca
    Deflcdchar 1 , 4 , 10 , 10 , 10 , 10 , 17 , 31 , 14         'temperatura
    Deflcdchar 2 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32           'zank stopnia
    Deflcdchar 3 , 14 , 17 , 21 , 21 , 23 , 17 , 17 , 14        'zegar do czasu
    Cls                                                         'czyszcenie po definiowaniu


    If Pinb.1 = 0 Then D = D + 1
    Waitms 80
    End If

    If Pinb.2 = 0 Then D = D - 1
    Waitms 80
    End If

    If Pinb.3 = 0 Then E = E + 20
    Waitms 80
    End If
    If Pinb.4 = 0 Then E = E - 20
    Waitms 80
    End If

    Do E = E - 1 Wait 1 Loop Until E = 0

    If E = E = 0 Then Pinb.5 = 0 Wait 2 Pinb.5 = 1
    End If

    If E > 1 ; D > A Then Pinb.6 = 0
    Elseif E = 0 ; D <= A Then Pinb.6 = 1
    End If

    If E > 0 Then Pinb.7 = 0
    Elseif E = 0 Then Pinb.7 = 1
    End If


    '*****************CONFIG LCD*******************
    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

    '******************powitanie********

    Cls
    Locate 1 , 5
    Lcd "Witamy"
    Waitms 350
    Cls


    '**************właczenie przetwornika****************

    Config Adc = Single , Prescaler = Auto , Reference = Internal



    Dim T As Word
    Dim T1 As Single
    Dim T2 As String * 3

    A = T2

    Start Adc

    '*************ODCZYT(lm35)*********************

    Do

       T = Getadc(0)                                            'odczyt z kanału 0
       T1 = T * 0.0049
       T2 = Fusing(t1 , * * )
       Waitms 80



    '******LCD*******************
    Locate 1 , 1
    Lcd Chr(1)
    Locate 1 , 3
    Lcd A
    Locate 1 , 5
    Lcd Chr(2) ; "C"
    Locate 1 , 8
    Lcd D
    Locate 2 , 1
    Lcd Chr(3)
    Locate 2 , 3
    Lcd E
    Locate 2 , 7
    Lcd Chr(0)
    Locate 2 , 9
    If E > 0 Then Lcd "run"                                     'grzalka on
    Elseif E = 0 Then Lcd "no run"                              'grzelka off

    Loop
  • #8
    xury
    Automation specialist
    Kolego poczytaj helpa i nie grzesz więcej :)
    No i stosuj zasady: na początku konfiguracja, deklaracja zmiennych, inicjalizacja. Potem pętla główna, a na końcu podprogramy,funkcje, obsługa przerwań.
    W tym momencie masz to wszystko wymieszane jak za przeproszeniem świnia w korycie. Nawet tego się nie chce analizować.
  • #9
    superhiro2
    Level 15  
    Jak dla mnie teraz jest bardzo czytelnie a w tym helpie to nie ma nic a nic jak się pisze poprawnie tylko jakieś zasady o zmiennych itp. Mówiąc jednym zdaniem HELP to grzech.

    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000

    Dim A As Byte                                               'obecna
    Dim D As Byte                                               'zadana
    D = 40
    Dim E As Byte                                               'czas
    E = 240
    Dim T As Word
    Dim T1 As Single
    Dim T2 As String * 3

    Deflcdchar 0 , 32 , 32 , 7 , 4 , 4 , 31 , 14 , 4            'do konca
    Deflcdchar 1 , 4 , 10 , 10 , 10 , 10 , 17 , 31 , 14         'temperatura
    Deflcdchar 2 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32           'zank stopnia
    Deflcdchar 3 , 14 , 17 , 21 , 21 , 23 , 17 , 17 , 14        'zegar do czasu
    Cls                                                         'czyszcenie po definiowaniu

    '**************właczenie przetwornika****************

    Config Adc = Single , Prescaler = Auto , Reference = Internal

    A = T2

    Start Adc

    '*****************CONFIG LCD*******************

    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 pinow****************

    Config Pinb.1 = Input                                       'up temperatura
        Pinb.1 = 1
    Config Pinb.2 = Input                                       'down temperatura
        Pinb.2 = 1
    Config Pinb.3 = Input                                       'czas +
        Pinb.3 = 1
    Config Pinb.4 = Input                                       'czas -
        Pinb.4 = 1
    Config Pinb.5 = Output                                      'buzzer
        Pinb.5 = 1
    Config Pinb.6 = Input                                       'grzalka na przekaznik
        Pinb.6 = 1
    Config Pinb.7 = Input                                       'pompka powietrza
        Pinb.7 = 1

    '****************warunki*******************

    If Pinb.1 = 0 Then D = D + 1
    Waitms 80
    End If

    If Pinb.2 = 0 Then D = D - 1
    Waitms 80
    End If

    If Pinb.3 = 0 Then E = E + 20
    Waitms 80
    End If
    If Pinb.4 = 0 Then E = E - 20
    Waitms 80
    End If

    Do E = E - 1 Wait 1 Loop Until E = 0

    If E = 0 Then Pinb.5 = 0 Wait 2 Pinb.5 = 1
    End If

    If E > 0 ; D > A Then Pinb.6 = 0
    Elseif E = 0 ; D <= A Then Pinb.6 = 1
    End If

    If E > 0 Then Pinb.7 = 0                                    'napowietrzenie wl
    Elseif E = 0 Then Pinb.7 = 1                                'wyl
    End If



    '******************powitanie******************

    Cls
    Locate 1 , 5
    Lcd "Witamy"
    Waitms 350
    Cls

    '*************ODCZYT(lm35)*********************

    Do

       T = Getadc(0)                                            'odczyt z kanału 0
       T1 = T * 0.0049
       T2 = Fusing(t1 , * * )
       Waitms 80

    '******LCD*******************
    Locate 1 , 1
    Lcd Chr(1)
    Locate 1 , 3
    Lcd A
    Locate 1 , 5
    Lcd Chr(2) ; "C"
    Locate 1 , 8
    Lcd D
    Locate 2 , 1
    Lcd Chr(3)
    Locate 2 , 3
    Lcd E
    Locate 2 , 7
    Lcd Chr(0)
    Locate 2 , 9
    If E > 0 Then Lcd "run"                                     'grzalka on
    Elseif E = 0 Then Lcd "no run"                              'grzelka off

    Loop
  • #10
    sp3ots
    Level 38  
    Witam !
    Jestem amatorem, ale patrząc na Twój kod ( na niektóre fragmenty ) pytam
    Code:

    If Pinb.1 = 0 Then D = D + 1
    Waitms 80
    End If

    Zmień na:
    Code:

    If Pinb.1 = 0 Then
    D = D + 1
    Waitms 80
    End If

    Po sprawdzaj pozostałe warunki If ..... end if.
    Czy kompilujesz program, F7 ? myślę że nie, bo podany prze zemnie fragment wyklucza kompilację.
    Zacznij zabawę, naukę bascoma od pisania króciutkich programów.
    Do pomiaru temperatury polecam czujnik DS18B20.
    Pozdrawiam. Stefan
  • #11
    superhiro2
    Level 15  
    A więc jak to poprawić?
  • Helpful post
    #12
    Krauser
    Level 26  
    W helpie znajdziesz coś takiego:
    Przeznaczenie:
    Tworzy tzw. blok decyzyjny.
    Składnia:
    IF wyrażenie THEN
    ciąg_instrukcji
    [ ELSEIF wyrażenie THEN ciąg_instrukcji ]
    [ ELSE ciąg_instrukcji ]
    END IF

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

    gdzie:

    wyrażenie testowane wyrażenie logiczne,
    ciąg_instrukcji dowolny ciąg instrukcji, wykonywanych po spełnieniu lub nie warunku określonego w wyrażeniu.

    (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005


    i nie zgodzę się że w nim nic nie ma, bo są przykłady do każdej instrukcji. Z tym IF to chodzi o to, że albo za THEN w tej samej linii jest ciąg instrukcji i nie pojawia się END IF albo za THEN nic nie ma tylko wszystko w kolejnych liniach i wtedy używasz END IF.
  • #13
    superhiro2
    Level 15  
    Nie mam pojęcia co z tym błędem bo wg. help to powinno byc tak:
    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000

    Dim A As Byte                                               'obecna
    Dim D As Byte                                               'zadana
    D = 40
    Dim E As Byte                                               'czas
    E = 240
    Dim T As Word
    Dim T1 As Word

    Deflcdchar 0 , 32 , 32 , 7 , 4 , 4 , 31 , 14 , 4            'do konca
    Deflcdchar 1 , 4 , 10 , 10 , 10 , 10 , 17 , 31 , 14         'temperatura
    Deflcdchar 2 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32           'zank stopnia
    Deflcdchar 3 , 14 , 17 , 21 , 21 , 23 , 17 , 17 , 14        'zegar do czasu
    Cls                                                         'czyszcenie po definiowaniu

    '**************właczenie przetwornika****************

    Config Adc = Single , Prescaler = Auto , Reference = Internal

    A = T1

    Start Adc

    '*****************CONFIG LCD*******************

    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 pinow****************

    Config Pinb.1 = Input                                       'up temperatura
        Pinb.1 = 1
    Config Pinb.2 = Input                                       'down temperatura
        Pinb.2 = 1
    Config Pinb.3 = Input                                       'czas +
        Pinb.3 = 1
    Config Pinb.4 = Input                                       'czas -
        Pinb.4 = 1
    Config Pinb.5 = Output                                      'buzzer
        Pinb.5 = 1
    Config Pinb.6 = Input                                       'grzalka na przekaznik
        Pinb.6 = 1
    Config Pinb.7 = Input                                       'pompka powietrza
        Pinb.7 = 1

    '****************warunki*******************

    If Pinb.1 = 0 Then
    D = D + 1
    Waitms 80
    End If

    If Pinb.2 = 0 Then
    D = D - 1
    Waitms 80
    End If

    If Pinb.3 = 0 Then
    E = E + 20
    Waitms 80
    End If

    If Pinb.4 = 0 Then
    E = E - 20
    Waitms 80
    End If

    If E = 0 Then
    Pinb.5 = 0
    Wait 2
    Pinb.5 = 1
    End If

    If E > 0 Then
    Pinb.6 = 0
    Elseif E = 0 Then
    Pinb.6 = 1

    If D > A Then
    Pinb.6 = 0
    Elseif D = A Then
    Pinb.6 = 1



    If E > 0 Then Pinb.7 = 0 Else Pinb.7 = 1

    Do
    E = E - 1
    Wait 1
    Loop
    Exit Do

    '******************powitanie******************

    Cls
    Locate 1 , 5
    Lcd "Witamy"
    Waitms 350
    Cls

    '*************ODCZYT(lm35)*********************

    Do

       T = Getadc(0)                                            'odczyt z kanału 0
       T1 = T * 0.0049
       Waitms 80

    '******LCD*******************
    Locate 1 , 1
    Lcd Chr(1)
    Locate 1 , 3
    Lcd A
    Locate 1 , 5
    Lcd Chr(2) ; "C"
    Locate 1 , 8
    Lcd D
    Locate 2 , 1
    Lcd Chr(3)
    Locate 2 , 3
    Lcd E
    Locate 2 , 7
    Lcd Chr(0)
    Locate 2 , 9
    If E > 0 Then
    Lcd "run"                                     'grzalka on
    Elseif E = 0 Then
    Lcd "no run"                              'grzelka off

    Loop
  • #14
    sp3ots
    Level 38  
    Jeszcze te lnie są złe:
    Code:

    If E > 0 ; D > A Then Pinb.6 = 0 Else Pinb.6 = 1

    Nie wiadomo co tu ma być ?
    i następna linia:
    Code:

    If E > 0 Then Pinb.7 = 0 Else Pinb.7 = 1

    tą linię zapisz tak:
    Code:

    If E > 0 Then
    Pinb.7 = 0
    Else
    Pinb.7 = 1
    end if

    Jeszcze tu:
    Code:

    If E > 0 Then Lcd "run"       'grzalka on
    Elseif E = 0 Then Lcd "no run"       'grzelka off

    zmień na:
    Code:

    If E > 0 Then
     Lcd "run"       'grzalka on
    Elseif E = 0 Then
    Lcd "no run"       'grzelka off
    end if

    tu też błąd:
    Code:

     T2 = Fusing(t1 , * * )

    nie wiem jak go poprawić.
  • #15
    superhiro2
    Level 15  
    Przełomowe odkrycie przerzucam się na 1wire ds18b20.

    Code:
     'SZCZEGULNE ZASŁUGI DLA Duch__ KTÓRY UDOSTĘPNIŁ KOD Z TERMOMETRU http://www.elektroda.pl/rtvforum/topic811706.html
    

    $regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
    $crystal = 4000000
    'Deklaracja portów od wyświetlacza LCD
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5

    Config Lcd = 16 * 2                                         'ustawiamy typ wyświetlacza

    Config 1wire = Portd.7                                      'deklaracja portu na którym będą podpięte DS18b20

    Dim I1 As Integer , Ss As String * 6                        'obecna
    Dim D As Word                                               'zadana
    D = 40

    Dim E As Word                                               'czas
    E = 240

    Dim Dsid1(8) As Byte
    Dim B As Byte                                               'deklaracja zmiennej do odczytu kodów ID


    Config Pinc.0 = Input                                       'up temperatura
        Pinc.0 = 1
    Config Pinc.2 = Input                                       'down temperatura
        Pinc.2 = 1
    Config Pinc.2 = Input                                       'czas +
        Pinc.2 = 1
    Config Pinc.3 = Input                                       'czas -
        Pinc.3 = 1
    Config Pinc.4 = Output                                      'buzzer
        Pinc.4 = 1
    Config Pinc.5 = Input                                       'grzalka na przekaznik
        Pinc.5 = 1
    Config Pinc.6 = Input                                       'pompka powietrza
        Pinc.6 = 1


    '****************warunki*******************

    If Pinc.0 = 0 Then
    D = D + 1
    Waitms 80
    End If

    If Pinc.1 = 0 Then
    D = D - 1
    Waitms 80
    End If

    If Pinc.2 = 0 Then
    E = E + 20
    Waitms 80
    End If

    If Pinc.3 = 0 Then
    E = E - 20
    Waitms 80
    End If

    If E = 0 Then
    Pinc.4 = 0
    Wait 2
    Pinc.4 = 1
    End If

    If E > 0 Then
    Pinc.5 = 0
    Elseif E = 0 Then
    Pinc.5 = 1
    End If

    If D > I1 Then
    Pinc.5 = 0
    Elseif D = I1 Then
    Pinc.5 = 1
    End If

    If E > 0 Then
    Pinc.6 = 0
    Else
    Pinc.6 = 1
    End If

    Deflcdchar 0 , 8 , 20 , 8 , 3 , 4 , 4 , 4 , 3               'znak stopnia Celsjusza
    Deflcdchar 1 , 32 , 32 , 7 , 4 , 4 , 31 , 14 , 4            ' do konca
    Cursor Off                                                  'Wyłącza kursor
    Cls                                                         'Funkcja CLS czyści ekran
    Lcd "WYTRAWIARKA"                                           'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Wait 1
    Cls
    '*******************Odczyt numerów ID czujników temperatury*********************

    If Dsid1(8) = Crc8(dsid1(1) , 7) Then                       'ta opcja pojawia się tylko przy włączaniu urządzenia
     Locate 1 , 1
     Lcd "Czujnik 1 ID"
     Wait 1
     Cls
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    End If
    Wait 1
    Cls


    '*******************adres*********************

    Do

       1wreset
       1wwrite &H55
       1wverify Dsid1(1)                                        'wysyłamy adres czujnika
       1wwrite &HBE
       I1 = 1wread(2)
    '--------konwersja temp dla ds
       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 550


       I1 = I1 * 10
       I1 = I1 / 16

       Ss = Str(i1)
       Ss = Format(ss , "0.0")

    E = E - 1
    Wait 1

    '***********************lcd********
    Locate 1 , 1
    Lcd Ss ; Chr(0)
    Locate 1 , 7
    Lcd "Zadana"
    Locate 1 , 14
    Lcd D ; Chr(0)
    Locate 2 , 1
    Lcd Chr(1) ; E ; "s"
    Locate 2 , 7
    Lcd "do"
    Locate 2 , 10
    Lcd "konca"
    Loop