serin komutunu tam olarak kullanabilmek

Başlatan calicadnus, 04 Ağustos 2007, 00:29:58

calicadnus

bir pic ten sürekli olarak duruma göre 0 veya 16 ya kadar sayı göndereceğim.
diğer pic te serin komutu ile gelen datayı alacak. if komutları vasıtasıyla alınan sayı 1 ise şunu yap,2 ise bunu,vs.vs. 16'sa sunu yap diyecek.
pbp kitabında serin komutu ile illede belli bir data gelene kadar porta bakılır diyor. sizce bu sorunu nasıl aşabiliriz.
saygılar

e3

Dediğiniz şey mümkündür, belli bir data gelmesi işi de sizin senkron sinyalleri ile alakalıdır.

SERIN Pin,Mode,{Timeout,Label,}{[Qual...],}{Item...}

Bu komutta;

Pin : Seri data girişini alacağınız PIC portunu,

Mode : Seri datanın kaç Baudda, ne şekilde gönderileceğini belirtir.

Timeout Label : Kullanmayabilirsiniz de, kullanmak isterseniz istediğiniz bir  zaman diliminde veri gelmezse tanımladığınız başak bir etikete dallanmanızı sağlar.

Qual : Gönderici sistem size sinyal gönderse bile tanımlamış olduğunuz Qualifier'lar olmazsa (yani tanımlayıcılar) sistem sinyali almaz, bu güvenlik için kullanılabilir.

Item : Bu da gelen verinin saklanacağı değişkendir.

Örneğin ;
SERIN PORTA.0, T2400, ["TANIMLAYICI"], ALINAN_VERI


Invert edilmemiş 2400 Baudda, Porta,0'dan gelen veri içerisinde başlangıçta "TANIMLAYICI" isimli bir değişken gelmişse program bundan sonra gelen verileri ALINAN_VERI isimli değişkene kaydeder.Sizde istediğiniz verileri bu değişken içerisinden karşılaştırırsınız.Kolay gelsin.İyi günler.
.eem.

OG

Protection, sanıyorum arkadaş süre sınırı koymak istiyor.

SERIN değil SERIN2 komutunu inceleyin. Süre sınırı koyabilirsiniz.

ETE hocanın derslerinde güzel anlatım ve örnek var.

Her data önüne tanımlayıcıyı muhakkak kullanın, yanlış data alımına önlemdir.

SERIN2 ile hem bir tanımlayıcı hem de süre sınırı koyabilirsiniz.

Ben yaptığım denemede, hem tanımlayıcı hem süre sınırı atadığım zaman tanımlayıcı bilgi gelesiye kadar bekliyor, süre sınırına bakmıyor. Belki ben hata yaptım.

Bunu aşmak için Data alacağım pin'in polaritesine baktım.

True Data kullanıyorsam Data Gönderilen pini normal zamanda LOW da tutuyorum. Alıcı taraf da bu pinin polaritesini sürekli gözlüyor. Data göndereceğim zaman HIGH polaritesine çekip hereken ms kadar beklemede tutuyorum. Alıcı taraf da H gördüğünde bu pinden seri alışa geçiyor. Bu şekilde lüzumsuz beklemeler de yaşanmıyor.

Data Invert ise HIGH seviyeler LOW oluyor. LOW seviyeler HIGH.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

calicadnus

teşekkürler. olacak gibi.
saygılar. :)

hsny

Alıntı yapılan: "protection"
Qual : Gönderici sistem size sinyal gönderse bile tanımlamış olduğunuz Qualifier'lar olmazsa (yani tanımlayıcılar) sistem sinyali almaz, bu güvenlik için kullanılabilir.

Item : Bu da gelen verinin saklanacağı değişkendir.

Örneğin ;
SERIN PORTA.0, T2400, ["TANIMLAYICI"], ALINAN_VERI


Invert edilmemiş 2400 Baudda, Porta,0'dan gelen veri içerisinde başlangıçta "TANIMLAYICI" isimli bir değişken gelmişse program bundan sonra gelen verileri ALINAN_VERI isimli değişkene kaydeder.Sizde istediğiniz verileri bu değişken içerisinden karşılaştırırsınız.Kolay gelsin.İyi günler.
Hocam su qualifier,tanımlayıcı kısmını biraz somutlaştırabilir miyiz?Ben klavyeden 1 bastım,şunu yap diyecem.2 basılmış,bunu yap...vs. Burada 1 alınan veri ise "tanımlayıcı" ne oluyor?veri türünü mü tanımlıyor?nasıl oluyor?

e3

@ Hsny hocam, Qualifier dediğim şey basitçe açıklayayım :
Mesela bir öğretmen tahtaya yazı yaz dedi ancak kime dedi belli değil, ama Ahmet tahtaya yazı yaz derse sınıfta Ahmet kimse o yazar, işte senaryo burda başlıyor ya birden fazla Ahmet varsa ne olacak :D Tahtada yer kalmayacak.İşte tanımlayıcımız olarak örneğin "AHMET-MEHMET" dersek SERIN komutu veri gelince ilk olarak verinin başındaki bu tanımlayıcı var mı ona bakar, yoksa dünyanın verisi gelsin yine algılamaz, ama "AHMET-MEHMET" varsa isterse gelen 1 bit veri olsun hemen daha önceden belirlediğimiz registere atar.Aynı isim gibi yani sınıfta 10 tane Ahmet olsun, öğretmen hangisine hitap ederse(tabi karıştırmamak için örneğin soyadı da söyleyebilir gibi düşünebilirsiniz) o zaman iş yapılıyor.

Biraz garip bir örnek oldu sanki, umarım anlatabilmişimdir.İyi çalışmalar.İyi günler. ;)
.eem.

OG

Tanımlayıcı, kendinize göre rastgele secebileceğiniz bir kelime. Her gönderdiğin datanın öncesi gider,

Gönerim:
sayi_1 var byte
sayi_2 var byte

sayi_1=55
sayi_2=214

SEROUT2, Pin,Hız,["NANELIMONKABUGU",sayi_1,sayi_2]


Alış:
data_1 var byte
data_2 var byte
SERIN2 Pin, Hız, [wait ("NANELIMONKABUGU"),data_1,data_2 ]
' NANELIMONKABUGU data dizisi gelmeden esas alışa geçmez, bu sayede sayi_1 ve sayi_2 datalarının alındığından emin olunur.

IF data_1=55 then ...
IF data_2=214 then..
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

hsny

OG hocam, yazdığınız misalden sunu anlıyorum,tanımlayıcı serout ile tanımlanacak,serin de de bu tanımlayıcı olunca data gelecek.Ama yanlıs anlıyorum gibi geliyor.Serin komutunu serout olmadan da kullanabiliriz ne de olsa dimi?
protection hocam,örnek güzel olmuş.ben yine takılıyorum. Daha önce baktığım örneklerden sunu çıkarıyordum.
SERIN PORTA.0, T2400, ["TANIMLAYICI"], ALINAN_VERI

klavyeden "tanımlayıcı" basılacak sonra 1 e basınca bu alınan_veri'ye atanacak,işlem yapılacak.
tanımlayıcı sıradan herhangi bir kelime olabiliyorsa ne gereği var o zaman?Bunun önceden bir yerde belirtilmesi gerekmez mi? program bunun kimin,neyin tanımlayıcısı olduğunu nerden biliyor?
bir yerde takılıyorum ama umarım derdimi anlatıyorumdur...

OG

2 ayrı blok, verici ve alıcı için ayrı ayrı.
Serout gönderen pic tarafı, serin alıcı pic tarafı.

Gönderen picin seri data gönderme komutu serout2 dir.
Serout2 den sonra hangi pinden hangi hızda ve hangi datalar gidecek peşisıra dizilir.

Tanımlayıcı dediğimiz de aslında giden bir datadır. Fakat bizim için keyfi seçilmiş bir datadır. Esas kullanacağımız data ise tanımlayıcıdan sonra gelenlerdir.

