PC'den PIC16F84'e komut göndermek.

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

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fsan

Alıntı yapılan: "Digimensch"
Include "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

Digimensch

@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 ......

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Digimensch

@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??

fsan

PC ile Pic arasinda iletisim yapan bir "Temp Logger" uygulamasi yapmistim (asagidaki sema)  


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 ?

Digimensch

@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.