13 Mayıs 2021, 00:13:53

Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME


rs232 haberleşme

Başlatan onertan, 17 Mart 2021, 19:19:56

onertan

17 Mart 2021, 19:19:56 Son düzenlenme: 17 Mart 2021, 22:22:29 onertan
Merhaba Arkadaşlar.
Bir hdmi switcher cihazını rs232 portundankontrol etmek istiyorum.
Kod göndermede sıkıntı yok ama geri bildirim alamıyorum birtürlü. Örneğin 4. girişi 1. çıkışa gönder dediğim zaman (SET SW in4 out1\x0D\x0A) bunu cihaza yaptırabiliyorum. Ama buna karşılık cihazdan (SWin4 out1<CR><LF>) kodu gelmesi lazım. Bu kod gelmesine geliyor ama benim devrem bunu alamıyor çünkü kitleniyor. RDA kesmesini iptal ettiğim zaman kodu göndermede sorun yaşamıyorum ama geribildirim almak için RDA kesmesini aktif etmem lazım ve ozaman da devre kitleniyor.
Bilgiyi karakter karakter alıyorum ama çözümü bulamadım.




#include <16f877A.h> // kütüphaneyi tanıtıyoruz
#use delay(clock=20M)
#fuses HS, NOWDT, NOPUT, NOLVP, NOCPD, NOPROTECT, NODEBUG, NOBROWNOUT, NOWRT
#include <string.h>
#include <stdlib.h>


#use rs232 (baud=115200, xmit=pin_c6, rcv=pin_c7, parity=N, stop=1, errors, long_data)

#define VERI_IZNI pin_c5
#define VERI_ALMA_LEDI pin_c1
   



char i;
int tdtextsize;

char gelen[20];



#int_rda
void rs232_kesmesi()
{  
   for(
t=0t<10t++)
   {
      
gelen[t] = getch();
   }
   
   
disable_interrupts(int_rda);

}         


void main()
{       
   
set_tris_b(0xFF);
   
set_tris_c(0x00); 
   
delay_ms(50);
 
   
enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin verir
//   enable_interrupts(int_rda); // int_rda kesmesi aktif  

   
   
   
while(1
   {
       
      if(
input(pin_b2) == 1)
      {
         
printf("SET SW in3 out1\x0D\x0A");         // Cihaza SET SW in3 out1<CR><LF>  kodu gönderiyorum ve alıyor
         
delay_ms(50);
         
enable_interrupts(int_rda);
         
delay_ms(3);
         
output_high(pin_c2);
         
delay_ms(100);
         
output_low(pin_c2);
         
delay_ms(20); 
         
disable_interrupts(int_rda);
         
delay_ms(3);
      }
      if(
input(pin_b1) == 1)
      {
         
printf("SET SW in4 out1\x0D\x0A");       // Cihaza SET SW in4 out1<CR><LF>  kodu gönderiyorum ve alıyor
         
delay_ms(50);
         
enable_interrupts(int_rda);
         
delay_ms(3);
         
output_high(pin_c1);
         
delay_ms(100);
         
output_low(pin_c1);
         
delay_ms(20); 
         
disable_interrupts(int_rda);
         
delay_ms(3);
      }
      
delay_ms(500);

      if(
gelen[5] == "4")                // Cihazdan SWin4 out1<CR><LF>  kodu gelmesi lazım ve beşinci karakteri sorguluyorum
      
{
         
output_high(pin_c0);   //geribildirim gelirse ledi yak
         
delay_ms(500);
         
output_low(pin_c0);  
      }
      

   }         
}

onertan

Merhaba arkadaşlar fikri olan var mı?

erkantr67

11 Nisan 2021, 12:48:57 #2 Son düzenlenme: 11 Nisan 2021, 12:58:19 erkantr67 Sebep: Öneri
Gelen karakterlerin bazılarının ASCII karşılıkları iki haneli olabiliyor. Sizde bu ASCII karşılığına göre kontrol sağlıyorsanız, hiç olmayan karakteri arıyor olabilir ya da tamam gelen geldi işim bitti deyip bufferda bilgi bırakıyor olabilirsiniz. Bu durumda program kesmede kalıp kilitlenir.

Kastım;

ASCII okunan: SWin4 out1<CR><LF>  -->> 18 karakter gibi
Normalde gelen: 12 karakter vs.

Ya da

ASCII okunan: SWin4 out1<CR><LF>
Normalde gelen: %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n  18+1 karakter.

Öneri:
Cihazın gönderdiği bilgileri okuduğunuz arayüzde, .hex gösterimini açıp, gelen verileri tam manasıyla görmeniz sorunu size tam olarak söyleyecektir.

z

Bugibi durumlarda terminal programi kullanip gelen datalarini gorsellestirmelisiniz.

Siz kendi MCUnuzla ne gonderecekseniz gonderin. Gelenleri terminal programi ekranda gostersin
hatayi daha kolay yakalarsiniz.

Gelen datalari terminal programi isterseniz hex olarak da gosterebilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mufitsozen

disable_interrupts(int_rda);

satirini silin.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

onertan

Teşekkür ederim arkadaşlar. Önerilerinizi deneyip bilgi vereceğim.

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.