Tanımlayıcı "NANELIMONKABUGU" dediysek bu harflere ait datalar önce sıra ile gider, Önce N harfine ait bir data, sonra A harfine ait bir data...U harfine ait bir data ve ardından sayi_1 e atadığımız data, sonra da sayi_2 ye atadığımız data.

Alıcı taraf is gelen bütün dataları almakla birlikte esas ilgilendiği wait komutu ile gösterdiğimiz "NANELIMONKABUGU" datasını bekler. Herhangi bir anda N ye karşılık gelen data yakalarsa ardından gelecek olan datanın A ya karşılık bir datamı olacak diye bakar. Gelen A ise devamındaki N mi diye bakar. NANELIMONKABUGU nu peşisıra duzgun aldı ise hemen onun ardından gelecek datayı data_1 değişkenine yükler ve onun arkasından geleni data_2 değişkenine yükler. Esas beklediği bu iki datadır.

Eğer tanımlayıcı "NANELIMONKABUGU" alınırken herhangi bir harf den sonrası doğru gelmedi ise tekrar baştaki N yi gözlemeye geçer. NANELIMONCABUGU  geldi ise C hatasını görünce beklediğim bu değilmiş der ve tekrar ilk harfin datasını (N) yi gözler.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

hsny

OG hocam sağolasın.
Ben olayı pic ile pc haberleşmesi yönünde düşündüğümden farklı dillerde konusuyoruz gibi oldu.
pic-pic haberleşmesinin kritik noktasını da bu vesileyle öğrenmiş oldum.İki pic haberleşmesi ile ilgili proje yapacağım zaman qualifier  gerekliliği küpe olur.
Pic ve pc arasında yapılacak haberleşme için bu gibi kritik nokta var mı?Özellikle serin komutu için?

e3

Hocam klavyeden tanımlayıcı basmıyorsunuz, bir anlam karmaşası oldu gitti :) Tanımlayıcı bizim kafamıza göre belirlediğimiz bir sabittir ve önceden belirlenir.Datalar ise herhangi bir yerden alınabilirler; örneğin klavyeden girişi yapılabilir.Mantık bu şekildedir :



Preamble sadece vericilerde kullandığımız, alıcılarda ise aranmaya bir datadır.Donanım başlangıcı için senkronizasyon sağlamaktadır.Bunlar genelde sabit değerlerdir ve şu anda bizi ilgilendirmiyor.

Senkron, TANIMLAYICI ya da NANELIMONKABUGU gibi kafana göre yazabileceğin ve programda önceden tanımlamış olduğun, alıcı ve verici arasındaki tanınabilirliği sağlamaktadır.Yoksa alıcı ve verici birbirlerine Fransız kalabilirler :D .
Misal ortamda birden fazla verici var ancak sadece bir alıcı var.Bu durumda alıcı her vericinin datasını alabilir ve senin programın yanlış işleyebilir.Ancak sen vericilerden birine ve alıcına bir tanımlayıcı koyarsan, alıcı sadece tanımlı olan vericiden gelen dataları alır, diğerlerinin ne gönderdiğine bakmaz.

Data da, senkrondan sonra göndermiş olduğun değişken  verilerdir.Yani ister klavyeden, ister nümerik tuş takımından, ister butonlardan gelen bilgi olsun bu sana kalmıştır.
.eem.

The_Daywalker

herkese kolay gelsin benim bir sorum olacaktı ben tv kumandasıyla bir picin bacağına bağlanmış olan ledi yakmak istiyorum ben kumandanın gönderdiği komutu girder ile okuttum ve 1A90 yazıyor. ben bunu nasıl pic'in içine yazabilirim ve tv kumandasına bastığımda led yansın. bunu nasıl yapabilirim? yardımlarınız için şimdiden teşekkürler birde ben bu alıcı işini tsop1736 ile yapacağım baud hızını nasıl seçebilirim?