Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: x-nomek - 05 Mart 2019, 18:16:44

Başlık: Role sürmek
Gönderen: x-nomek - 05 Mart 2019, 18:16:44
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






Başlık: Ynt: Role sürmek
Gönderen: JKramer - 06 Mart 2019, 09:10:19
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.
Başlık: Ynt: Role sürmek
Gönderen: Murat Mert - 06 Mart 2019, 10:16:37
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);
Başlık: Ynt: Role sürmek
Gönderen: ziyaretci - 07 Mart 2019, 20:29:49
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.
Başlık: Ynt: Role sürmek
Gönderen: x-nomek - 19 Mart 2019, 13:24:30
Teşekkür ederim  sayenizde konuyu çözdüm :) ::ok