Role sürmek

Başlatan x-nomek, 05 Mart 2019, 18:16:44

x-nomek

Merhabalar ;
Spi Haberleşmesinden 16 bitlik veri geliyor ve bende 16 adet roleyi
Gelen veriye göre açıp kapatacağım bu işi en kolay yönden çözmeye çalişiyorum fakat yapamadım

örnegin
if(gelendata=15645)
(
"aktif olacak roleler"
)

bu şekilde yapmaya kalksam binlerce if yazmam gerekecek
yani  16 bit sayinin karşiliğini 16 roleden görmek ve  çikiş almak istiyorum

SpigelenVeri =0B101101011110011
rolelerçikiş =  101101011110011  çikişida bu şekilde aktif olacak
anlatmak istediğimi umarım anlatabilmişimdir







JKramer

Neden binlerce if yazmanız gereksin ki? 16 tane bit var, tek tek bakın; 0'sa kapatın ilgili röleyi, 1'se açın.

Murat Mert

unsigned int16 gelen_data=0;
unsigned int8 role_port1=0, role_port2=0;


gelen_data=spi_data_oku();

role_port1=make8(gelen_data,0);
role_port2=make8(gelen_data,1);
output_b (role_port1);
output_d (role_port2);
mert07

ziyaretci

#3
Farklı bir yöntem:

#use fast_io(x)

#define DATA   pin_x0
#define CLOCK  pin_x1
#define LATCH  pin_x2

unsigned int8 i=0;

Void HC595_gonder(unsigned int16 veri=0)
{
  
    for(i=0;i<16;i++)
    {
        if(bit_test(veri,i))
            output_high(DATA);
        else 
            output_low(DATA);
        
        output_high(CLOCK);
        output_low(CLOCK);
    
    }
  
    output_high(LATCH);
    output_low(LATCH);
}

Void main()
{

    set_tris_x(0bxxxxx000); 

    for(;;)
    {
      Role_cikis(gelen_veri);
    }
}

// x: İlgili port

**74hc595 sıcaklık ve kaydırma frekansına bağlı olarak 25MHz'den sonra High-Low arasında algı süresi kadar gecikme koymak gerekebilir.

x-nomek

Teşekkür ederim  sayenizde konuyu çözdüm :) ::ok