İki Pic Seri Haberleşme

svsilence

Üye
Katılım
21 Ara 2008
Mesajlar
7
Puanları
1
Yaş
38
arkadaşlar bir picten bir pice seri bilgi yollayacağım bu bilgileri illa piclerin belleğinekaydedip mi göndermeliyim yoksa direk bilgiyi gönderip alıcı picte işlem yapabilir miyim ?

benim amacım bir picteki bilgiyi gönderip alıcıdaki ledleri yakmak en basitinden biraz bilgi paylaşımında bulunup beynimde nöron-akson iletimine yardımcı olur musunuz şimdiden teşekkürler...
 
Bu soru çok genel oldu.
Elde bir bilgi varsa bu zaten bellektedir.
Özel olarak EEprom a yazmak gerekir mi?İsteğe bağlı.
Örnek;
Vericide 1. butona basılınca 1 gönderilir.
( burada kontrol yapılıyor,hangi tuşa basılırsa ona ait bilgi gönderiliyor.)
Alıcı gelen bilgiye bakar, 1 ise birinci led i yakar.
program büyüdükçe biryerlere bilgiyi kaydetme ihtiyacı doğabilir.
 
Seri iletişim yapacaksın ama sanırm istediğini tam olarak anlatman lazım. Seri iletişim yapacağın 2 pic aynı kart üzerinde mi olacak yoksa kablo ile mi birbirine bağlanacak, mesafe ne olacak ya da kablosuz olarak sinyal mi göndermek istiyorsun. Yapmak istediğini seçersen ona göre yardımcı olmamız daha kolay olur. Mesela aynı kart üzerinde olacaksa i2c standardını kullanarak bir uygulama geliştirebilirsin. Sorunda pic'in belleğine mi almam gerekir diye sormuşsun. Eğer arkadaşlarında yazdığı gibi bilgiyi eproma saklama gerekliliğin yoksa tabiki de belleğe yazma diye bir olay kullanmayacaksın.
 
ccs kullanıyosan ihtiyacın olan şey putc ve getch komutu.zaten kabloyla iletişm yapıcam diosun aşağıdaki program mantığı yeterli.
mesela verici prog:
if(input(buton))
putc('A');
else
putc('B');

alıcı:
while(1){
al=getch();
if(al=='A')
output_high(pin_b0);
if(al=='B')
output_low(pin_b0);
}
 
Merhabalar. Ben 18f4515 ile 16f877 yi rs232 ile seri olarak haberleştirmek istiyorum. vurucu05 nickli arkadaşın yazdığı kodları denedim ama çalışmadı.
Yapmak istediğim şey 16f877 deki bilgiyi seri olarak 18f4515 e göndermek. Başlangıç olarak basit bir şekilde 16f877 te butonlarla girdiğim bilgiyi 18f4515 e gönderip, gelen bilginin doğruluğunu 18f4515 teki ledlerde görmek istiyorum. Programlarımı CCS C de yazıyorum.
Yardımcı olursanız çok sevinirim...
 
iki pıc arasında seri haberleşme yaparken bilginin birinci pıcte kayıtlı olması gerekmıyormu? 1. pıc girişlerinden gelen veriyi degerlendirip cıkışlarındaki bilgiyimi 2. pıc e gonderiyor...
 
iki pıc arasında seri haberleşme yaparken bilginin birinci pıcte kayıtlı olması gerekmıyormu? 1. pıc girişlerinden gelen veriyi degerlendirip cıkışlarındaki bilgiyimi 2. pıc e gonderiyor...

İki pic arasında haberleşme hakkında hiç bir bilgim yok. Yapmak istediğim 16f877 bulunan bir kumandadan 18f4515 e basılan tuş bilgisini göndermek. 18f4515 de kumandadan gelen bilgiye göre step motor kontrolü yapacak.
 
çalışmayan yazdığın kodların tamamını gönder bi bakalım
 
**********************18f4515 (Alici) kodları*******************
#include "C:\Users\Özkan\Desktop\BİTİRME\rs\877_451\rs451877.h"

#use fast_io(D)
#use fast_io(B)
int incomingdata;
#int_rda
void rs()
{
disable_interrupts(int_rda);
incomingdata=getch();
output_d(incomingdata);
}
void main()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

// TODO: USER CODE!!
set_tris_D(0x00);
set_tris_B(0x00);
enable_interrupts(GLOBAL);
output_D(0x00);
output_B(0x00);
while(1)
{
enable_interrupts(int_rda);

}

}

***********************16f877 (gönderici) kodları******************

#include "C:\Users\Özkan\Desktop\BİTİRME\rs\877_451\rs877451.h"

#use fast_io(b)
#use fast_io(d)

const long int dizi[]={0b0000000011,0b0000000101,0b0000000111,0b0000001001,
0b0000001011,0b0000001101,0b0000001111,0b0000010001,0b0000010011,0b0000010101,
0b0000010111,0b0000011001,0b0000011011,0b0000011101,0b0000011111};

int data;
void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);

// TODO: USER CODE!!

set_tris_b(0x00);
set_tris_d(0xFF);
output_b(0x00);
output_d(0x00);
while(1)
{
data=input_d();
if(data==0b00000010)
putc(dizi[1]);
else if (data==0b00000011)
putc(dizi[2]);

}


}
 
rs232 ayarlarını nasıl yaptın?
sana örnek kodun tamamını gönderiyorum.
denenmiş ve çalışmıştır.

alıcı:

#include <16f628A.H>
#fuses INTRC_IO, NOMCLR, NOPROTECT, NOWDT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=600, xmit=PIN_B2, rcv=PIN_B1)

void main(){
char a=0;
output_low(pin_a0); //cikislari temizle
output_low(pin_a1);
output_high(pin_b4); //calisma gostergesi

while(1){

if(getc()=='X'){
a=getc();
}
if(a=='A'){
output_high(pin_a0);
output_low(pin_a1);
}
if(a=='B'){
output_high(pin_a1);
output_low(pin_a0);
}



}



verici:

#include <16f628.H>
#fuses INTRC_IO, NOMCLR, NOPROTECT, NOWDT, NOLVP
#use delay(clock=4000000)

#use rs232(baud=600, xmit=PIN_B2, rcv=PIN_B1)




void main(){
output_high(pin_b3); //calisma gostergesi

while(1){

if(!input(pin_b4) && input(pin_b5) ){

putc('X');
putc('A');


}
if(!input(pin_b5) && input(pin_b4)){

putc('X');
putc('B');



}


}
}
 

Forum istatistikleri

Konular
128,831
Mesajlar
920,840
Kullanıcılar
450,923
Son üye
Ratelarus

Yeni konular

Geri
Üst