Butona Bastıkça LED lerin değişmesini istiyorum

Başlatan Quark, 04 Aralık 2018, 17:08:13

ete

Konuyu geriden izliyorum. En azından istenen şeyler gerçekleşmiş oldu.
Port pininden istenilen bir voltajın çıkartılması işi için iki seçenek yada 3 seçenek var. Birincisi direk donanımsal PWM kullanarak bunu çıkışta DC voltaja çevirmek (iki direnç ve bir elektrolitik kondansatör ile). İkincisi DAC özelliği olan bir işlemci (16F1827 en uygunu) ile 5 (32 kademe)  bitlik bir Dijital den analog değere çevirme kullanılarak bu işi yapmak. Şayet 5 bit yeterli gelmiyor ise üçüncü seçenek olarak 8 bitlik (255 kademe) bir harici DAC entegresi kullanarak bu işi yapmak gerekiyor.
istenen çıkış voltaj aralığı 1,5 dan 4,5V ta kadar olduğu dikkate alınırsa 5 bitlik DAC bu işe pek uygun gibi gözükmüyor.
Sonuç küsüratlı çıkacağı için uygun değil ama işin toleransı varsa kullanılablir.
Bu konuda uygulanacak formül şu,
Vout = 5 x (5 bitlik sayı)/32   (pic besleme ref volatjının 5 v olduğu kabul edilmiştir)
1,5V için bir hesap yapacak olursak   (32 x 1,5)/5=9,6 buluruz ki bunu 9 olarak kullanırsak sonuç 1,4V olacaktır.
10 olarak kullanırsak sonuç 1,56V çıkacaktır. Bence hiç de fena bir sonuç değil.

Ete

Quark

#16
---

Quark

#17
--

Quark

#18
--

ete

PWM komutu (PWM PORTB.0,1,1) ile bu sistemiçalıştıramazsın. O komut bir çevrimlik bir sinyal çıkartır. Oldum olası sevmemiştim bu komutu. Adında PWM olunca millet doğru dürüst bir sinyal çıkacak sanıyor.
HPWM ile en azından 10 bitlik bir PWM ile bunu yapman gerekir.

Ayrıca komutun parametreleri şöyledir. PWM Pin,Duty,Cycle
Pin olarak PORTB.0 kullanmışsın bu tamam. Duty değeri 0-255 arasında bir değer olması gerekirken 1 vermişsin  Cycle ise yine 1 olarak kullanılmış. Bu komut bir puls çıkartır oda düşük duty değeri ile. Bu komutla olmaz tekrar söylüyorum.
Basic derslerinde register kullanarak nasıl PWM üretildiğne bir bakıver istersen yada biraz açıklayayım.
Öncelikle frekansa karar  vereceksin. Sana 1-5Khz dolayında frekansı olan bir sinyal gerekiyor. 20Mhz kristal frekansı ile 5Khz frekans kullanmak daha mantıklı çünki bu frekansta min PWM frekansı 1,2Khz dolayındadır.
5Khz diyelim. Bunun için Multicalc programını kullanarak parametreleri tespit etmek kolay. Buna göre;
Bölme oranın 1/4 (Timer2) , Max duty değerin 1000 , PR2 değerin ise 249 olmalı.
T2CON =%000001xx      'bölücü ayarları xx bitleri 00=1/1, 01=1/4 , 10=1/16, bit2=Timer2 on-off
T2CON=%00000101 olacak.
PR2=249
CCP1CON.2=1   
CCP1CON.3=1   bu iki satır PWM modülü aktif hale getiriyor.
Şimdi vereceğin Duty değeri (0-1000 arasında olacak ve %100 için 1000 , %50 için 500, %25 için 250 değeri verilmeli)
şağıdaki alt program sana PWM duty değerini ayarlar ve sinyalı o duty değeri üzerinden çıkartır.
Buaraya GOSUB ile gidip dönmek gerekiyor. Örnek
DUTY=500: GOSUB DUTYVER  şeklinde kullanabilirsin.

DUTYVER:
      X=DUTY   'X burada word tipinden olmalı
      CCP1CON.4=X.0
      CCP1CON.5=X.1
      CCPR1L=x>>2
      RETURN




Ete


Powered by EzPortal