Assembly de RX - TX Ayarlarında Sorun

Başlatan __TECH__, 01 Ekim 2010, 18:03:36

__TECH__

pic ve bir cihaz arasında seri haberleşme sağlamak istiyorum data alıyorum problem yok fakat 16F628A picte TX cıkıs olarak kullanılan RB2/TX/CK  olan ucu ben normal on / off olarak kullanmak istiyorum ve RX/TX Baud ayarlarında bunu tam olarak çözemedim kod aşağıdaki gibi burda sorun nedir arkadaşlar bu çıkış şu an devamlı transmit konumunda yani sabit olarak çıkış veriyor

MOVLW      04h
MOVWF      SPBRG
BCF         TXSTA,TX9   
BSF         TXSTA,BRGH
BCF         TXSTA,SYNC   
;BCF         TXSTA,TXEN
CLRF      PIE1
BSF         PIE1,RCIE   
BCF         STATUS,5
;================================
BSF         RCSTA,RX9   
MOVF      RCREG,W   
MOVF      RCREG,W
MOVF      RCREG,W
BSF         RCSTA,CREN   
BSF         RCSTA,SPEN   
BSF         INTCON,PEIE   
BSF         INTCON,GIE

X-Fi

#1
asm kullanmayalı uzun zaman oldu ama C de SPEN=1; vardır(RCSTA registerdaydı sanırım bu bit) seri port enable görevinde bu biti 0 yaparak port olarak kullanabilirsin unutmaki port kapalıyken RX de yapmaz pwm clock darbeleriyle kondansetör direnç zamanlamasından belki bilgi çıkışı olarak kullanılabilir ancak boş pinlerin varsa hiç uğraşma başka bi pine bağla ;)
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

__TECH__

hocam başka pin kullanma şansım yok elimde tek pin RB2/TX pini var ve RX aktifken yani seri bilgi alım durumundayken bu TX pinini normal çıkış olarak kullanmam gerekiyor

X-Fi

bu pini nerde kullanacağını söyle şema ver konuyu anlayıpda yorum yapalım yazılımla yeni yeni ugraşmaya başlamışsın gibi geldi bana tecrübene göre başka çözümler ara şimdi sana ne anlatsam olmaz.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

__TECH__

Hocam hazır yazılım yada şema istemiyorum geri kalan kısmını kendim yapacağım yazılıma yeni başlamadım ama assemblyde yeniyim elimde hazır  yapılmış bir pcb var yeni yapmadım ve bu pcbde tx ucunda bir led var yani amacım ; cihazdan gelen datayi ölçüp değerlendireceğim mesela 100 gelirse TX ucundaki led yanacak 50 gelirse Sönecek gibi ama seri iletişimde usart ayarlarının içinden çıkamadım amacım 16F628A picte sadece RX yani receive kullanmak ve TX iptal etmek TX pininde bir led var ihtiyacım olan sadece usart ayarları

Tagli

TRISB'yi nasıl ayarlıyorsun? Datasheet'te yazdığına göre seri port çalışması için bu iki pinin de 1 olması gerekiyor (çıkış pininin 1 olması kafa karıştırıcı ama öyle yazmış) Öyle sanıyorum ki TX'e denk gelen biti 0 yapman sorunu çözecektir.

Tüm programı ve devre şemanı koyarsan daha rahat yorum yapılabilir.
Gökçe Tağlıoğlu

__TECH__

#6
hocam işlemcisi bozulmui hazır bir pcb üzerinde çalışıyorum ve bir şema çizmedim ama devre şu şekilde , 20mhz kristal 16F628A pic porta hepsi buton sadece mclr ucunda reset direnci direk +5v verilmiş ve port bde ise Rx girişinde rs485 entegre var TXte ise bir adet led var digerleri buton devre üzerinde porta ve port bde butonlar var hocam kodlama bu şekilde

SETUP

MOVLW         0x07
MOVWF         CMCON
CLRF         PORTB
BSF         STATUS,5
MOVLW      B'11111011'
MOVWF      TRISB
MOVLW      B'11111111'
MOVWF      TRISA
CLRF      PORTB
CLRF      PORTA
BSF      TRISB,1   

MOVLW      04h
MOVWF      SPBRG
BSF         TXSTA,BRGH
BCF         TXSTA,SYNC    
CLRF      PIE1
BSF         PIE1,RCIE
BCF         STATUS,5
BSF      RCSTA,RX9   
MOVF      RCREG,W   
MOVF      RCREG,W
MOVF      RCREG,W
BSF         RCSTA,CREN
BSF         RCSTA,SPEN   
BSF         INTCON,PEIE   
BSF         INTCON,GIE

Tagli

Bank 1'de iken "CLRF PORTB" ve "CLRF PORTA" demişsin, bunlar TRIS register'larını sıfırlar. GErçi bu senin sorununu açıklamıyor o ayrı... Ayrıca, "BSF RCSTA,RX9" ve 3 adet "MOVF RCREG,W" satırını neden kullandığını çözmedim.
Gökçe Tağlıoğlu

__TECH__

forumda konuyu açmadan önce internette araştırdım ve bulduğum bir örnek kodlamada bu şekilde kullanılmıştı , peki hocam bunlar yanlışsa doğrusu nedir ?  yani sadece RX kullanıp daha alımı yapamıyormuyuz ? RX kullanıyorum diye TX te kullanılmak zorundamı illaki bu uç iptalmi olacak ?

X-Fi

aklıma bişey geldi full dublex haberleşmeyi aç TX pininden sürekli 0x0 gönder stop bitini kaldırabilirsin yada bir kondansetör direnç zamanlamasıyla gelen stop bitlerinide sildirirsin böylece alsana çıkış "0" led sönük göndermeyi kesersen çıkış "1" led yanık  :D
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

__TECH__

hocam yukarda anlattım sorunumu ben gelen değeri ölçüp led yakacağım yani değer gelse bile benim istedigim sayıda bir değer değilse yanmayacak led , mesela ben 60 görmek istedim ama 50 geldi o zaman yanmaması lazım  , tek sorunum ihtiyacım olan sey TX ucunu istedigim gibi kullanabilmem için gerekli olan usart ayarları yani yukarıdaki kodda hata nerde onu yazarsanız sevinirim hazır bir bir pcb kullanıyorum ne bir ek parca ekleme sansım var nede baska bir pin secme tek hakkım var oda TX ucunu çıkış olarak kullanmak , pici sadece seri bilgi alışverişinde kullanan arkadaşların cevaplarını bekliyorum , iyi çalışmalar

Tagli

Bu dediğin şeyi daha önce denemediğim için kesin konuşamıyorum ama bir ara fiziksel ortamda deneme yapıp sonucu burada yazarım. Ama en kötü ihtimalle, seri iletişimi yazılımla helledip TX'i boşa çıkarabilirsin. Belki biraz uğraştırır gerçi...
Gökçe Tağlıoğlu

X-Fi

#12
hocam aradığınız bütün bilgiler 628 datasheetinde mevcut aslında TX pini yalnızbaşına IO olarak kullanılamıyor usart çalışırken ben size altarnetifleri söylüyorum burdaki çoğu arkadaş anlamıştır ancak siz anlamadınız şöyleki ledin yanmasını istiyorsanız hiçbişey yapmayın usartda TX yok ise çıkış 1 dir çünkü ledi söndürmek istiyorsanız (ne sebeple hangi sonuça itafen yapacağınız size kalmış) TXIF kesmesini kurup fifo boşaldığında sürekli 0x00 bilgisini gönderirsiniz her byte sonunda 1 stop bitinide bir kondansetör şarj zamanlamasıyla kaybedebilirseniz iş sadece kesme açıp kapatma ile biter.   

bu bir çözüm olabilir tagli hocanın dediğide çözüm olabilir sizin için 628 ile hala çalışıyorum ticari veya hobi olarak tüm bunları tecrübelerim sonrasında yazıyorum sizde temel elektronik bilgisine sahip ve yaratıcı biriyseniz yapılamaz diye bişey yok sanıyorum hazır kod bekliyorsunuz bence kendiniz deneyip bulun bence bu tür işler için kimse vakit harcıyacamaz birde katalog okumayı öğrenin ilerde faydası olur.

umarım yanlış anlamamışsındır üstadım kolay gelsin iyi çalışmalar..
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

__TECH__

iliginize tşk ederim hocam  hazır kod aramıyorum farkındaysanız yukarıda belirttim geri ye kalan kısımlarını bir şekilde halladerim sadece usart ayarlarında takıldım ve sonuc olarak ogrendimki RX ucu aktifken TX ucu kesinlikle giriş yada çıkış olarak normal bsf - bcf seklinde kullanılamııyor , peki bu devredeli mclr RA5 ucunu kullanma sansım varmı ? ordaki direnci kaldırıp mclr iptal edicem iptal edip kullansam olurmu ? direnci iptal edip yazılımda mclr kapattıgımdada devrem data alımı yapıyor çalışıyor

X-Fi

mclr ucu dijital giriş olabilir ancak çıkış olamaz Vpp görevinde olduğu için yeni nesil hariç 12 ve 16F serisi piclerin hepsinde böyle mclr giriş.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)