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

Jak poprawnie odczytać i użyć numer seryjny DS1820 w kodzie?

scal12 24 Lut 2007 17:52 3071 13
REKLAMA
  • #1 3612361
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Panowie jak odczytac numer seryjny DS1820,uzywam czegos takiego:
    1 wwrite &h33
    for x=1 to 8
    numer(x)=1wread()
    lcd numer()
    next x
    wait 3
    Wszystko działa na lcd wyskakuje numer w postaci"1623616137180125" czy to jest numer seryjny czy trzeba cos z tego wyliczyć bo gdy na sztywno chce wywołac DS1820 nic z tego nie wychodzi:
    1 wreset
    1 wwrite &h55
    ????????? i co dalej
  • REKLAMA
  • #2 3612889
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    
    1 wwrite &h33
    for x=1 to 8
    numer(x)=1wread()
    Lcd  Hex(numer(x));  ' dla bascom8051 LcdHex  numer(x);
    next x
    wait 3
    
    1 wreset
    1 wwrite &h55
    '????????? i co dalej
    1wwrite  numer(1) , 8          
    

    I dalej nie pytaj , tylko szukaj , czytaj , ... ;)

    Piotrek
  • REKLAMA
  • #3 3612979
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Pytam czytam i nic,czy ten numer to faktyczny numer seryjny czy sa w nim zawarta suma kontrolna,powoli te układy zaczynają mnie denerwowac :)
  • REKLAMA
  • #4 3612997
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Do
    Cls
    Lcd " ODCZYT ADRESU"
    Wait 1
    Cls
    1wreset
    1wwrite &H33
    For X = 1 To 8
    Adres(x) = 1wread()
    Next X
    1wreset
    Cls
    
    Lcd "  PODAJE ADRES"
    For X = 1 To 8
    Locate 2 , 5
    Lcd X ; " - " ; Adres(x) ; "   "
    Wait 1
    Next X
    
    Loop
    End
  • #5 3613000
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    W dokumentacji jest napisane ,
    8-BIT CRC 48-BIT SERIAL NUMBER 8-BIT FAMILY CODE

    Chyba nie kłamia ;)

    Piotrek
  • #6 3613066
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Dla kogos kto siedzi w tym pare lat to pestka a dla mnie niestety nie takie to proste ale sie staram ,chce wywołąć dsy z magistrali na sztywno coś w stylu:
    1wwrite &H55
    1wwrite=tu numer seryjny16cyfrowy????
  • #7 3615167
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Po pszesiedzeniu prawie całej nocy i usilnych starań aby ten numer seryjny wyciągnąć i wpisać na sztywno do programu który by go identyfikował nadal wielka d....tyle wiem że x(1)=16,x(2)=236,x(3)=161,x(4)=37,x(5)=1,x(6)=8,x(7)=0,x(8)=125, co daje w sumie numer:1623616137180125, według podpowiedzi kolegi M.S adres tego układu to 125 tak pokazuje wyswietlacz ale na logike biorąc jest za mały,widze ze nic z tego nie bedzie a szkoda myslałem ze mi ktos pomoże.
  • #8 3615453
    Skubik
    Poziom 15  
    Posty: 106
    Pomógł: 12
    Ocena: 2
    Tylko ze ten "z sumowany" nr jest błedny powinno byc tak w HEX: 10ECA1250108007D czyli jakby nie patrzec 64 bitów czyli cały adres jak na dłoni.
  • #9 3615575
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Powoli zaczynam czaic baze,czyli chcac na sztywno wywołać ten układ musze cały numer rozbić na 8 bajtów i pokolei je wysyłac czy moge cały odrazu ???
  • REKLAMA
  • #10 3617394
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Juz wiem numer musi byc rozbity na 8 bajtó ale mam kolejny problem robie w bascomie cos takiego:
    Dim adres(8) as byte

    adres(1)=&h10
    adres(2)=&Hec
    adres(3)=&ha1
    adres(4)=&h25
    adres(5)=&h01
    adres(6)=&h08
    adres(7)=&h00
    adres(8)=&h7d

    1wwrite adres(1),8

    tu ładnie wysyła numer do czujnika ale gdy chce dodać drugi czujnik i deklaruje zmienne :
    Dim adres(8) as byte
    dim adres1(8) as byte
    adres(1)=&h10
    adres(2)=&Hec
    adres(3)=&ha1
    adres(4)=&h25
    adres(5)=&h01
    adres(6)=&h08
    adres(7)=&h00
    adres(8)=&h7d

    adres1(1)=&h15
    adres1(2)=&Hcc
    adres1(3)=&ha1
    adres1(4)=&h25
    adres1(5)=&h01
    adres1(6)=&h28
    adres1(7)=&h01
    adres1(8)=&h4d

    to wtedy kompilator w lini:
    dim adres1(8) as byte
    wywala mi błąd kompilacji co robie zle????????
  • #11 3617434
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Każdy błąd w Bascomie , ma numer i ewentualnie opis , więc jak to DOKŁADNIE wygląda :?:
    Piotrek

    PS
    Jeśli numery przypisujesz "na sztywno" , to pozostaw je tylko w pamięci programu , bo szkoda RAM-u.
    
    Adres1:
    Data &H10,...
    Adres2:
    Data &H10, ...
    
  • #12 3617492
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    wywala mi cos takiego:
    out of internal memory in file: c\windows\pulpit\aplikacje\ds.bas,line :13
  • #13 3617532
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    scal12 napisał:
    wywala mi cos takiego:
    out of internal memory in file: c\windows\pulpit\aplikacje\ds.bas,line :13

    Oj jak słabo znasz narzędzie (Bascom8051) , którym sie posługujesz :D
    Przydzieliłeś kompilatorowi za mało RAM-u.
    Wybierz:
    Menu->Compiler->Misc i Byte End(hex) ustaw na maksymalną wartość (chyba 7F)

    Piotrek
  • #14 3617620
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Owszem przyznaje sie do tego ze słabo znam a własciwie dopiero sie ucze programowac ale dzieki takim osobom jak Ty wychodzi mi to coraz lepiej i robie małe postepy :)

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy prawidłowego odczytu i wykorzystania numeru seryjnego układu DS1820 w kodzie, głównie w środowisku Bascom8051. Numer seryjny DS1820 składa się z 64 bitów: 8-bitowego kodu rodziny, 48-bitowego numeru seryjnego oraz 8-bitowej sumy kontrolnej CRC. Odczyt numeru seryjnego realizowany jest przez wysłanie komendy 0x33 po zresetowaniu magistrali 1-Wire, a następnie odczyt 8 bajtów danych. Aby wywołać układ na sztywno, należy rozbić pełny 64-bitowy adres na 8 bajtów i wysyłać je kolejno, nie można przesłać całego numeru jednocześnie. Problemy pojawiły się przy próbie deklaracji wielu tablic adresów w Bascomie, co skutkowało błędem "out of internal memory". Rozwiązaniem jest zwiększenie przydziału pamięci RAM w ustawieniach kompilatora (Menu->Compiler->Misc, ustawienie Byte End na maksymalną wartość). Zaleca się przechowywanie stałych adresów w pamięci programu, aby oszczędzać RAM. Wskazano także, że numer seryjny wyświetlany na LCD w formie dziesiętnej jest niepoprawny i powinien być interpretowany w formacie szesnastkowym (HEX).
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA