http://www.elektronika.ba/forum/viewtop ... 208#p77208
Rađeno u suradnji sa @alexa_pg koji je postavio hardversku koncepciju.
Zadatak uređaja je da zabrani određenu vrstu TLF poziva, odnosno u ovom slučaju brojeve koji su duži od 6 cifara. Kod nas u BiH se to odnosi na međugradske i pozive na mobitele.
To ograničenje se može postaviti ili ukloniti ukucavanjem šifre preko brojčanika telefona.
Uređaj je tek urađen i u fazi je testiranja, za sada nema problema i ubrzo će zauzeti svoje mjesto na tavanu na TLF liniji nakon ADSL splitera.
Uređaj kontroliše samo MFC (DTMF) biranje a ne i dekadno, kada bih ga ponovo radio, povezao bih signal mimo DTMF receivera na jedan slobodni pin na PIC-u, pa bi se dekadno biranje moglo takođe "obrađivati" ili potpuno zabraniti.
Evo najjednostavnijeg kod-a za rad ovog "stroja"
Code: Select all
@ DEVICE pic16f84a,XT_OSC,WDT_OFF,PROTECT_OFF 'definicija konfiguracije
DEFINE OSC 4 'definicija oscilatora
TRISA=8 'samo RA3 ulazni
TRISB=255 'PortB ulazni
low OPTION_REG.7 'postavljanje pull-up na portB
symbol TelOFF=Porta.2 'prekid TLF veze
symbol CitaJ=Porta.3 'signal za citanje PortB
rB var byte 'redni broj cifre u pozivanom TLF broju
nST var bit 'novo stanje ulaza
sST var bit 'staro stanje ulaza
DozvolA var byte 'pozivi bez ogranicenja - cita iz eproma
NumE var word
'vrijednost na PORTB u zavisnosti od stisnute tipke
'--------------------------------------------------------------
'0-245 1-248 2-244 3-252 4-242 5-250
'6-246 7-254 8-241 9-249 #-243 *-253
'--------------------------------------------------------------
MaiN:
read 0,dozvola 'cita stanje ogranicenja iz eproma
rb=0 :nume=0 :sst=0 :teloff=0 'postavi TLF na start biranja i promjenjivu za smjestaj
'-----------------------------------
Petlja:
nst=citaj 'postoji li DTMF signal
if nst>sst then 'ako postoji...
if PORTB=243 then sst=nst:goto EpromIO 'ako je ocitan znak # idi na EpromIO
if dozvola=1 then goto petlja 'ako nema ogranicenja vrati se na pocetak
rb=rb+1 'uvecaj brojac za jedan
if rb>6 then goto prekid 'ako je birano vise od sest cifri
endif 'kraj uslova za pojavu DTMF signala
sst=nst 'izjednaci promjenjive
goto petlja 'povrat na ocitanje nove cifre
'----------------------------------------
EpromIO: 'potprogram za citanje/upis eproma
nst=citaj 'postoji li DTMF signal
if nst>sst then 'ako postoji...
nume=nume+PORTB 'uvecaj promjenjivu za vrijednost PORTB
select case nume 'u zavisnosti od vrijednosti promjenjive
case 490 'ocitano 00 - pozivi ograniceni
write 0,0 'upisi nulu u eprom
pause 10 'pauziraj radi sigurnog upisa
goto prekid 'prekini vezu
case 496 'ocitano 11 - bez ogranicenja
write 0,1 'upisi jedinicu u eprom
pause 10 'pauziraj radi sigurnog upisa
goto prekid 'prekini vezu
case is>500 'ako sucajno promasi ocitanje
goto prekid
end select
endif
sst=nst 'izjednaci promjenjive
goto epromio 'povrat na ocitanje nove cifre
'--------------------------------------
PrekiD:
teloff=1
pause 300
goto main
end
Mogućnosti su bezbrojne, mogli bi se zabraniti ili dopustiti samo određeni brojevi...mogli bi se zabranjeni (dopušteni) brojevi unositi u eprom PIC-a putem TLF brojčanika...itd.
Volio bih kada bi neki bolji programer pokušao napisati neki zbilja ozbiljniji program, ili barem da da ideju, pa da probam.
U prilogu su PCB u PDF-u i Layout-u i sema.