avatar_ete

PIC Basic Ders-07 (Seri İletişim)

Başlatan ete, 28 Ağustos 2011, 16:14:39

ete

Bu dersimizin konusu Seri İletisim. Konuya seri iletisimin ne oldugunu açıklayarak baslayalım. Dijital bilgi bilindigi üzere bitlerden olusmaktadır. Her bir bit ya 0 (sıfır) yada 1 (bir) olabilmektedir. Bunlar yana yana gelince daha büyük digital bilgiyi olusturmaktadır. Örnegin 8 adet bit 1 adet BAYT bilgisini olusturmakta 16 adet bit ise 1 adet WORD bilgisini olusturmaktadır.


Simdi gelelim bu bilgilerin baska yerlere aktarılması isine. 8 bitlik bir bilginin tek bir seferde baska
bir üniteye aktarılması için 8 adet baglantı ucu kullanırsak yani her bir bit için bir uç kullanır isek
bu bir paralel aktarma islemidir. Yine 8 bitlik bir bilgiyi baska bir üniteye tek bir uç kullanılarak
aktarmak istersek bu bir seri aktarma islemidir. Her iki sistemde ilave uçlarda olacaktır. Ancak biz
sadece bilginin aktarılması için gereken uçlardan bahsediyoruz. İşte üzerinde duracagımız konu
bu seri bilgi aktarma sistemidir.


Bu sistemde verici ve alıcı ünite bir birlerine tek bir data hattı ile baglanırlar. Verici gönderdigi bitleri belirli bir formatta yani belirli zaman içinde belirli sayıda bit gönderir. Bu sekilde olusturulan senkronizasyon ile 8 adet bitin gönderilmesi yapılır ve alıcıda bu bitleri teker teker alır.


Alıcı ile verici nin bireysel çalısma hızlarının farklılıgından dolayı seri iletisimde bir kural vardır. Kural birim zaman içinde gönderilen veya alınan bit sayısı ile ifade edilen BAUD RATE yani haberlesme hızı dır. Alıcı ve vericinin aynı senkron içinde alıs verislerinin yapılabilmesi için bu hızın her iki taraf için aynı degere ayarlanması gerekir. Sistemin baska parametreleri de bulunmaktadır. Gönderilen bilginin invert edilmesi her baytın sonunda bir stop biti gönderilmesi , parite kontrolu vs. gibi. İşin teferruatına fazla girmeden konuyla ilgili komutların kullanımına geçecegiz.

Hattuşa

s.a. ETE hocam;
bir projem için arka planda 3 kanal pulse üretmem lazım, kesme ile istediğim verimi alamadım. Şimdi hocam 12F675 ile bu çıkışları versem ve serin, serin2 komutları ile de pulselerin timinglerini verebilirmiyim, Ana işlemcim 18F2520 ve 40Mhz de çalışıyorum (PLL yi aktif ederek), 12F675 i de iç osilatoru ile (4 MHz) ile çalıştırıp istediğim işleri yaptırabilirmiyim, çünkü ustam Usart haberleşmesinde tecrübem var ama serin, serin2 gibi komutlarda çalışmam olmadı. olabilirliği varmı sizce?

ete

Serin serout komutlarını sevmem. Çalışan komutlar ama programı bloke ederek çalışırlar. Tam olarak bunları nasıl kullanacağını bilmeden yorum yapmak istemem. Ama bir yandan puls üretmeye çalışırken bir yandan serin ile timing almaya kalkışırsan sistem istediğin gibi çalışmayacaktır haberin olsun.
Ete

Hattuşa

yok hocam, serin yada serin2 komutu geldiğinde programım bloke olsun sorun teşkil etmiyor, yani pulseleri ben pinleri 1 ve 0 yaparak oluşturuyorum, bu komutların işlediği anda 1 ve 0 lar çalışmasın sorun değil, zira bu işlemi sadece kalibre için yapacağım için her zaman kullanmayacağım, yani mantıken şöyle izah edeyim,
pin1 =1
delayus 500
pin1 =0
delayus x
pin2 =1
delayus 100
pin2 =0
delayus y
pin3 =1
delayus 200
pin3 =0

delayms 5



ben buradaki x ve y değerlerini değiştirmek istiyorum, dediğim gibi hocam kalibre için gerekli ve her zaman kullanmak gerekmiyor, derdim kalibre olmadığı zaman 12F675 e tekrar tekrar yükleme yapmayayım, ana işlemcim olan 18F2520 nin bir alt menusune girip ayarlayıp çıkayım istiyorum, umarım derdimi anlatabilmişimdir.
şimdi bu 12F675 in mclr pini data alırmı (malum bu işlemcinin pini kısıtlı ya değerlendireyim istiyorum), yada hocam basit bir uygulama örneği varmıdır? yol gösterecek

ete

12F675 mclr pini data alır. Yalnızca alır zaten vermez. Ayrıca bu pin dahili pullup sistemine dahil değildir.
Ete

Hattuşa

slm hocam;
 MaIn:
PuLsE =0
DelayUS 200
PuLsE =1
DelayUS A
oRn1 =1
DelayUS 100
oRn1 =0
DelayUS B
OrN2 =1
DelayUS 100
OrN2 =0
      SerIn gIrIs,396,[Wait("ETE"),A]
      SerIn gIrIs,396,[Wait("SLM"),B]
For X =0 To 250
DelayUS 3
Next X
GoTo MaIn


hocam bu serin komutunun programın her döngüsünde çalışmasının yerine sadece dataların geldiği anda çalışmasını nasıl sağlatabiliriz. ben 12F675 in 1 pinini giriş olarak ayarlayıp bu pin 1 olduğunda serin komutundan gelen dataları işlemek istedim ama tıkanma yapıyor nedenini anlamış değilim. Yani;

If BaK =1 Then
    SerIn gIrIs,396,[Wait("ETE"),A]
    SerIn gIrIs,396,[Wait("SLM"),B]
    EndIf


sanki bir yerlerde hata yapıyorum ama farkedemiyorum

ete

Programda hata yok ama mantıkta hata var. Data geldiğini nereden anlıyorsunda BAK=1 yapıyorsun? Yada BAK=1 nasıl olabiliyor?.
Serxx komutları mutlaka ve mutlaka 65535 ms lik süreyi doldurmadan komut programı bırakmaz. Bu nedenle programı bloke eder demiştim. Heleki iki komut satırı üst üste kullanıyorsan program orada her seferinde 130 ms beklemek zorunda kalır. Pek akıllıca yöntem olmasa gerek.

Alıntı Yaphocam bu serin komutunun programın her döngüsünde çalışmasının yerine sadece dataların geldiği anda çalışmasını nasıl sağlatabiliriz.
bunun adına Usart kesmesi diyorlar zaten. O nedenle kesme kullanıyoruz. Başka türlü anlamanın yolu yok!!!!.

Ete

Hattuşa

hocam
MaIn:
If sec =1 Then
    If YuK =0 Then
    dAt =dAt +1
    If dAt =255 Then dAt =255
    Uy =1
    SerOut cIkIs,396,["E","T","E",dAt]
    Uy =0
    EndIf
    If Asa =0 Then
    dAt =dAt -1
    If dAt =1 Then dAt =1
    Uy =1
    SerOut cIkIs,396,["E","T","E",dAt]
    Uy =0
    EndIf
    EndIf
If sec =0 Then
    If YuK =0 Then
    dUt =dUt +1
    If dUt =255 Then dUt =255
     Uy =1
    SerOut cIkIs,396,["S","L","M",dUt]
    Uy =0
    EndIf
    If Asa =0 Then
    dUt =dUt -1
    If dUt =1 Then dUt =1
    Uy =1
     SerOut cIkIs,396,["S","L","M",dUt]
    Uy =0
    EndIf
    EndIf
   
    GoTo MaIn


