avatar_ete

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

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

sonmoikan

Proteus içerisinde yani similasyonda kullanılan COMPIM componenti zaten MAX232 içerir.
COMPIM componentinin çıkış ve girişlerinde -10v veya +10v gibi değerleri zaten göremezsiniz.
Similasyon da Max232 yi devreden çıkararak denemelerinizi yapmalısınız.
ABDULLAH

Bahri Bilir

Sonmoikan Hocam çok teşekkür ediyorum Sorunu çözdüm.Ve sizin dediğiniz gibi Compini direk bağladım pice.Veriyi kesmenin içinde dec değeriyle okuyup ekrana yazarken normal değişkenmiş gibi yazmamdan kaynaklanıyormuş lcd de anlamsız devilerin çıkması.
Ve kesme kısmında veriyi:
hSerIn , [WAIT("ETE"),v,v1,v2]
komutuyla okuyup ekranada:
lcdout v,v1,v2
şeklinde yazdırarak 3 basamaklı bir veriyi oldukça stabil bir biçinde picte okumayı sonunda başardım.
Ete hocamıza ve yanıtlayan diğer arkadaşlara teşekkür eder iyi çalışmalar dilerim.
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Hattuşa

#32
SLM ETE hocam;
yine bir noktada takıldım, şöyleki;

  StArT_A = 16 
     eNd_A   = 105
Low sS
SHOut mOsI, ScLk, 4, [$80,$00,StArT_A,eNd_A,$00,$00,$00]
High sS
Return


serialden mOsI ye 8 bitlik 5 adet veri yolluyorum (yada yolladığımı sanıyorum).
(start)      hexdesimal =$80                      desimalde=128
(start_a)  hexdesimal =010                      desimalde  =16   
(end_A)   hexdesimal =069                       desimalde 105, 
değeri olması gerekiyor (ki ben excelden çevirdim) sorunum şu; isis simülasyon esnasında (aşağıda ekran alıntısında gözüken)
$80 değeri =01, 16 olan start_a =08, 105 olan end_a=96 gözüküyor...
şimdi ben nerde hata yapıyorum.
noT:
aşağıya isis sonucuna ve datasheette yazan adresleme ile ilgili ekran alıntılarını ekledim.
hocam sona yaklaştım bunu da aşarsam sanırım ISD1760 ı kontrol etmeyi başaracağım. aslında işlemci ile kontrolünü sağlıyorum ama bahsettiğim adresleme bilgileri doğru olmadığı için sonuca henüz ulaşamadım.
ayrıca hocam kendime çok kızıyorum. 44 yaşındayım bundan 30 sene önce lisede ve ünv. sanki kendi dertleriymiş gibi bizi sıkıştıran öğretmenlerimizi dinlemedik 4-5 sene ingilizce dersi gördük ama öğrenemedik. inanın bir yabancı dilin olmayışı yüzünden tırmalayıp duruyorum. yabancı dili olmayan bir elektronikçi maça 1-0 malup başlıyor.millet olarak şu beraberlik golunu bir atsak eminim galibiyeti de sağlarız ama...

ete

Shout komutunda yer alan 4 rakamının yerine  1 yaz yeniden dene.

Ete

52

#34
İyi günler...
Ete hocam seri iletişimde  SERIN PORTC.7,T9600,1500,HATA,["AAAA"] bu komutta "AAAA" bilgisi geldiginde nasil bir etikete göderirim acaba, bilgi geldikce degişmekte  SERIN PORTC.7,T9600,1500,HATA,["BBBB"] gibi AAAA yerine telefondan yolladığım mesaj olacak tek şart koyduğumda oluyor fakat birden fazla şart oluşturamadım yardımcı olursanız sevinirim kolay gelsin herkeze ...

ete

#35
Bildiğim kadarı ile HSERIN komutunun dıiındaki diğer seri alma komutları timeout sistemini çalıştıramıyorlar.
SERIN PORTC.7,T9600,1500,HATA,["AAAA"] şeklindeki bir komutda 1500 ms bekle şayet AAAA bilgisi gelmez ise HATA isimli etikete git mantığı çalışmayacak demektir. Hadi çalıştığını varsayalım. Bazen AAAA bekleyip bazende BBBB bekleyecekseniz o zaman o karekterleri işaretçi olarak kullanmayacaksınız demektir.
Bu durumda gelen byte ları tek tek alıp yani "A" , "A", "A" , "A"  şeklinde alıp sonra içeriğine bakarak değerlendirmek lazım.
Mesela şöyle yapılabilse ne güzel olurdu;
SERIN2 PORTC.7 84,[WAITSTR Gelen]
Bu komutun düzgün çalışması için önceden GELEN VAR BYTE[4] şeklinde bir dizi değişkeni tanımlamak gerekiyor.
Sonra kout çalıştırıldığında diyelimki önce AAAA dizisi gelecek;
Gelen[0]="A"
Gelen[1]="A"
Gelen[2]="A"
Gelen[3]="A"
şeklinde alınan dizi elemanları Gelen isimli dizi değişkeninin index ile belirlenmiş birimlerine yerleştirilir.
Bir sonrakinde ise BBBB dizisi alınabilir ve bu durumda Gelen dizisi aşağıdaki bilgileri almış olur.
Gelen[0]="B"
Gelen[1]="B"
Gelen[2]="B"
Gelen[3]="B"

Şayet yollanan dizi hep aynı karekterden oluşuyor ise yalnızca birinci ve emniyet için ikinci karektere bakmak yeterli olacaktır.
O halde önce,
SERIN2 PORTC.7 84,[WAITSTR Gelen]  komut dizisi ile gelenleri alacağız sonra
IF Gelen[0]="A" and Gelen[2]="A Then .....AAAA ile ilgili etikete git
IF Gelen[0]="B" and Gelen[2]="B" Then....BBBB ile ilgili etikete git.
Daha farklı karekterler var ise onlarıda buraya ekleyip karşılaştırma yolu ile ne geldiğini anlayıp ilgili etikete yollamak en güzeli olurdu.

Ancak daha da güzeli şöyle olması gerekir. madem AAAA veya BBBB'yi telefonla siz yolluyorsunuz o halde bu işaretçiyi standart bir hale getirseniz ve AAAA veya BBBB yerine,
"ETE",10  Bu AAAA nın karşılığı olsun
"ETE,"20 Bu da BBBB nin karşılığı olsun.
O zaman kullanacağınız komut diziside,

SERIN2 PORTC.7,84,[Wait("ETE"),AL] şeklinde bir komut olurdu.
İşlemci öncelikle yelen veri paketinin içinde ETE dizisini arayacaktır. başında bu bilgi yoksa hiç bir şey almayacaktır.
ETE yi yakaladı hemen peşinden geşen tek byte bilgiyide alacak ve AL isimli değişkene yerleştirecektir. Sonrasında size düşen,
IF AL=10 then Goto AAAA
IF AL=20 Then Goto BBBB
demek olacaktır. Bence daha güzel kolay ve emniyetli yöntem budur.

Ete





Adem AYDIN

Merhaba hocam seri iletişimde bir sorum var. Ben simülasyonda (ilk proje seri alıcı-verici) ilk butona basmada diğer pic hiçbir şey yapmıyor, ilk basmadan sonraki basmalarda sorunsuz çalışıyor. Bu ilk basmada çalışması için resimdeki gibi porta'yı 1 yapıyorum, ilk ve diğer basmalarda sorunsuz çalışıyor, bu şekilde yaptığım zaman doğru olur mu? Verdiğim porta=1 programı hataya götürürmü? (Yani alıcı bu porta.0'a gelen bilgiyi işleme koyarmı ama birde şu var vericiden abc bilgisi gelmedende aldığı bilgiyi değişkene aktarmıyor)
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

ete

Burdan şu sonucu çıkarmak lazım. Seri veri yollama pini olan PORTA.0'ın önce bir HIGH değer alması ardından gelen bilgiyi bunun peşine eklemesi gerekiyor demekki. Zaten USART komutları haberleşme pinlerini otomatikman HIGH yapar sebebi bu olsa gerek. Daha önce bende dikkat etmemiştim bu konuya. Her neyse madem bu şekilde çalışıyor sorun yok demektir. Verdiğin PORTA=1 değeri bir sorun yaratmaz. Sadece ilk bilgi yollanana kadar çıkış pinini HIGH yapar o kadar. Sonrasıda o pin Serout komutunun kontrolüne giriyor zaten.

Ete

Adem AYDIN

Peki hocam çok teşekkür ederim. Allah razı olsun.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

Adem AYDIN

Hocam bu sefer proje2den sorum var.

SEROUT CIKIS,T2400,[("A"),VER,13,10]
buradaki 13 ve 10 ne anlama geliyor?
Ve sadece A yazabiliyoruz ben abc yazmak istediğimde hata veriyor bu konularda yardımcı olur musunuz?
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

ete

13 = CARRIAGE RETURN
10 = LINE FEED
Bu ikisi veri paketinin bittiğini karşıya belirtmek için koyulmuştur. Pıc to PIC haberleşmelerde çok da gerekli değil ama Pic to PC haberleşmelerinde ihtiyaçtır kullanılması gerekir.
ETE

Adem AYDIN

Merhaba arkadaşlar, bu eeprom 0 ve eeprom 1 adresinde ilk başta okunan değerler 255 olması gerekmezmi?
Yani ben eeprom 0dan (read 0dan) 3 bilgisi okunuyor. eeprom 1den(read 1den) 0 bilgisi okunuyor bunun sebebi nedir
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

Bahri Bilir

Daha önce değiştirmiş olabilir misiniz?
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

ete

Bu denemeyi isisde yapıyorsanız bu nbazen normal oluyor. Özellikle bir devreyi başka bir devre haline getirmişseniz. Zira isis sürekli olarak bu işler için o devreye has kayıtlar tutmaktadır.
Siz devreyi yeni haline getirseniz bile eskisi orada bekler.
Bunu anlamak yada önlemek için ilk açılıştaki read komutlarından önceki satırlardan birisine,
Data @ 0,255,255
Yazıp programı çalıştırın.sonra durdurup bu satırı kapatın yada silin. Epeom adresini orjinal haline getirmek için koydum bu komutu. Asıl görevi yalnızca ilk programlama esnasında pic epromunun ilk iki adresine otomatikman 255 yazar.
Ete

Bahri Bilir

Hocam
"Data @ 0,255,12,38,255,255,255"
Bu şekilde kullanılabilir mi?
Bu şekilde kullansaydık;
EPPROM 0 = 255
EPPROM 1 = 12
EPPROM 2 = 38
EPPROM 3 = 255
EPPROM 4 = 255
EPPROM 5 = 255
şeklinde mi olacaktı?
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Powered by EzPortal