Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: 10f200.h - 08 Ağustos 2019, 23:44:16

Başlık: pic16lf1508 rs232 problemi
Gönderen: 10f200.h - 08 Ağustos 2019, 23:44:16
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.

Başlık: Ynt: pic16lf1508 rs232 problemi
Gönderen: mehmet - 10 Ağustos 2019, 18:45:09
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.