pcbway

12f675 pwm kontrol devresi probasic yerine ccs c olarak yazılması

Başlatan i3uz, 07 Mart 2016, 14:20:03

i3uz

Arkadaşlar merhaba, 12f675 mikro işlemci ile bir türlü ccs de yazılan dimmer devresi bulamadım. örnek olarak picbasicpro ile yazılın versiyonun buldum.. 16f628a da CCP1 çıkışı yar ama bunda pwm çıkışı yok. dolasıyla 16f628a daki kodları bu pic için dönüştüremedim bunda farklı bir sistem var sanırım.. verilen örnek şemanın ccs c deki karşılı nasıldır. şimdiden teşekkürler.



Devrenin PicBasicPro ile yazılmış program kodları:


@ DEVICE pic12F675 'işlemci 16F628
@ DEVICE pic12F675, WDT_ON              'Watch Dog timer açık
@ DEVICE pic12F675, PWRT_ON             'Power on timer açık
@ DEVICE pic12F675, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic12F675, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak

DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor

DEFINE OSC 4

DEFINE ADC_BITS 10    ' ADCIN resolution  (Bits)
DEFINE ADC_SAMPLEUS 10 ' ADC sampling time (uSec)

CMCON = 7
ANSEL = %00010011
ADCON0=%10000000
GPIO=0
TRISIO=%00000001
WPU=0

HAM    VAR WORD
SYMBOL CIKIS=GPIO.5
GOSUB ADCAL
PAUSE 200

BASLA:
    gosub adcal
    PWM CIKIS,HAM,3
    GOTO BASLA

ADCAL:
      ADCIN 0,HAM
      RETURN</pre>


Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME

i3uz

Arkadaşlar bu 12F675 ile bir ccs c de yazılmış bir pwm uygulaması bulamadım. hep başka şekilde yazılımlar var. bir örnek verebilirseniz sevinirim saygılar.
Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME

toyer

işlemci üzerinde pwm modülü yok. manuel olarak kodla pwm oluşturmanız gerekiyor.

i3uz

ewet zaten algılayamadım nokta o. manuel pwm nasıl oluşturuyor . bu arada bende araştırayım. teşekkürler.
Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME

toyer

timer interruptlarını kullanın.
timer interruptları ile micro saniye oluşturma mesela. atıyorum 50 kHz lik bir sinyal için 20 micro saniye saydırın gibi. araştırın biraz

yunus6127

Ben 16F877a göre PWM oluşturdum. Buna bakarak faydalanabilirsin.


#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli

int i=65; // Tamsayı tipinde değişken tanımlanıyor

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı

   set_tris_a(0x03);   // RA0 ve RA1 pinleri giriş
   set_tris_c(0x00);   // C portu komple çıkış

   setup_ccp1(CCP_PWM);  // CCP1 birimi PWM çıkışı için ayarlandı

   setup_timer_2(T2_DIV_BY_16,i,1); // Timer2 ayarları yapılıyor

   set_pwm1_duty(50); // PWM1 çıkışı görev saykılı belirleniyor

   while(1) // Sonsuz döngü
   {
      if (input(pin_a0)) // Eğer RA1 girişine bağlı butona basılırsa
      {
         delay_ms(20);         // Buton arkı önleme gecikmesi
         while(input(pin_a0)); // Basılı butondan el çekile kadar bekle
         i+=5; // i=i+5 anlamındadır.

         if (i>250) // i değeri 250'dan büyükse i değeri 250 olsun
            i=250;
         setup_timer_2(T2_DIV_BY_16,i,1); // Timer2 ayarları yapılıyor
      }

      if (input(pin_a1)) // Eğer RA0 girişine bağlı butona basılırsa
      {
         delay_ms(20);         // Buton arkı önleme gecikmesi
         while(input(pin_a1)); // Basılı butondan el çekile kadar bekle
         i-=5;  // i=i-5 anlamındadır.

         if (i<65) // i değeri 65'den küçük ise i değeri 65 olsun
            i=65;
         setup_timer_2(T2_DIV_BY_16,i,1); // Timer2 ayarları yapılıyor
      }
   }
}

i3uz

arkadaşım teşşekürler.kodlar için . ama pwm modulu olmayan 12f675 ile nasıl sahte pwm nasıl uygulayabiliriz diye sormuştum.
Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME

gevv

http://www.picproje.org/index.php?topic=38291.0

#include <12F675.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOBROWNOUT               //No brownout reset
#fuses NOMCLR
#use delay(int=4000000)

int alcak= 100 ;
int16 i ;
int carpan= 400 ;

void main()
{
setup_adc_ports( NO_ANALOGS );
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
output_A(0x00) ;

while(i<1000)
{
for(i=0; i<1000; i++)
{

output_high(pin_a1) ;
delay_us(i) ;
output_low(pin_a1) ;
delay_us(1000-i) ;
output_high(pin_a1) ;
}
}
}


anahtar: ccs c software pwm 12F675  https://www.google.com.tr/search?q=ccs+c+visual++pwm&ie=utf-8&oe=utf-8&gws_rd=cr&ei=-ZgCV7jTDOTv6QTV4aiIDw#q=ccs+c+software+pwm+12F675

i3uz

Alıntı yapılan: gevv - 04 Nisan 2016, 19:44:50http://www.picproje.org/index.php?topic=38291.0

#include <12F675.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOBROWNOUT               //No brownout reset
#fuses NOMCLR
#use delay(int=4000000)

int alcak= 100 ;
int16 i ;
int carpan= 400 ;

void main()
{
setup_adc_ports( NO_ANALOGS );
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
output_A(0x00) ;

while(i<1000)
{
for(i=0; i<1000; i++)
{

output_high(pin_a1) ;
delay_us(i) ;
output_low(pin_a1) ;
delay_us(1000-i) ;
output_high(pin_a1) ;
}
}
}


anahtar: ccs c software pwm 12F675  https://www.google.com.tr/search?q=ccs+c+visual++pwm&ie=utf-8&oe=utf-8&gws_rd=cr&ei=-ZgCV7jTDOTv6QTV4aiIDw#q=ccs+c+software+pwm+12F675


yardım için teşekkürlerr . kodlara baktımda şimdi başka konuda bu olayı merak ettmiştim. adam söndürüp acarak pwm yapmışşş.. yıllar önce bu piclere hiç bulaşmamıştım keşke yıllar önce ögrenseydim...
Teori gerçek verileri vermez, pratikte yaptıkların doğru verilerdir.
Tanrı Türk'ü korusun
        TA1OME