HI-TECH C ile uzaktan kumanda

Başlatan trinitrotoluen, 31 Mayıs 2006, 12:53:58

trinitrotoluen

uzaktan kumanda yardımı ile pic i kontrol etmek istiyorum bunun için  bir kumandanın sinyalini belirleyip bu sinyali pic e okutturmam gerektiğini biliyorum elimde hazır kodlar var ama ilk defa denediğim için başaramadım bana bu işi nasıl yapacağımı anlatır ya da bana bir örnek verirseniz çok sevinirim hepinize iyi çalışmlar.
"Gelecek, bu günden gelecek."

gsever

RF temelli çalışacak yani...

Eğer Zigbee dersen Reese hocadan bir sürü HI-TECH PICC-18 için açıklamalı  kod ve tasarım görebilirsin.

www.reesemicro.com

Microchip'in yeni Stack'ine göre sürekli güncelliyordu çalışmalarını. Detayları MCHP forumlarında Zigbee başlığı altında görebilirsin.

trinitrotoluen

sevgili gsever elinde bu işin pic 16fxxx ile yapıldığı ve türkçe  olan kaynak var mı ? baktığım kadarıyla pic18 serisi kullanılmış bunun dışında ingilizcem kötü olduğu için siteden tam yararlanamadım .yardımın için teşekkür ederim.
"Gelecek, bu günden gelecek."

gsever

Zaten kullandığı sistem kaynakları dolayısıyla bu Zigbee, Bluetooth ve Wifi gibi RFe göre biraz daha karmaşık kablosuz haberleşme protokolleri PIC18 ve üzerine daha uygun.

İngilizce problem ama oradaki notları ve AN965-Microchip Stack for the ZigBee Protocol adaptasyonu yapabilirsen (ki burada hem C18 hem de PICC-18 için uyarlama var) seni kimse tutamaz.

Bir sonraki adımda uydu kontrolü yaparsın :)

Daha yeni PICkit2 aldım, biraz kazanayım Zigbee'ye zıplayacağım hızlı bir şekilde.

trinitrotoluen

önerilerin için teşekkür ederim. zigbee üstüne yoğunlaşırım.sana çalışmalarında başarılar dilerim.
"Gelecek, bu günden gelecek."

matador

Hi tech c'de tek hattan seri bilgi göndremeye yarayan bir komut var mı?

Pic basic de serout ve serin komutları gibi.  Bu komutlarda serout[] şeklinde seri haberleşme protokolü olduğu gibi yazılabiliyor. serin[] ile de bilgi alımı yapılıyor. 

Umarım anlatabilmişimdir.

matador

Bu konuda yardım edebilecek yok mu acaba?

sigmoid

#7
Sana soft usart kodumu göndereyim. Bekle fonksiyonu kendi yazdığım bir delay fonksiyonudur. Sen gerekli değişiklikleri yaparak kendine göre uyarlarsın. Kodlar 9.60PL2 de sorunsuz çalışmaktadır.

softusart.h
#ifndef	XTAL_FREQ
	#define	XTAL_FREQ	4MHZ	//PIC in çalışma hızını yazı.
	#define	MHZ	*1000UL
	#define	KHZ	*1			
#endif


#define USARTHIZ 9600	//istenilen bağlantı hızını yazın.      
#define usartdelaycyc XTAL_FREQ*250UL / USARTHIZ //bağlantı hızını hesapla
#define usartdelaycycyarim usartdelaycyc/2

#define softrxpintris	TRISB5
#define softtxpintris	TRISB4
#define softrxpin	RB5
#define softtxpin	RB4

//soft usart içindeki kullanınan fonksiyonlardan komutların çalışma süresinin çıkartılması
#define sucyc1 8
#define sucyc2 11

void softusart_baslat(void);
char softusart_oku(void);
void softusart_yaz(char veri);
void putch(unsigned char byte);


softusart.c
#include <pic.h>
#include "softusart.h"
#include "bekle.h"

void softusart_baslat(void)
{
	softtxpin=1;	//boştayken 1.
	softrxpintris=1;
	softtxpintris=0;
}

void softusart_yaz(char veri)
{
	char i;
	softtxpin=0;	//start biti
	beklecyc(usartdelaycyc-sucyc1);
	for(i=8;i>0;i--)
	{
		veri=veri>>1;
		softtxpin=CARRY;
		beklecyc(usartdelaycyc-sucyc2);
	}	
	softtxpin=1;	//stop biti
	beklecyc(usartdelaycyc);
}

char softusart_oku(void)
{
	char i;
	unsigned temp=0;
	while(softrxpin);	//startbitini bekle.
	beklecyc(usartdelaycyc);
	beklecyc(usartdelaycycyarim-sucyc1);	
	for(i=8;i>0;i--)
	{
		temp=temp>>1;
		if(softrxpin)
			temp=temp|0x80;
		else
			beklecyc(2);

		beklecyc(usartdelaycyc-sucyc2);
	}
	
    //stop biti kadar bekle.
	beklecyc(usartdelaycycyarim);
	while(!softrxpin);
	return temp;	
}



Kullanımı için
ilk olarak softusart_baslat:() fonksiyonunu çağır sonra da softusart_yaz() fonksiyonu ile byte byte veriyi gönderirsin. header dosyasından istediğin pine ve hıza göre değişiklikleri yapabilirsin.

kolay gelsin.

matador

#8
Bekle fonksiyonuna ait satırlarda hata alıyorum.

sigmoid

yukarıda bekle ile iligli gerekli değişiklikleri yaparsın yazmıştım. Bekle bildiğin delay fonksiyonununa verdiğim türkçe isimdir. beklecyc ise cycle cinsinden bekleme yapıyor.  Benden delay fonksiyonunu isteme. Gerisini sana bırakıyorum.

Kolay gelsin

hollywoodlu

arkadaşım rf haberleşme ile kumanda yapacaksan, kaç kanallıysa o kadar pin kullan bence ve pinleri giriş olarak ayarla her kumanda etmek istediğin fonksiyon için ayrı ayrı kombinasyonlar yap mesela if(RB0==1&&RB1==0&&RB2==0&&RB3==0) { işlemler;}   4 kanallı için örnek bir kombinasyon örneği yaptım. bence bu şekilde yap. Diğer türlü bana daha zor geliyor

hollywoodlu

Abdullaho abimizin yazdığı program kesinlikle açık ve net. Ben bana göre kolay gelen yöntemi söyledim. Abdullaho abime kusur etmek istemem.

matador

"&& " bu iki karakteri ne için kullandın?

M_B

&& operatoru
ve işlemidir.

Eger & tek kullanılmiş olsa idi bu da lojik olarak ve işlemi yapar.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet