PC'den PIC16F84'e komut göndermek.

Başlatan Digimensch, 05 Kasım 2004, 03:32:16

Digimensch

Arkadaslar iki gündür su devre ile ugrasiyorum bir türlü  olmuyor.
Yapmak istedigim:
Terminalden "Y" girdigimde Y Led lambasi , "X" girdigimde X Led lambasi yanacak
Ben su PicBasic kodlarini MicroCode Studio ile derledim.
Include "Modedefs.Bas" 
SI VAR PORTB.2 
LEDX VAR PORTB.1 
LEDY VAR PORTB.0 
VERI VAR BYTE 
BAUD CON 396 

TRISA = 0 
PORTA = 0 
TRISB = $00000100
PORTB = 0 

LOOP: 
    SERIN2 SI,BAUD,[VERI] 
    SELECT CASE VERI 
        CASE "X","x" 
            HIGH LEDX 
            PAUSE 500 
            LOW LEDX 
        CASE "Y","y" 
            HIGH LEDY 
            PAUSE 500 
            LOW LEDY 
    END SELECT 
GOTO LOOP 
END


ve su asagidaki sekilde similasyonunu yaptim.
Ama sorunum su:
Proteusda gayet güzel calisiyor.
Fakat devreyi gercek olarak kurdugumda birtürlü Terminal programlari ile calistiramiyorum.
Terminal programi ile Serial Porta bagladigim bu Devreye X ve Y karekterlerini gönderiyorum Devre bir türlü reaksiyon göstermiyor.
Acaba sorun ne olabilir?
Neden Proteus'da calisiyor gercegi calismiyor?
Kodlardami bir hata var yoksa Gercek devreyi kurarken dikkat etmem gereken hususlar mi var??
Yardimci olursaniz sevinirim.
[/url]

cozturk

umarım portu direk pice bağlamamışsındır. max 232vsbağlamanlazım. şimdipişmanolup max232 ile tekrar denemenbileişeyaramayabilir. picin veya portun gitmiş olabilir. Ayrıca pice programı yüklerken de sorunlar yaşamış olabilirsin. devrenin beslemesi nasıldır? 470 ohm direnç ve 5v6 zener ile 12vdan bile besleyebilirsin.mclr ile gnd arasına 220uF bağlasan fenaolmaz

Digimensch

Ama hocam Rx PIC'e 22 Kohm'luk direncle baglanabilir !
Bunun icin max 232 tampona gerek yokki.
Tamam olsa iyi olur ama tampon kullanilmadanda Uarti olmayan PIC'lere
RX 22 Kohmluk Direncle , Tx ise direkt baglanabilcegini bir yerlerde okumustum.
PIC saglam cünkü baska basit programlar yükleyip test ediyorum calisiyor.
Serial Port'da saglam cünkü zaten bu Port üzerinden Programliyorum saglam olmasa ICPorog ile PIC'i programlayamam saniyorum.
Acaba ComPort bozulmus olsa bile PIC programlama olasiligi olabilirmi??
Zira hala PIC'leri ayni Com Port üzerinden progralayabiliyor ve hatta PIC icerigini okuyabiliyorum

z

Evet 22K direnc PIC'i korur ancak,  RS232 IC'lerin  buffer değilde  inverter oldugunu unutuyorsunuz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

cozturk

Digimensch arkadaş,
senin bu devrede aklıma takılan bir konu vAR niye compimin rxdsi pice gidiyor.? gerçek portu da böyle kullanıyor olabilir misin? eğer porttan pice bilgi gidecekse portun txini picin girişine bağlamak lazım. bir de direnç ile bağlama olayını ben de denedim. fakat tam işe yaramadığını gördüm. bazı portlarda sorun çıkabilir diyorlar.

Digimensch

Ben bu örnegi fsan 'in sitesinden aldim orda öyleydi.
aslinda senin dedigin mantikli.
PC den veri gönderilecekse TX Pininden olmali.
Bende böyle düsünerekten TX bacaginida PIC'e baglayarak denedim yine olmadi.
Su devreyi Test Bourdu olup deneyecek bir arkadas yokmu??
Belki diyeceksiniz bu devre ne ise yarayacak yada ne yapmak istyirosun?
Ben bu PC den PIC'e komut göndermenin mantigini uygulama ile ögrenmeye calisiyorum.O nedenle bu devre benim icin su an önemli !!!

Digimensch

Arkadaslar yukardaki örnegi gercek uygulama olarak yapmaya calistigimda neden calismiyor olabilir??
Acaba PIC  Serial Port'dan gelen veriyi algilayamiyor olabilirmi??
PIC'e Serial Port'dan gelen veri hangi Formatta (Hex,Ascii,binäry) olmali?
Virtual Terminal icinden yazidigimiz karekterler Serial Porta hangi formatta gidiyor?
Burda bir format kominikation hatasi olabilirmi??
Yani Serial Port'dan gelen Veri formatini PIC algilamiyor olabilirmi??