buda 18F2520 nin (vericinin) yazılımı, dataları göndermeden önce uy adlı pini high yaparak 12F675 i uyandırmak istedim.kodu yolladıktan sonrada Uy pinini low yaptım, dediğim gibi program alıcıda tıkanıyor. bahsettiğiniz gibi 130mS beklemesi sorun değil, ama isisde tamamen tıkanıyor. çalışabilir hale nasıl sokabilirim?

ete

Kullandığın yöntem doğru gözüküyor. Ancak anlaşılan senkron tutturamıyorsun. Senkron için yollanan data paket başına preambl ekle (3 byte $AA, 3 Byte $FF ve 3 byte $00) sonra işaretçi ve yollanacak datayı yolla bakalım sonuç değişecekmidir.
Arada uyandırma pini kullanıyorsun ama peşinden hemen data paketini yolluyorsun. Paket den 1 bit bile kaçırılsa tüm paket alınmamış varsayılıyor. Dolayısıyla program gelecek datayı beklemeye koyulup programı bloke ediyor.
Paket başına preambl koyarsan olur gibime geliyor. Dene bakalım. Zaten olmaz ise başkada çare göremiyorum.

Ete

Hattuşa

slm ete hocam bir yüzsüzlük edipte bişey sormak istiyorum, PIC ile PC arasında bilgi alışverişi yapan bir uygulamanız oldu mu? en azından PIC te alınan bilgileri PC ye aktaracak bir uygulama nasıl olmalıdır. biraz hazırcı oldum sanırım ama biraz bu konuyu merak ediyorum

ete

Pic ile Pic haberleşmesinden hiç farkı yok. Yok derken prensipte yok. Ancak Pic den yollanan TTL bilginin PC nin RS232 seviyesine çevrilmesi gerekir.  Bunu yapanda Max232 dir. Pic'in +5V olan HIGH sinyalini PC nin (RS232 nin) -10V olan HIGH sinyaline çevirir.
Yada pic in 0V (GND)  olan  LOW sinyalini RS232 nin +10V olan LOW sinyaline çevirir.
Bunun dışında iyi bir arayüz programı gerekir. Bu program pic de yaptığın Seri port dan gelen yada giden bilgiyi alması yada vermesi gerekiyor.

Ugulama yaptınmı dersen yaptım bir kaç tane. Bir data logger yapmıştım birisine Her yarım saatte bir sensörden bilgi alıp PC ye yollayıp orada kayıt ediyor idi.  Daha sonra RS485 ile başka bir sistem yaptım.  Dah asonra bir teraziden gle bilgileri PC ekranında gösterdim. Aklıma gelenler bunlar.

Burada önemli olan PC de çalışacak olan arayüz programıdır. Sen asıl ona kafa yor. SOnrasında bir ara kablo yapacaksın. EN akıllıcası FT232 kullanan çeviricilerdenbirini yapmak. Üzerinde max232 de olursa direk pic den girersin PC de de USB portuna takarsın kablonu olur biter.

Ete

Hattuşa

bilgiler için tşk ederim hocam, peki hocam bi soru daha sorayım, malum PIC e bir şekilde işlerimizi yaptırıyoruz dediğiniz gibi PC de çalışacak arayüzü nasıl nerden bulacağız? keşke basit arayüzleri yazabilen ve bize de öğretebilecek arkadaşlar olsa da bize öğretse... yada başka bir önerisi olan varmı?

ete

Arayüz için ya yazacaksın yada yazdıracaksın. Başka yolu yok. En kolay yolu Visual Basic kullanmaktır.

Ete

Hattuşa

anladım hocam tşk ederim,
şimdi arayacağımız adamın ismi kim visual basic bilio olmalı sanırım, zira yazmak işi için canım gider ama yazamam, yazdırma işine gelince de kimse uğraşmak istemez...

atacanteknik

yapmak istediginizi belirtin ben size vbasic arayuz yazarım

Powered by EzPortal