85_87.pdf

(238 KB) Pobierz
Dyskryminator telefoniczny
P R O J E K T Y C Z Y T E L N I K Ó W
Dzia³ "Projekty Czytelników" zawiera opisy projektów nades³anych do redakcji EP przez Czytelników. Redakcja nie ponosi
odpowiedzialnoci za poprawnoæ tych projektów, gdy¿ nie testujemy ich laboratoryjnie.
Prosimy o nadsy³anie w³asnych projektów z modelami (do zwrotu). Do artyku³u nale¿y do³¹czyæ podpisane owiadczenie,
¿e artyku³ jest w³asnym opracowaniem autora i nie by³ dotychczas nigdzie publikowany . Honorarium za publikacjê
w tym dziale wynosi 200,- z³ (brutto) za 1 stronê w EP. Przysy³anych tekstów nie zwracamy. Redakcja zastrzega sobie
prawo do dokonywania skrótów.
Dyskryminator telefoniczny
Prezentujemy pierwszy
z projektów nagrodzonych
w konkursie EP, który by³
powiêcony opracowaniu
systemu
mikroprocesorowego na
dowolnym
mikrokontrolerze
8-bitowym.
Jest to dyskryminator
po³¹czeñ telefonicznych,
który zapobiega
mo¿liwoci
wykorzystywania
zabezpieczanego telefonu
do doprowadzenia firmy
do stanu upad³oci, o co
przy dzisiejszych
stawkach za impulsy, nie
jest trudno.
Projekt
035
W³aciwoci dyskryminatora
3
wspó³pracuje z telefonem
z wybieraniem impulsowym;
3
nie wymaga zewnêtrznego ród³a
zasilania;
3
umo¿liwia niezale¿ne ustawienie
uprawnieñ na:
1-miasto, infoliniê (0800..)
i telefony komórkowe (090..),
2-konkursy (0700..),
3-kraj (0..),
4-wiat (00..);
3
zawsze mo¿na dzwoniæ na numery
alarmowe (9..).
Rys. 1.
Jeli nie mo¿emy zdys-
cyplinowaæ domowników
lub pracowników a rachun-
ki telefoniczne ci¹gle rosn¹,
przyda siê urz¹dzenie, któ-
re zrobi to za nas - dyskry-
minator telefoniczny.
Wprawdzie Telekomuni-
kacja Polska S.A. na ¿¹da-
nie abonenta mo¿e zabloko-
waæ automatyczne numery
kierunkowe miêdzynarodo-
we i miêdzymiastowe, staje
siê to jednak k³opotliwe,
gdy naprawdê musimy
gdzie zadzwoniæ, a rozmo-
wê trzeba zamawiaæ przez
telefonistkê.
Opis uk³adu
Schemat elektryczny uk³adu
przedstawiono na rys. 1 . Dys-
kryminator w³¹cza siê szerego-
wo z aparatem telefonicznym.
Mostek diodowy MD1 umo¿li-
wia poprawn¹ pracê licznika
niezale¿nie od aktualnej pola-
ryzacji napiêcia z centrali. Dio-
da lawinowa D1 zabezpiecza
tranzystor T2 przed zbyt wyso-
kim napiêciem, mog¹cym poja-
wiæ siê w linii telefonicznej.
Rolê stabilizatora pe³ni
dioda Zenera D3. Przez dio-
dê Schottky'ego D2 napiêcie
jest podawane na kondensa-
tory C3 i C4. Elementy te
pe³ni¹ rolê zasilacza. Rów-
noczenie napiêcie z diody
D3 jest podane na wejcie
P1.0 procesora U1. Z tego
wejcia procesor wczytuje
informacjê o tym, czy p³y-
nie, czy nie p³ynie pr¹d
w pêtli abonenckiej. Rezys-
tor R3 ustala próg czu³oci
uk³adu wejciowego. Tran-
zystory T2 z rezystorem R1
i T1 z rezystorem R2 pe³ni¹
rolê klucza przerywaj¹cego
liniê telefoniczn¹ sterowa-
nego z wyjcia P3.0 uk³adu
U1. Procesor przerywa liniê,
gdy zostanie wybrany zabro-
niony numer.
Elektronika Praktyczna 9/97
85
30482266.007.png 30482266.008.png 30482266.009.png 30482266.010.png 30482266.001.png 30482266.002.png
P R O J E K T Y C Z Y T E L N I K Ó W
Listing 1.
#include <io51.h>
interrupt [0x0B] void odb_imp(void)
/* obs³uga przerwania od T0
*/
{
#define L_CYFR 4 /* liczba cyfr nadzorowanych */
CZYTAJ = 0;
TR0 = 0; /* prze³aduj timer */
TF0 = 0;
TL0 = LOW( CZAS_10MS );
TH0 = HIGH( CZAS_10MS );
TR0 = 1;
#define WEJSCIE P1.0 /* wejscie detektora petli 1-p³ynie pr¹d */
#define PRZER P3.0 /* wyjcie na klucz przerywaj¹cy 1-klucz zwarty */
#define CZYTAJ P1.3 /* wyjcie zezwalaj¹ce na czytanie DIP-SWITCH-a*/
#define WE_SWIAT P1.4 /* wejcie 0-zezwolenie na rozmowy miêdzynarodowe*/
#define WE_KRAJ P1.5 /* wejcie 0-zezwolenie na rozmowy miêdzymiastowe*/
#define WE_KONKURS P1.6 /* wejcie 0-zezwolenie na numery 0700 */
#define WE_MIASTO P1.7 /* wejcie 0-zezwolenie na numery miejskie */
if( !WEJSCIE ) /* czytaj stan pêtli */
{
zwarcie = 0;
if( przerwa != MAX )
przerwa++;
#define ZWARCIE 2 /* min. czas zwarcia w cyfrze *10ms */
#define PRZERWA 4 /* min. czas przerwy w cyfrze *10ms */
#define CYFRA 20 /* min. odstêp miêdzy cyframi *10ms */
#define ODLOZENIE 10 /* min. czas dla od³o¿enia *10ms */
#define PODNIESIENIE 20 /* min. czas dla podniesienia *10ms */
#define MAX 255 /* granica zliczania próbek */
}
else
{
przerwa = 0;
if( zwarcie != MAX )
zwarcie++;
#define KWARC 3579545 /* czêstotliwoæ kwarcu */
}
#define CZAS_10MS (int)(-KWARC/12 * 10/1000)
switch( faza )
{
#define LOW( liczba ) ( (char)( (int)(liczba) ) )
#define HIGH( liczba ) ( (char)( ( (int)(liczba) ) >> 8 ) )
/****************************************************************************/
/* S T A L E G L O B A L N E */
/****************************************************************************/
const char ALARM[] = "9...";
const char MIASTO[] = "z...0800090.";
const char KONKURS[] = "0700";
const char KRAJ[] = "01..02..03..04..05..06..070z07z007zz08..09z.";
const char SWIAT[] = "00..";
case 0: /* spoczynek */
if( zwarcie == PODNIESIENIE )
faza = 1;
break;
case 1: /* podniesienie */
for( i = 0; i < L_CYFR; i++ )
numer[i] = 0;
cyfra = 0;
faza = 2;
break;
/****************************************************************************/
/* Z M I E N N E G L O B A L N E */
/****************************************************************************/
char numer[L_CYFR]; /* bufor odbieranych cyfr */
char przerwa, zwarcie; /* liczniki czasu przerwy, zwarcia pêtli */
char faza; /* numer fazy */
char cyfra; /* numer kolejny odbieranej cyfry */
char i;
case 2:
/* zmienna indeksuj¹ca */
if( przerwa == PRZERWA ) /* oczekiwanie na przerwê */
faza = 3;
if( (zwarcie == CYFRA) && (numer[cyfra] != 0) )
/* koniec cyfry */
{
if( cyfra == L_CYFR )
faza = 4; /*sprawdzono wszystkie nadzorowane cyfry*/
else
{
/****************************************************************************/
/* F U N K C J E */
/****************************************************************************/
cyfra++; /* wczytuj nastêpn¹ cyfrê */
if( !( test(ALARM) || !WE_MIASTO
&& test(MIASTO) || !WE_KONKURS
&& test(KONKURS) || !WE_KRAJ
&& test(KRAJ) || !WE_SWIAT
&& test(SWIAT) ) )
faza = 5;
char test(char* t)
{ /* wraca z 1 jeli numer zawiera siê we wzorcu */
char porow = 0;/* licznik porównañ */
char wynik = 0;/* licznik zgodnych cyfr */
}
}
break;
i = 0;
while( *t )
{
if( numer[i] )
{
porow++;
switch( *t )
{
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if( numer[i] == ((*t) - '0') )
wynik++;
break;
case 3:
if( zwarcie == ZWARCIE ) /* oczekiwanie na zwarcie */
{
if( numer[cyfra] < 10 ) /* nie wiêcej ni¿ 10 impulsów*/
numer[cyfra]++;
faza = 2;
}
if( przerwa == ODLOZENIE )
faza = 5;
break;
case 4: /* oczekiwanie na roz³¹czenie */
if( przerwa == ODLOZENIE )
faza = 5; /* dodaj w³asne roz³¹czenie */
break;
case 5: /* roz³¹cz */
PRZER = 0;
faza = 0;
break;
}
CZYTAJ = 1;
case '0':
if( numer[i] == 10 )
wynik++;
break;
}
/***************************************************************************/
/* P R O G R A M G L O W N Y */
/***************************************************************************/
void main(void)
{
case 'z':
if( numer[i] != 10 )
wynik++;
break;
default :
wynik++;
faza = 0;
zwarcie = 0;
przerwa = 0;
}
}
t++;
i++;
if( i == L_CYFR )
{
TMOD &= 0xf1; /* ustawienie i uruchomienie T0 */
TMOD |= 0x01;
TR0 = 0;
TF0 = 0;
TL0 = 0xff;
TH0 = 0xff;
PT0 = 0;
IE |= 0x82;
TR0 = 1;
for(;;)
i = 0;
if( wynik == porow ) return( 1 );
porow = 0;
wynik = 0;
}
}
return( 0 );
/* g³ówna pêtla programu */
;
}
}
86
Elektronika Praktyczna 9/97
30482266.003.png
P R O J E K T Y C Z Y T E L N I K Ó W
WYKAZ ELEMENTÓW
Rezystory
R1, R2, R5: 100k
W
dok³adnegosprawdzeniapo-
prawnocimonta¿u.Nastêp-
nym krokiem jest w³¹czenie
dyskryminatora szeregowo
z aparatem telefonicznym
z wybieraniem impulso-
wym. Po podniesieniu mik-
rotelefonu na kondensatorze
C4 powinno pojawiæ siê na-
piêcie oko³o 6V.
Nastêpnie nale¿y usta-
wiæ wszystkie pozycje prze-
³¹cznika SW1 na OFF. W tej
sytuacji powinno udaæ siê
zadzwoniæ do numerów za-
czynaj¹cych siê na 9, np. ze-
garynki (926). Inne po³¹cze-
nia powinny zostaæ prze-
rwane w momencie wykry-
cia pierwszej niedozwolonej
cyfry.
Na koniec mo¿na usta-
wiæ SW1 zgodnie z w³as-
nym ¿yczeniem i uk³ad jest
gotowy do pracy.
R3, R6: 1k
W
W
Kondensatory
C1, C2: 33pF
C3: 100nF/63V
C4: 2200
F/16V
Pó³przewodniki
U1: AT89C2051
T1: BC558
T2: BC547
T3: BC880
MD1: mostek Graetza
1A/100V
D1: BZW06-64V
D2: 1N5817
D3: C6V2 1,3W
D4: C3V3 0,4W
Ró¿ne
Kwarc Q1: 3,579545MHz
Pre³¹cznik SW1: DIP4
Z³¹cze Z1: ARK2
Podstawka pod U1: DIL20
m
Rys. 2.
sta³e do programu i nie ma
mo¿liwoci ich zmiany. De-
klaracja tablic wygl¹da na-
stêpuj¹co:
const char ALARM[] = 9...;
const char MIASTO[] = z...0800090.;
const char KONKURS[] = 0700;
const char KRAJ[] =
01..02..03..04..05..06..070z07z007zz08..09..;
const char SWIAT[] = 00..;
Tablica ALARM[] jest
dozwolona zawsze i obe-
jmuje numery zaczynaj¹ce
siê cyfr¹ 9....
Tablica MIASTO[] jest
udostêpniana po zwarciu
pozycji 1 SW1. Obejmuje
numery zaczynaj¹ce siê od
cyfry ró¿nej od zera z...,
numery infolinii zaczynaj¹-
ce siê od cyfr 0800 i nu-
mery telefonów komórko-
wych 090..
Tablica KONKURS[] jest
udostêpniana po zwarciu
pozycji 2 SW1 i obejmuje
numery zaczynaj¹ce siê na
0700.
Tablica KRAJ[] jest udo-
stêpniana po zwarciu pozy-
cji 3 SW1. Obejmuje nume-
ry zaczynaj¹ce siê od 01..
do 09.., z wyj¹tkiem nu-
merów zaczynaj¹cych siê na
0700. Mo¿na zauwa¿yæ, ¿e
tablica ta zezwala równie¿
na rozmowy z numerami in-
folinii i telefonami komór-
kowymi.
Tablica SWIAT[] jest
udostêpniana po zwarciu
pozycji 4 SW1 i obejmuje
numery zaczynaj¹ce siê na
00...
Funkcja sprawdzaj¹ca
traktuje: cyfry - dos³ownie,
z to cyfra ró¿na od zera,
pozosta³e znaki m.in. . to
dowolna cyfra.
Tomasz Gumny
Oprogramowanie
Program dyskryminatora
napisano w jêzyku C (IAR
Systems) - list.1 . Po skom-
pilowaniu program zajmuje
nieca³y 1KB pamiêci progra-
mu i kilkadziesi¹t bajtów
wewnêtrznej pamiêci da-
nych. Praca programu pole-
ga na odbieraniu cyfr nada-
wanych impulsowo przez
telefon. Odbierane s¹ pier-
wsze cztery cyfry. Je¿eli wy-
bierany numer nie nale¿y do
dozwolonych, po³¹czenie
jest przerywane.
Program po wykryciu
uderzenia w wide³ki dodaje
w³asne roz³¹czenie, unie-
mo¿liwiaj¹c obejcie dyskry-
minatora.
Tablice numerów do-
zwolonych s¹ wpisane na
Uk³ad zerowania proce-
sora T3, R4, R5, D4, R6 po-
woduje uruchomienie pro-
cesora dopiero po osi¹gniê-
ciu przez napiêcie zasilaj¹-
ce poziomu oko³o 3,5V. Za-
pewnia to pewny start pro-
cesora pomimo silnych wa-
hañ napiêcia zasilania
w czasie pracy. Prze³¹cznik
SW1 umo¿liwia ustawienie
dozwolonych kierunków dla
danego telefonu.
Uruchomienie
Uk³ad zmontowany na
p³ytce drukowanej przedsta-
wiono na rys. 2 . Urucho-
mienie nale¿y rozpocz¹æ od
Elektronika Praktyczna 9/97
87
R4: 10k
30482266.004.png 30482266.005.png 30482266.006.png
Zgłoś jeśli naruszono regulamin