PC üzerinden 4 portlu valf kontrolü

Başlatan shadowcand, 08 Ekim 2011, 15:52:42

shadowcand

Arkadaşlar merhaba,

Aşağıdaki devremde PIC16F628A kullandım. Fakat bu işte yeni olduğumdan PIC'i nasıl programlayacağımı bilmiyorum. PBP en kolay yolu diye duydum fakat kararsız kaldım. Yani hangi programı kullanacağımı da bilmiyorum.

Bu devre ile PC üzerinden gönderilen komutlarla 4 portlu bir valfi kontrol etmek istiyorum. Elimde araştırmalarım sonucunda işe yarar bir kodda bulamadım.

Yardım ederseniz çok sevinirim.
Teşekkürler.

since1990

#1
Öncelikle bence ccs e n kolayı.
1.Pc üzerinden derken, pc arayüzünü sen mi yazcaksın? Yerinde olsam en basitinden hiç pic kullanmadan, paralel portun 8 adet pini digital olarak kullanabilirsin. O pinlerin çıkışına bir adet uln2003 koy, 4 tane roleyi rahatlıkla sürersin. (Basit bir paralelportkontrol programı googladan bulabilirsin.)
2.Olarak pcden seri portu kullanarak pice durumu izah edersin, sonra picin çıkışına uln koyarsın. :)
Herhangi başka bir yol dahi seçersen yardımcı olmaya çalışırım.
http://www.elektronikmagazin.com/page.php?id=82
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

picmanya

bir düşünüre görede en kolayı en dandiğidir. deniliyor.
dandik mandik, işini görmeye bakcan, en iyi derleyici en iyi işini görebildiğin markadandır.
musluk bir akıtmaya başlasın - para döndürsün zamanla gendini geliştirisin hesabı.

shadowcand

İlgin için teşekkür ederim.

PC üzerinden kontrolü başka bir arkadaş yapacak. Ben sadece hangi komutlarla hangi portu açacağını söyleyeceğim. uln koymaya gerek yok,çünkü L293D kullanıyorum valf motoru kontrolü için.

CCS kullanmak en kolayı diyorsan ona yoğunlaşırım :) işime yarayacak hazır kodlar var ise de memnun olurum.  :)

Devrem;

http://www.upload.gen.tr/resim.php/www/0tuq3smz/son.jpg.html

kudretuzuner

Merhaba
rapidsharede yüklüydü ama silinmiş galiba aşağıdaki linkten indireceğiniz çalışmam,sizin işinizi görecektir.Kolay gelsin.
http://antrak.org.tr/index.php?option=com_mycontent&task=view&id=1587&Itemid=75
not:bu linkten de PC ve PIC ile haberleşme yazılımlarını bulacaksınız.
http://antrak.org.tr/index.php?option=com_joomap&Itemid=77
Amatör

shadowcand

Kudret Bey, siteye üyeliğim olmasına rağmen üstteki linke tıkladığımda "Bu kaynağı görmek için yetkilendirilmemişsiniz." diyor.

Programlama için ise CCS indirdim, onunla çalışacağım sanırım.

since1990

PC ile pic hangi arayüzü kullanacaklar? Seri haberleşme bence çok mantıklı olur? Pc Pice tam olarak ne yapacağını anlatır.  Arada 1 max232. Dediğim gibi kodlar ccs için çok basit. mesela pice şöyle dersin."rs232 den ne geliyorsa A portundan onu çıkış olarak ver. RA0'ı 1 yapmak için 1 gönderirsin. RA1yi 1 yapmak için 2  gönderirsin. 1ile 2 için 3 .... yani eğer pc yazılımı henüz yazılmamışsa, bu tarz bir yoldan kolayca sonuca ulaşırsın. Tabi arkdaşlar daha profesyonel yollar önermişlerdir, aklına yatanı yap. en basitine proteus ile başla. aşağıdaki link ile kolayca ccs öğrenebilirsin.  rs232 yi kolayca çözersin bence.
http://www.teknikders.com/
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

shadowcand

#include <16f628a.h>
#include <stdio.h>
#device PIC16F628A //gerek olmayabilir !
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=4000000) //kristal hızı belirlendi
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1, ERRORS)  // rx tx tanımlandı

// burada mı yapılması gerek bilmiyorm ama girislerin ve cikislarin belirtilmesi gerek
main ()
{
set_tris_a(0x00); //porta yi çıkış yap

char x,a,b,c,d ; //degiskenler tanımlandı
putc(x);    //x icin komut isteniyor
if (x==a){
   output_high(PIN_A0);  //RA0 aktif edilsin ve L293Dnin IN1 girisine sinyal gitsin
   output_low(PIN_A1);
   output_low(PIN_A2);
   output_low(PIN_A3);
   else if (x==b)
   output_high(PIN_A1);//RA1 aktif edilsin ve L293Dnin IN2 girisine sinyal gitsin
   output_low(PIN_A0);
   output_low(PIN_A2);
   output_low(PIN_A3);
   else if (x==c)
   output_high(PIN_A2);          //RA2 aktif edilsin ve L293Dnin IN3 girisine sinyal gitsin
   output_low(PIN_A0);
   output_low(PIN_A1);
   output_low(PIN_A3);
   else (x==d)
   output_high(PIN_A3);          //RA3 aktif edilsin ve L293Dnin IN4 girisine sinyal gitsin
   output_low(PIN_A0);
   output_low(PIN_A1);
   output_low(PIN_A2);
   
   }

pc'den gelen a,b,c,d komutlarına göre 4 porttan biri aktif olacak. kodu böyle yazdım, eksiğim mutlaka vardır. doğru yolda mıyım diye yazayım dedim.

İlginiz için tekrar teşekkür ederim.

kudretuzuner

Merhaba
Tekrar yükledim buyrun.Tek röle kontrolu var ama siz diğer PORTA1,PORTA2 ve PORTA3' de aynı devreyi tekrarlarsanız 1-2-4- ve 8 bastığınız zaman 1-4 arası röleler aktif olur pasif yapmak için (0)  sıfır basmak gerekir.Kolay gelsin
https://rapidshare.com/files/1735863730/ANTRAK.rar
Amatör

kudretuzuner

Amatör

shadowcand

Alıntı yapılan: shadowcand - 08 Ekim 2011, 19:48:21
#include <16f628a.h>
#include <stdio.h>
#device PIC16F628A //gerek olmayabilir !
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=4000000) //kristal hızı belirlendi
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1, ERRORS)  // rx tx tanımlandı

// burada mı yapılması gerek bilmiyorm ama girislerin ve cikislarin belirtilmesi gerek
main ()
{
set_tris_a(0x00); //porta yi çıkış yap

char x,a,b,c,d ; //degiskenler tanımlandı
putc(x);    //x icin komut isteniyor
if (x==a){
   output_high(PIN_A0);  //RA0 aktif edilsin ve L293Dnin IN1 girisine sinyal gitsin
   output_low(PIN_A1);
   output_low(PIN_A2);
   output_low(PIN_A3);
   else if (x==b)
   output_high(PIN_A1);//RA1 aktif edilsin ve L293Dnin IN2 girisine sinyal gitsin
   output_low(PIN_A0);
   output_low(PIN_A2);
   output_low(PIN_A3);
   else if (x==c)
   output_high(PIN_A2);          //RA2 aktif edilsin ve L293Dnin IN3 girisine sinyal gitsin
   output_low(PIN_A0);
   output_low(PIN_A1);
   output_low(PIN_A3);
   else (x==d)
   output_high(PIN_A3);          //RA3 aktif edilsin ve L293Dnin IN4 girisine sinyal gitsin
   output_low(PIN_A0);
   output_low(PIN_A1);
   output_low(PIN_A2);
   
   }

pc'den gelen a,b,c,d komutlarına göre 4 porttan biri aktif olacak. kodu böyle yazdım, eksiğim mutlaka vardır. doğru yolda mıyım diye yazayım dedim.

İlginiz için tekrar teşekkür ederim.

Kudret Bey teşekkürler.

Yukarıda kendi yazdığım kodlar doğru mudur, eksik tarafları nedir onları öğrenmek isterim.

since1990

#11
İstersen bende biraz eksiklerinde bahsedebilirim:D pcden gelen komutu putc(); ile değil getc(); ile yakalıyacaksın.
#int_rda
void rs232_kesme (void)
{x=getc();}

şeklinde pc data gönderince kesmeye girip gelen datayı x e kaydedecek ...ama sen a b c d gönderirsen onları char olarak alman gerekir.yani getc yerinde başka bir şey kullanman gerekir. o yüzden dediğim gibi yapsan daha iyi olur. daha onra output_a(x); yazarsın pcden gelen datayı direk çıkışa atarsın.
0000=0 gönderirsen RA0 dan RA3 e kadar hepsi 0
0001=1 "                 Ra0=1 Ra1dan Ra3e kadar 0
1111=15 "               HEpsi 1
Ayrıca yazdığın kodları while(1) in içerisine almazsan kodları baştan aşağıya tek bir kez işler ve durur. Kodları sürekli olarak incelemesi için wihle (1) yazmalısın. yada ana program yazmazsın sadece kesme geldiğide datayı okur ve çıkışa atar.
#int_rda
void rs232_kesme (void)
{x=getc();
delay_ms(10);
output_a(x);}

"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

kudretuzuner

Merhaba
C bilmiyorum.Yardımcı olamayacağım,kusura bakma.Kolay gelsin.
Amatör