Serin komutu

Başlatan efsanepoldem, 18 Eylül 2014, 10:54:37

efsanepoldem

Sn.ETE aşağıdaki gibi bir program blogum var. Master taraftan bir bilgi gelmediği halde program alma kısmının altındaki komutları işliyor. Bildiğim kadarıyla bir bilgi gelene kadar(timeout süresi kadar) orada beklemelidir. Alttaki komutları işlemesi acep nedendir?

basla:
  serin modul_rx,T2400,60000,error,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
  low RX_LED
  high TX_LED
  pause 50
  high RX_LED
  lowTX_LED
  goto basla

ete

Bir zaman aşımı etiketi kullanıp birde zaman aşımı süresi vermişsin ama kim ne ile karşılaştırma yaparak istenen bilginin gelmediğine hükmedecek de Error isismli etikete programı yönlendirecek. Şöyle yapsan daha iyi olurdu;
  Serin modul_rx,0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
  IF B1!="E" AND B2!="T" AND B3!="E" THEN HATA
Aynı komu satırını şöyle yazsan yine çalışmayacaktır;
  Serin modul_rx,0,60000,error,["ete"],B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
zira Serin komutu ete ibaresini buluncaya kadar programı orada bloke edecektir. Maalesef bu komut da timeout çalışmamaktadır.

Toparlarsak, komut satırında bir karşılaştırma unsuru yada bekleme unsuru belirtmediğin için komut gelenlere bakıp bir şey gelmeyince bir sonraki satıra atlıyor olsa gerek.

Ete

efsanepoldem

  Ben programın karşılaştırma rutinlerini falan burada belirtmemiştim fakat bu söyledikleriniz programda mevcut.  İyide hocam sistem  bu şekilde 7-8 aydır çalışıyordu. Timeout da çalışıyordu. Şimdi ne oldu anlamadım. Yani sistemde serin komutu kullandığımızda anlamlı bir data gelene kadar orada beklemiyor mu?

ete

işaretçi kullanmazsan beklemiyor , kullanırsan bekliyor.

Ete

Hattuşa

slm ete hocam bir noktada takıldım, yardımcı olmanızı bekliyorum.
aşağıdaki resimde görüldüğü gibi bir entegreyi SPI ile kontrol etmek istiyorum. sorunum şu;

Symbol sS    = PORTC.7         'ISD1760 SLAVE SELECT 
Symbol ScLk  = PORTC.6         'ISD1760 SPI CLOCK
Symbol mOsI  = PORTC.5            'ISD1760 SPI MOSI
Symbol mIsO  = PORTC.4         'ISD1760 SPI MISO

Low sS
SHIn mIsO, ScLk, 4, [ISD_DaTa[0],ISD_DaTa[1],ISD_DaTa[2]] 'Rd_status   bin=00000101 dec=5, hex=05]
High sS


mIsO pini spı alıcı pinim
mOsI =0000101 verilmesi gerekiyor.
not: her zaman ki gibi sormak istediğimi yine beceremedim. umarım sormak istediğimi anlatabilmişimdir.

ete

Ne sormak istediğini ancak tahmin edebiliyorum. Çokmu zor soru sormak acaba diye düşünüyorum.
Anlaşılan, MISO MOSI pinlerini karışıtırıyorsun. SPI haberleşmede MOSI (Master Out, Slave Input) , MISO (Master Input, Slave Out) pinleri üzerinden haberleşilir. İŞlemcin Master dir. Entegre ise Slave dir. Bu temel üzerinden gidersen;
Entegreye bir bilgi iletmen gerekirse MOSI bacağını data bacağı olarak kullanığ SHout komutu ile ileteceksin.
Entegreden bilgi alman gerekirsi MISO bacağını data bacağı olarak kullanıp SHin komutu ile blgiyi alacaksın. CLK bacakları her iki konum için aynı olacak.

Umarım sende cevabnı almışsındır.

Ete

Hattuşa

slm hocam;
anladığım kadarıyla, peşpeşe önce shout ile bilgi gönderip ardından shin ile data bekleyeceğim. inanın bunu denemek hiç aklıma gelmedi.


BspI =80
sS =0
        For SpI = 0 To 7
        DelayUS 10        '
        mOsI = BspI           ' shift LSB of byte onto MOSI line
        Low ScLk
        DelayUS 10               ' clock MISO data out to uC (Falling Edge)
        teMp =mIsO         '
        High ScLk              ' clock MOSI into ISD1700 (Rising Edge)
        BspI = BspI >> 1       ' shift SPI byte Right
'        bSPI.7 = temp
        Next SpI
sS =1



bende bunu denemiştim. ama başarılı olamadım.

ete

Aynen öyle yapacaksın.
Ete

Powered by EzPortal