pic16lf1508 rs232 problemi

Başlatan 10f200.h, 08 Ağustos 2019, 23:44:16

10f200.h

arkadaşlar merhaba. iki adet 16lf1508 i rs232 ile haberleştirmeye çalışıyorum. verici pic teki analog kanaldan aldığım  iki adet pot değerini rs232 ile diğer pic e göndermek ve gelen adc değerlerine göre iki adet servoyu kontrol etmek istemekteyim. deneme amacıyla verici devreden 3 ve 4 değerlerini gönderdiğimde alıcı da 3 değeri 188  görünmekte.verici kodları şu şekilde:
#include <16lf1508 _verici.h>
unsigned int adc_deger=0,adc_deger2=0;
void main()
{
   setup_adc_ports(sAN0|sAN1);
   setup_adc(ADC_CLOCK_INTERNAL);

   while(TRUE)
   {
   
adc_deger=3;
adc_deger2=4;
//============================================
if(adc_deger<=10)
{
printf("%u",0);
delay_ms(10);
printf("%u",0);
}
if(adc_deger>=10 && adc_deger<=100) 
{
printf("%u",0);
}

printf("%u",adc_deger);
delay_ms(5);
//============================================
if(adc_deger2<=10)
{
printf("%u",0);
delay_ms(10);
printf("%u",0);
}
if(adc_deger2>=10 && adc_deger2<=100) 
{
printf("%u",0);
}

printf("%u",adc_deger2);
delay_ms(500);
     
   }

}


alıcı kodları :
#include <16lf1508_alici.h>
#include <stdlib.h>
unsigned int adc_deger[6],servo1[3],servo2[3];
unsigned int sonuc1=0,sonuc2=0,i=0;
unsigned long int duty=750;
#INT_RDA
void  RDA_isr(void) 
{
adc_deger[i]=getch();
i++;
if(i==6)
{

i=0;

}
}
void main()
{
  /* setup_timer_2(T2_DIV_BY_16,249,1);      //2,0 ms overflow, 2,0 ms interrupt
   setup_pwm1(PWM_ENABLED | PWM_ACTIVE_HIGH | PWM_OUTPUT );
   setup_pwm2(PWM_ENABLED | PWM_ACTIVE_HIGH | PWM_OUTPUT);
   set_pwm1_duty((int16)750);
   set_pwm2_duty((int16)750);*/
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   while(TRUE)
   { 


servo1[0]=adc_deger[0];
servo1[1]=adc_deger[1];
servo1[2]=adc_deger[2];

servo2[0]=adc_deger[3];
servo2[1]=adc_deger[4];
servo2[2]=adc_deger[5];

sonuc1=atoi(servo1);
sonuc2=atoi(servo2);

printf("%u %u\r\n",sonuc1,sonuc2);
delay_ms(200);

   }
}

proteus virtual terminalde şu şekilde görünüyor:


adc_deger dizisine aldığım verileri kontrol ettiğimde değerler doğru görünüyor.fakat servo1 dizisine adc_deger dizinden aktarma yaptığımda bir problem oluyor gibi görünüyor.yardımlarınızı beklerim. iyi çalışmalar.


mehmet

Bir kaç byte sabit bir değer yollayın.
Bu sizin senkron kilidiniz olsun.
Sonra tüm veriye crc uygulayın.

Mesela;
"M", "e", "h", "m", "e", "t", adc1, adc2, crc
olarak yollayın.
Alıcı taraf "Mehmet" kelimesini yakaladıktan sonra
alınan tüm bitlerden crc çözümleyin. Doğru ise;
6. ve 7. veri sizin istediğiniz değerler olacak.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr