![[Rozmiar: 10329 bajtów]](naglowek.gif)
Haha to nie żart! :D Ten sejf da się otworzyć jeśli przyłożysz ucho albo stetoskop jak Olsen. Działa tak. Gdy kręcisz pokrętłem sejfu ten cichutko tyka. Dźwięk to prawdziwy dźwięk z zegarka przekonwertowany w postać binarna i zapisany w eepromie procesora. Dźwięk odtwarzany jest za pośrednictwem dwóch pinów procesora i kondensatora. Ja podłączyłem do tego jedną słuchawkę.
![[Rozmiar: 5761 bajtów]](rc2_simple.jpg)
Jak w prawdziwym sejfie trzeba najpierw pokręcić w prawo i ustawić Code(1) potem w lewo i ustawić Code(2). Ostatecznie znów w prawo i ustawić Code(3). Jesli jesteś pewien kodu, naciska się przycisk enkodera i drzwi się otwierają. Jeśli gdziekolwiek się pomylisz kosztuje Cię to czas zdefiniowany w programie jako Safetime. Okazuje się jednak że kodu nie musisz znać. Jeśli naciśniesz na 3 sekundy przycisk enkodera to uaktywni sie "Olsen Mode" :D W trybie Olsena można usłyszeć malusieńki dodatkowy "tyk" gdy kod cyfry się zgadza :D Wtedy trzeba już kręcić w druga stronę. Lcd jest tylko do celów szkoleniowych dla włamywaczy :D i gdy u góry w programie wpisze się Lcd_on_board = 0 to nie będzie on w ogóle skompilowany i kod jest dużo mniejszy. Można dopisać sobie procedurę zmiany kodu, której nie potrzebowałem. Kod jest w eepromie.
'------------------------------------------------------------------
' The real Olsen`s gang Safe from Franc Jager :D
' Sound "tick" is produced when encoder turn.
' In Olsen mode additional "tick" will be heared.
'Special thanks for Evert Dekker ( http://evertdekker.com ) for knowledge sharing.
' Sound pattern is in eeprom and played via two R and C
' BARTek EDC bartek.niveasoft@gmail.com
'------------------------------------------------------------------
$regfile = "attiny2313a.dat"
$crystal = 12000000
$hwstack = 32
$swstack = 8
$framesize = 16
Const Lcd_on_board = 1
'NOTE THAT LCD IS FOR TRAINING ONLY :D
#if Lcd_on_board = 1
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2
Cursor Off Noblink
Cls
#endif
'Voice pin`s connect together via 10kOhm resistor, then via 100nF to ground. This is audio output.
'headphone or piezo sound good :D
'Sound is realy *.wav "tick" converted to BIN file
Config Portd.4 = Output
Config Portd.5 = Output
Vp1 Alias Portd.4 'Voice pin 1
Vp2 Alias Portd.5 'Voice pin 2
Rygiel Alias Portb.0 'lock
Encoder_sw Alias Pind.6 'enkoder switch
Encoder_a Alias Pind.2
Portd.3 = 1
Portd.2 = 1
Portd.6 = 1
Portb.0 = 1
' pomiedzy wyjscia enkodera a mase podłączone kondensatory 22nF
Config Int1 = Falling
Enable Int1 : On Int1 Encoder_isr
'*** Timer0 Config for 10ms Interrupt CTC Mode ***
Config Timer0 = Timer , Prescale = 1024 , Compare A = Disconnect , Compare B = Disconnect , Clear Timer = 1
Enable Compare0a : On Compare0a Int_10ms : Compare0a = 116
Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Compare B = Disconnect , Clear Timer = 1
Enable Compare1a : On Compare1a Timer1_int : Compare1a = 272 'Crystal/44100 sample rate
Stop Timer1
Dim Bytetodo As Byte , Outbyte As Byte
Dim Bitcount As Byte , N As Byte , S As Byte
Dim Tick As Byte , Code(4) As Byte , Tick_flag As Byte
Dim 1s_flag As Byte , Tryb As Byte , Sounds As Byte
Dim Divider As Byte , Divider2 As Byte , Safe As Byte
Dim Encoder_turn_left As Byte , Encoder_turn_right As Byte
Const Safetime = 8
Const Opentime = 2
Safe = Safetime
For N = 1 To 4
Readeeprom Code(n) , N
Next N
Enable Interrupts
'Turn right to rich Code(1)tick`s then Stop, turn left to Code(2) then Stop,
'next turn right again to Code(3) then Push Encoder Switch.
Do
'-------------- encoder ------------
If 0 < Encoder_turn_left Then
Decr Encoder_turn_left
Incr Tick
Select Case Tryb
Case 1 'First You must turn right so turn left is a mistake
Tryb = 0 'so back to start
Safe = Safetime 'and wait for another try
Case 3
Tryb = 0
Safe = Safetime
End Select
End If
If 0 < Encoder_turn_right Then
Decr Encoder_turn_right
Incr Tick
Select Case Tryb
Case 2 'If Code(1) is riched then automatically Tryb 2 is set
Tryb = 0 'in Tryb 2 turn right is a mistake
Safe = Safetime
Case 4
Tryb = 0
Safe = Safetime
End Select
End If
'-----------------------------------
Select Case Tryb
Case 1
If Tick = Code(tryb) Then
Tryb = 2
If Sounds = 1 Then Gosub Play_sound
Tick = 0
End If
If Encoder_sw = 0 Then Sounds = 1
Case 2
If Tick = Code(tryb) Then
Tryb = 3
If Sounds = 1 Then Gosub Play_sound
Tick = 0
End If
Case 3
If Tick = Code(tryb) Then
Tryb = 4
If Sounds = 1 Then Gosub Play_sound
Tick = 0
End If
Case 4
If Encoder_sw = 0 Then
#if Lcd_on_board = 1
Locate 2 , 1 : Lcd "Open"
#endif
Reset Rygiel
Safe = Opentime
Tryb = 1
Sounds = 0
End If
End Select
'------------------ 1s -------------
If 1s_flag = 1 Then
1s_flag = 0
If Safe > 0 Then Decr Safe
If Safe = 0 Then
If Tryb = 0 Then
Tryb = 1
Tick = 0
Sounds = 0
Else
#if Lcd_on_board = 1
Locate 2 , 1 : Lcd "Safe"
#endif
Set Rygiel
End If
End If
If Encoder_sw = 0 Then Incr S Else S = 0 'If pressed 3 sec
If S = 3 Then Sounds = 1 '*********** OLSEN MODE *************
End If
'-----------------------------------
If Tick_flag = 1 Then
Tick_flag = 0
Gosub Play_sound
End If
Loop
End
'-----------------------------------
Encoder_isr:
Tick_flag = 1
If Encoder_a = 0 Then
Incr Encoder_turn_right
Else
Incr Encoder_turn_left
End If
Return
'-----------------------------------
Play_sound:
N = 11
Bytetodo = 112
Start Timer1
Do
If Bitcount = 7 Then
Readeeprom Outbyte , N
Incr N
Decr Bytetodo
Bitcount = 0
End If
Loop Until Bytetodo = 0
Stop Timer1
Vp2 = 0 : Vp1 = 0
Return
'-----------------------------------------------
Timer1_int:
Vp2 = Vp1
If Bitcount > 0 Then Shift Outbyte , Right , 1
Vp1 = Outbyte.0
Incr Bitcount
Return
'-----------------------------------------------
Int_10ms:
Incr Divider
If Divider = 100 Then
Divider = 0
1s_flag = 1
End If
#if Lcd_on_board = 1
Incr Divider2
If Divider2 = 10 Then
Locate 1 , 1 : Lcd Tick ; " " ; Tryb ; " " ; Safe
Divider2 = 0
End If
#endif
Return
'******************* EEPROM CONTENT ***** CODE IS 8-5-6 ***********************************
'00000000 00 08 05 06 00 00 00 00 00 00 00 00 6E 55 55 75 02 7F 0E 1E ............nUUu...
'00000014 3E 78 7C F0 C0 E8 87 0F FC 38 E0 F7 81 07 0F 1F 1C 86 8F 07 >x|...ç..8..ü....aA.
'00000028 0F 0E FF 02 1F 1F 0A 7C 7E 38 38 F0 7A 54 F4 70 F0 E9 E0 C3 .......|~88.zT.p....
'0000003C 83 E3 CB 92 52 5B A9 55 F4 42 F5 92 AA 55 93 56 4B AA B5 AA â..AR[.U.B.A¬UôVK¬.¬
'00000050 AA 52 55 55 B2 B5 54 55 4D 95 D5 4A AA 4D AD AA 54 55 55 55 ¬RUU..TUMo.J¬M!¬TUUU
'00000064 55 55 55 B5 52 55 55 55 55 55 A5 A5 A5 55 55 55 55 55 55 55 UUU.RUUUUUNNNUUUUUUU
'00000078 55 55 AA UU¬
'******************************************************************************************
$eeprom
Data &H00 , &H08 , &H05 , &H06 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H6E , &H55 , &H55 , &H75 , &H02 , &H7F , &H0E , &H1E
Data &H3E , &H78 , &H7C , &HF0 , &HC0 , &HE8 , &H87 , &H0F , &HFC , &H38
Data &HE0 , &HF7 , &H81 , &H07 , &H0F , &H1F , &H1C , &H86 , &H8F , &H07
Data &H0F , &H0E , &HFF , &H02 , &H1F , &H1F , &H0A , &H7C , &H7E , &H38
Data &H38 , &HF0 , &H7A , &H54 , &HF4 , &H70 , &HF0 , &HE9 , &HE0 , &HC3
Data &H83 , &HE3 , &HCB , &H92 , &H52 , &H5B , &HA9 , &H55 , &HF4 , &H42
Data &HF5 , &H92 , &HAA , &H55 , &H93 , &H56 , &H4B , &HAA , &HB5 , &HAA
Data &HAA , &H52 , &H55 , &H55 , &HB2 , &HB5 , &H54 , &H55 , &H4D , &H95
Data &HD5 , &H4A , &HAA , &H4D , &HAD , &HAA , &H54 , &H55 , &H55 , &H55
Data &H55 , &H55 , &H55 , &HB5 , &H52 , &H55 , &H55 , &H55 , &H55 , &H55
Data &HA5 , &HA5 , &HA5 , &H55 , &H55 , &H55 , &H55 , &H55 , &H55 , &H55
Data &H55 , &H55 , &HAA
$data
Taka umiejętnością otwierania sejfów można błysnąć przed towarzystwem :D .. Co do odtwarzania dzwięku..okazuje się, że jeśli w swoim projekcie masz nieużywana prawie pamięć Eeprom to możesz pokusić się o dodanie dźwięku do niego. Zastąpić jakiś piszczek ladnym jinglem. Plik w formacie wav konwertuje ten program do bin.
![[Rozmiar: 68016 bajtów]](rc soud encoder.jpg)
Pamięci jest trochę potrzebne ale jeśli masz wolna to dlaczego nie? Pierwotnie to czytało z zewnętrznych pamięci I2c, przerobiłem sobie do tego pomysłu i w większych prockach nie takie rzeczy można będzie grać :D W dobie pamięci flash to żadne odkrycie ale może niepotrzebna właśnie komuś ich obsługa, ale ma miejsce w eepromie..