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.
(http://mitglied.lycos.de/ugurelektronik/Soru/serin.gif)[/url]
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
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
Evet 22K direnc PIC'i korur ancak, RS232 IC'lerin buffer değilde inverter oldugunu unutuyorsunuz.
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.
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 !!!
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??
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.....
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
sağol hocam hemen bir deneme yapayim
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
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,
(http://img66.exs.cx/img66/2616/seri1.jpg)
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
@sertac2003.
Dostum Serial Port'da aynen dedigin gibi Pinler arasindaki kisa devre islemlerini yaptim.
Ve su kodu yazdim derledimInclude "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 !!!!
Hayret her gelen yarim cevap verip birdaha ugramiyor !!!
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?
Bu arada PC den PICe seri data yollamanin mantigini ogrenmeden once RS232 interface'i seri iletisimde start bit, data bit, parity stop bit, baud rate gibi kavramlari ogrenmelisin.
Alıntı yapılan: DigimenschInclude "Modedefs.Bas"
SERIN SI,N2400,["X"],VERI
SERIN mi SERIN2 mi kullanmak gerek?? Arasindaki fark ne??
Merhaba,
SERIN kullaninca
Include "Modedefs.Bas" kullanmak gerekiyor yukaridaki
N2400 bu baudrate ayari "Modedefs.Bas" dosya icinde tanimlanmis.
SERIN2 komutu baudrate ayarlarini kendi icerisinde barindiriyor ve MODE ayarlari
SERIN den farkli. SERIN2 "Modedefs.Bas" dosyayi kullanmiyor.
Picbasic pro help'te Serin2 baudrate (veya mode) ayarlari yaziyor.kolay gelsin
@bunalmis,
ben cok basit olan bir olayi dahi gercek Deneme aninda yapamiyorum olmuyor.
Örnegin Hyper Terminal programindan bir komut gönderdigimde PIC16F84A'ya bagl bir Led lambanin yanmasin bir türlü gerceklestiremiyorum.
proteus'da simile olarak calisiyor gercek deneme yaptigimda olmuyor.
PIC16F84A ile olusturdugum devreyi Com1'a bagliyorum hyper terminali aciyorum ,devreye ceyrani veriyorum.
sonra Hyper terminaldeki data bit, parity stop bit, baud rate gibi ayarlari yapiyorum ve gerekli karekteri yolluyorum ama olmuyor.
Hyper terminal programinda zaten start-stop bitlerini invert etme özelligi yokmu??
ben bu isi neden gerceklestiremiyorum??
Com1 saglam
Hatta baska bir PC'de denedim yine olmuyor.
PIC saglam cünkü baska denemeler yapiyorum (Serial Iletisim olmayan) PIC gayet iyi calisiyor.
Sorun gercekten MAX232 kullanmamamdan mi kaynaklaniyor??
yaptigim kod su:
SI VAR PORTA.0
VERI VAR BYTE
LED var PORTB.0
BAUD CON 396 'Hyper terminalde 2400 olarak ayarliyorum
TRISA= $00001
PORTA= 1
TRISB = $00000001
PORTB = 0
LOOP:
SERIN2 SI,BAUD,Islemler,[VERI]
Islemler:
SELECT CASE VERI
CASE "X","x"
PAUSE 10
HIGH LED 'Led yaniyor
CASE "Y","y"
PAUSE 10
LOW LED 'Led sönüyor
END SELECT
goto loop
END
@fsan
SERIN ile SERIN2 arasindaki farki anlattigin icin cok tesekkürler.
ama gercek anlamda ufacik denemeyi dahi gerceklestiremedigim icin o hizli bir sekilde ögrenme arzum bir nevi kirildi.
Olmuyor olmuyor ......
Hyperterminal bir program o invert isleriyle falan ugrasmaz. PC de seri iletisim cipi var bunun arkasinda RS232 interface cipleri var bu ciplerin arkasinda da seri port konnektoru var.
Simdi karsi tarafta bulunan (PC ile konusan) cihazda da sunlar olacak.
Seri port konnektoru, onun arkasinda RS232 interface cipi, onun arkasinda da PIC.
Sen RS232 interface cipi kullanmazsan PIC'e PC deki seri iletisim cipinin cikisindaki bitlerin invert edilmis hali gelir.
Bu durumda da RS232 rutinleri asla ve asla start ve stop bitleri dogru yerde ayiklayamaz.
Halbuki RS232 inverter cipi kullanirsan bu bitler bir kez daha invert edilir boylece PC tarafindaki seri iletisim cipinden ne cikti ise aynen PIC"e de o gelir.
Ben RS232 cipini kullanmak istemiyorum dersen.
Iki sey yapabilirsin.
1. PC deki RS232 cippini de sokup atacaksin ve seri iletisim cipinin cikislarini dogrudan RS232 konnektore tasiyacaksin. Bu son derece sacma bir cozum olur. Mantigin anlasilmasi acisindan aciklama ihtiyac duydum.
2. PIC de seri iletisim programinin icinde kucuk bir oynama yapip gelen her biti once yazilimla invert edip oyle asil programa sokacaksin.
Basic de SERIN komutu kullanmissin (Ben PIC Basic bilmiyorum) buyuk olasilikla gelen bitleri pratik olarak invert edecek degisikligi Basic icinden yapamazsin. (Bunun dogrusunu basic kullananlar soylesin) kolay yolu asm ciktisi varsa orada eklenti yapabilirsin.
Bence tek transistorlu de olsa bir inverter devresi yap PC TX hattini bununla invert et ve ardindan invert edilmis sinyali PIC'e gir.
Eger sorununu yanlis anlamadi isem cozum bu.
@bunalmis,
ben sadece PicBasic ile yazip deniyorum.
asm ile vaya Pic c ile yazilmis bir örnek denemedim.
belkide senin dedigin gibi gelen bitlerin pratik olarak invert edilmemesinden kaynaklaniyor olabilir.
Öyleyse hocam acaba bana bu isin asm ile yazilmis bir kod örnegini verebilirmisin??
yani basit olarak x yolladigimda led yansin y yazdigimda led sönsün.
Hic yoktan böyle bir örnek verirsen ve ben bunu calistirirsam icim rahatlayacak.
O zaman o yöne dogru arastirmalara girerim.
simdi hic calistiramamis olmam bana büyük bir kiriklik verdi.
Birde inverter devresi ile kastin su MAX 232 ile yapilan devremi oluyor??
Evet ise s devre olurmu??
(http://www.pe.tu-clausthal.de/IPPT/Praktikum/Computerpraktikum/Bilder/max232_schaltung.jpg)
PC ile Pic arasinda iletisim yapan bir "Temp Logger" uygulamasi yapmistim (asagidaki sema)
(http://home.no/fsan/projects/Project-03/project-03.gif)
semadaki PICe yerlestirilecek programda
http://home.no/fsan/projects/Project-03/project-03.bas
Baud con 16780 '2400,8,N,1 (inverted, driven)
SERIN2 SIpin,Baud,900,Send_RS232,[wait("Fikret"),dec3 SDin]
Bu uygulamayi ben PCB üzerinde kurup calistirdim RS-232 chip olmadan invert olayi yukarida yazdigim gibi yapilabilir.. Pic RX girisinde sadece bir 22K seri direnc gerekiyor.
Not:
Bu semadaki Seri port konnektoru RX/TX pinleri yer degistirmis/karismis olabilir, (semadaki konnektoru sonradan cizmistim).
Birde tesadufen RX giris picteki RA4 pine bagli, Bu bir Open Collector cikis yalniz ben burada pini input olarak kullaniyorum o yüzden RX icin baska bir pin kullanilsada bir fark olacagini zannetmiyorum ?
@fsan,
hocam senin Projelerini deneyecegimde ben daha en basit bir örnegi PIC16F84A'ya bir Led yakip söndürme örnegini calistiramadim.Önce su basit bir olayi basarsam arkasi gelecek !!!
Son umudum inverter olayi ama bir cok yerde okudum aslinda Max232 ye gerek kalmadan seninde dedigin gibi 22 K seri direnc ile bu isin halledildigini.
Ama ben bir türlü beceremedim.
Sorunun nerden kaynaklandigini 2 haftadan beri cikartamadim.Acaba similede calisan gercek denemede calismayan bu olay neyden kaynaklaniyor??
elimde su an 3 tane PIC var ücüylede deniyorum olmuyor.
Acaba bu isin asm ile yazilmis bir Kodu yokmu bulabilsem birde onunla deneyecegim.