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:
(https://i.ibb.co/S0wqSqK/Ekran-Al-nt-s.png) (https://ibb.co/S0wqSqK)
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.
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.