Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięElektroniczny klucz DS1991
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Nie wie ktoś przypadkiem jak wykorzystując AVR odczytać numer seryjny pastylki DS1991 (takiej jak w samochodowych immobilizerach), jaki układ do tego potrzebny by zrealizować komunikację 1-wire między pastylką a procesorem ?
Tu masz procedurki w asemblerze A reszta wiedzy, jak pisał przedmówca w dataszitach Dallasa
Kod: Zaznacz cały
.include "2313def.inc"
#define DQ_PORT DDRD
#define DQ 5
#define SET_DQ cbi DQ_PORT, DQ
#define CLR_DQ sbi DQ_PORT, DQ
; procedura opóźniająca o (5+5*rdel) * 0,25 us
delay:
nop
subi rdel, 1
brne delay
ret
; procedura generujaca sygnał reset na linii 1wire
ow_reset:
cli
CLR_DQ ; stan niski na linii 1wire
ldi rdel, 255 ;
rcall delay ;
ldi rdel, 119 ; opóźnienie ok 480 us
rcall delay ;
SET_DQ ; stan wysoki na linii 1wire
ldi rdel, 255 ;
rcall delay ;
ldi rdel, 119 ; opóźnienie ok 480 us
rcall delay ;
sei
ret
; procedura nadania bitu przez linię 1wire
ow_write_bit:
cli ; zablokowanie przerwań
CLR_DQ ; stan niski na linii 1wire
ldi rdel, 7
rcall delay
cpi acc, 0
breq dalej
SET_DQ
dalej:
ldi rdel, 80
rcall delay
SET_DQ
sei
ret
; procedura odczytu bitu z linii 1wire
ow_read_bit:
cli
CLR_DQ
ldi rdel, 1
rcall delay
SET_DQ
ldi rdel, 11
rcall delay
ldi acc, 1
sbis IN_DQ, DQ
ldi acc, 0
sei
ret
; procedura wsłania bajtu na linię 1wire
ow_write:
mov temp, acc ; zapamiętanie danej wejściowej w rejestrze temp
ldi count, 1 ; załadowanie do licznika wartości początkowej
loop1:
mov acc, temp ; przywrócenie danej wejściowej
and acc, count ; iloczyn logiczny danej wejściowej i licznika
rcall ow_write_bit ; wywołanie procedury zapisu bitu
lsl count ; przesuniecie licznika o 1 bit w lewo
cpi count, 0 ; sprawdzenie, czy licznik = 0
brne loop1 ; jeśli nie to wróc na początek pętli
ret
; procedura odczytu bajtu z linii 1wire
ow_read:
ldi temp, 0 ; wyzerowanie rejestru temp
ldi count, 1 ; załadowanie do licznika wartości początkowej
loop2:
rcall ow_read_bit ; wywołanie procedury odczytu bitu z linii 1wire
cpi acc, 0 ; porównanie zwróconej wartośći z liczbą 0
breq rd1 ; jeśli równe to skocz do rd1
or temp, count ; jeśli rózne to wykonaj sumę logiczną temp i licznika
rd1:
ldi rdel, 6 ; opóźnienie
rcall delay
lsl count ; przesunięcie licznika o 1 bit w lewo
cpi count, 0 ; sprawdzenie, czy licznik = 0
brne loop2 ; jeśli nie to skocz na początek pętli
mov acc, temp ; przepisanie temp do acc
ret
No tak ale ta pastylka działa na zasadzie zbliżenia i w nocie aplikacyjnej nie moge doszukać się schematu układu odbiorczego, w tym cały problem.
Tu jest o jaką pastylkę mi chodzi: http://www.allegro.pl/show_item.php?item=61284437
Tu jest o jaką pastylkę mi chodzi: http://www.allegro.pl/show_item.php?item=61284437
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 40 gości