Seri haberleşme problemi (USART)

Başlatan kimlenbu, 25 Eylül 2013, 17:59:50

kimlenbu

İki işlemci birbiri ile 115200bps ile haberleşiyor. iki işlemci arasındaki TX RX hattına bir tanede 19200bps'de haberleşen termal yazıcı bağlı.

Benim düşüncem ana işlemciden termal yazıcıya veri göndereceğimde baud rate'i 19200bps yapmak,ana işlemciden diğer işlemciye veri göndereceğimde ise baud rate'i115200bps yapmaktı. Böylece veriler karışmayacaktı.

Sorun şu ki, termal yazıcı iki işlemci arasındaki haberleşmeden etkileniyor, çince karakterler basıyor zaman zaman. Slave işlemci de termal yazıcıya veri gönderirken kendisine veri geldi sanıp hatalı dallanmalar yapıyor.

ben devre tasarımını bozmadan nasıl çözerim ? ağlayacağım, kartları bastırmış bulundum...

ANA İŞELEMCİ             SLAVE İŞLEMCİ                          TERMAL YAZICI
___________        _________________     __________________________

RX-----------------------------TX------------------------------------------TX
TX-----------------------------RX------------------------------------------RX

Sadece ana işlemci veri gönderiyor -->

LukeSkywalker


Klein

#2
Yazıcının bir protokolü var mı? ASCII olarak ne gönderirsen onu mu? basıyor?
Slave chaz sorun değil. Ama yazıcının protokolü yoksa, mantıklı bir çözüm gelmiyor aklıma.
yazıcıynın datasheetine bakmak lazım. Belki  başlatmma ,durdurma gibi komutları vardır.

Başka bir çözüm de printer ile yazıcı arasına başka bir kart yapıp, veriyi o kart üstünden göndermek olabilir. 

serhat1990

#3
Sistemler nasıl bir kablo üzerinden mi çalışıyor ... Ve kablo içindeki tüm damarları kullanıyormusun . 2 adet kullanmadığın damar varsa master çıkışına ufak bir devre kurulabilir ... Datanın slave üniteye veya termal yazıcıya gittiğini anlayarak ona göre anahtarlama yapacak kablonda kullanılmayan damarlar var ise buna göre anahtarlama yapacak .

z

Iki TX hattını nasıl birbirine bağlıyorsun? USART çıkışlarında ne tip bir interface var?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Alıntı yapılan: z - 25 Eylül 2013, 18:53:26
Iki TX hattını nasıl birbirine bağlıyorsun? USART çıkışlarında ne tip bir interface var?
Sanırım tek yönlü hocam. Sadece Master cihaz veri gönderiyormuş.

Kabil ATICI

VE kapısıyla gönderirken seçmen yerinde olur.  Başka türlü zor.
ambar7

MrDarK

Basit bir yol var ;

Termal yazıcı hattını ana hattan ayır orayada ufak 12F675 li devre koy, kendine ait start (key) kodu geldiğinde termal yazıcıya veri göndersin, yani komutların başına anahtar koyup sistemi çözebilirsin.
Picproje Eğitim Gönüllüleri ~ MrDarK

LukeSkywalker

Bir adet röle ile hallolur. Normalde kapalı uca slave mikroyu, normalde açık uca yazıcıyı bağlarsınız. Röle çekince slave mcu hattan ayrılır, termal yazıcı hatta alınır.

kimlenbu



İki işlemci kart üzerindeki yollarla bağlı, yazıcı ise kırmızıyla gösterdiğim alanda soketle bağlanıyor karta. Sadece ana işlemci veri gönderdiği için bu şekilde bağladım.

Slave işlemcinin hatalı okuma yapmasını yazıcıya veri göndermeden önce slave'e "sen azıcık bekle" komutu göndererek çözdüm. Termal yazıcıların da protokolü var ama datasheetinde sadece "Initialize Printer" komutu var ne yazık ki, standby'a alma komutunu göremedim.

Röle, kapı, minik işlemci gibi seçenekler artık hiçbir çare kalmazsa başvuracağım şeyler.

Şu an verileri maskeleyip printer'ın karakter basmasına sebep olan verileri ortadan kaldırmaya çalışıyorum, aklıma tek bu geldi. Cevaplar için çok teşekkür ederim.

Bu şekilde full test yapmadan dizayn yapacaklara da ders olayım :)

yamak

Nasıl bir sonuç verir bilmem ama denemekte fayda var.İki işlemci arasındaki baud hızı 19200 den daha düşük bir değere ayarlanıp denenebilir.

kimlenbu

19200bps altında ve üstünde ne kadar standart baudrate varsa hepsini denedim, olmuyor.

Kabil ATICI

işlemcilerin i2c bcakları dolu mu? Usart harici bir haberleşme kullanılabilir.
ambar7

kimlenbu

#13
i2c yok ne yazık ki, SPI var, onun da bacakları dolu :/

mesaj birleştirme:: 26 Eylül 2013, 11:52:16

Termal yazıcının sleep komutunu buldum, datasheetin en sonundaymış gözümden kaçmış.

"ESC 8 n1  Sleep parameter
ASCII:  ESC 8 n1
Decimal:  27 56 n1
Format:
Hexadecimal:  1B 38 n1
Description:  Setting the time for control board to enter sleep mode. 
n1 = 0-255 The time waiting for sleep after printing finished,
Unit(Second),Default:0(don't sleep)
When control board is in sleep mode, host must send one byte(0xff)
to wake up control board. And waiting 50ms, then send printing
command and data.
NOTENOTE::::The command is useful when thThe command is useful when thThe command is useful when the system is powered by battery."

Müh. müh.

Projede kullanılan termal yazıcının kağıt boyutu, modeli ve fiyatını belirtebilirmisin?
Destiny of white is dirtied. Destiny of black is found guilty...