PIC16F628A RS232'DEN kablosuz LCD YE YAZI YAZDIRMADA HATA

Başlatan AYKIRI, 22 Haziran 2010, 18:05:48

AYKIRI

merhaba arkadaşlar

pic16f628a ile rs232den arx - atx 34 alıcı verici kullanarak lcd'ye yazı yazdırmak istiyorum
devreyi ilk çalıştırdığımda lcd ekrana değişik karakterler geldi ama benim istediğim hiçbirşey olmadı
istediğim olay şu
porta.2 den gelen datayı lcdout ile yazdırmak
yardımlarınız için şimdiden teşekkürler


kodlar :

@ DEVICE PIC16F628A                                                     
@ DEVICE PIC16F628A, WDT_OFF       
@ DEVICE PIC16F628A, PWRT_ON             
@ DEVICE PIC16F628A, PROTECT_OFF         
@ DEVICE PIC16F628A, MCLR_OFF

define osc 4

include "modedefs.bas"
DEFINE LCD_DREG PORTB 'LCD DATA BACAKLARI PORTB'YE BAGLI
DEFINE LCD_DBIT 4 'LCD DATA BITLERI HANGİ BITTEN BASLIYOR
DEFINE LCD_EREG PORTB 'LCD ENABLE BACAGI HANGI PORTA BAGLI
DEFINE LCD_EBIT 0 'LCD ENABLE BITI HANGI PORTA BAGLI
DEFINE LCD_RWREG PORTB 'LCD RW BACAGI HANGI PORTA BAGLI
DEFINE LCD_RWBIT 2 'LCD RW BACAGI HANGI BITE BAGLI
DEFINE LCD_RSREG PORTB 'LCD RS BACAGI HANGI PORTA BAGLI
DEFINE LCD_RSBIT 1 'LCD RS BACAGI HANGI BITE BAGLI
DEFINE LCD_BITS 4 'LCD 4 BIT BAGLI
DEFINE LCD_LINES 2 'LCD KAC SIRADAN OLUSUYOR
TRISB=0

LOW PORTB.2 'RW BACAGI EKRANA YAZMAYA IMKAN VERMEK ICIN LOW YAPILDI
PAUSE 200 '200 ms BEKLEME YAP

CMCON = 7     
TRISA=%11111111

OPTION_REG.7=1

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_BAUD 2400 'Hser baud rate


AL VAR BYTE
ERRCHK VAR BYTE 57
W var byte
PAUSE 500
ANADONGU:
   
serin2 porta.2,T2400,5,atla,[ WAIT("TEST"), AL]

ATLA:
      lcdout $fe,1,AL
      PAUSE 2000
       
     GOTO ANADONGU
     end

AYKIRI

Konu hakkında uzman olan arkadaşlardan yardım bekliyorum

ferdem

Siz uzmanlara sormuşsunuz ama ben cevap vereyim. Bu uygulamayı kablosuzdan önce kablolu çalıştırmalısınız, kablolu düzgün çalıştıktan sonra forumda rf haberleşmeyle ilgili tekrar tekrar yazılan başlıkları, bilgileri bulup okumalısınız. Daha sonra kablosuz çalıştırabilirsiniz. İyi çalışmalar.

My75

"TEST" yerine sabit yazsan daha iyi olur,atıyorum 127...Eğer alıcın ile ilgili bir sıkıntı yoksa şöyle dene.


anadongu:
SERIN porta.2,T2400,100,ATLA,[127],AL

Burada komut işlerken zaman kullanma,gelen veriyi kontrol et ve hemen çık.

GOTO anadongu

ATLA:


GOTO anadongu

Aslında bu tip uygulamalarda kesinlikle usart donanımı ve kesme kullanmalısın..Yoksa veri kaybın olur.
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

subram

olmazsada olur ama çıkış kodunu altalta iki üç kere yazarsan daha sağlıklı olur! ilk gönderdiğin bilgi herhangi bir şekilde kesitiye uğrar yada parazit olursa  diğer kodlar bu sorunu çözer!
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

My75

Tabiki data alımında header(127) şart değil,burada önemli olan mesele zaman aşımı kullanmak,zaman aşımı kullanmadığım
bir proje beni çok uğraştırmıştı.Ataköyde 150 dairelik bir sistemin görüntülü interkom tasarımını yapmıştım,150 adet slave rs485
modül yaptım ve bir adet master kameralı dijital zil panosu..Kamera sürekli kilitleniyordu,işlemci atmega64 idi ve farkettimki
zaman aşımı kullanmadığım için aşırı gürültüden kaynaklanması idi ve tek bir komut ile olay çözüldü..

Hazır bahsetmişken rs485 olarak 75176 entegre kullandım ve max.32 adet bağlantı desteklidir,fakat şuan 150 adet slave
modül sorunsuz çalışmakta,sanırım modüller arası mesafe 4metre olmasından kaynaklı...
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

AYKIRI

yukarıda bahsettiklerinizin tamamını tek tek denedim arkadaşlar ama sonuç aynı şekilde olumsuz
ben hyperterminal kullanarak bu bilgileri gönderiyorum
başka önerileriniz varsa onlarıda deneyeceğim
saygılar

My75

ANADONGU:
   
serin2 porta.2,T2400,5,atla,[ WAIT("TEST"), AL]

ATLA:
      lcdout $fe,1,AL
      PAUSE 2000
       
     GOTO ANADONGU
     end

Hala yukarıdaki gibi yapıyorsan kesinlikle olmaz...

ANADONGU:
   
serin2 porta.2,T2400,100,atla,[ WAIT("TEST"), AL]

