yakuli17
Üye
- Katılım
- 15 Eki 2009
- Mesajlar
- 6
- Puanları
- 1
- Yaş
- 32
DEVRENİN ÇALIŞMA ŞEKLİ
Bu devrenin çalışma şekli telefonun çalma sayısı belirli bir sayıya ulaştıgında
hat açma rölesi çekip hattı devreye bağlıyor ve güvenlik için konulmuş olan şifrenin
girilmesini bekliyor eger şifre yanlış girilmiş ise hattı tekrar geri açıyor. Şifre dogru ise komutları bekliyor 1'e basılsıdında 1. röle kontak kapatıyor 3. basılınca açıyor 2'ye basıldıgında 2. röle çekiyor 4 basıldıgında kapatıyor 3 ve 4. tuşlarda 3. röleyi kontrol ediyor.
Devre önce hattan gelen zil caldırma sinyalinin darbe sayısını bakıyor uygun sayı elde edildiginde hat açma rölesini çektirerek hattı açıyor. Ondan sonra güvenlik için konmuş olan şifrenin girilmesini bekliyor eger şifre dogru ise geecek olan komutları bekliyor.
DEVREDE KULLANILAN MALZEMELER
5 x 1N4001 - DİYOT
1 x BZXB5C24 - ZENER DİYOT
1 x BZXBC5V6 - ZENER DİYOT
4 x BC547 - TRANSİSTÖR
1 x PIC16F4A
1 x CM8770 - ENTEGRE
3 x KLEMENS
1 x 4N25 - OPTAKUPLÖR
1 x HAT TRAFOSU
1 x LED DİYOT
3 x ROLE
1 x HAT ROLESİ
1 x 3,579Mhz OSİLATÖR
1 x 4 Mhz OSİLATÖR
15 x DİRENÇ
6 x KONDANSATÖR
DEVRENİN PIC 16F84A İLE KODLARI
#include <pic.h>
#include <delay.c>
#define StD RB4
#define HAT_ROLE RA1
#define LED RA2
#define PALS RA0
// 4MHz osilator
__CONFIG(XT&WDTDIS&PWRTEN);
unsigned char kontrol=0;
unsigned int CX;
//----------------------------------------------------------
// Timer alt programi
// 15 saniye suresince tusa basilmadiysa hatti kapatmak icin
//----------------------------------------------------------
void interrupt kesme(void){
CX++;
if(CX>15000)kontrol=1;
T0IF=0; // bayragi temizle
TMR0=131;
}
//----------------------------------------------------------
//----------------------------------------------------------
// ANA PROGRAM
//----------------------------------------------------------
main(void){
unsigned char i,komut,sifre[5],sayac;
//----------------------------------------------------------
// Port konfigurasyonu
//----------------------------------------------------------
TRISB=0x1F; // PORTB'nin RB5,6,7 pinleri cikis,digerleri giris
TRISA=0x01; // RA0 giris digerleri cikis
//----------------------------------------------------------
PORTB=0; // cihazlar enerjisiz
PORTA=0; // hat kapali, LED sonuk
//-------------------------------------------------------------
//Timer islemleri (kesme suresi=1ms)
//-------------------------------------------------------------
T0CS=0; // Dahili clock
PSA=0; // Prescaler TMR0 icin ayarli
PS0=0; PS1=1; PS2=0; // Oran 1:8
ei(); // butun kesmeler etkin
T0IE=0; //Baslangicta timer pasif
T0IF=0; // bayrak temizle
//-------------------------------------------------------------
// resetten sonra 1 saniye bekle
for(i=0;i<4;i++)DelayMs(250);
basla:
sayac=0; CX=0;
for(;{ // zil sayisi belirleme dongusu
while(PALS==1);
sayac++;
if(sayac>50){ // Zil sayisi 2
HAT_ROLE=1; // Hatti ac
sifreoku:
for(i=0;i<5;i++){ // sifreyi al
//--------------------------------------
kontrol=0;
TMR0=131; //
T0IE=1; // TIMER ON
//--------------------------------------
while(StD==0){ // tusa basilmadi ise bekle
if(kontrol==1){ // sure>15s ise hatti kapat
HAT_ROLE=0; goto basla; // basa don
}
else {};
}
T0IE=0; CX=0; // Tusa basildi ise Timer'i durdur, CX'i sifirla
// Boylece yeni bir 15s'lik ek sure kazanilmis olur
sifre=PORTB&0x0F; // sifreyi oku
while(StD==1); // tus basili ise bekle
}
//--------------------------------------
// sifrenin son hanesi * olmalidir
//--------Sifre konrol------------------
if(sifre[0]==1 && sifre[1]==2 && sifre[2]==3 && sifre[3]==4 && sifre[4]==11){
// 11 degeri tus takimindaki * tusuna karsilik gelir.
LED=1; // sifre dogru ise LED'i yak
for(;{
while(StD==0); // cihazlar icin komut bekle
komut=PORTB&0x0F;
if(komut==1)RB5=1; // cihaz 1 ON
if(komut==2)RB6=1;
if(komut==3)RB7=1;
if(komut==4)RB5=0; // cihaz 1 OFF
if(komut==5)RB6=0;
if(komut==6)RB7=0;
if(komut==12){ // # tusuna basildi ise hatti kapat
HAT_ROLE=0; LED=0; goto basla;
// Cihazlarin ON/OFF durumlari degismeden kalir.
}
}
//--------------------------------------
}
else{
goto sifreoku; //sifre yanlis ise tekrar sifre okumaya git
}
}
else{ // sayac<50 ise
while(PALS==0);
}
} // for dongusu
}
YARDIMINIZI İSTEDİĞİM KONU İSE BU DEVRE ŞEMASINI BASKI DEVRE PLAKETİNE NASIL GEÇİRECEĞİM. BU KONU HAKKINDA YARDIMLARINIZI BEKLİYORUM.
Bu devrenin çalışma şekli telefonun çalma sayısı belirli bir sayıya ulaştıgında
hat açma rölesi çekip hattı devreye bağlıyor ve güvenlik için konulmuş olan şifrenin
girilmesini bekliyor eger şifre yanlış girilmiş ise hattı tekrar geri açıyor. Şifre dogru ise komutları bekliyor 1'e basılsıdında 1. röle kontak kapatıyor 3. basılınca açıyor 2'ye basıldıgında 2. röle çekiyor 4 basıldıgında kapatıyor 3 ve 4. tuşlarda 3. röleyi kontrol ediyor.
Devre önce hattan gelen zil caldırma sinyalinin darbe sayısını bakıyor uygun sayı elde edildiginde hat açma rölesini çektirerek hattı açıyor. Ondan sonra güvenlik için konmuş olan şifrenin girilmesini bekliyor eger şifre dogru ise geecek olan komutları bekliyor.
DEVREDE KULLANILAN MALZEMELER
5 x 1N4001 - DİYOT
1 x BZXB5C24 - ZENER DİYOT
1 x BZXBC5V6 - ZENER DİYOT
4 x BC547 - TRANSİSTÖR
1 x PIC16F4A
1 x CM8770 - ENTEGRE
3 x KLEMENS
1 x 4N25 - OPTAKUPLÖR
1 x HAT TRAFOSU
1 x LED DİYOT
3 x ROLE
1 x HAT ROLESİ
1 x 3,579Mhz OSİLATÖR
1 x 4 Mhz OSİLATÖR
15 x DİRENÇ
6 x KONDANSATÖR
DEVRENİN PIC 16F84A İLE KODLARI
#include <pic.h>
#include <delay.c>
#define StD RB4
#define HAT_ROLE RA1
#define LED RA2
#define PALS RA0
// 4MHz osilator
__CONFIG(XT&WDTDIS&PWRTEN);
unsigned char kontrol=0;
unsigned int CX;
//----------------------------------------------------------
// Timer alt programi
// 15 saniye suresince tusa basilmadiysa hatti kapatmak icin
//----------------------------------------------------------
void interrupt kesme(void){
CX++;
if(CX>15000)kontrol=1;
T0IF=0; // bayragi temizle
TMR0=131;
}
//----------------------------------------------------------
//----------------------------------------------------------
// ANA PROGRAM
//----------------------------------------------------------
main(void){
unsigned char i,komut,sifre[5],sayac;
//----------------------------------------------------------
// Port konfigurasyonu
//----------------------------------------------------------
TRISB=0x1F; // PORTB'nin RB5,6,7 pinleri cikis,digerleri giris
TRISA=0x01; // RA0 giris digerleri cikis
//----------------------------------------------------------
PORTB=0; // cihazlar enerjisiz
PORTA=0; // hat kapali, LED sonuk
//-------------------------------------------------------------
//Timer islemleri (kesme suresi=1ms)
//-------------------------------------------------------------
T0CS=0; // Dahili clock
PSA=0; // Prescaler TMR0 icin ayarli
PS0=0; PS1=1; PS2=0; // Oran 1:8
ei(); // butun kesmeler etkin
T0IE=0; //Baslangicta timer pasif
T0IF=0; // bayrak temizle
//-------------------------------------------------------------
// resetten sonra 1 saniye bekle
for(i=0;i<4;i++)DelayMs(250);
basla:
sayac=0; CX=0;
for(;{ // zil sayisi belirleme dongusu
while(PALS==1);
sayac++;
if(sayac>50){ // Zil sayisi 2
HAT_ROLE=1; // Hatti ac
sifreoku:
for(i=0;i<5;i++){ // sifreyi al
//--------------------------------------
kontrol=0;
TMR0=131; //
T0IE=1; // TIMER ON
//--------------------------------------
while(StD==0){ // tusa basilmadi ise bekle
if(kontrol==1){ // sure>15s ise hatti kapat
HAT_ROLE=0; goto basla; // basa don
}
else {};
}
T0IE=0; CX=0; // Tusa basildi ise Timer'i durdur, CX'i sifirla
// Boylece yeni bir 15s'lik ek sure kazanilmis olur
sifre=PORTB&0x0F; // sifreyi oku
while(StD==1); // tus basili ise bekle
}
//--------------------------------------
// sifrenin son hanesi * olmalidir
//--------Sifre konrol------------------
if(sifre[0]==1 && sifre[1]==2 && sifre[2]==3 && sifre[3]==4 && sifre[4]==11){
// 11 degeri tus takimindaki * tusuna karsilik gelir.
LED=1; // sifre dogru ise LED'i yak
for(;{
while(StD==0); // cihazlar icin komut bekle
komut=PORTB&0x0F;
if(komut==1)RB5=1; // cihaz 1 ON
if(komut==2)RB6=1;
if(komut==3)RB7=1;
if(komut==4)RB5=0; // cihaz 1 OFF
if(komut==5)RB6=0;
if(komut==6)RB7=0;
if(komut==12){ // # tusuna basildi ise hatti kapat
HAT_ROLE=0; LED=0; goto basla;
// Cihazlarin ON/OFF durumlari degismeden kalir.
}
}
//--------------------------------------
}
else{
goto sifreoku; //sifre yanlis ise tekrar sifre okumaya git
}
}
else{ // sayac<50 ise
while(PALS==0);
}
} // for dongusu
}
YARDIMINIZI İSTEDİĞİM KONU İSE BU DEVRE ŞEMASINI BASKI DEVRE PLAKETİNE NASIL GEÇİRECEĞİM. BU KONU HAKKINDA YARDIMLARINIZI BEKLİYORUM.