Seri Haberleşmede Karakter Sorunu

Başlatan orhanc, 12 Mayıs 2010, 11:50:11

orhanc

Merhaba,

fxdevin ve hitechin örnek kodlarını denedim 2 devre arasında veri alışverişi oluyor ancak string olarak gönderdiğim değerler saçma sapan karakterler olarak geliyor. RS-485 ve 2 adet 18F4620 kullanıyorum. Forumu araştırdım ancak doğru düzgün bir cevap bulamadım. Alıcı devresine lcd ekledim gelen veriyi görebilmek için. Normalde led displaye değerler gönderilecek.
i'm doing nothing... Giddy Up  http://www.drorhan.com

JKramer

Hangi değeri nasıl gönderdiğinizi ekler misiniz? Bir de sorunun çözümü için tek bir karakter gönderip alıcıda ne aldığınıza bakmak faydalı olabilir. Saçma sapan karakterler şöyle mi?

orhanc

#2
Alıcı Kısmını Kodu
  input = getch();	
  lcd_puts(printf("\rI detected [%c]",input));



Gönderen

putch("DENEME VERISI");


usart.h
void putch(unsigned char byte) 
{
	// Tek byte gönder
	while(!TXIF);	// Transfer tamponu boş mu
	
	TXREG = byte;	// Tek byte gönderiliyor
}

unsigned char getch(void) 
{
	// Tek byte al
	while(!RCIF);	// Alım tamponu boş mu
	return RCREG;	// Tek byte alınıyor
}


Stringi bu şekilde gönderemiyorsa onu buffera alıp pointer ile tek tek mi okumak gerekiyor. En son onu deneyecektim fırsatım olmadı

Gelen karakterler ascii dışında birşey virtual terminalde de aynı şekilde geliyor.

Giddy Up :)
i'm doing nothing... Giddy Up  http://www.drorhan.com

JKramer

Dediğiniz gibi yapmalısınız. Zaten putch fonksiyonunun girdisi byte.

Dediğim gibi, haberleşmede başka bir sorun olup olmadığını anlamak için tek bir karakter gönderip alın.

orhanc

Tamam deneyip göreceğim ama fxdevin kitabında bu şekilde terminalden bilgiyi direk lcd ye yazdırıyor. O nasıl oluyor :)
i'm doing nothing... Giddy Up  http://www.drorhan.com

orhanc

Tek karakter olarak gönderdim mesela 3 ve watch ekranından kontrol ettim gönderici veriyi gönderiyor onda sorun yok ama alıcı veriyi alamıyor. Bunu nasıl çözebilirim ?
i'm doing nothing... Giddy Up  http://www.drorhan.com

controller

Alıntı yapılan: orhanc - 12 Mayıs 2010, 12:05:30
Alıcı Kısmını Kodu
  input = getch();	
  lcd_puts(printf("\rI detected [%c]",input));


[b

böyle bir yazım şekli mantıklı değil, printf dönüş değeri olarak yazdığı karakter sayısını integer olarak verir. lcd_puts fonksiyonunun parametresi char dizisi ise siz parametre olarak integer göndermişsiniz.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

orhanc

#7
onu değiştirdim gelen hex değerini desimale çevirip lcd ye denemek için yazıyorum ama sorun o değil hiç veri gelmiyor. Hitech ile veriyi alan bir örnek proje veya kod var mı elinizde. usart pinlerini giriş olarak ayarlayıp 0xF0 ile usartı init ediyorum ve getch ile de verinin gelmesini bekliyorum. Yanlış birşey var mı bu konuda ya da eksik yaptığım birşey ?
i'm doing nothing... Giddy Up  http://www.drorhan.com

OG

Usart ayarı için (proton) şunu kullanıyorum,

USART ayarı;
Device 16F628A
    Config HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF , CP_ON, DATA_CP_OFF, BODEN_ON
All_Digital TRUE
Xtal = 20

Hserial_Baud = 250000          ' 
Hserial_RCSTA = %10010000      '   90h ' Enable serial port & continuous receive
Hserial_TXSTA = %00100100      '  8 bit, 
Hserial_Clear = 1

SPBRG = 4


TX Gönderme;
HSerOut [ s_1, s_2, s_3]

veya string
HSerOut [ "ABCDE"]




FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ahmet2004

*orhanc*

Kodalarına ve şemana baktım alma işini interrupt ile yapman lazım.Yazdığın kodlar ile olmaz yanlış ve farklı data alırsın.

Muhakkak interrupt kullanmalısın.İnterrupt yani 18f serisinde kesmeleri incele.Daha önce kesmeler ile ilgili örnekler verilmişti sitede.

Bir bak kesmelere sonra devam edelim.

orhanc

Gönderdiğim kod ile gayet güzel veri alışverişi oluyor 100metre kablo ile denedik ve sorun yok tek sorun max487 nin pin bağlantılarının yanlış olmasıymış. Sorunu çözdük
i'm doing nothing... Giddy Up  http://www.drorhan.com