UART veri göndermek ?

Başlatan bulut_01, 14 Aralık 2017, 00:56:00

bulut_01

#45
Alıntı yapılan: dumansiz - 18 Aralık 2017, 12:50:47
@bulut_01
"ibus portu" olarak tabir ettiğiniz port hakkında biraz daha bilgi verebilir misiniz?
Referans aldığınız bir cihaz var ise o cihazın donanımını da inceleyebilirsiniz.
Burada bir "bus" hattı varsa durum farklı bir hal alabilir. MAX232 yerine "ibus" arayüzü(interface) kullanmanız gerekebilir.
Bu bus hattına bağlı diğer birimler kendi aralarında sürekli haberleşiyor olabilirler.
"Dinleme" dediğiniz şeyi nasıl yaptınız? "Logic analyzer" ile mi?
Üstad araba teypi araç içinde ibus haberleşerek enable oluyor I bus analyzr bir program var pc de o test kodu oluşturuyor farklı bir pc ile comport ile dinleyip hex kodlarını kopyaladım pc den seri port aracılıgıyla teypin ibus hattına gönderdiğimde kaydettiğim hex kodu teyp açılıyor bu işlemi pc değilde pic ile yapmak istedim ama kodlarda sıkıntı var pcden kayıtlı hex kodu pic ile aynısını gönderemedim. Comport ile teypin ibus hattı arasına bir direnç ve transistörlü küçük bir devre var.
YENİLMEZ..

dumansiz

Bilgisayardaki dinleme yazılımı, bunun gibi birşey mi:
http://www.tessera.co.jp/board/eng/ibus/apieb2.html

IEBus diye birşey var:
http://www.wikizero.org/index.php?q=aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSUVCdXM

https://elinux.org/images/e/e1/UPD72042.pdf

Eğer aynı şey ise iebus hakkında biraz döküman okumak gerekir.

bulut_01

Onlar değil usta serial port utility diye masa üstü pro resimdede adı yazıyor.
YENİLMEZ..

mufitsozen

#48
IBUS BMW arabalarda multimedia cihazlar icin kullanilan bir multimedia haberlesme hattidir.

@bulut_01 asagidaki link isinize yarayabilir.
    http://www.reslers.de/IBUS/       
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

bulut_01

Alıntı yapılan: mufitsozen - 18 Aralık 2017, 14:08:00
IBUS BMW arabalarda multimedia cihazlar icin kullanilan bir multimedia haberlesme hattidir.

@bulut_01 asagidaki link isinize yarayabilir.
    http://www.reslers.de/IBUS/       
Hocam i bus analyzr programını burdan indirdim zaten programın test olarak gönderdiği kodu pic ile gönderim dedim ama olmadı kodda sıkıntılar çıktı hex olarak gönderdiğim veriler text olarak gidiyor burda takıldım. Ayrıca almanlar işi biliyor bmw şaheser gibi bir araba  :D
Diyorum bmw teypleri neden hiç çalınmıyor adamlar önlemini almışlar her konuda helal olsun.
YENİLMEZ..

dumansiz

@mufitsozen in verdiği linkleri incelediniz mi?
http://www.yeint.ru/suppliers/melexis/pdf/TH3122_004.pdf
6.sayfada örnek uygulama var.

SENSE ucu ile hattı dinleyeceksiniz boş olduğunda UART'tan  veriyi göndereceksiniz.
MAX232 kullanmanıza gerek yok. TH3122 veya muadilini kullanacaksınız.
110 bytelık veri dediniz ama Aslında 11 byte uzunluğunda 10 tane paket var orada.

C8 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D8 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
68 09 3B 23 62 30 54 45 53 54 3D
68 09 3B 23 62 30 54 45 53 54 3D

Her paket arasına bekleme konabilir. Her bir pakete karşı taraftan cevap gelebilir.

bulut_01

Alıntı yapılan: dumansiz - 18 Aralık 2017, 17:07:51
@mufitsozen in verdiği linkleri incelediniz mi?
http://www.yeint.ru/suppliers/melexis/pdf/TH3122_004.pdf
6.sayfada örnek uygulama var.

SENSE ucu ile hattı dinleyeceksiniz boş olduğunda UART'tan  veriyi göndereceksiniz.
MAX232 kullanmanıza gerek yok. TH3122 veya muadilini kullanacaksınız.
110 bytelık veri dediniz ama Aslında 11 byte uzunluğunda 10 tane paket var orada.

C8 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D8 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
D0 09 3B 23 62 30 54 45 53 54 3D
68 09 3B 23 62 30 54 45 53 54 3D
68 09 3B 23 62 30 54 45 53 54 3D

Her paket arasına bekleme konabilir. Her bir pakete karşı taraftan cevap gelebilir.
Gönderme arasında bekleme gibi bir durum yok aslında bu hex paket codu pic ile gönderemedim
YENİLMEZ..

bulut_01

#52
yardımcı olan butun arkadarlara tsk ederim uart ile teyp calıstırdım code son hali budur saolun.

#include <16F628A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(internal=4000000)
#use rs232(baud=9600,parity=E,xmit=PIN_B2,rcv=PIN_B1,bits=8,stream=UART1,stop=0,errors)
#use fast_io(A) 
#use fast_io(B)

int i=0;
int s=0,w=0;

volatile const int veri[]={  
                  0xC8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54, 
                  0x45,0x53,0x54,0x3D,0xD8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,
                  0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,
                  0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,
                  0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,
                  0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,
                  0x54,0x3D};
                       
void main()
{
 setup_timer_1(T1_DISABLED);
 setup_comparator(NC_NC_NC_NC);
 setup_vref(FALSE);

set_tris_a(0b00010000);
set_tris_b(0b00000010);
 
 output_a(0x00);
 output_b(0x00);

while(TRUE){
    
if(i==110){
s++;
if(s==3){
w=1;}}
    
    if(w==0){
    for(i=0;i<110;i++)
    printf("%C",veri[i]);
                         
}}}
YENİLMEZ..

eti

