logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

atmega8 + 2 x DS18B20 - czasami pokazują błędy

Mimitron 22 Mar 2010 19:45 3478 32
REKLAMA
  • #1 7866696
    Mimitron
    Poziom 20  
    Witam.
    Kolejny problem, kolejny post.
    Robię komputerek samochodowy który między innymi mierzy tempetaturę zewnetrzną i wewnętrzna.
    Niby wszystko jest ok, ale czasami pokazuje pierdoły np:
    zew:0 wew:(prawidłwa temp), lub na odwrót, lub obie temperatury takie same.
    Wymieniłem już czujniki i nadal to samo.

    1wreset
      1wwrite &H55
      1wverify Dsid1(1)                                         
      1wwrite &HBE
      I1 = 1wread(2)
    Waitms 750
    
      1wreset
      1wwrite &H55
      1wverify Dsid2(1)                                         
      1wwrite &HBE
      I2 = 1wread(2)
      Waitms 750
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
     Waitms 750
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                 
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4)
    Ss2 = Str(i5)
  • REKLAMA
  • #2 7866716
    Logan
    Poziom 30  
    Czemu nie sprawdzasz CRC ?
  • #4 7866771
    Logan
    Poziom 30  
    Wszystko masz opisane w polskim helpie, google też nie gryzie.
  • #5 7866791
    Mimitron
    Poziom 20  
    Moja przygoda z uC trwa od jakiś 2 miesięcy więc kto pyta nie błądzi. Ale dzięki za cynk :)

    Dodano po 13 [minuty]:

    Czyli powiniene zrobić coś takigo ?
    
    If Dsid1(8) = Crc8(dsid1(1) , 7) Then
    1wreset
      1wwrite &H55
      1wverify Dsid1(1)                                   
      1wwrite &HBE
      I1 = 1wread(2)
     End If
    
     If Dsid2(8) = Crc8(dsid2(1) , 7) Then
      1wreset
      1wwrite &H55
      1wverify Dsid2(1)                                      
      1wwrite &HBE
      I2 = 1wread(2)
     End If
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
     Waitms 750
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                  'korekta przesuniecia znaku st C przy przej?ciu z temp ujemnej na dodatni?
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4)
    Ss2 = Str(i5)
    


    Dodano po 19 [minuty]:

    Program pobiera adresy czujnikó przy włączeniu zapłonu, potem już nie są sprawdzane.. Nie wiem czy dobrze rozumiem ale kontrolna crc będzie się zgadzać mimo błędów odczytu. Czy mam sprawdzać adresy ID czujników przy każdym odczycie?

    
    Dsid1(1) = 1wsearchfirst()
    Dsid2(1) = 1wsearchnext()
    
    If Dsid1(8) = Crc8(dsid1(1) , 7) Then
    1wreset
      1wwrite &H55
      1wverify Dsid1(1)                                   
      1wwrite &HBE
      I1 = 1wread(2)
     End If
    
     If Dsid2(8) = Crc8(dsid2(1) , 7) Then
      1wreset
      1wwrite &H55
      1wverify Dsid2(1)                                     
      1wwrite &HBE
      I2 = 1wread(2)
     End If
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
     Waitms 750
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                  'korekta przesuniecia znaku st C przy przej?ciu z temp ujemnej na dodatni?
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4) 
    
  • #6 7867120
    GSM
    Poziom 25  
    Witam,

    W datasheet'cie tych termometrów możesz dokładnie przeczytać w sekcji "CRC GENERATION", że układ generuje 2 sumy CRC, jedną ze swojego adresu a drugą z zawartości scratchpad'a (czyli pamięci w której jest przechowywany przed wysłaniem odczyt temperatury), tak więc sprawdzając (jeśli dobrze rozczytuje twój kod) CRC adresu uchroni cie jedynie częściowo przed błędami, gdyż uszkodzeniu podczas transmisji mogą ulec dalsze bajty.
    Pomijając już, że sprawdzanie sumy kontrolnej z przesłanych danych to dobry pomysł aby ustrzec sie błędnych odczytów, warto też zauważyć, że przy zasilaniu pasożytniczym układów 1-wire (w tym wypadku termometrów) warto sprawdzić czy w trakcie wykonywania przez nie różnych czynności (np. konwersji temperatury) napięcie na magistrali nie spada za bardzo - np. za mały rezystor pull-up, Dallas zaleca nawet przy dużej długości przewodów, stosowanie oddzielnego tranzystora podciągającego linie danych do + zasilania na czas konwersji. Pozatym tam gdzie można zalecają używanie normalnego zasilania, tj. 3 kabelki: +,-,dane.

    Pozdrawiam,
    GSM
  • #7 7867125
    Logan
    Poziom 30  
    Czekaj, czekaj, sprawdzanie CRC musi działać tak:
    DS mierzy temperaturę i oblicza jej CRC (automatycznie), otwórz notę katalogową http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf i zobacz Figure 7. DS18B20 Memory Map. Suma kontrolna CRC jest przechowywana w ósmym bajcie, czyli musisz odczytać 8 bajtów, w pierwszych dwóch masz temperaturę, a w ostatnim wartość CRC. Dopiero teraz używasz Bascomowego CRC8, wynik zapisujesz w jakiejś zmiennej i sprawdzasz, czy zawartość tej zmiennej jest równa z CRC odczytanym z DSa.
    PS Polskiego helpa do Bascoma możesz pobrać ze strony Bascoma.
  • REKLAMA
  • #9 7867297
    GSM
    Poziom 25  
    Abstrachując od twojego kodu, prześledź sobie po kolei wszystkie kroki jakie trzeba wykonać aby odczytac temperaturę i zweryfikować czy pobrane dane są prawidłowe:
    1. Reset magistrali
    2. Broadcast do wszystkich termometrów z nakazem rozpoczęcia konwersji
    3. Odczekanie odpowiedniego czasu w zależności od dokładności konwersji (750ms dla 12bitów)
    4. Reset magistrali
    5. Wywołanie pierwszego termometru
    6. Odczytanie jego pamięci RAM (Scratchpad), całej - 9 bajtów
    7. Obliczenie CRC8 z pierwszych 8miu odebranych bajtów
    8. Porównanie obliczonego CRC8 z 9tym bajtem odebranym
    9. Jeśli się zgadza, obliczenie temperatury i prezentacja wyników
    Powtórzyć od 4 pkt tylko że dla drugiego termometru.

    Pozdrawiam,
    GSM
  • REKLAMA
  • #10 7867424
    Mimitron
    Poziom 20  
    Czyli tak ?

    Przy włączeniu stacyjki pobieram adres czujników:

    Dsid1(1) = 1wsearchfirst()
    Dsid2(1) = 1wsearchnext()
    
    
    
    


    Potem w pętli programu:
    1wreset
      1wwrite &H55
      1wverify Dsid1(1)                                   
      1wwrite &HBE
     If Dsid1(8) = Crc8(Dsid1(1), 7) Then         
        I1 = 1wread(2)
      End If
    
     Waitms 750
    
      1wreset
      1wwrite &H55
      1wverify Dsid2(1)                                     
      1wwrite &HBE
      If Dsid2(8) = Crc8(dsid2(1) , 7) Then             
      I2 = 1wread(2)
     End If
    
     Waitms 750
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
     Waitms 750
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                  
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4) 
  • REKLAMA
  • #11 7867492
    GSM
    Poziom 25  
    I1 = 1wread(2) 

    tu pobierasz tylko 2 bajty (wartość temperatury), a powinieneś pobierać wszystkie 9
    http://www.datasheetcatalog.org/datasheet/maxim/DS18B20.pdf Strona 6 Figure 7
    tak wygląda Scratchpad tego termometru. z pierwszych 8miu bajtów liczysz CRC8 i porównujesz bajtem 9tym (CRC8 obliczone przez termometr), muszą się zgadzać.

    Pozdrawiam,
    GSM
  • #12 7867539
    Mimitron
    Poziom 20  
    Czyli tak ?:

    
    dim crc1 as byte
    dim crc2 as byte
    

    a potem w pętli programu:

    1wreset
      1wwrite &H55
      1wverify Dsid1(1)                                   
      1wwrite &HBE
      
      crc1 = 1wread(8)                              'pobranie crc z DS18b20 numer 1
        If crc1 = Crc8(Dsid1(1), 7) Then    'jeżeli crc z DS18b20 = z crc8     
           I1 = 1wread(2)                          'odczyt temp.
        End If
    
     Waitms 750
    
      1wreset
      1wwrite &H55
      1wverify Dsid2(1)                                     
      1wwrite &HBE
      crc2 = 1wread(8)                               'pobranie  crc z DS18b20 numer 2
        if crc2 = Crc8(Dsid2(1), 7) Then     'jeżeli crc z drugiego DS18b20 = z crc8            
      I2 = 1wread(2)                                'odczyt temp.
     End If
    
     Waitms 750
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
     Waitms 750
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                 
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4)
    
  • #13 7867557
    GSM
    Poziom 25  
    Blisko ale to nie to...
    musisz pobrać 9bajtów od termometru, do jakiejś tablicy bajtów.
    Następnie z pierwszych 8smiu bajtów obliczyć CRC i porównać z ostatnim.
    Jeśli się zgadza, to nie odczytujesz znowu z DS'a tylko bierzesz pierwsze 2 bajty z tych 9ciu i to jest właśnie odczyt temperatury.

    Pozdrawiam,
    GSM
  • #14 7867632
    Logan
    Poziom 30  
    Ty cały czas sprawdzasz nie to CRC co trzeba.
  • #15 7867651
    Mimitron
    Poziom 20  
    Też tak kombinuję. Tablice do których zapisuje 9 bitów to Dsid1 i Dsid2
    Czyli tak:

    
    dim crc1 as byte
    dim crc2 as byte
    dim crc11 as byte
    dim crc22 as byte
    
    Dsid1(1) = 1wsearchfirst()
    Dsid2(1) = 1wsearchnext() 
    
    crc1 = Crc8(Dsid1(1), 7)  'obliczenie crc dla pierwszego czujnika
    crc2 = Crc8(Dsid2(1), 7)  'obliczenie crc dla drugiego czujnika


    Potem w pętli programu:

    1wreset
    1wwrite &H55
    1wverify Dsid1(1)                                   
    1wwrite &HBE
     
    crc11 = 1wread(8)                              'pobranie crc z DS18b20 numer 1
      If crc1 = crc11 Then                         
           I1 = 1wread(2)                            'odczyt temp.
      End If
    
     Waitms 750 
    
    1wreset
      1wwrite &H55
      1wverify Dsid2(1)                                     
      1wwrite &HBE
      
    crc22 = 1wread(8)                              'pobranie crc z DS18b20 numer 2
       If crc2 = crc22 Then            
          I2 = 1wread(2)                                'odczyt temp.
       End If
    
     Waitms 750
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
     Waitms 750
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                 
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4)
  • #16 7867690
    GSM
    Poziom 25  
      crc22 = 1wread(8)                              'pobranie crc z DS18b20 numer 1
      If crc2 = crc22 Then           
      I2 = 1wread(2)                                'odczyt temp. 

    To nie ma sensu:
    1. 2 bajty temperatury ktore niby odczytujesz do I2 sa zawarte w crc22 (pierwsze 2 bajty tej tablicy).
    2. crc musisz obliczać po każdym odczycie z czujnika, z tych 8miu pobranych bajtów.
    taki pseudokod:
    
    Zadeklaruj JakasTablica jako tablice 9ciu bajtów;
    Zadeklaruj JakiesCRC jako bajt;
    
    JakasTablica = odczyt_z_1w_9ciu_bajtów;
    JakiesCRC = oblicz_crc8_z_8miu_bajtów(JakasTablica);
    Jeśli (JakiesCRC == JakasTablica[8])  // 0 - pierwszy, 8 - dziewiąty element tablicy
    To OK
  • #17 7867777
    Mimitron
    Poziom 20  
    Już się gubie :P
    Czyli tak ?
    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte 
    dim crc1 as byte
    dim crc2 as byte
    
    
    Dsid1(1) = 1wsearchfirst()
    Dsid2(1) = 1wsearchnext()
    
    1wreset
    1wwrite &H55
    1wverify Dsid1(1)                                   
    1wwrite &HBE
     
    crc1 = Crc8(Dsid1(1), 7) 
    if crc1 = Dsid1(8)                                              
           I1 = 1wread(2)                            'odczyt temp.
      End If
    
     Waitms 750
    
    1wreset
      1wwrite &H55
      1wverify Dsid2(1)                                     
      1wwrite &HBE
     
    crc2 = Crc8(Dsid2(1), 7) 
    if crc12 = Dsid2(8)                                              
       I2 = 1wread(2)                            'odczyt temp.
    end if
     Waitms 750
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
     Waitms 750
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                 
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4)
  • #18 7867875
    GSM
    Poziom 25  
    Niestety nie znam BASCOM'a (za dobrze) wiec pewnie gdzieś popełnię błąd ale co mi tam, moim zdaniem to powinno raczej tak wyglądać:
    gdzieś na początku:
    
    Dim id(8) As Byte
    Dim tmp(9) As Byte
    Dim temperatura(2) As Byte
    Dim crc As Byte
    
    id(1) = 1wsearchfirst()
    


    pózniej gdzieś w pętli głównej:

    
    1wreset
    1wwrite &H55
    1wwrite id(1), 8
    1wwrite &H44
    waitms 750
    1wwrite &HBE
    tmp(1) = 1wread(9)
    
    crc = Crc8(tmp(1), 8)
    If crc = tmp(8)
    temperatura(1) = tmp(1)
    temperatura(2) = tmp(2)
    end if
    


    Czy jakoś tak mniejwięcej (przykład dla jednego czujnika).
    Postaraj się jeszcze raz na spokojnie to przeanalizować, co twój program robi po kolei a co powinien.

    Pozdrawiam,
    GSM
  • #19 7867899
    Mimitron
    Poziom 20  
    Tak by chyba bylo to samo:
    
    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    
    
    Dsid1(1) = 1wsearchfirst()
    Dsid2(1) = 1wsearchnext()
    
    1wreset
    1wwrite &H55
    1wverify Dsid1(1)                                   
    1wwrite &HBE
     
    If Dsid1(8) = Crc8(dsid1(1) , 7) Then                                             
           I1 = 1wread(2)                            'odczyt temp.
      End If
    
     Waitms 750
    
    1wreset
      1wwrite &H55
      1wverify Dsid2(1)                                     
      1wwrite &HBE
     
    If Dsid2(8) = Crc8(dsid2(1) , 7) Then                                             
       I2 = 1wread(2)                            'odczyt temp.
    end if
     Waitms 750
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
     Waitms 750
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                 
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4)
  • #20 7867990
    GSM
    Poziom 25  
    "chyba" to słowo klucz;)
    nigdzie tam nie liczysz CRC z otrzymanych danych (danych o temperaturze +reszta scratchpadu)
    PO konwersji musisz odczytać te 9 bajtów i z pierwszych 8smiu bajtów obliczyć CRC i porównać z dziewiątym.
    Poza tym ty odczytujesz wartość temperatury PRZED zleceniem konwersji (komenda &H44), co trochę nie ma sensu.

    Pozdrawiam,
    GSM
  • #22 7868989
    Mimitron
    Poziom 20  
    czyli mam tak:
    
    
    Dsid1(1) = 1wsearchfirst()
    Dsid2(1) = 1wsearchnext()
    
      1wreset
    1wwrite &H55
    1wwrite Dsid1(1) , 8                                      
    1wwrite &HBE
    Dsid11(1) = 1wread(9)
    Waitms 750
    1wreset
    1wwrite &H55
    1wwrite Dsid2(1) , 8                                      
    1wwrite &HBE
    Dsid22(1) = 1wread(9)
    Waitms 750
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitms 750
    Crc1 = Crc8(dsid11(1) , 8)
    Crc2 = Crc8(dsid22(1) , 8)
    
    If Crc1 = Dsid11(8) Then
    I1 = Dsid11(1)
    End If
    
    If Crc2 = Dsid22(8) Then
    I2 = Dsid22(1)
    End If
    
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1) 
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4)
    Ss2 = Str(i5)

    Ale pokazuje 0
  • #23 7869096
    Logan
    Poziom 30  
    Waitms 750 musisz mieć przed odczytem.
  • #24 7869176
    Mimitron
    Poziom 20  
    Pomijając kontrole CRC, błędy w odczytach mogą być spowodowane złym umieszczeniem WAITMS 750 w pierwszej wersji programu i umieszczenie tego opóźnienia przed odczytem pomoże ?
    1wreset
      1wwrite &H55
      1wverify Dsid1(1)                                         
      1wwrite &HBE
    
      Waitms 750
      I1 = 1wread(2)
    
    
      1wreset
      1wwrite &H55
      1wverify Dsid2(1)                                         
      1wwrite &HBE
    
      Waitms 750
      I2 = 1wread(2)
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
     
    
    
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                 
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4)
    Ss2 = Str(i5)
  • #25 7873448
    Mimitron
    Poziom 20  
    Doszedłem do rozwiązania problemu z tym CRC8. Zobaczymy teraz czy to coś mi da przy moim problemie.

    Na początku:
    
    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim Dsid11(9) As Byte
    Dim Dsid22(9) As Byte
    Dim Crc1 As Byte
    Dim Crc2 As Byte
    


    Potem w pętli programu:
    
    Dsid1(1) = 1wsearchfirst()
    Dsid2(1) = 1wsearchnext()
    
    
    1wreset
      1wwrite &H55
      1wwrite Dsid1(1) , 8
      1wwrite &HBE
      Waitms 750
    Dsid11(1) = 1wread(9)
    
    
      1wreset
      1wwrite &H55
      1wwrite Dsid2(1) , 8
      1wwrite &HBE
      Waitms 750
    Dsid22(1) = 1wread(9)
    
    
    1wreset
    1wwrite &HCC
    Waitms 750
    1wwrite &H44
    
    
    Crc1 = Crc8(dsid11(1) , 8)
    Crc2 = Crc8(dsid22(1) , 8)
    
    If Crc1 = Dsid11(9) Then
    I1 = Makeint(dsid11(1) , Dsid11(2))
    I1 = I1 * 10
    I1 = I1 / 16
    Ss1 = Str(i1)
    Ss1 = Format(ss1 , " 0.0")                                 
    I4 = Val(ss1)
    I5 = Round(i4)
    Ss1 = Str(i5)
    End If
    
    
    
    If Crc2 = Dsid22(9) Then
    I2 = Makeint(dsid22(1) , Dsid22(2))
    I2 = I2 * 10
    I2 = I2 / 16
    Ss2 = Str(i2)
    Ss2 = Format(ss2 , " 0.0")
    I4 = Val(ss2)
    I5 = Round(i4)
    Ss2 = Str(i5)
    End If
    
    
    
  • #28 7873600
    Logan
    Poziom 30  
    OK, teraz popatrz na swojego If'a i powiedz mi skąd będziesz wiedział, że wystąpiło przekłamanie podczas przesyłania danych i CRC nie są zgodne?
  • #29 7873694
    Mimitron
    Poziom 20  
    Z tego co rozumiem CRC8 jest liczone z bitów 1 -8 i ma się zgadzać z dziewątym bitem CRC.
    Czyli liczymy CRC8
    Crc1 = Crc8(dsid11(1) , 8)  

    I porównujemy go z dziewiątym bitem
    If Crc1 = Dsid11(9) Then


    Czyli to jeszcze nie to ?
  • #30 7874161
    Logan
    Poziom 30  
    Dobrze, ale zobacz to:

    If If Crc1 = Dsid11(9) Then
       tu cała procedura (bla bla bla)
    Else
       tu poinformuj mnie, że wystąpił błąd (zaświeć LEDa, napisz na LCD, obojętnie)
    End if
REKLAMA