Pic ile RS232 den sayı ve ascii kod gönderme

Başlatan since1990, 20 Mart 2011, 20:17:05

since1990

Asci kod ile çalışan bir yazıcım var arkadaşlar asci ne giderse onu aynen yazıyor. Pic ile asci kod nasıl gönderilir biraz el atarsanız memnun olurum.
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

iyildirim

Özel birşey değil..

Diğer verileri nasıl gönderiyorsak o şekilde gönderebilirsiniz. ASCII kod dediğinizde normal veri.
A harfi için 'A' veya decimal 65 veya hex 0x41 gönderebilirsiniz.

Sanırım dikkat edilmesi gereken daha çok seri protokol uyumluluğu olur. Hard veya soft handshake ve baut rate değerlerine dikkat edildiğinde sorun çıkmaması gerekli..

Birde bir süre önce uğraştığım barkod yazıcısında olduğu gibi seri port kablosunu standart dışı kullanan (RTS-CTS-DTR gibi pinleri kısa devre etmek veya farklı bağlamak gereken) yazıcılar var.
Sorun çıkarsa datasheet'lerinde kablo yapısı ile ilgili bilgiler kontrol edilmeli.

since1990

Peki Css ile mi ilgilenmiştiniz? Çünkü ben max232 kullanmadan gönderiyorum, ve mesela
printf("10") yazınca g yazıyor yanındada küçük derece işareti. Siz bna iki tane örnek kod gönderebilirmisiniz. Data böyle yollanır ascii böyle yollanır diye?
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

iyildirim

CCS kullanmıyorum ama C C'dir

A harfi göndermek için

printf("A") veya printf(0x41) veya printf(65)

kullanabilirsiniz.

printf("10") gönderdiğinizde karşıda almanız gereken iki byte "1" ve "0" decimal 49 ve 48 olmalı.  Hataya bakınca bautrate, polarite vs. gibi şeyleri kontrol edin derim.

PC de denediğinizde doğru sonuç alıyormusunuz..


since1990

Pcden sorun yok sadece benim yazımın sonuna birkaç fazladan karakter ekliyor :D o da bazen
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

since1990

max232 kullandım, merhaba yazdırıyorum printf ile, tuhaf tuhaf karakterler geliyor... Bunun sebebi ne olabilir?
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

iyildirim

Ne tuhaflık var. Biraz açarmısınız. 

"Merhaba" yı karşıda ne olarak görüyorsunuz. 

PC'de tam, sorunsuz olarak yazdırmayı başardınızmı. Hata varsa nedir. Fazla karakterler nedir.

Muhtemel sebepler Baud rate  uyumsuzluğu, %3den fazla hata olması,   hard veya soft handshake kullanmamak, yazıcının kabul ettiğinin dışında bir formatta bilgi göndermek, vs..



since1990

while döngüsünde merhaba gönderiyorum
şöyle çıkıyor,
"Merherhaba.aba
Me'aSY.+eA)2Vr....
gibi saçma saçma karkaterler. Pcden gönderincede öyle karakterler geliyor ama mesela. zqa yazınca normal zqan yazınca sonuna karkater ekliyor.
Ama şöyle birşey zqan yazınca pcden altta sendin string zqan..a.dfa. yanınd yazıcıya giden saçma karakterlerde pcden görünüyor. o yüzden kullandığım pogramla alakalıdır diye düşündüm.
Peki baudrate eşitlemek için ne yapmalıyım?
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

since1990

#8
Programı değiştirince sorun düzeldi.. AMa pic ile ilgili hala bir fikrim yok
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
yazdırdığım programında ayarları aynen böyle yapılmış, handshaking ayarları none seçili fakat o ayarları picte ayarlayamadım ondan olabilirmi?
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

iyildirim

Anladığım kadarı ile PC de sorun yok.. Hata zaten gönderilen stringin içeriğinin hatalı olması..

"Merherhaba.aba

Bu tip bir hata while döngüsünde bekleme yapmadan sürekli veri gönderildiğinde ve flowccontrol mekanizmaları da olmadığında oluşabilir.

Pic den veri gönderirken arada kaybolan karakterler var ancak alınan karakterler sizin gönderdiğiniz karakterlerden oluşuyorsa hard veya Xon Xoff flowkontrol çalıştırabilirsiniz. Ya da veriyi gönderirken aralara bekleme koyun. Yazıcının receive bufferi ne kadar gibi bilgileri biliyormusunuz bu arada. Bilinirse karar vermek daha kolay olur.

Bunlarda hata yok ise bautrate hatası olabilir.

UART iletişimi %3 'e kadar bautrate hatasını tolere edebiliyor. Kullandığınız bautrate yüksekse ve yazıcı üzerinde de switch le falan ayarlanabiliyorsa en azından test aşamasında en düşük hıza set edin.

PIC nedir bilmiyorum, dolayısıyla baut rate nasıl hesaplanır da belli değil. clock, kristal vs. ile oynayabiliyorsanız bautrate'i  de ince ayar yapma olanağı olur. Diğer seçenek dediğim gibi hızı düşürmek.



since1990

Üzerinde çalışıyorum, Harf Harf BEkleyerek gönderiyorum.. Bakalım...
Bu arada pic 16f877A
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

iyildirim


since1990

Önce 20mhz ile çalıştım, bende sizingibi hızdandır heralde dedim 4MHz ye düştüm, ama aralara bayaa gecikme koydum sadece \n gönderdiğimde ble anlamsız karkterler yazıyor... halbüki ben ona satır atlat diyorum
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

iyildirim

9600 de min. hata için elinde varsa kristali 16Mhz olarak bir dene.

Kodunun osilatör, uart ayarları ve veriyi gönderdiğin kısımlarını ekleyebilirmisin.


since1990

Alıntı Yap#include<16f877A.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#fuses XT,NOWDT,PUT,BROWNOUT,NOLVP
main()
{
set_tris_a(0b100000);
bas:
OUTPUT_A(0);

printf("Merhaba");

while (!input(pin_A0))
{}

goto bas;


}

işte burada
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk