View Single Post
Old 16-05-2012, 06:15 PM   #1
tqhoan15288
Nhập môn đệ tử
 
Tham gia ngày: May 2012
Bài gửi: 3
:
Điều chỉnh độ sáng LED

Xin chào các bạn,
Mình đang làm 1 bài đkhiển độ sáng của LED giao tiếp với máy tính dùng PIC 16f877a và VB6.
Mình đã thử làm bật tắt đèn, chạy rất tốt nhưng đến phần này thì ko hiểu sao LED ko sáng.
Mình xin trình bày sơ qua code của mình :
Trên VB tạo 1 thanh Hscroll, dựa vào giá trị của thanh bar này mình sẽ truyền về PIC và dùng PWM để thay đổi độ sáng của LED.
Theo mình hiểu thì truyền dữ liệu từ PC xuống PIC sẽ là 1 string, sau đấy dùng hàm atoi() để chuyển sang Interger rồi set vào duty của PWM. Mình viết code theo ý tưởng đấy nhưng ko làm sao làm đc. Mong các bạn giúp đỡ.
Mình gửi code đính kèm.
#include <16f877a.h>
#device 16f877a*16ADC=10
#include <DEFS_16F877A.h>
#include<stdlib.h>
#fuses nowdt,nolvp,noprotect,xt,put
#use delay(clock=20000000)
#use fast_io(b)


#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
int1 rcv_done=0;
int8 value_integer=0;
int8 value=0;
char save_data[5];
int1 thong_bao=0;
#int_RDA // Ngat khi nhan du lieu tu ben ngoai
void int_rda_is()
{
char data;

int index;
int1 bien_nhan=0;

data=getc();
//putc(data);
// nhan data tu PC tung ki tu mot
switch (data)
{
case '*' :
rb6=0;
break;
case '^':
rb6=1;
break;
}
if (data=='$')
{

bien_nhan=1;
}
else if (data=='%')
{
bien_nhan=0;
}
else if (bien_nhan==1)
{
save_data[index]=data;
index++;
}

if (bien_nhan==0)
{

value_integer=atoi(save_data);

value=(value_integer*10);

}
}
void main()
{
enable_interrupts(int_rda);
enable_interrupts(global);
set_tris_B(0);
portb=0;


setup_ccp1(CCP_PWM);
setup_timer_2(t2_div_by_16,154,1);

while(1)
{
set_pwm1_duty(value);
}
}
File Kèm Theo
File Type: rar PIC.rar (22.7 KB, 22 lần tải)
File Type: rar Visual basic.rar (7.8 KB, 23 lần tải)
tqhoan15288 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn