Herkese selamun aleyküm değerli ustalarım bu gün otururken dedim biraz uğraşayım
12F675 pic'ler ile yaptığım basit bir uzaktan kumanda uygulamasını burada sizler ile paylaşmak istedim belki birisinin işine yarar...
verici :
#include <12f675.h>
#fuses INTRC_IO,NOMCLR,NOBROWNOUT,NOPROTECT,NOCPD
#use delay(clock=4000000)
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
#use rs232 (baud=2400, xmit=pin_a5,parity=N, stop=1) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve
int veri;
//int pr_1,pr_2,pr_3;
//int1 buton_1;
//int1 buton_2;
void gonder(){
//veri=(getch);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);
putc(veri);
//putc(veri);
//putc(veri);
//putc(veri);
//putc(veri);
//printf(pr_1,pr_1,pr_1,pr_1,pr_1,pr_2,pr_2,pr_2,pr_2,pr_2,pr_3,pr_3,pr_3,pr_3,pr_3,sifre_1,sifre_2,sifre_3,sifre_4,veri);
}
void main()
{
set_tris_a( 0b000110 ); // set GP0 output, all other inputs
setup_comparator( NC_NC_NC_NC ); // disable comparators
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
output_low(pin_a5);
while(TRUE)
{
if (input(PIN_A2)==1){
veri=10;
gonder();
output_high(pin_a4);
}
else{
output_low(pin_a4);}
if (input(PIN_A1)==1){
veri=20;
gonder();
output_high(pin_a0);
}
else{
output_low(pin_a0);}
}
//TODO: User Code
}
Alıcı :
#include <12F675.h>
#fuses INTRC_IO,NOMCLR,NOBROWNOUT,NOPROTECT,NOCPD
#use delay(clock=4000000)
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
#use rs232 (baud=2400, rcv=PIN_A5,parity=N, stop=1) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve
int veri;
//int veri_3;
void main()
{
set_tris_a( 0b000100 ); // set GP0 output, all other inputs
setup_comparator( NC_NC_NC_NC ); // disable comparators
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
output_low(pin_a0);
while(TRUE)
{
if (input(PIN_A0)==1){
}
veri = getch();
if (veri==10) {
output_high(pin_a0);
}
if (veri==20) {
output_low(pin_a0);
}
//TODO: User Code
}
}
Paylaşımın için teşekkürler.
@tekniker_murat teşekkürler, şemalarını da yükleyebilir misiniz ?
Paylaşım için teşekkürler. Bunu kurduğunuz devre, arada algılamada gecikme veya kendi kendine yanma olayı yaptı mi hiç?
@mehmetemin usta şemalarını çizmedim modüller elimde vardı direk board üzerine yaptım geçtim lakin programı incelerseniz hangi pin rf vericiye bağlanmış hangisinde buton var hangiside butona bağlı led var falan anlaşılabilir. zaten mantık artık çok basit oldu.
Aslında dediğiniz gibi bir şema çıkartmak lazım ben bir zamanlar devre yapmıştım devre bataryadan tamamen izole edilmiş şekildeydi sadece butona basarsak hem işlemciye hem rf module hem de diğer elemanlara enerji gidiyordu ve bu sayede kullanılmadığı durumda eerji harcamıyordu.
Eğer zaman bulup uğraşma fırsatı yakalarsam onu eklemek isterim. Çünkü en azından öğrenci arkadaşlara faydalı olacaktır.
@ghistmanzero hocam şu an ki hali ile hiç bir gecikme yapıp yapmadığını el ile kontrol ettiğim esnada hissedemedim sadece devreyi board üzerinde kurduğum için pek sevimli olmadı.
Bunun haricinde aslında şifre olayına girilmesi gerekirdi yani en azından dört byte şifre ve ardından veri bilgisi gönderilebilirdi bu da çok güvenli bir iletişim sağlardı ama bunu yaptığım zaman sizin dediğiniz gecikme olayı hatta hiç haberleşememe olayı oluyor bizzat denedim.
Osiloskop ile bakıyorum örneğin A kanalını vericinin data hattına B kanalını Alıcının data hattına bağlıyorum 4 byte şifreli programı yazıp yüklediğim zaman osiloskopta gördüğüm tepki şöyle oluyor ki :
Vericiden veri yollamadığım zaman alıcı data hattı tamamen boş ve hiç bir sinyal görünmüyor sadece ama sadece çok küçük endüstriyel sinyal yani parazit gibi şeyler çıkıyor 3 saniyede 1 gibi...
Ama vericiden datayı yolluyorum verici data yollamaya başladı mı alıcıda da aynı datalar tıkır tıkır geliyor yani alıcı o rf dataları alıyor data bacağına gönderiyor ve ben de bunu data bacağında görebiliyorum ama komutlar çalışmıyor...
Sebebine gelirsek 5 byte preamble komutundan 3 tane yolluyorum yani uyandırma sinyali 0x55 0x00 0xff bunları 5 er defa yolladığım zaman 15 byte bu uyandırma sinyali ardından 4 byte şifre sinyali ve en son veriyi yolluyorum
Alıcıda ise if ((sifre1 == 1 ) & (sifre2==9) & (sifre3==8) & (sifre4==4)){
sonuc();
}
şeklinde bir mantık ile o şifreleri kontrol ettirip kontrol sonucu doğru ise yani şifreler doğru gelmişse sonuc alt programına yönlendirme yada işte sonuç alt programının çağrıldığı yeri iptal edip o döngü içinde switch case ile farklı döngü kurma gibi bir durum söz konusu olabiliyor.
Ama bu şifrelerin doğru gelip gelmediğinin kontrolü yani if komutu işi karıştırıyor gibime geliyor... sanki 12F675 4 mhz internal osc de bu kadar komutu doğru kararlılık ile işliyemiyor...
Şifre olayını 2 byte yapınca arada bir alıyor arada almıyor yada vericiden daha uzun süre butona basarsam alıyor gibi durumlar çıkıyor...
Ben işlemci ile CCS C nin kabalığına diye düşünüyorum işlemci küçük ccs c de sağlam bir program ve işlemciye ağır geliyor diye yorumladım yanlış ise düzeltin lütfen....
Bir de son olarak ben daha önceki yıllarda pic basic ile aynı projeyi yapmış aynı işlemci ile çalıştırmış hiç de sorun yaşamamıştım gecikme tanımama falan yoktu. Eğer isterseniz onu da buraya ekliyeyim aradaki farkları biraz inceleyelim ?
Ve abi sen bunda gecikme ve arada kendi kendine yanma olayı gibi sorunlar olabileceğini nerden tahmin ettin tecrübe ve bilgini bizimle de paylaşır mısın arz etsek...
Alıntı yapılan: tekniker_murat - 13 Haziran 2017, 17:35:18
@mehmetemin usta şemalarını çizmedim modüller elimde vardı direk board üzerine yaptım geçtim lakin programı incelerseniz hangi pin rf vericiye bağlanmış hangisinde buton var hangiside butona bağlı led var falan anlaşılabilir. zaten mantık artık çok basit oldu.
Aslında dediğiniz gibi bir şema çıkartmak lazım ben bir zamanlar devre yapmıştım devre bataryadan tamamen izole edilmiş şekildeydi sadece butona basarsak hem işlemciye hem rf module hem de diğer elemanlara enerji gidiyordu ve bu sayede kullanılmadığı durumda eerji harcamıyordu.
Eğer zaman bulup uğraşma fırsatı yakalarsam onu eklemek isterim. Çünkü en azından öğrenci arkadaşlara faydalı olacaktır.
@ghistmanzero hocam şu an ki hali ile hiç bir gecikme yapıp yapmadığını el ile kontrol ettiğim esnada hissedemedim sadece devreyi board üzerinde kurduğum için pek sevimli olmadı.
Bunun haricinde aslında şifre olayına girilmesi gerekirdi yani en azından dört byte şifre ve ardından veri bilgisi gönderilebilirdi bu da çok güvenli bir iletişim sağlardı ama bunu yaptığım zaman sizin dediğiniz gecikme olayı hatta hiç haberleşememe olayı oluyor bizzat denedim.
Osiloskop ile bakıyorum örneğin A kanalını vericinin data hattına B kanalını Alıcının data hattına bağlıyorum 4 byte şifreli programı yazıp yüklediğim zaman osiloskopta gördüğüm tepki şöyle oluyor ki :
Vericiden veri yollamadığım zaman alıcı data hattı tamamen boş ve hiç bir sinyal görünmüyor sadece ama sadece çok küçük endüstriyel sinyal yani parazit gibi şeyler çıkıyor 3 saniyede 1 gibi...
Ama vericiden datayı yolluyorum verici data yollamaya başladı mı alıcıda da aynı datalar tıkır tıkır geliyor yani alıcı o rf dataları alıyor data bacağına gönderiyor ve ben de bunu data bacağında görebiliyorum ama komutlar çalışmıyor...
Sebebine gelirsek 5 byte preamble komutundan 3 tane yolluyorum yani uyandırma sinyali 0x55 0x00 0xff bunları 5 er defa yolladığım zaman 15 byte bu uyandırma sinyali ardından 4 byte şifre sinyali ve en son veriyi yolluyorum
Alıcıda ise if ((sifre1 == 1 ) & (sifre2==9) & (sifre3==8) & (sifre4==4)){
sonuc();
}
şeklinde bir mantık ile o şifreleri kontrol ettirip kontrol sonucu doğru ise yani şifreler doğru gelmişse sonuc alt programına yönlendirme yada işte sonuç alt programının çağrıldığı yeri iptal edip o döngü içinde switch case ile farklı döngü kurma gibi bir durum söz konusu olabiliyor.
Ama bu şifrelerin doğru gelip gelmediğinin kontrolü yani if komutu işi karıştırıyor gibime geliyor... sanki 12F675 4 mhz internal osc de bu kadar komutu doğru kararlılık ile işliyemiyor...
Şifre olayını 2 byte yapınca arada bir alıyor arada almıyor yada vericiden daha uzun süre butona basarsam alıyor gibi durumlar çıkıyor...
Ben işlemci ile CCS C nin kabalığına diye düşünüyorum işlemci küçük ccs c de sağlam bir program ve işlemciye ağır geliyor diye yorumladım yanlış ise düzeltin lütfen....
Bir de son olarak ben daha önceki yıllarda pic basic ile aynı projeyi yapmış aynı işlemci ile çalıştırmış hiç de sorun yaşamamıştım gecikme tanımama falan yoktu. Eğer isterseniz onu da buraya ekliyeyim aradaki farkları biraz inceleyelim ?
Ve abi sen bunda gecikme ve arada kendi kendine yanma olayı gibi sorunlar olabileceğini nerden tahmin ettin tecrübe ve bilgini bizimle de paylaşır mısın arz etsek...
ben bitirme projemde iki devre arasında float bilgisi gönderiyordum. burdaki kod değerli bir kod. paylaştığınız için saolun tekrardan. ben öğrenciyken baya sıkıntı yaşamıştım yardım alma konusunda. ilgili forumları ve bulabildiğim herşeyi okudum :D öncelikle bu uygulamanın bir benzerini yapmıştım. benim devrenin o zamanki hali bu: https://www.youtube.com/watch?v=cO0vXwguOl4
daha sonra biraz uğraşıp kodu düzelttim. float biligisi atacak hale geldi.o da burda https://www.youtube.com/watch?v=cFPxtZHZvlU
işin uzmanı filan değilim ama kendimce uğraşlarım oldu.
o soruyu sormamın sebebi şu ki float olayında verinin sıkıntısız gitmesi için gönderimden önce bir tür bekleme döngüsü koyulmalı. alıcı daimi olarak dinlemede. herşeyden önce alıcı-verici çiftine ait bir kimlik olmalı ve bu kimlik üst üste yollanmalı.benım yontemım buydu en azından . alıcı bunu yakalayınca bu sefer sürekli bir döngüye alıp vericiden belli bir boş veri atıyordum. alıcı kanalı yakalamış ve kitlenmiş oluyor. veriyi okuyor halde duruyor. en son boş veri kesildiği andan sonraki ilk okumada ana veriyi göderiyordum. bu şekilde arada algılamama veya durduk yere kendılıgınden yanma, kesilme durumları olmuyordu. gecikmeden kastım kristal veya üst üste değerlendirme değil de bu bahsettiğim kısımdı. bu kod da bahsettiğim şekilde elden geçirilebilir.tabi ki şuanki hali de iyi. uğraşacak kişiler için gayet uygun.daha fazlasını isteyen de dediğim şekilde az uğraşınca gayet sağlıklı çalışan bir kod yazabilirler . hani videolarda gördüğünüz gibi herhangi bir gecikme olmuyor. kullandığım hc-sr04 biraz sıkıntılı bir sensör olduğu için arada saçma değerler de atıyordu. ordaki saçma değerler parazitten ziyade sensörün ölçtüğü hatalı değerler. normalde kendim bır float belirleyip atınca hatasız atıyordu. baya uğraştırmıştı o zaman. şimdilerde o kod defalarca değişti . adam akıllı bir mini kütüphaneye çevirdim. bir kaç ticari denemem de oldu ama henüz kayda değer bir durum yok. ben 628a kullanmıştım ilkinde. sonraki videoda lcd de koyduğumdan 628a nın birini 877a ile değiştirdim fazladan pin gerektiği için.sonrasında birkaç farklı işte daha kullandım.
https://www.youtube.com/watch?v=viqP8cPDKeo kablosuz kombı termostatı
https://www.youtube.com/watch?v=UTEQMsCBylU kablosuz motor kontrol
şimdi de iki kanallı ve çift modlu bir alıcı ve kumanda tasarımını yapıyordum. kumanda 3x3,5 cm ve alıcı kart ise (üzerinde iki bağımsız role var) 4,5x5,5 cm. kumandada iki buton alıcıdakı ilgili rolelerı (parmağı basıp çekince) açıyor .bir daha basınca kapatıyor. bu ilk mod . sonra alıcı üzerindeki bir switchi kapatınca bu sefer ikinci modda çalışıyor .parmak basılı olduğu surece role cekiyor.parkmak çekilince kesiliyor.
şuanki kartları da 628a ile tasarladım. içinde uart olan min pinli pic , pic12f1822 gibi görünüyor. ama o da zaten fiyat olarak 628a dan daha pahalı :D onun için yine 628a kullandım. kartlara ek özellik eklemeyi düşünüyorum.o boş pinler içimi yakar yoksa :) 12f675 in uart ve intrda kesmesı olmaması beni gıcık etti zaten. bu şekilde kullanınca çalışır çalışmasına ama bahsettiğim hata durumları olma ihtimali yüksek. ama elbette ki bunun çaresi var. kısa bir süreliğine bir rf şirektinde arge mühendisliği yaptım. onlar 675 kullanıyorlardı. sadece kumanda ve alıcının pcb tasarımını yaptım.kodları inceleyecek kadar çalışmadım orda. hani büyük ihtimal onlar da kesme kullanarak sürekli pini dinleyip aynı yolu izliyorlardı.belki de hiç uğraşmadan direk de atıyorlardı.bilemiyorum.ama işin üstesinden gelmişler hani.
Evet emek etmiş ortaya güzel bir proje koymuşsunuz...
Benim de elimde kalan okul yıllarından bir kaç resim var video çekmemiştik ama resimlerden buldum o zaman gençmişiz be saçlarımız varmış :D
Resimde sensörleri koymamışız ama uzaktan kumanda ve kutusu duruyor kocaman ana devrenin üzerindeki kumandayı yapmak için kutusunu araştırmıştık bulmuştuk o kutunun içine baskı devre ile kart yapmış pic progarmlamış kumanda yapmıştık hey gidi günler hey :)
(https://i.hizliresim.com/8dlypd.jpg) (https://hizliresim.com/8dlypd)
(https://i.hizliresim.com/Ddlvny.jpg) (https://hizliresim.com/Ddlvny)
(https://i.hizliresim.com/mkG9v2.jpg) (https://hizliresim.com/mkG9v2)
(https://i.hizliresim.com/YNvGzD.jpg) (https://hizliresim.com/YNvGzD)
@tekniker_murat tebrikler :) gerçekten hoş bir proje olmuş. kumandanın kalıbını bulmanız ve ahşap tasarım güzel olmuş :)
O gün ki imkanlar ile işte böyle şeyler bulduk... Bu kumanda kutusu için burdurdan izmire gelmiş izmirde aramıştım :) o dönemin hocası ( çok severim kendilerini ) Mustafa arı hocam bu ahşap kutu yüzünden çok uğraştırmıştı :D
Tam devreyi yapıyor bitiriyorum kutu çok büyük git küçült getir diyor bir daha baştan uğraşıyorduk :D o bitiyor çok derin olmuş derinliğini düşürtün al baştan bir daha :D gücümüz yoktu ki o zamanlar yaptıralım özel plastik enjeksiyondan ah hocam ah neler çektirdiniz :D :D
Oysa şu an böyle bir proje yapacak olsam hiç kutu yada kumanda ile uğraşmazdım udea nın hazır yapılı olan kumandaları var içinde pic 12F629 smd entegre var alırım onu ve programlar geçerim :D
http://www.udeashop.com/4004-00,PR-38.html bu ve benzeri olanları örnek olarak gösterebilirim....
bir de buraya bakın
http://blog.larios.tecnologia.ws/iBlog/archives/8872/
Alıntı yapılan: necati - 13 Haziran 2017, 22:41:17
bir de buraya bakın
http://blog.larios.tecnologia.ws/iBlog/archives/8872/
kanal sayısının fazla olması için 877 kullanılmış. aynı mantık. ihtiyaç varsa gayet güzel bir çalışma olmuş burdaki