Bit değerine göre PWM Modulasyon

Başlatan OG, 19 Aralık 2005, 12:14:10

OG

Arkadaşlar Merhaba

Aşağıdaki örnekte göründüğü gibi 8 bit bir sayının bitlerinin değerine göre High veya Low değer alarak PWM elde etmek istiyorum.

Örnek;
MSB 10011001 LSB olan bir sayı olsun
Bit7=1   128 birim zaman high 
Bit6=0     64 birim zaman low
Bit5=0     32 birim zaman low
Bit4=1     16 birim zaman high
Bit3=1       8 birim zaman high
Bit2=0       4 birim zaman low
Bit1=0       2 birim zaman low
Bit0=1       1 birim zaman high


Yani ilgili değişkene ait sayı değerini bir portta zaman çizgisi içinde bit değerliliği kadar high/low yapmak. Bunu pbp da nasıl formule edebilirim çıkış yolu bulamadım. Aslında konu https://www.picproje.org/index.php/topic,6577&start=0&postdays=0&postorder=asc&highlight= buradakine benzer şekilde aynı anda 3 çıkışı vermek için kullanmam gerekecek. Bu işimi daha da zorlaştırıyor.

Bu konuda bilgisi olan varsa yardımını bekliyorum.



FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

@OG,

Aslında kolay bu istediğin şöyle;
Diyelimki PORTB.0 dan ilgili sinyali çıkacaksın.
Birim bekleme süren de 100 ms olsun. Buna göre program şöyle olmalı
X=1
SAYI=%10011001

BASLA:   
   CLK=SAYI & X  'CLK sinyalimiz LOW veya HIGH veya 1 veya 0
   PORTB.0=CLK  'CLK Port'a verildi
   PAUSE X*100   'bit değeri kadar beklendi
   X=X*2             'bir sonraki bit e bakmak üzere X hesaplandı
   IF X<256 THEN BASLA  '128 ve altı için BASLA'ya git


Sanırım olmuştur.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

OG

Üstat vaktin varsa biraz açabilirmisin. & operatörü hangi sonuca ulaştırıyor özellikle bunu anlamadım.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

@OG,

Ufak bir ayrıntıyı atlamışım. Önce onu düzeltiyorum ve programı yeni hali ile veriyorum. Açıklama programdan sonra;
X=1
SAYI=%10011001

BASLA:   
   CLK=SAYI & X  'CLK sinyalimiz LOW veya HIGH veya 1 veya 0
   PALS=0
   IF CLK>0 THEN PALS=1
   PORTB.0=PALS  'CLK Port'a verildi
   PAUSE X*100   'bit değeri kadar beklendi
   X=X*2             'bir sonraki bit e bakmak üzere X hesaplandı
   IF X<256 THEN BASLA  '128 ve altı için BASLA'ya git


Şimdi programın açıklaması şöyle;

X=1 iken
CLK= %10011001 AND %00000001 sonucunu hesaplıyor ve her ikisinin sıfırıncı bitleri 1 olduğu için sonuç 1 olarak bulunuyor.  Burada kullanılan (&) işareti bit bazında AND yapmak çin kullanılır. Sonuç olarak  CLK=1 hesaplandı.
PALS=0 yapılıyor
IF CLK>0 ise PALS=1 oluyor. Burada CLK=1 olduğundan PALS=1 oldu
PORT,pini=PALS  yani port pininden pals değerini çıkarttık
PAUSE X*100 = 1 * 100=100 ms bekledik.
X=X*2 = 1 * 2=2 değerini bulduk ve tekrar baslaya gittik.

Şimdi X=2 olduğuna göre bu durumda ne oluyor ona bakalım.
CLK=%10011001  AND %00000010 sonucu hesaplanıyor ve CLK=0 bulunuyor.
PALS=0 yapılıyor
IF CLK>0 ifadesi (false) geçerli olmadığından atlanıyor ve sonuçta PALS=0 kalıyor.
PORT,pini=PALS yani LOW yapılıyor.
PAUSE (2*100) yani 200 ms bekleniyor.
X=X*2 = 2 * 2=4 yani X=4 yapılıp tekrar BASLA ya gidiliyor ve bu işlem X=256 oluncaya kadar devam ediyor.

Umarım anlamışsındır.
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

OG

OK üstat şimdi tamam.  İlgili biti nasıl alacağım diye düşünüyordum, & operatörü püf noktası. PBP derslerini biraz daha çalışmam lazım  :lol:  . Çok sağol.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.