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

Jak porównać numer ID iButton DS1990A z zapisanym w EEPROM?

KrzysiekTG 06 Wrz 2005 13:39 6848 17
  • #1 1795791
    KrzysiekTG
    Poziom 14  
    Posty: 104
    Pomógł: 6
    Ocena: 12
    Zmierzam zbudować zamek na iButtonie DS1990A.
    Poniżej zamieszczam projekt programu w Basom nad którym właśnie pracuję.
    Program ten ma za zadanie zapisywać przy pierwszym uruchomieniu oraz przy zwarciu zworki w pamięci eeprom kontrolera 10 numerów ID pastylek iButton np DS1990A.
    I do tego moment wszystko ok program działa.
    Problem natomiast mam z odczytaniem i porównaniem danych numer ID w pamięci z numerem ID odczytanym z iButton-a.
    Proszę szanownych kolegów o pomoc (podprogram Autoryzacja)

    $regfile = "2313DEF.dat"
    $crystal = 4000000
    $baud = 19200
    
    Config 1wire = Portb.0
    
    Dim Eepromadres As Byte
    Dim Tempvalue As Byte
    Dim R As Byte
    Dim I As Byte
    Dim Register_number(8) As Byte
    Dim Button_number As Byte
    Dim Temp As Byte
    Dim Blokada As Bit
    
    Declare Sub Rejestracja
    Declare Sub Pauza
    Declare Sub Autoryzacja
    
    
    Readeeprom Tempvalue , 127
    If Tempvalue <> 1 Then
    Call Rejestracja
    End If
    Set Portd.5
    If Pind.5 = 0 Then
    Call Rejestracja
    End If
    
    'Glowna petla programu
    
    Do
    If Err = 0 Then
    Call Autoryzacja
    End If
    Call Pauza
    If Blokada = 1 Then
    Print "PASTYLKA OK!"
    Blokada = 0
    End If
    
    
    Loop
    
    'PODPROGRAMY
    
    Sub Rejestracja
    
    Eepromadres = 1
    
    Do
    Register_number(1) = 1wsearchfirst()
    If Err = 0 Then
    For Temp = 1 To 8
    Writeeeprom Register_number(temp) , Eepromadres
    Incr Eepromadres
    Print "pastylka" ; Eepromadres
    Next Temp
    End If
    If Eepromadres > 80 Then
    For R = 1 To 4
    Next R
    For R = 1 To 4
    Next R
    Exit Do
    End If
    Call Pauza
    Loop
    
    Tempvalue = 1
    Writeeeprom Tempvalue , 127
    End Sub
    
    Sub Autoryzacja
    Blokada = 0
    1wreset
    1wwrite &H33
    For I = 1 To 8
    Register_number(i) = 1wread()
    Next I
    Eepromadres = 1
    For R = 1 To 10
    For I = 1 To 8
    Readeeprom Button_number , Eepromadres
    If Button_number = Register_number(i) Then
    Blokada = 1
    Else
    Blokada = 0
    End If
    Incr Eepromadres
    Next I
    Next R
    End Sub
    
    Sub Pauza
    Waitms 250
    End Sub

    Moderowany przez Light-I:

    Kod ujęto w tagi "code".

  • Pomocny post
    #2 1800424
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    ie pasuje mi brak powiązania numeru buttona z tymi zmiennymi R i I. I to jest pewnie ten problem. Zastanów sie też nad innym nieco odczytywaniem odpowiednich komórek z ramu:

    Powiedzmy że tak:

    for I=1 to 10
    for R=1 to 8
    ala=R*8 'Tu bedzie sie zmieniać wartość co osiem: 8, 16, 24 itd
    ela=ala+I
    Readeeprom Button_number , ela
    If Button_number = Register_number(i) Then
    ......

    Trzeba by tylko zmienić zapis w pamieci na rozpoczynajacy się od komórki nr 8, albo odejmować i dodawać odpowiednio.
    Zadziała to w ten sposób że zmienna ala będzie przechowywała adres pierwszej komórki dla kolejnej pastylki a zmienna ela będzie dodatkowo wybierała odpowiedni.
    Własnie tak sie zastanawiam czy dobrze rozumiem co chciałeś zrobić
  • #3 1800437
    pawel129
    Poziom 16  
    Posty: 246
    Pomógł: 2
    Ocena: 4
    A czy ktoś bawił się tymi pastylkami w ASM?? Buduje czytnik do pastylek DS1990A do alarmu a nie wiem za bardzo jak się wziąść za to :/ ..może ktoś poratuje jakimś algorytmem, kawałkiem programiku? Pozdrawiam..
  • #4 1800489
    KrzysiekTG
    Poziom 14  
    Posty: 104
    Pomógł: 6
    Ocena: 12
    Dzięki "szymtro" jaki ja ślepy byłem zmienna eepromadres przybierała po 8 cyklach pętli zawsze 1-kę. Wielkie dzięki. Co dwie pary oczu to nie jedna. Wszystko działa jak należy.
  • #5 1800568
    pablo11z
    Poziom 17  
    Posty: 161
    Pomógł: 19
    Ocena: 50
    Też przymierzam sie do układu na pastylkach. W związku z tym mam pytanie. Na jakim układzie zrealizowałeś czytnik ?
  • #6 1800584
    KrzysiekTG
    Poziom 14  
    Posty: 104
    Pomógł: 6
    Ocena: 12
    pablo11z napisał:
    Na jakim układzie zrealizowałeś czytnik ?


    Pytając o układ masz na myśli mikrokontroler, wkodzie a dokładniej w dyrekrtywie kompilatora masz to napisane AT90S2313
    To ten fragment kodu $regfile = "2313DEF.dat"
  • #7 1800925
    pawel129
    Poziom 16  
    Posty: 246
    Pomógł: 2
    Ocena: 4
    a czy ktos sie bawił DS1990A pod ASM?
  • #8 1800932
    pablo11z
    Poziom 17  
    Posty: 161
    Pomógł: 19
    Ocena: 50
    Fakt troche mało precyzyjnie się wyraziłe. Chodzi mi bardziej o stronę sprzętową. Cewki (czytnik ) i ewentualny układ wejściowy. Masz może jakiś schemat tego ?
    pozdrawiam
  • #10 1801023
    pawel129
    Poziom 16  
    Posty: 246
    Pomógł: 2
    Ocena: 4
    no tak, tylko że tam jest w AVR :/
  • #11 1801051
    Pituś Bajtuś
    Poziom 28  
    Posty: 934
    Pomógł: 137
    Ocena: 10
    Temat dotyczy AVR więc jest dla AVR (nie sprecyzowałeś pod co byś to chciał).
  • #12 1801064
    pawel129
    Poziom 16  
    Posty: 246
    Pomógł: 2
    Ocena: 4
    pawel129 napisał:
    A czy ktoś bawił się tymi pastylkami w ASM?? Buduje czytnik do pastylek DS1990A do alarmu a nie wiem za bardzo jak się wziąść za to :/ ..może ktoś poratuje jakimś algorytmem, kawałkiem programiku? Pozdrawiam..


    Pituś Bajtuś czytaj także starsze posty..
    Mam tu na myśli DS1990(1)S pod 8051
  • #13 1801074
    Pituś Bajtuś
    Poziom 28  
    Posty: 934
    Pomógł: 137
    Ocena: 10
    No tu ani słowem nie wspominasz o jakiejkolwiek rodzinie mikrokontrolerów :?::?::?:

    edit: no teraz to jest jasne napisane, wczesniej nie było

    daj mi kilka godzin a będzie pod 8051
  • #14 1801098
    KrzysiekTG
    Poziom 14  
    Posty: 104
    Pomógł: 6
    Ocena: 12
    Schematu jeszcze nie mam jak narazie zajełem się softem, ale zamierzenia są takie:
    - magistrala 1wire podłączona do Pind.6
    - diody sygnalizujące stan pracy urządzenia Pinb0- Pinb3
    - przekażniki podłączeone do Pinb.4i Pinb.5 kontrolera przez układ ULN2800.
    Układ w zamierzeniach sterować ma elektro ryglem furki przy wejściu na posesję.
    Jak opanuję soft robię schemat i prototyp, mogę zamieścić to potem na elektrodzie.
  • #15 1801172
    pawel129
    Poziom 16  
    Posty: 246
    Pomógł: 2
    Ocena: 4
    Pituś Bajtuś napisał:

    daj mi kilka godzin a będzie pod 8051


    będę bardzo wdzięczny za pomoc (i chyba nie tylko ja ;) )
  • #16 1801299
    Pituś Bajtuś
    Poziom 28  
    Posty: 934
    Pomógł: 137
    Ocena: 10
    Zgodnie z obietnicą oto procedurki do 1wire w ASM dla 8051, sprawdzone z termometrem DS1822, 89S8252 i kompilowane w RIDE (program wystawia na P0 temperaturę, taki "termometr Predatora"):
    name onewire
    $INCLUDE (ATMEL/REG8252.INC)
    DQ EQU P3.6
    
    org 0
    ajmp start
    
    
    ow_reset:
    	CLR DQ
    	MOV B, #0
    	DJNZ B, $
    	SETB DQ
    	MOV B, #30
    	DJNZ B, $
    	MOV C, DQ
    	MOV B, #0
    	DJNZ B, $
    	RET
    
    ow_read_bit:
    	CLR DQ
    	SETB DQ
    	MOV B, #5
    	NOP
    	DJNZ B, $
    	MOV C, DQ
    	MOV B, #60
    	DJNZ B, $
    	RET
    
    ow_read:
    	MOV R7, #8
    	loop:
    	CALL ow_read_bit
    	RRC A
    	DJNZ R7, loop
    	RET
    
    ow_write_bit:
    	MOV B, #1
    	CPL C
    	MOV B.5, C
    	CLR DQ
    	DJNZ B, $
    	SETB DQ
    	JNC dalej
    	RET
    	dalej:
    	MOV B, #30
    	DJNZ B, $
    	RET
    
    ow_write:
    	MOV R7, #8
    	loop2:
    	RRC A
    	CALL ow_write_bit
    	DJNZ R7, loop2
    	RET
    
    czekaj:
    	MOV R1,#255
    	L2:
    	MOV R0,#255
    	L1:	
    	DJNZ R0,L1
    	DJNZ R1,L2
    	RET
    
    start:
    	CALL ow_reset
    	MOV A, #0CCh
    	CALL ow_write
    	MOV A, #044h
    	CALL ow_write
    	CALL czekaj
    	CALL czekaj
    	
    	CALL ow_reset
    	MOV A, #0CCh
    	CALL ow_write
    	MOV A, #0BEh
    	CALL ow_write
    	CALL ow_read
    	MOV R1, A
    	CALL ow_read
    	MOV R2, A
    	
    	MOV A, R1
    	SWAP A
    	ANL A, #15
    	MOV R1, A
    	MOV A , R2
    	ANL A, #7
    	SWAP A
    	ORL A, R1
    	CPL A	
    	MOV P0, A
    	AJMP start
    	 
  • #17 1801316
    pawel129
    Poziom 16  
    Posty: 246
    Pomógł: 2
    Ocena: 4
    DZIĘKI!!!!!!!
  • #18 1983976
    KrzysiekTG
    Poziom 14  
    Posty: 104
    Pomógł: 6
    Ocena: 12
    jak narazie soft robi tylko rejestrację oraz po zarejestrowaniu identyfikację pstylek. W załączniku sofcik. Do projektu wracam w przyszłym roku, tymczasem ....
    Załączniki:
    • ibutton2.zip (1.35 KB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy implementacji systemu zamka elektronicznego opartego na identyfikacji pastylek iButton DS1990A z wykorzystaniem mikrokontrolera AT90S2313. Autor przedstawia program w Bascom, który zapisuje w pamięci EEPROM kontrolera 10 numerów ID iButtonów oraz próbuje porównać odczytany numer ID z aktualnie podłączonym iButtonem. Problemem było prawidłowe odczytanie i porównanie danych z EEPROM, co zostało rozwiązane przez poprawne adresowanie komórek pamięci w pętli. W dyskusji pojawiły się także pytania o implementację w asemblerze (ASM) dla różnych rodzin mikrokontrolerów, w tym 8051, oraz o aspekty sprzętowe czytnika iButton, takie jak podłączenie magistrali 1-wire, sygnalizacja diodowa i sterowanie przekaźnikami przez układ ULN2800. Udostępniono fragmenty kodu ASM do obsługi magistrali 1-wire dla mikrokontrolera 8051, co może być pomocne przy dalszym rozwoju projektu. Autor planuje dalsze prace nad schematem i prototypem czytnika oraz udostępnienie ich na forum.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA