Autor : Velja V. Cvetković

 

          

Dalasovi dugmići ili Touch memory

 

Još jedna novotarija. Njena funkcija je da čoveku olakša (ili iskomplikuje) ulazak u prostoriju ili da mu se zabeleži svako zakašnjenje na posao. Izgleda prosto. Liči na dugmastu bateriju. Ako ga (je) izgubite nikad više takav (takvu) nećete naći! čak ne možete ni duplikat kod "ključara" da napravite.

Ali to je prava stvar! svi ovi "nedostaci" posmatrani sa druge strane "crte" su u stvari prednosti. U prošlosti, obične klučeve su zamenile magnetne kartice, koje su bile lagane i tanke, mogle su da se nose u novčaniku. a njima dolaze čip kartice koje su imale iste fizičke osobime, s tim što nisu osetljive na magnetno polje.

Z Smanjena je mogućnost zloupotrebe. Ali sve je to nekako škripalo. Polovinom devedesetih, DALLAS predstavlja Tuch memory (tač memorija). Postoji čitava paleta čipova iz ove serije i to sa raznim osobinama i funkcijama (NVRAM, ROM, EPROM, termometar, sat realnog vremena...). Pri poređenju sa klasičnim ključevima i raznim karticama zapažaju se sledeće osobine:

  1. Tač memorije su manje,

  2. Nisu osetljive na magnetno polje,

  3. Kućište je od nerđajućeg čelika, pa su otporne na atmosverske uticaje,

  4. Ne postoje dve iste tač memorije (248 kombi-nacija),

  5. Lako ostvarivanje više mesta za očitavanje.

Ovo su neke od osobina koje krase ovaj medijum. Peta tačka predstavlja veoma bitnu stavku pri projektovanju sistema sa više mesta za očitavanje. Naime, na mestu za očitavanje se nalazi samo kontakt na koji se prisloni tač memorija i iznad njega LED koja služi za indikaciju. Više mesta se jednostavno paralelno povezuje četvorožilnim kablom. Ako smatramo da nam indikacija LED-om ne treba, povezivanje se vrši dvožilnim kablom! Velika ušteda u materijalu, naročito ako je rastojanje 300m. Dalje, čip kartice su elegantna i praktična stvar i najlepše stoje na džepu belog mantila. Ali, ne zaboravite, ne radimo svi u laboratorijama. Registracija vremena je obavezna i za zidare, varioce, rudare... Ta kartica treba da preživi i uslove u kojima oni rade.

Do sada ste čitali po nešto o opštim osobinama tač memorije. Izbor karakteristika sam sam napravio kako bi prosečan čitalac bio zainteresovan da nastavi čitanje.

Kada sam se prvi put sreo sa tač memorijama, zainteresovao me je način na koji one rade. Praktično, imaju samo dva pola. Masu (zajednički kontakt) i "vrući" kontakt. Ovaj drugi kontakt ima dvostruku funkciju. Preko njega se tač memorija i napaja i vrši komunikacija. Protokol komunikacije je nazvan One Wire protocol (jednožični protokol). Pošto ne postoji klok linija koja bi služila za sinhronizaciju, svi signali su strogo vremenski definisani. U aplikacionoj noti an74.pdf mogu se pronaći sve informacije o serijskoj komunikaciji tač memorija sa PC-jem ili mikrokontrolerom. Ovu aplikacionu notu možete naći na DALLAS-ovom sajtu. Elem, sve je to jasno kada se pročita, ali treba praktično to realizovati. Ljubaznošću firme CardWare dobio sam uzorke tač memorije DS 1990A. Ovo je ROM sa upisanim jedinstvenim serijskim brojem. Taj je broj dužine 64 bita od čega je najnižih osam oznaka porodice tač memorija (za DS1990A je 01) a najviših osam CRC kod. Taj broj je takođe izgraviran na kućištu.

Praktična realizacija
Da bi se bolje shvatio princip delovanja, svrha i namena tač memorija, napravio sam jedan sklop, koji se može upotrebiti kao elektronska brava. Pri dodiru kontakta tač memorijom vrši se isčitavanje šezdesetčetvorobitnog broja. Taj broj se u mikrokontroleru poredi sa brojevima koji su prethodno upisani u EEPROM mikrokontrolera. Ako je broj tač memorije identičan sa nekim od brojeva iz memorije, dolazi do aktiviranja relea u trajanju od oko 2 sekunde. 

Ako se uređaj koristi kao elektronska brava, za to vreme je brava oslobođena i vrata se mogu otvoriti Utom intervalu se čuje i zvučni signal iz piezo zujalice. Frekvencija bi trebala da je oko 4kHz. Ovo je rezonantna frekvencija zujalice pa je i zvuk na toj frekvenciji najači.

Iz sheme se vidi da je hardver veoma jednostavan. Odabrao sam ATMEL-ov AT90S1200 mikrokontroler. Ovom mikrokontroleru nije potrebno dodavati pull-up otpornike pošto ih već sadrži u sebi. Rele je za napon 5V. Zainteresovani za uređaje za registraciju radnog vremena i ostale aplikacije sa tač memorijama više mogu informacija mogu dobiti od firme CardWare.

download: PCB & SCH fajlovi


Program 1:
Očitavanje TUCH Memorija AVR-ovim čipom 1200
;*Includes*

.include "1200def.inc"

;* Pin Definitions*

.equ RxD =6
.equ TxD =0
.equ LED =2

;*Global Register Variables*

.def greska =r16
.def temp1 =r17
.def temp2 =r18
.def temp3 =r19
.def acca =r20
.def accb =r21
.def ZL =r30
.def ZH =r31

;* Interrupt Vectors*

rjmp RESET

;*************
;* FUNCTION
;*
;* w30us (1+(1+2)*79+4=242=30.25us)
;*************

w30us:
ldi temp1,79 ;1~
tloop1: dec temp1 ;1~
brne tloop1 ;2~ 1+(1+2)*79+4=242=30.25us
ret ;4~

;*************
;* FUNCTION
;*
;* w5us
;*************

w5us:
ldi temp1,12 ;1~
tloop2: dec temp1 ;1~
brne tloop2 ;2~ 1+(1+2)*13+4=242=5.5us
ret ;4~

;*************
;* FUNCTION
;*
;* w480us
;*************

w480us:
ldi temp1,0x5
tl13: ldi temp2,0xff
tl12: dec temp2
brne tl12
dec temp1
brne tl13
ret

;*************
;* FUNCTION
;*
;* w300us
;*************

w300us:
ldi temp1,0x4
tl23: ldi temp2,0xff
tl22: dec temp2
brne tl22
dec temp1
brne tl23
ret

;*************
;* FUNCTION
;*
;* w200ms
;*************

w200ms: ldi temp3, 16 ;1~
tl3: ldi temp2, 0x82 ;1~
tl2: ldi temp1, 0xff ;1~
tl1: dec temp1 ;1~
brne tl1 ;2~
dec temp2 ;1~
brne tl2 ;2~
dec temp3 ;1~
brne tl3 ;2~
ret ;4~

;*************
;* FUNCTION
;*
;* test
;*************

test: sbi PORTD,0 ; Tx =1
rcall w480us
cbi PORTD,0 ; Tx =0
rcall w30us
rcall w30us
rcall ima
ret

;*************
;* FUNCTION
;*
;* ima
;*************

ima: in acca,pind
andi acca,0x40
brne l2
ldi greska,0x02
l2: rcall w480us
ret

;*************
;* FUNCTION
;*
;* citanje
;*************

citanje:
rcall w_one
rcall w_one
rcall w_zero
rcall w_zero
rcall w_one
rcall w_one
rcall w_zero
rcall w_zero
ret

;*************
;* FUNCTION
;*
;* w_one
;*************
w_one:
sbi portd,TxD
rcall w5us
cbi portd,TxD
rcall w60us

ret

;*************
;* FUNCTION
;*
;* w_zero
;*************
w_zero:
sbi portd,TxD
rcall w60us

cbi portd,TxD
rcall w5us
ret

;*********************************
;* FUNCTION
;*
;* w60us (1+(1+2)*160+4=125~=60.62us
;*********************************
w60us:
ldi temp1,160 ;1~
tl4: dec temp1 ;1~
brne tl4 ;2~
ret ;4~

;*********************************
;* FUNCTION
;*
;* read_no
;*********************************
read_no:
clr ZH
ldi ZL,0x08
rl2: dec ZL
ldi temp3,0x08
clr acca
rl1: asr acca
andi acca,0x7f
sbi portd,TxD
nop
nop
nop
nop
cbi portd,TxD
rcall w5us
in accb,pind
lsl accb
andi accb,0x80
rcall w60us
add acca,accb
dec temp3
brne rl1
st Z,acca
cpi ZL,0x00
brne rl2
ret

;*************
;* FUNCTION
;*
;* r_bit
;*************

EERead_seq:
in temp1,EEAR ;get address
inc temp1 ;increment address
out EEAR,temp1 ;output address
sbi EECR,EERE ;set EEPROM Read strobe
;This instruction takes 4 clock cycles since
;it halts the CPU for two clock cycles
sbi EECR,EERE ;set EEPROM Read strobe 2nd time
;This instruction takes 4 clock cycles since
;it halts the CPU for two clock cycles
in temp2,EEDR ;get data
ret

 

;***** Copy 8 bytes of EEPROM to registers
copy:

out EEAR,accb ;EEAR <- $ff (start address - 1)
ldi ZL,8 ;Z-pointer points to r8
loop2: rcall EERead_seq ;get EEPROM data
st Z,temp2 ;store to SRAM
inc ZL
cpi ZL,16 ;reached the end?
brne loop2 ;if not, loop more
ret

;*************
;* FUNCTION
;*
;* provera
;*************
provera:
ldi temp3,0x08
mov acca,r0
mov accb,r8
rcall lp1
mov acca,r1
mov accb,r9
rcall lp1
mov acca,r2
mov accb,r10
rcall lp1
mov acca,r3
mov accb,r11
rcall lp1
mov acca,r4
mov accb,r12
rcall lp1
mov acca,r5
mov accb,r13
rcall lp1
mov acca,r6
mov accb,r14
rcall lp1
mov acca,r7
mov accb,r15
rcall lp1
ret

lp1: cpse acca,accb
ret
dec temp3
breq lp2
lp3: ret

lp2: ldi greska,0x08
rjmp lp3

;*********************************
; beep Tonski signal, LED i rele
;*********************************
beep:
sbi portd,LED
ldi acca,0x07
bl2: ldi temp3,0xff
bl1: sbi portd,1
rcall w300us
cbi portd,1
rcall w300us
dec temp3
brne bl1
dec acca
brne bl2
clr greska
cbi portd,LED
ret

RESET:

main:
clr greska
ldi temp1,0xff
out ddrb,temp1
sbi DDRD,2
sbi DDRD,1
sbi DDRD,0
l6: rcall test
andi greska,0x02
breq l6
rcall citanje
rcall read_no
ldi accb,0xff
rcall copy
rcall provera
andi greska,0x08
breq ll1
rcall beep
ll1: ldi accb,0x07
rcall copy
rcall provera
andi greska,0x08
breq ll2
rcall beep
ll2: rjmp main

 

 

Pročitajte više o ovoj temi
AT89C2051 uvod 
Programiranje Atmelovog mikrokontrolera AT89C2051 
Mikrokontrolerski regulator brzine i smera DC motora 
Programator Atmel mikrokontrolera 

C o p y r i g h t  1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji