hpwm pic16f877 50hz

Başlatan ismshn, 07 Şubat 2009, 14:23:35

ete

Teknikelektronikçi,

Pic lerde İki türlü PWM sinyali vardır. Birincisi yazdığın programla ürettiğin ki bu senin bahsini ettiğin pinlerin tek tek çıkış vermesi şeklinde açıkladığın modele uyan , diğeride pic'in donanımsal özelliğinden kaynaklanan ve yazılan programa bağlı olmadan geri planda çalışan HWPM (donanımsal PWM) dir.

İkisi arasında bariz farklar var. Önce donanımsal olanı biraz daha açayım. Her pic de olmayan ancak pek çoğunda bulunan donanımsal PWM özelliği önceden belirlenmiş bazı pinlere verilmiş bir özellik olarak her ikisi (bazı piclerde 3 adet HPWM bulunmaktadır 16F777 gibi)  aynı frekansta çalışmak üzere bir kere sinyal açıldımı sen kendi programında ne yaparsan yap o arka planda çıkış vermeye devam eder. Programın içinden duty değerini istediğin gibi değiştirebilirsin ve 10 bitlik bir çözünürlükle bunu ayarlayabilirsin. Tek dikkat edilecek nokta bütün çıkış frekanslarının aynı olması zorunluluğu var.

Proton daki komutu incelemedim ama hemen hemen PBP ile benzer olması gerek. PBP da 10 bit olarak komutu yok. Ancak registerleri kullanarak rahatlıkla 10 bitlik PWM sinyali elde edbiliyorsun. HPWM komutu ise 8 bit çalışıyor ve çıkış pini (önceden belirlenmiş olan ve genelde CCP1 ve CCP2 olarak işaretlenmiş pinlerden biri veriliyor) sonra Duty değeri (255 verilirse %100, 127 verilirse %50 ) 0-255 arasında veriliyor ve ardından da PWM sinyalinin frekansı veriliyor. Frekans kısıtlamalarıda mevcut. 4 MHz kristal ile en düşük 244 küsür Hz. frekans elde edilebiliyor. Üst sınır da kısıtlı ama epeyce yukarılara çıkabiliyor.

Hangi pic lerde HPWM çıkışı var hangilerinde yok anlamak için data sheetlerine bakmak gerekiyor. Bazı örnekler verebilirim.
16F84 de yok. 16F628 de 1 adet çıkış var. 16F876-877 serisinde 2 adet mevcut. 16F777 de 3 adet çıkış mevcut. Piyasada pic leri belirtmeye çalışıyorum.

Diyelimki elinde tek çıkışlı bir pic var ve sana 3 adet PWM sinyali gerekli . İşte o zaman timer ve kesme kullanarak sanki geri planda çalışan HPWM sinyali gibi birden fazla sinyal elde etmen mümkün olabiliyor. Hemde her birinin dutuy değeri farklı olabilir. Burada da frekans kısıtlaması karşına çıkmak zorunda ama çok da iddalı değilim akıllıca bir programla farklı frekanslarda sinyallerde elde edilebilir belki.

Basicde kullanılan PWM sinyaline gelince, istediğin bir pinden kısıtlı miktarda bir sinyal çıkarmak için kullanılır. Aynı anda iki sinyal çıkartman bu komut ile mümkün değil maalesef. Biri bitmeden diğeri çıkamıyor. Arkadaşlar komutun kullanımını anlatmışlar zaten ben yeniden vermeyeyim.
Durum böyle.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

teknikelektronikci

sayin ete üstadim degrli bilgi ve ilginiz icin tesekür ederim
pwmi az cok kavradim nicin timer oldugunuda anladim

özelikle
Alıntı Yap
Basicde kullanılan PWM sinyaline gelince, istediğin bir pinden kısıtlı miktarda bir sinyal çıkarmak için kullanılır. Aynı anda iki sinyal çıkartman bu komut ile mümkün değil maalesef. Biri bitmeden diğeri çıkamıyor. Arkadaşlar komutun kullanımını anlatmışlar zaten ben yeniden vermeyeyim.
Durum böyle.
Ete
konusunda bilgim yokdu yani bu durumda 3 tane ayni anda pwm cikartamioruz fakat ben bi sey sormak istiorum yabanci bi kaynakda asagidaki kod kullanilmis burda r-g-b leri pwm komutu ile cikarmaya calismis isis de denedim gene kasti ve tek tek cikardi
kod:
‘****************************************************************
‘* Name : adc/pwm.BAS *
‘* Author : T. Holoubek *
‘* Notice : Copyright (c) 2003 [select VIEW…EDITOR OPTIONS] *
‘* : All Rights Reserved *
‘* Date : 12/19/2003 *
‘* Version : 1.0 *
‘* Notes : a simple pwm controled with 3 potentiometers*
‘* : *
‘****************************************************************
DEFINE OSC 4
start:
INCLUDE "modedefs.bas"
'set pins to be the output
OUTPUT PORTD.2
OUTPUT PORTD.3
OUTPUT PORTC.4
OUTPUT PORTD.1
‘Test to make sure PIC PROGRAM IS WORKING - 

