July 15, 2012

Maalesef ushort ve işaretsiz sağa kaydırma işleci kullanmama rağmen gene aynı durum oluşuyor.

import std.stdio;
import giriscikis;
import core.thread;

void karaŞimşek(ushort adres, ushort veri, ushort beklemesüresi = 500)
{
   for (int i = 1; i < 4; ++i) {
       veri = cast (ushort) (veri << 1);
       yaz (adres, veri);
       writefln("Ikili   : %b", veri);
       Thread.sleep(dur!"msecs"(beklemesüresi));
   }

   for (int i = 1; i < 4; ++i) {
       veri = cast (ushort) (veri >>> 1);
       yaz (adres, veri);
       writefln("Ikili   : %b", veri);
       Thread.sleep(dur!"msecs"(beklemesüresi));
   }
}

void main()
{
   version (linux)
   {

       /*
           paralel portun adresi
       */
       const uint adres = 0x0c000;

       /*
           göndereceğimiz veri
       */
       ubyte veri = 0b_11111111;
       erişimhakları(adres, 1, 1);
   }

   version (Windows)
   {

       /*
         paralel portun adresi
       */
       ushort adres = 0x0378;

       /*
           göndereceğimiz veri
       */
       ushort veri = 0b_00000001;
   }

   yaz(adres, veri);
   Thread.sleep(dur!"msecs"(500));
   writefln("Ikili   : %b", veri);

   for (int i = 0; i < 3; ++i) {
     karaŞimşek(adres, veri);
    }
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 16, 2012

Bana sorun işaret sorunu değil gibi geliyor. short türü 16 bit, 16. bit işaret biti ama biz burada sadece ilk 4 biti değiştiriyoruz. Bu konuda atladığım bir yer mi var acaba?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 15, 2012

Tam incelemedim ama herhalde işaretli türün değerini sağa kaydırdığın için oluyordur.

Çözümler:

  • > > >

    işlecini kullan

  • 'unsigned' bir tür kullan; işaretli türlerin en soldaki biti sağa kaydırmada değerini korur.

http://ddili.org/ders/d/bit_islemleri.html

(Bunun geçerli bir nedeni var: öyle olunca sağa kaydırma işlemi sıfırdan küçük sayılarda da yarıya bölme anlamına gelir.)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 15, 2012

Linux için de 1 ile ilklersem ilk mesajındaki sonuçları görüyorum:

       ubyte veri = 1;

Bir de 8 genişlikte gösterdim:

   writefln("Ikili   : %08b", veri);

'
Ikili : 00000001
Ikili : 00000010
Ikili : 00000100
Ikili : 00001000
Ikili : 00000100
Ikili : 00000010
Ikili : 00000001
Ikili : 00000010
Ikili : 00000100
Ikili : 00001000
Ikili : 00000100
Ikili : 00000010
Ikili : 00000001
Ikili : 00000010
Ikili : 00000100
Ikili : 00001000
Ikili : 00000100
Ikili : 00000010
Ikili : 00000001
'

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 16, 2012

Başka işletim sisteminde denemekte fayda görüyorum. Eğer Linux ise bir de Windows'a bakmalı. Ayrıca kaydırma işlemi yapmak şart mı? Sanırım bu bir ödev ve farklı yöntemler kullanmamak gerekiyor...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 16, 2012

Alıntı (Salih Dinçer):

>

Başka işletim sisteminde denemekte fayda görüyorum. Eğer Linux ise bir de Windows'a bakmalı.

Şu an Windows7 üzerinde deniyorum.
Alıntı (Salih Dinçer):

>

Ayrıca kaydırma işlemi yapmak şart mı?

Hayır.
Alıntı (Salih Dinçer):

>

Sanırım bu bir ödev ve farklı yöntemler kullanmamak gerekiyor...

Ödev de değil :-)

İstediğimiz her türlü yöntemi kullanabiliriz. Örneğin senin verdiğin şekilde de denedim ama sadece bir kere bir led yanıyor.

import std.stdio;
import giriscikis;
import core.thread;

void karaŞimşek(ushort adres, ushort veri, bool solaGit = true,
               ushort beklemesüresi = 500)
{
   if (solaGit) veri <<= 1;
   else veri >>= 1;
   yaz (adres, veri);
   Thread.sleep(dur!"msecs"(beklemesüresi));
}

void main()
{
   version (linux)
   {

       /*
           paralel portun adresi
       */
       const uint adres = 0x0c000;

       /*
           göndereceğimiz veri
       */
       ubyte veri = 0b_11111111;
       erişimhakları(adres, 1, 1);
   }

   version (Windows)
   {

       /*
         paralel portun adresi
       */
       ushort adres = 0x0378;

       /*
           göndereceğimiz veri
       */
       ushort veri = 0b_00000001;
   }

   bool yönDeğiştir = true;
   uint kaçKere = 3;
   do {
       karaŞimşek(adres, veri, yönDeğiştir);
       if(veri == 1 || veri == 8) {
           yönDeğiştir = yönDeğiştir ? false : true;
           kaçKere--;
       }
   } while (kaçKere);

}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 16, 2012

Alıntı (erdem):

>

Alıntı (Salih Dinçer):

>

Başka işletim sisteminde denemekte fayda görüyorum. Eğer Linux ise bir de Windows'a bakmalı.

İstediğimiz her türlü yöntemi kullanabiliriz. Örneğin senin verdiğin şekilde de denedim ama sadece bir kere bir led yanıyor.

> void karaŞimşek(ushort adres, ref ushort veri, bool solaGit = true,
>                 ushort beklemesüresi = 500)
> {
>     /* ... * /
> }
>
> void main()
> {
> }
> ```

>

Bu kısmı referans alacak şekilde değiştirince çalışıyor. Teşekkürler!

Kodun son hali de şimdilik bu şekilde:

https://github.com/erdemoncel/elektronikhobi/blob/master/kaynak/kit.d

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
July 16, 2012

Devreyi kurup deneyeceğim :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 16, 2012

Sonunda çalıştı demek, çok şükür...:)

Ben de en sağlam yöntem olarak bir dizi ve bu dizi üzerinde kayan foreach döngüsü önerecektim. Öyle ya, orada ne tür veri kayıtlıysa paylaşacaktı eş programıyla ve güzel güzel anlaşacaktılar (D)ünya'da! Gökten üç elma düşmüş...hahay

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 16, 2012

Alıntı (Salih Dinçer):

>

Ben de en sağlam yöntem olarak bir dizi ve bu dizi üzerinde kayan foreach döngüsü önerecektim. Öyle ya,

Aslında gene de önerebilirsin ;-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]