PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Led sáng dần (http://www.picvietnam.com/forum/showthread.php?t=13083)

ngdnhanbk 12-01-2012 01:45 AM

Led sáng dần
 
Mình viết hiệu ứng led sáng dần dùng chức năng PWM kết hợp timer0 và timer2 post lên cho mấy bạn tham khảo
Code:

#include <16F887.h>
#FUSES HS,NOWDT,NOPROTECT
#use delay(clock=4000000)
int16 value;
#INT_TIMER0
void ngattimer0()
{
int16 dem;
clear_interrupt(INT_TIMER0);
disable_interrupts(GLOBAL);
dem=dem+1;
if(dem==500)
  {value=value+100;
  if(value==1000)
      {value=0;
      }
  dem=0;
  }
set_timer0(0);
enable_interrupts(GLOBAL);
}
void main()
{
value=0;
output_high(PIN_C0);
output_low(PIN_C1);  // Set CCP2 output low
output_low(PIN_C2);  // Set CCP1 output low
setup_ccp1(CCP_PWM);  // Configure CCP1 as a PWM
setup_ccp2(CCP_PWM);  // Configure CCP2 as a PWM
setup_timer_2(T2_DIV_BY_4,255, 1);  // 1kHz   
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);               
set_timer0(0);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while(1)
{
set_pwm1_duty(value);             
set_pwm2_duty(value);
}
}

Mình chưa viết phần tắt dần, nhờ mấy bạn viết giúp
Ai có ý kiến gì hay thì bổ sung giúp nhé

phatcddt08a 12-01-2012 10:37 AM

Trích:

Nguyên văn bởi ngdnhanbk (Post 53781)
mình viết hiệu ứng led sáng dần dùng chức năng pwm kết hợp timer0 và timer2 post lên cho mấy bạn tham khảo
Code:

#include <16f887.h>
#fuses hs,nowdt,noprotect
#use delay(clock=4000000)
int16 value;
#int_timer0
void ngattimer0()
{
int16 dem;
clear_interrupt(int_timer0);
disable_interrupts(global);
dem=dem+1;
if(dem==500)
  {value=value+100;
  if(value==1000)
      {value=0;
      }
  dem=0;
  }
set_timer0(0);
enable_interrupts(global);
}
void main()
{
value=0;
output_high(pin_c0);
output_low(pin_c1);  // set ccp2 output low
output_low(pin_c2);  // set ccp1 output low
setup_ccp1(ccp_pwm);  // configure ccp1 as a pwm
setup_ccp2(ccp_pwm);  // configure ccp2 as a pwm
setup_timer_2(t2_div_by_4,255, 1);  // 1khz   
setup_timer_0(rtcc_internal|rtcc_div_4);               
set_timer0(0);
enable_interrupts(int_timer0);
enable_interrupts(global);
while(1)
{
set_pwm1_duty(value);             
set_pwm2_duty(value);
}
}

mình chưa viết phần tắt dần, nhờ mấy bạn viết giúp
ai có ý kiến gì hay thì bổ sung giúp nhé

cái này chắc chỉ có mạch thật mới mô phổng dc hình như protues thì không. Bạn làm như vậy tì chỉ có 2 chân c1 và c2 thế thì diều khiển dc 2 led thôi bạn .có kết nối thêm ic điều khiển dòng điện gì ko bạn. Nếu ko còn cách nào dể mở rộng số chân ko. Chắc phải dùng timer để làm pwm thì phải


Múi giờ GMT. Hiện tại là 12:31 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam