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ęweryfikacja kodu pastylek iButton DS1990A
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
-
- -
- Posty:8
- Rejestracja:4 sie 2004, o 22:40
- Lokalizacja:Taarn. Góry
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
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
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
-
- -
- Posty:8
- Rejestracja:4 sie 2004, o 22:40
- Lokalizacja:Taarn. Góry
Niestety Bascoma nie znam aż tak dobrze Najchętniej wypowiadam się w kwestii asembler/CNie oczekiwałem tego typu porad
Niestety tak zaprezentowany kod trudno się czyta i nie wiadomo gdzie kończy się treść,gdzie zaczyna się kod i gdzie on się kończy. Po coś te tagi zostały stworzone -> aby poprawić czytelność wypowiedzi i ułatwić zadanie ludziom czytającym posty.[/quote]Hi skad dzis takie bojowe nastroje peace
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
Tu bardziej chodzi o ogarnięcie wzrokiem całego kodu... I kółko w myszce niewiele tu pomoże (kod będzie się poruszał, a powinien być w pełni statyczny, coby sie skupić na meritum problemu a nie na śledzeniu literek latających po ekranie). W wielu podręcznikach programowania zalecają, żeby procedura nie wychodziła poza ekran, właśnie ze względu na trudności w analizie kodu
Natomiast wracając do meritum problemu : nie badzo wiadomo co jest problemem w tym kodzie (zupełny brak komentarzy) ale ja bym to zrealizował w ten sposób, że w przypadku niezgodności fragmentu numeru ustawiana jest jakaś flaga (bez jej zerowania tak jak obecnie - moze się zdarzyć że ostatnie porównanie będzie pozytywne przy poprzednich negatywnych a program zareaguje jak na właściwą pastylkę)
chodzi mi o ten fragment :
Natomiast wracając do meritum problemu : nie badzo wiadomo co jest problemem w tym kodzie (zupełny brak komentarzy) ale ja bym to zrealizował w ten sposób, że w przypadku niezgodności fragmentu numeru ustawiana jest jakaś flaga (bez jej zerowania tak jak obecnie - moze się zdarzyć że ostatnie porównanie będzie pozytywne przy poprzednich negatywnych a program zareaguje jak na właściwą pastylkę)
chodzi mi o ten fragment :
Kod: Zaznacz cały
If Button_number = Register_number(i) Then
Blokada = 1
Else
Blokada = 0
End If
-
- -
- Posty:8
- Rejestracja:4 sie 2004, o 22:40
- Lokalizacja:Taarn. Góry
To daj 10 zmiennych w eeprom i 11 zmiennych w ram tak że po resecie wczytuje te 10 z eeprom do ram a jak znajdzie pastylke to też ją wczytuje do ram (ijaczej się nie da) i porównuje ją z każdą po kolei
proste .
Kod: Zaznacz cały
zamek alias ... ' to wyjście co trzeba
if zmienna01 = zmienna11 then
zamek = 1
* * *
if zmienna10 = zmienna11 then
zamek = 1
return
Odpowiedzi na twoje pytania znajdziesz w projektach AVT5038(EP10/01) Immobilizer z zabezpieczeniem przed porwaniem samochodu - to wyglada podobnie do twojego projektu procek 2313 , mozliwosc rejestracji 5 kluczy, drugi to projekt AVT3006 EdW 02/01 zamek szyfrowy z pastylkami dallas , procek 2051 , mozliwosc rejestracji 10 pastylek , wytnij z kodu potzredbna procedure i gotowe.
>>>wszystko juz bylo<<
>>>wszystko juz bylo<<
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 30 gości