‘Define ADCIN parameters
‘Set number of bits in result
DEFINE ADC_BITS 10
‘Set clock source (3=rc)
DEFINE ADC_CLOCK 3
‘Set sampling time in microseconds
DEFINE ADC_SAMPLEUS 10

‘Set PORTA to all input
TRISA = %11111111

‘Set up ADCON1 analog and right justify the result
adcon1 = %10000010

‘define adc vars
r VAR WORD ‘ Create variable to store result
g VAR WORD ‘ Create variable to store result
b VAR WORD ‘ Create variable to store result

‘************SERIAL*****************

‘Set up SERIAL OUT
serout2 portc.6, 16468, ["redVal = ", r, 10, 13, "greenVal = ", g, 10, 13, "blueVal = ", b, 10, 13]

‘************SERIAL END*************

‘Wait .5 second
Pause 500

main:
HIGH PORTD.1

‘************SERIAL*****************

‘Set up SERIAL OUT
serout2 portc.6, 16468, ["redVal = ", r, 10, 13, "greenVal = ", g, 10, 13, "blueVal = ", b, 10, 13]

‘************SERIAL END*************

‘Read channels 1,2,3
ADCIN 1, r
ADCIN 2, g
ADCIN 3, b
‘divide by four
r = r/4
g = g/4
b = b/4
‘PWM Pin,Duty,Cycle
PWM PORTD.2,r, 1
PWM PORTD.3,g, 1
PWM PORTC.4,b, 1
GoTo main


yukardaki koduda aynisini deniyecem ki benimkindne pek bi farki yok sadece 10 bit kullanmis adc yi benim sormak istedigim bu pwm komutunda 1 yazan yer cycle oluyor bunu 1 yapinca pwmler arasi cok mesafe oluor gene yavasda olsa 3 pwmi ayni anda görebiliorum ama bunu 255 yapinca(max 255) tek bir tane pwm bile zar zor cikior yani bu duurmda cycle ne ise yarior? yani benim bildiigm peryod dur burdanda frekansi etkilemesi gerek ama etkilemiyor malesef tek fark arada epey uzunca bir bosluk var pic basic pro kitabim yanimnda olsa bakacam ama malesef yok
tekrardan ilginize tesekür ederim
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

ete

Cycle ifadesi burada pals anlamına geliyor.

4 Mhz osilatör kullanılınca, 1cycle yaklaşık 5 ms uzunluğunda oluyor.
Cycle = 1 alırsa tek pals çıkar.
Cycle=100 alırsan 10 puls çıkar.
255 alırsan da 255 adet puls çıkar.
Normalde 3 puls'ı aynı anda görmen pek mümkün değil. Ancak tek puls verilince sanırım biri bitmeden diğeri başlayabiliyor belkide. Orasını tam bilemiyorum. Benim bildiğim bir komut bitmeden diğerine geçilemiyor.

Verdiğin programda aynı anda puls çıkması da mümkün değil ancak program çok hızlı çalışınca bir komut çevriminde yeniden PWM komutlarına sıra geliyordur biraz kesikli olsada 3 pwm sinyali çıkıyor gibi gözükebilir.

Başkada izah tarzı yok maalesef.

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

z

PWM    PORTC.1,DEGER1,255
PWM    PORTC.2,DEGER2,255
PWM    PORTC.3,DEGER3,255

Boyle yapmak yerine soyle yap.

Kullandiginiz dili bilmiyorum ornek almaniz icin basic komutlari ile yaziyorum.

Dongu: 
           Sayac= Sayac+1
           if Sayac>Pwm1 then Portc.1=1
           if Sayac>Pwm2 then Portc.2=1
           if Sayac>Pwm3 then Portc.3=1
           if Sayac=0 then
              Portc.1=0
              Portc.2=0
              Portc.3=0
              PWM1=ADC1
              PWM2=ADC2
              PWM3=ADC3
           endif

           Gosub ADC_OKU
           Delay 5 ' PWM frekansini belirleyen parametre
           goto Dongu

ADC_OKU: 
           ......
           ......
           ......
           ADC1=Okunan ADC1 kanali
           ADC2=Okunan ADC2 kanali
           ADC3=Okunan ADC3 kanali
           Return    


ADC okuma rutinini olabildigince kisa yazabilirsen ve Dongu icinden cikip zaman alici isler yapmazsan ise yarayabilecek(?) 3 ayri PWM alirsin.


(Degiskenleri sifirlamaya gerek duymadim.)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

teknikelektronikci

cevaplar icin tesekür ederim olayi yavas yavs kavramaya basladim  simdilik bana hasaslik lazim değilo yüzdne timer kesmesine gitmeyecem olayi gercek ortamda 3 pwm komutu ile deniyecem veya ayarlaabilirsem 2sini hpwm tekinide pwm ile verecem
bu arada @z hocam verdiigniz kodun mantigini pek anlamadim ama etkili gözüküyor sakin bir kafa ile anlamaa calisacam :) tekrar sayin @ete hocam ve @z hocam ilginize tesekür ederim kolay gelsin
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!