Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

RS232 PC TO PIC 16F628A

Başlatan barisertekin, 23 Ağustos 2011, 22:33:32

barisertekin

Bilgisayardan verinin gittiğine eminim çünkü 2 ve 3 nolu pinleri birleştirdim bilgisayar ekranında veriyi geri alabiliyorum.

Buraya kadar sorun yoksa resimde gösterdiğim gibi.
RS232'nin 5 nolu pini toprağa.
3 nolu pin MAX 232'nin 13 nolu bacağına. 12'dende TTL seviyesine indirgenmiş data PIC'in 18 nolu (RA1) bacağına.
Bu bacağa led koyup test ettim bilgisayarda veri gönder butonuna basınca yanıp sönüyor.
Veri bu bacağa kadar geliyor. Ama pic'te okuyamıyorum.



include "modedefs.bas"

@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_on
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16F628A, MCLR_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

DEFINE LCD_DREG          PORTB 'LCD data bacakları PortB de bağlı
DEFINE LCD_DBIT         4  'LCD data bacakları 4. bitten başlıyor
DEFINE LCD_EREG          PORTB 'LCD Enable Bacağı PortB de bağlı
DEFINE LCD_EBIT         3 'LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG       PORTB 'LCD RW Bacağı PortB de bağlı
DEFINE LCD_RWBIT        2 'LCD RW Bacağı  2. bite bağlı
DEFINE LCD_RSREG      PORTB 'LCD RS Bacağı PortB de bağlı
DEFINE LCD_RSBIT      1 'LCD RS bacağı 1. Bite bağlı
DEFINE LCD_BITS         4 'LCD 4 bit  olarak bağlı
DEFINE LCD_LINES      2 'LCD 2 sıra olarak çalışıyor.

TRISA=%11111111 'A portu giriş olarak ayarlandı.
TRISB=0         'B portu çıkış olarak ayarlandı.

PCDATA   VAR     BYTE 'PC'den gelen veri
PCDATA = 0
LOW PORTB.2  'RW bacağı ekrana yazmaya imkan vermek  için LOW yapıldı.
PAUSE 200  ' LCD nin kullanıma hazır hale  gelebilmesi için gerekli süre

LCDOUT $FE,1  ' Ekran silindi

'-----ANA PROGRAM BAŞLANGICI ------
BASLA:

;SerIn2 PORTA.1,396,[PCDATA]
Serin PORTA.1, N2400, [PCDATA]      ; olay burda kopuyor sanırım. Pinin ucundaki led yanıp sönüyor veri geldiğine dair. Ama okuyamıyorum.
;LCD Çalışıyor test ettim. Sorun orda olamaz. PCDATA = 3 dediğimde 3 yazıyor.


LCDOUT $FE,1  ' Ekran silindi
LCDOUT " OKUNAN = ",#PCDATA  'ilk satıra Sayı Desimal olarak yazıldı
LCDOUT $FE,$C0,"ONDALIK = ",BIN PCDATA 'ikinci sıraya Binary olarak yazıldı.
PAUSE 100 '100 ms   bekliyoruz.
PCDATA = 0


goto BASLA
END

LCD OUTPUT :
SERIN KOMUTUNU KALDIRINCA : OKUNAN = 0 Yazıyor.
SERIN KOMUTU VARKEN : Hiçbir şey yazmıyor. Hatalı bir veri okunuyor ki demekki lcd'yide bozuyor.

Teşekkür ederim.

-Hasan-

4 Mhz ' den farklı bir frekans kullanıyorsanız; DEFINE OSC tanımlamasını yapmamanızdan olabilir. Bir de SEROUT komutunu terslenmiş mod olarak kullanmışsınız, MAX232 kullanıyorsanız terslenmiş mod kullanmamanız gerkir. (T2400)

coco

Max 232'nin çıkışlarını Pic16f628a rb1-RX   rb2-TX pinlerine bağlayıp programı öyle düzenlesen belki çalışabilir.

canbulut

hasan hocam bizim konuyada bir el atıver.bu konunun altında.kusura bakmayın.işgal ettim bu konuyuda.

barisertekin

Alıntı yapılan: Hasan Oguz - 23 Ağustos 2011, 23:54:02
4 Mhz ' den farklı bir frekans kullanıyorsanız; DEFINE OSC tanımlamasını yapmamanızdan olabilir. Bir de SEROUT komutunu terslenmiş mod olarak kullanmışsınız, MAX232 kullanıyorsanız terslenmiş mod kullanmamanız gerkir. (T2400)

Dahili osilatör kullanıyorum. Max232 kullanıyorum. O zaman T2400 kullanacağım. Denemiştim gerçi ama doğrusu oysa değiştiririm.

barisertekin

Alıntı yapılan: coco - 23 Ağustos 2011, 23:59:03
Max 232'nin çıkışlarını Pic16f628a rb1-RX   rb2-TX pinlerine bağlayıp programı öyle düzenlesen belki çalışabilir.

HSERIN kullanmadığım sürece RB1(RX) RB2(TX) pinleri kullanmak zorunlu değil diye biliyorum. Ama denemekte fayda var tabi.

-Hasan-

#6
Alıntı yapılan: barisertekin - 24 Ağustos 2011, 00:34:57
Alıntı yapılan: coco - 23 Ağustos 2011, 23:59:03
Max 232'nin çıkışlarını Pic16f628a rb1-RX   rb2-TX pinlerine bağlayıp programı öyle düzenlesen belki çalışabilir.