lcdout $fe,1,AL
PAUSE 2000
GOTO ANADONGU

ATLA:

GOTO ANADONGU
end

Dogrusu bu,senin yaptığında sürekli 2sn. takılı kalıyorsun..Birde porta.2 ile vdd arasında 10k pullup direnci olmalı ve bazı moduller
invert çıkış verir.Sen en iyisi alıcı modül çıkışını 4069 ile tersle öyle pic'e gir,böylelikle data girişinide sürekli vdd seviyesinde tutmuş
olursun,data girişin muhakkak +5v olmalı,bağlantı yapmadan alıcı çıkışını ölç bence..+5volt olmalı..Değilse kesinlikle terslemen lazım..
Ve pc ile verici arasındada sanırım bir konvertör kullanıyorsundur umarım,önce direkt bağlantı ile test etmelisin..

Ve kolaylık olsun diye Docklight 1.6 crack program bul,hyperterminalle uğraşma bence..
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

AYKIRI

2 saniye olayını milisaniye seviyelerine kadar düşürdüm ... porta.2 de +5 volt görebiliyorum
docklight ilede deniyorum sonuç aynı

pc tarafında max232 ve atx34 var ve kabloyla direk bağlı
alıcı tarafında pic , lcd ve arx33 var

veri iletişimi var ama usart kullanmak lazım sanırım
o konuda çok fazla bilgim yok
yardımcı olacak arkadaşlardan bekliyorum
bu konuda daha önce yapılmış örnekler varsa linkini gönderirseniz sevinirim
forumda aradım ama bu tip bir çalışma göremedim

My75

Alıcı ve vericiyi devreden çıkarıp denedinmi? Max232 çıkışını direkt olarak porta.2 'ye bağlayıp dene,usart için ayarlar...

@ DEVICE pic16F628A                      'işlemci 16F628                               
@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_OFF            'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
DEFINE HSER_CLROERR 1 
DEFINE HSER_RCSTA 90h   
DEFINE HSER_TXSTA 20h   
DEFINE HSER_BAUD  2400 
DEFINE HSER_SPBRG 25 
CMCON=7
OPTION_REG.7=0

TRISA=%  'Ayarla
TRISB=%  'Ayarla

TEST CON 127
AL     VAR BYTE

'RX PORTB.1 'dir
'TX PORTB.2 'dir


BASLA:

HSERIN 100,KONTROL,[WAIT(TEST),AL]

'test LCD SATIRI

GOTO BASLA

KONTROL:
DATA GELMEDI
GOTO BASLA

END

Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

AYKIRI

alıcı ve vericileri şimdi devre dışı bırakıp deniyorum
sonuçları birazdan yazarım
teşekkür ederim

AYKIRI

alıcı ve vericileri devre dışı bırakıp direk kablo ile bağladım
sonuç aynı,
değişiklik olmadı :(

My75

O zaman donanımını kontrol et,gönderdiğin datanın max232 çıkışlarından aynı şekil çıktığından emin olmalısın.
Baudrate ve protokolü kontrol et,8N1 olması lazım,bilmiyorum başkada seçenek kalmadı.. İsis ile simulasyon yap bakalım,
emin ol bir hata vardır..
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

My75

Bunu aynen kopyala dene bakalım..


@ DEVICE PIC16F628A                                                     
@ DEVICE PIC16F628A, WDT_OFF       
@ DEVICE PIC16F628A, PWRT_ON             
@ DEVICE PIC16F628A, PROTECT_OFF         
@ DEVICE PIC16F628A, MCLR_OFF

define OSC 4
DEFINE LCD_DREG PORTB 'LCD DATA BACAKLARI PORTB'YE BAGLI
DEFINE LCD_DBIT 4 'LCD DATA BITLERI HANGİ BITTEN BASLIYOR
DEFINE LCD_EREG PORTB 'LCD ENABLE BACAGI HANGI PORTA BAGLI
DEFINE LCD_EBIT 0 'LCD ENABLE BITI HANGI PORTA BAGLI
DEFINE LCD_RWREG PORTB 'LCD RW BACAGI HANGI PORTA BAGLI
DEFINE LCD_RWBIT 2 'LCD RW BACAGI HANGI BITE BAGLI
DEFINE LCD_RSREG PORTB 'LCD RS BACAGI HANGI PORTA BAGLI
DEFINE LCD_RSBIT 1 'LCD RS BACAGI HANGI BITE BAGLI
DEFINE LCD_BITS 4 'LCD 4 BIT BAGLI
DEFINE LCD_LINES 2 'LCD KAC SIRADAN OLUSUYOR

TRISA=%11111111
TRISB=0
CMCON = 7     
OPTION_REG.7=1
include "modedefs.bas"

LOW PORTB.2 'RW BACAGI EKRANA YAZMAYA IMKAN VERMEK ICIN LOW YAPILDI
PAUSE 200 '200 ms BEKLEME YAP



RX VAR PORTA.2
AL VAR BYTE
ERRCHK VAR BYTE 57
W var byte
PAUSE 500

       


ANADONGU:
   
serin RX,T2400,100,atla,["TEST"],AL

lcdout $fe,1,#AL
GOTO ANADONGU
     
     
ATLA:
       
GOTO ANADONGU
end
Tomurcuk için çaba göstermeyen dal,odun kalmaya mahkumdur...

AYKIRI

sayın my75 verdiğiniz kodları aynen yazdım

kablolu şekilde "TEST1" gönderdim hyperterminalden 49 yazdı
test2 gönderdim 50 yazdı
sanırım çalıştı :)
şimdi kablosuz olarak deneyeceğim
saygılar