rs232 ile int göndermek?

Başlatan oyelmen, 22 Mayıs 2011, 13:52:01

oyelmen

merhaba arkadaşlar. 8bitlik bir değişkenin değerini rs 232 ile nasıl iletebiliriz? karakter göndermede problem olmuyor fakat 8 bitlik değeri gönderemiyoruz,

8 bitlik değer ne diye soracak olursanız, 16f877 in adc bacağından elde ettiğimiz 8 bitlik değeri diğer pic'e gönderip pwm ile motor sürmem gerekiyor, fakat adc den elde ettiğimiz 8 bitlik değeri gönderemedim, bunu nasıl yapabilirim, veya farklı yollardan yapabilme imkanı var mı? yardımcı olursanız sevinirim.

ferdem

Zaten 8 bitlik bir sayı gönderiyorsunuz, gördüğünüz karakter ise bu 8 bitlik sayının ASCII tablosundaki karakter karşılığı oluyor. Karakteri nerede gözlediğinizi bilmiyorum ama eğer siz bu sayıyı printf("%c",byte) ile görüyorsanız printf fonksiyonu size sayının ASCII tablosundaki karakter karşılığını gösterir, printf("%d",byte) ile gözlerseniz sayının kendisini görebilirsiniz. Terminal programlarında(hyper terminal, docklight, 232analyzer) verinin hangi formatta gösterileceğini seçebiliyorsunuz. ASCII tablosu karşılığı, hex gösterimi, decimal gösterimi veya bit bit gösterimi seçebiliyorsunuz.
Karakter karşılıklarını hiç karıştırmadan gelen veriyi örnek: veri=getc(); ile alıp
set_pwm_duty(veri); şeklinde PWM hız ayarlaması yapabilirsiniz. Eğer veriyi printf ile gösterecekseniz de printf("%d",veri) veya printf("%u",veri) gibi doğru formatta gösterebilirsiniz. printf fonksiyonu hangi tip veriyi hangi formatta gösterir araştırabilirsiniz.

Benzer konular forumda çok konuşuldu, eski konularda arama yapmanızı tavsiye ederim. İyi çalışmalar.

oyelmen

cevap için teşekkür ederim,ama:

verici kısmında;
    ...
    char veri;
    ...
    putc(veri);
    ...

alıcı kısmıda sizin dediğiniz gibi;

   veri=getc();
   set_pwm_duty(veri);

olduğu zaman olmuyor, bunu geçtim, output_b(veri) komutuyla b portundan çıkış bile alamıyorum bu veriyle, saçmalıyor.

ferdem

#3
Ben aşağıdaki kodları denedim beklediğim gibi çalışıyor, kodunuzun geri kalanını kontrol etmeniz gerekebilir. Kolay gelsin.

//picproje.org
//seri veri den PWM, verici.c
// 22 Mayis 2011
//fatiherdem.net
#include <16f628A.H>
#fuses NOWDT,NOPROTECT, INTRC_IO, NOMCLR
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)

int veri=0;
void main(){

while(1){
   veri=veri+10;
   veri=veri%100;
   putc(veri);
   delay_ms(1000);
}


}

//picproje.org
//seri veri den PWM, alici.c
// 22 Mayis 2011
//fatiherdem.net
#include <16f628A.H>
#fuses NOWDT,NOPROTECT, INTRC_IO, NOMCLR
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)

int veri=0;
void main(){
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);

setup_ccp1(CCP_PWM); //PWM
setup_timer_2(T2_DIV_BY_1, 100, 1); //prescale ayarları


while(1){
   output_toggle(pin_b0);
   delay_ms(1000);
}
}

#int_rda
void seri_data_geldi(){
veri=getc();
if(veri>=0 && veri<=100)
set_pwm1_duty(veri);

output_toggle(PIN_B4);
}


http://www.4shared.com/file/LgGneIby/seri_iletisim_den_pwm.html

Düzenleme:
Bugün bu çalışmayı devrede denerken NOMCLR nin eksik olduğunu fark ettim, NOMCLR eklendi, 4shared deki dosya güncellenmedi.