HSERIN kullanmadığım sürece RB1(RX) RB2(TX) pinleri kullanmak zorunlu değil diye biliyorum. Ama denemekte fayda var tabi.

coco arkadaşımız; "USART ' ı kullanıp, yazılımı sağlama alalım" diye düşünmüş herhalde.  :)

barisertekin

#7
T2400 denedim ama tık yok. Bir fikir var mı? 6 gündür aralıksız uğraşıyorum.  :o

Bilgisayardan gelen veri Max232'den geçene kadar +- 10 Volt olarak olarak geliyor sanırım. Bunu multimetre ile ölçmenin bir yolu var mı?
Resimdeki 3 ve 5 nolu pin arasını ölçsem 10 volt görmem mi gerekir? 0.02 görüyorum.

Bu arada USB çevirici kullandığımı not düşüyüm. 10 volt'mu 5 volt'mu olur bilmiyorum.

kudretuzuner

Merhaba
Sizin konunuzu sürekli takip etmekteyim.Fakat sorunu bir türlü anlamış değilim.Sıra ile gidersek
1-PC-to-PC yani tx+rx kısa devre ile datayı PC'de gördünüz.Burada farklı bir durum da söz konusu datalar diyorum yani writeline-readline ile string şeklinde gördünüz bu tamam.
2-PC'den çıkan dataların ancak enson geleni PIC'te okuyabilirsiniz.Dolayısı ile PC_to_PIC iletişiminde PC'den tek Byte olarak yollarsanız veya devamlı aynı datayı sürekli yollarsanız PIC'te görebilirsiniz.Daha önceki cevaplarımda da linkler verdim ve de bu seri iletişim ile ilgili çok kapsamlı bilgiler sundum.USB_to_rs232 çevirici kablo PC'den PIC'e data yolluyor(en azından ben uyguladım gördüm linklerde de var)fakat PIC'ten PC'ye data aktarımını başaramadım.Ama direk masaüstü pc'deki seri porttan hem data yollama hem de data alma işlemi oluyor.
Seri iletişim aslında çok kolay bir işlem ama "legoların" hepsinin yerine oturması lazım.PC'den PIC'e veya PIC'ten PC'ye data yollamak için 1 byte'lık paket halınde yollarsanız sorunsuz çalışıyor.
Amatör

LukeSkywalker

Hocam sen şu PC programını ve devre şemanı buraya yüklesene bi. Biz de burada deneyelim ki anlaşılsın sorun nedir? Böyle havada kalıyor herşey. Şemaynızı gönderin, PC'den veri yollayan programınızı gönderin kodları ile birlikte bakalım.

kudretuzuner

Merhaba
Bu linklerde aradığınız tüm bilgileri bulacaksınız.Birkaç gün önce de paylaşmıştım ama demek ki gözden kaçmış.Buyrun kolay gelsin.
https://rapidshare.com/files/1735863730/ANTRAK.rar
https://rapidshare.com/files/1748553531/ANTRAK_PIC_to_PC.rar
Amatör

LukeSkywalker

Kudret hocam arkadaş bu linklerdeki dosyalardan mı yaptı devresini?

kudretuzuner

Merhaba
Ben çalışmamı sundum.Prensibi anlattım.Arkadaşın problemini halen de anlamış değilim.Konu açılınca yardımcı olur ve sistem kavranır diye paylaştım.Daha önce de belirtmiştim pıc basici bilmiyorum,pıc'te programlama lisanı önemli değil algoritmayı doğru kurduktan sonra hangi dille yazarsanız yazın proje çalışır.Özetle seri iletişim için yeterli bilgi verdiğimi zannediyorum ama yine de anlaşılmayan bir yer olursa ve de bildiğim birşey ise paylaşırım.
Amatör olduğum için öğrendiklerimi paylaşmak,benim temel prensibimdir.
Amatör

barisertekin

Merhaba, devre şemam yok. Şöyle bir resim yaptım görebilmeniz için.
Burada da pic basic kod dosyası mevcut. Gerçi yukarıda yazdığım ile aynı.
http://hotfile.com/dl/127754320/534a2eb/LCD.rar.html



Verileri tek byte olarak göndermekten bahsetmişsiniz.
Ben bildiğimiz HYPERTERMINAL ile gönderiyorum.
O zaten bu işi doğru yapıyordur herhalde. Siz ne dersiniz?

kudretuzuner

Merhaba
pıc basic bilmediğim için kodlarınız hakkında yorum yapamayacağım.İkincisi 16F628 PIC'in 7 nolu RX pinini niye kullanmadınız.Seri iletişim yapıyorsunuz bu işlem için ayrılmış özel rx pinini kullanmamışsınız.İsterseniz şöyle bir yol uygulayalım.Gerçekten seri iletişimi tam olarak çözmek ve de başarılı bir şekilde PC'den PIC'e 1 byte daha sonra da PIC'ten PC'ye 1 byte yollayalım ve de bu işlemler için kendimizin yazacağı çok basit VB.net ara yüz ile takip edelim.Tahmin ediyorum birçok öğrenci arkadaş bu sıkıntıdan kurtulacak sistemi çözecektir.Gelecek olumlu yanıtlarla adım adım seri iletişim ile ilgili bir yazı dizisi oluşturalım.Şimdilik herkese iyi geceler.
Amatör