Digimensch

Yardim edecek kimse yokmu ???
Yukardaki proje Proteus'da calisiyor fakat gercek düzenekte neden calismiyor olabilir.
neyse ya zaten kimse cevap vermiyecek uzun uzun anlatmama gerek yok.....

sertac2003

sürücü ( max 232 türü birşey ) kullanmadığın için veriler terslenmiş gidiyor. devrede herşey düzgün olsa bile, bu nedenle çalışmıyor olabilir

seri girişi porta dan harhangi bir pinden al
ve trisa yı da ona göre yapılandır
TRISB = $00000000  tümünü çıkış yap ve porta dan girdiğin veriyi
öncelikle portb de gör

senin veriğin örnekte veriler terslemiş olarak gidiyor. bu nedenle
X yada x e ait ascii codu da terrlenmiş gidiyor bu nedenle (başka hata yoksa) sen ledlerin yandığını göremiyor olabilirsin.
aşağıdaki gibi denemeni tavsiye ederim...

LOOP: 
    SERIN2 SI,BAUD,[VERI] 
    PORTB=VERI
    'PAUSE  100
    GOTO LOOP 
END
Şirketteki herkes en üst yöneticinin müşterisidir.

Digimensch

sağol hocam hemen bir deneme yapayim

Digimensch

Ya Dostum sekilde yaptim yine olmuyor.
Bu codun neresinde daha degisiklik yapmamgerek???
Include "Modedefs.Bas" 
SI VAR PORTA.0       'dedigim gibi PortA'dan giris yaptim
LEDX VAR PORTB.0   'Led lamba yine PortB.0 bitinde
VERI VAR BYTE 
BAUD CON 396 

TRISA= $00001
PORTA= 1
TRISB = $00000000 
PORTB = 0 

LOOP: 
SERIN2 SI,BAUD,[VERI] 
PORTB=VERI 
   
If veri= "X" then  
pause 10
HIGH LEDX 
endif 

if veri= "Y" then
pause 10
low ledx
endif 
goto loop:
END

sertac2003

com port üzerindeki 7(RTS) ile 8(CTS) kısa devre yap.

ardından,
com port üzerindeki    1(CD) ve 4(DTR) ve 6(DSR) kendi aralarında kısa devre yap. şu an 7 ile 8 kısa devre ve 1,4,6 kendi arasında kısa devre.
aşağıdaki gibi,


bağlatıları yaparken dikkatli olmalısın, yanlış olursa portun kullanılamaz hale gelebileceğini hatırlatırım.


Include "Modedefs.Bas" 
SI VAR PORTA.0      
VERI VAR BYTE 
TRISA= $00001 
PORTA= 1 
TRISB = $00000000 
PORTB = 0 

LOOP: 
SERIN SI,N2400,["X"],VERI 
' yine PORTB de birşey görmezsen, 
' yukarıdaki satırı SERIN li satırı SERIN SI,T2400,["X"],VERI  
' şeklinde dene. artık portb de birşeyler görmen gerek. sonra 
' X,x,Y,y ye göre portb de istediğin kodları bunun üzerine eklersin...
PORTB=VERI 
GOTO LOOP
END
Şirketteki herkes en üst yöneticinin müşterisidir.

Digimensch

@sertac2003.
Dostum Serial Port'da aynen dedigin gibi Pinler arasindaki kisa devre islemlerini yaptim.
Ve su kodu yazdim derledim
Include "Modedefs.Bas" 
SI VAR PORTA.0     
VERI VAR BYTE 
TRISA= $00001 
PORTA= 1 
TRISB = $00000000 
PORTB = 0 

LOOP: 
SERIN SI,N2400,["X"],VERI
SELECT CASE VERI 
CASE "X","x" 
PAUSE 10 
HIGH PORTB.4   'Led Lambasini yak
CASE "Y","y"  
PAUSE 10
LOW PORTB.4    'Led Lambasini söndür
END SELECT  
PORTB=VERI  
goto loop:
END

Bu yukardaki kod birak gercek Denemeyi  Proteus'da dahi calismadi.
Ya hocam herhalde sorun burda  dogru SERIN komudunu kullanamam galiba !!!
SERIN mi SERIN2 mi kullanmak gerek?? Arasindaki fark ne??
Ne dersin??
Bu yukardaki hic calismadi !!!!

Digimensch

Hayret her gelen yarim cevap verip birdaha ugramiyor !!!

z

Picin cikisina  MAX232 gibi bir cip takip mevcut yazilimla calistirmayi denedinmi ?

Bu cipi hala takmadiysan RS232 yazilimda start ve stop bitlerde dahil giren ve cikan butum bitleri invert edecek kod degisikligini yaptinmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com