100 hertz üretmek LÜTFEN YARDIM

Başlatan Hattusa, 20 Aralık 2009, 12:12:45

Hattusa

s.a.
ustalarım ben 16F876A ile stabil bir 100 Herzt üretmek istiyorum. 4Mhz kristal kullanarak, eğer yapabilirsem ürettiğim bu frekansın dolu-boş oranı ile de buton kullanarak değiştirmek istiyorum. açıkcası ben bu konuda oldukça yeniyim. (sağolsun muhittin kaplan hocanın derslerinden öğrendim çok az proton kullanmayı)
şimdi aşağıda ki kodlarla oynayarak ben nasıl 100 hertz üretebilirim. mevcut frekans 256 hertz civarı, devrede cd4017 gibi frekans bölücü kullanmadan yapmak istiyorum. lütfen yardım edin.
işte dosyam bu;
Alıntı Yap
Device = 16F876A
XTAL = 4
Config XT_OSC,WDT_OFF,PWRTE_ON,BODEN_OFF,CP_OFF,CPD_OFF,LVP_OFF

Declare LCD_TYPE = 0        
Declare   LCD_DTPIN      PORTB.4
Declare   LCD_RSPIN      PORTB.2
Declare   LCD_ENPIN      PORTB.3
Declare LCD_LINES      2
Declare LCD_INTERFACE   4

Declare ADIN_RES 10       ' 10-bit result required
Declare ADIN_TAD 32_FOSC  ' AD conversion clock
Declare ADIN_STIME 20     ' 20us AD sample time

CCP1_PIN = PORTC.2
TRISB=%00000000
TRISC=%00000000

loop:

HPWM 1 ,127,250

GoTo loop
End
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

ete

4 MHz de üretilebilecek en düşük PWM sinyali 244 Hz dir. 100 Hz üretebilmek için 1 MHz kristal kullanmanız gerekir. Böylece en düşük sinyal seviyeniz 61 Hz ye düşer ve sizde aynı komutu kullanarak rahatlıkla 100 Hz üretebilirsiniz.

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

teknikelektronikci

veya şöylede olabilirmi?
100 Hz 10ms lik peryoddur T=1/T
10ms lik on off yapcak şekilde kesme oluşturulur aradaki pause (dleayms) ile değiştirerek de d.c ayarlanır yanılıormuyum ete hocam
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

T=1/100=10 ms lik peryot LOW+HIGH süresini kapsar. %50 duty uygulayabilmen için her 5 ms  de bir kesme oluşturursan olur.
Her kesmede çıkışı toggle gibi yön değiştireceksin.
Yalnız komut gecikmelerini dikkate alman gerekir. Belkide her 5 ms değilde 4 ms debir kesm oluşturmak daha uygun gelebilir. Aradaki fark  birkaç NOP ilave edilerek giderilebilir.

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

Hattusa

Alıntı yapılan: "ete"T=1/100=10 ms lik peryot LOW+HIGH süresini kapsar. %50 duty uygulayabilmen için her 5 ms  de bir kesme oluşturursan olur.
Her kesmede çıkışı toggle gibi yön değiştireceksin.
Yalnız komut gecikmelerini dikkate alman gerekir. Belkide her 5 ms değilde 4 ms debir kesm oluşturmak daha uygun gelebilir. Aradaki fark  birkaç NOP ilave edilerek giderilebilir.

Ete

ete hocam bununla ilgili bir örnek verebilirmisiniz? basitce yapılmış, birde üreteceğim bu frekans stabil olabilecekmi?
ilginiz için teşekkür ederim.
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

ete

Örnek çok basit bir şey aslında. Aşağıdaki program bu işi yapıyor. Simulasyonda baktım frekans 100 hz dolayında ve bayağıda stabil.

Ete

'****************************************************************
'*  Name    : PWM-100Hz.BAS                                      *
'*  Author  : [ETE]                                  *
'*  Notice  : Copyright (c) 2009 [E.T.E]                        *
'*          : All Rights Reserved                               *
'*  Date    : 3/2/2007                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
define osc 4
PORTA=0:portb=0
TRISB=0
TRISA=0  '
'-----------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628                                
@ DEVICE pic16F628, WDT_OFF              	'Watch Dog timer kapalı
@ DEVICE pic16F628, PWRT_ON             	'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF          'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_off           	 'MCLR pini kullanılmıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
'-----------------------------------------------------------------
'-------------------------------------------------------------------------
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%00000101   'Pull up dirençleri İPTAL- Bölme oranı 1/64
INTCON=%10100000  'Kesmeler aktif ve TMR0 kesmesi aktif

CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'----------------------------------------------------------------------------

PAUSE 200
TMR0=99

'-----------------------------------------------------------------------------

BASLA:

'bu araya varsa diğer program komutları yerleştirilebilir.
goto basla

DISABLE
KESME: 

      toggle PORTB.0 'bura abaşka bir pin de koyulabilir. PWM çıkışı oradan olur.
      TMR0=99
      INTCON.2=0        'TMR0 Kesme bayrağı sıfırlanıyor
      RESUME
      ENABLE
      
END
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com