uart tanımlaması yapıldıktan sonra
char buffer[110]={'C', '8', '0' ,'9', '3' ,'B...}
int sayac;
for (sayac=0;sayac < 110;sayac++){
   putc(buffer[sayac]);
}

tx pini çıkış olarak ayarlanmalı.
saygılar

Pyrodigy

#54
Konuyu Açan'A; Önerim
1- Usart ı iyi çalış nasıl gönderilir nasıl alınır. Datasheet leri çok dikkatli oku.
2- UART tan seri haberleşme ile göndereceğin verileri tek seferde gönderemezsin. Peşpeşe gönderebilir ve alırsın.Hal böyleyken peşpeşe göndereceğin dataların UART tan gittiğini ve diğer datayı sıraya koyman gerektiğini kontrol etmen gerekir. Aynı şekilde alımlarda bu şekilde yürür. Bu durumda Anahtar kelimen; Veri gönderirken PIR registerinin TXIF bitini her gönderim öncesinde yani sıradaki datayı UART a yollamadan önce kontrol etmen gerekir. Aksi halde UART hatası alırsın.
1. önerimi okurken net bir şekilde görebilirsin.
Sevgiler.
Persistance is the name of the game in this business....

Pyrodigy

Kesmesiz UART üzerinden Dizi Gönderimlerinde şu şekilde bir yol izlenebilir.
//*****************************************************************************
//						TX SERIAL
//input: 
//		len: Data uzunluğu	
//		data: Gönderilecek dizi 
//Örnek: 
//		unsigned int8 Send_Zeros[3]={0x00,0x01,0x02}; //UART Hattına Gönderilecek Dizi örneği 3 byte
//		
//		TX_Serial (sizeof(Send_zeros),Send_Zeros); 	
//*****************************************************************************
void TX_Serial(unsigned int8 len, unsigned int8* data)
{
unsigned int8 pStr;
pStr = 0; 
   while (pStr!=len) 
   {    				   // dizi gönder 
        while (TXIF == 0) 
        {;}  				   //  bekle 
        delay_cycles( 10 ); 	   // 10xNOP 
        TXREG = data[pStr++]; //  karakter gönder 
    }     	
}
Persistance is the name of the game in this business....

bulut_01

Alıntı yapılan: Pyrodigy - 03 Ocak 2018, 21:15:31
Kesmesiz UART üzerinden Dizi Gönderimlerinde şu şekilde bir yol izlenebilir.
//*****************************************************************************
//						TX SERIAL
//input: 
//		len: Data uzunluğu	
//		data: Gönderilecek dizi 
//Örnek: 
//		unsigned int8 Send_Zeros[3]={0x00,0x01,0x02}; //UART Hattına Gönderilecek Dizi örneği 3 byte
//		
//		TX_Serial (sizeof(Send_zeros),Send_Zeros); 	
//*****************************************************************************
void TX_Serial(unsigned int8 len, unsigned int8* data)
{
unsigned int8 pStr;
pStr = 0; 
   while (pStr!=len) 
   {    				   // dizi gönder 
        while (TXIF == 0) 
        {;}  				   //  bekle 
        delay_cycles( 10 ); 	   // 10xNOP 
        TXREG = data[pStr++]; //  karakter gönder 
    }     	
}


Ben bu dili bilmiyorum son yazdıgım kod sorunsuz çalışıyor hata ile karşılaşmadım.
YENİLMEZ..

omereliusuk

#57
#include <16F628A.h>
#use delay(internal=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,stream=PORT1,errors)

#define maxLenght 110
int startTx=0;
int stopTx=10;
volatile const int veri[maxLenght]={ 
                  0xC8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,
                  0x45,0x53,0x54,0x3D,0xD8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,
                  0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,
                  0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,
                  0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,
                  0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,
                  0x54,0x3D};

#INT_TBE
void  TBE_isr(void) 
{
  if((startTx++)<stopTx)printf("%c",veri[startTx-1]);
   if(startTx==stopTx)disable_interrupts(int_tbe);
}

#INT_RDA
void  RDA_isr(void) 
{

}

void main()
{

   enable_interrupts(INT_TBE);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   while(TRUE)
   {
if(!input(pin_b0)){while(!input(pin_b0));startTx=0;stopTx=10;enable_interrupts(int_tbe);}
   }
}

startTx=0;stopTx=10;enable_interrupts(int_tbe);
bu kodu her gördüğünde yeniden veri aktarımına başlayacak. sona gelince bitirecek. bu arada başka işlerle uğraşabileceksiniz. ben bunu b0 portuna bağladım.

bulut_01

Alıntı yapılan: omereliusuk - 05 Ocak 2018, 00:36:22
#include <16F628A.h>
#use delay(internal=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,stream=PORT1,errors)

#define maxLenght 110
int startTx=0;
int stopTx=10;
volatile const int veri[maxLenght]={ 
                  0xC8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,
                  0x45,0x53,0x54,0x3D,0xD8,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,
                  0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,
                  0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,
                  0x54,0x45,0x53,0x54,0x3D,0xD0,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,
                  0x3B,0x23,0x62,0x30,0x54,0x45,0x53,0x54,0x3D,0x68,0x09,0x3B,0x23,0x62,0x30,0x54,0x45,0x53,
                  0x54,0x3D};

#INT_TBE
void  TBE_isr(void) 
{
  if((startTx++)<stopTx)printf("%c",veri[startTx-1]);
   if(startTx==stopTx)disable_interrupts(int_tbe);
}

#INT_RDA
void  RDA_isr(void) 
{

}

void main()
{

   enable_interrupts(INT_TBE);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   while(TRUE)
   {
if(!input(pin_b0)){while(!input(pin_b0));startTx=0;stopTx=10;enable_interrupts(int_tbe);}
   }
}

startTx=0;stopTx=10;enable_interrupts(int_tbe);
bu kodu her gördüğünde yeniden veri aktarımına başlayacak. sona gelince bitirecek. bu arada başka işlerle uğraşabileceksiniz. ben bunu b0 portuna bağladım.

Eyw saol üstad farklı ve güzel yazım şekli her örnekte yeni birseyler ögreniyoruz.
YENİLMEZ..