Pıc İle Seri haberleşme Hakkkında Bilgi

onur2541

Üye
Katılım
15 Nis 2009
Mesajlar
33
Puanları
1
Ben DTMF kontrollü bir röle kontrol devrem var.Fakat ben bunu PC haberleşmeyle yapmak istiyorum.Devrede 16f84 kullandım.Program C ile yazılmış fakat haberleşme yazılımı programda yok. Devrede hem TX hemde RX haberleşmesi isteniyor..Haberleşme konusunda yardımcı olursanız sevınırım.
 
Son düzenleme:
Pic'in yazılımı hangi dille , ayrıca işlem çok basit sadece yapman gereken şimdiden bir max232 ve 4 tane 10uF Kondansatör almak , gerisi hangi dili kullandığına baglı...
 
C Plus Plus dilinde yazılmış..Aşağıdaki gibi.Prpgram eklersenız sevınırım...


// Telefonla uzaktan cihaz kontrolu projesine ait PIC16F84A programi
// CM8870'in Q1-Q4 cikislari PIC16F84A'nin RB0-RB3 pinlerine baglidir.
// StD ucu RB4'e baglidir. Hat acma rolesi RA1'e baglidir.
// Sifre onay LED'i RA2'ye baglidir.
// Zil calma sayisi icin pals devresi RA1'e baglidir.
// Kontrol edilecek cihazlar sirasiyla RB5,RB6,RB7'ye baglidir.


#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


}
 
Benim yapmak ıstedıgım devreyi Bilgisayardan kontrol etmek yani röleleri ve telefondan kumanda edıldıgınde hangı röle acık hangı rölenın kapalı oldgunu görmek ve bunun haberleşmesını sağlamak istiyorum..
 
peki size zahmet olmassa yazılımında yardımcı olabılırmısınız serhat bey program c ile yazılmış nasıl yapabılırız programı ekledık ama yardımcı olursanız sevinırım..
 
Merhaba
Yapılmış,çalıştırılmış projeleri değiştirmek,yeniden dizayn etmek daha zordur.Bildiğiniz gibi telefonun yolladığı sinyaller ile PC'nın yollayacağı sinyaller arasında hiç benzerlik yoktur.Bu bakımdan projeyi yeniden ele alıp 18F84A yerine de 16F628A kullanmanızı tavsiye edeceğim.Araya RF de girecek ise o da ayrı bir konu önce "PC_to_PIC" haberleşmesini seriporttan gerçekleştirdikten sonra kablolar kaldırılır araya RF mödül konur.Kolay gelsin.
 
hayır kablosuz haberleşme sıkıntım yok, tek sıkıntım devrenın bilgisayar ile haberleşmesi bunuda rs232 kullanarak yapmak istıyorum devrede ne gıbı değişikklil yapmam gerekıyor sanırım haberleşmede max232c ile yapılıyor dolayısıyla devredekı 16f28 in bacaklarından 2 ssı boşta rb3 rb4 uçları bunları kullanarak rx tx haberleşmesi sağlanıyor max232 c nın araştırdığım kadarıyla fakat bu uçları aktıf etmem ıçın programda bı haberlşme yapılması gerekıyor nasıl yapılır bılemiyorum sıkıntım bu konuda veya alternatıf haberleşmeyı sağlıcak bır bılgınız varsa oda olabılır yardımcı oldugunuz için teşşekkur edıyoruz.
 
Merhaba
Yapılmış,çalıştırılmış projeleri değiştirmek,yeniden dizayn etmek daha zordur.Bildiğiniz gibi telefonun yolladığı sinyaller ile PC'nın yollayacağı sinyaller arasında hiç benzerlik yoktur.Bu bakımdan projeyi yeniden ele alıp 18F84A yerine de 16F628A kullanmanızı tavsiye edeceğim.Araya RF de girecek ise o da ayrı bir konu önce "PC_to_PIC" haberleşmesini seriporttan gerçekleştirdikten sonra kablolar kaldırılır araya RF mödül konur.Kolay gelsin.

Merhaba
Yeni bir proje halinde yapmanız lazım.
 
o zaman benım iş yatacak gibi gelıyor kudret bey çünkü o devreyı çızmesi başka ardında yazılımı yapması başka bılsem gam yemıcem sonuna kadar uraşırım fakat ıkısındende anlamıyorum :(
 

Forum istatistikleri

Konular
128,214
Mesajlar
915,863
Kullanıcılar
449,995
Son üye
osmanguney15

Yeni konular

Geri
Üst