PDA

View Full Version : Dùng PIC6F877A phát 1 vài bản nhạc.


thuyhutfet88
20-09-2009, 01:32 PM
Chào mọi nguời!
Mình đang làm về 1 vấn đề như sau:
Mình muốn dùng PIC 16F877A để phát 1 vài bản nhạc không lời.Romantic... chẳng hạn.Mình cũng nghĩ là phải dùng CCP để điều chế xung PWM.Nhưng mình chưa có hướng làm cụ thể và còn 1 số chỗ chưa hiểu.Cụ thể như phát các nốt nhạc khác nhau là có tần số khác nhau.Nhưng nếu chỉ thay đổi độ rộng xung thì tần số phát là ko đổi.Ai đã từng làm về vấn đề này cho mình hỏi thêm là mình có thể luôn để độ rộng xung là 1/2 chu kì xung mà chỉ thay đổi tần số phát dc ko vậy?Mong nhận được các cao kiến từ mọi người!

phamquang_hung
20-09-2009, 10:19 PM
Chào mọi nguời!
Mình đang làm về 1 vấn đề như sau:
Mình muốn dùng PIC 16F877A để phát 1 vài bản nhạc không lời.Romantic... chẳng hạn.Mình cũng nghĩ là phải dùng CCP để điều chế xung PWM.Nhưng mình chưa có hướng làm cụ thể và còn 1 số chỗ chưa hiểu.Cụ thể như phát các nốt nhạc khác nhau là có tần số khác nhau.Nhưng nếu chỉ thay đổi độ rộng xung thì tần số phát là ko đổi.Ai đã từng làm về vấn đề này cho mình hỏi thêm là mình có thể luôn để độ rộng xung là 1/2 chu kì xung mà chỉ thay đổi tần số phát dc ko vậy?Mong nhận được các cao kiến từ mọi người!

bạn có thể dùng timer để điều chỉnh đầu ra của bất cứ 1 chân nào trên PIC,mình đã từng làm rồi,phát bài happy birthday, tần số của các nốt nhạc bạn có thể tham khảo trong sách cấu trúc máy tính của Nguyễn Tăng Cường.

thuyhutfet88
21-09-2009, 12:00 AM
uh!Cam on ban nhieu ha!

phamquang_hung
21-09-2009, 04:15 PM
uh!Cam on ban nhieu ha!

mình đã làm rồi, cả mạch thật nữa, nếu cần mình có thể share code cho bạn

#define c40 132 //dinh nghia cho tg
#define c41 62 //dinh nghia cho ck
#define d40 148 //may not nay moi chi viet duoc bai happy birtday
#define d41 55 //con nhung not viet bai khac se cap nhat sau
#define e40 174 //boi tac gia thuoc loai mu am nhac
#define e41 46 //nen khong doc duoc not nhac---thank
#define f40 166
#define f41 49
#define g40 196
#define g41 41
#define a40 220
#define a41 37
#define b4b0 232
#define b4b1 35
#define b40 247
#define b41 33


void not(int16 tg,int16 ck) //ck bien dat chu ky= (1/f)/30us/2
{ //tg=0.25xfx2
int16 y;y=0; //not nhac chi duoc phat trong 250ms
while(y!=tg) //muon keo dai thoi gian phat tang bien tg
{
while(count!=ck){} //tg phat con phu thuoc vao nhip dieu cua bai nhac
loa1=!loa1;count=0;++y; //nen phai dieu chinh tg cho hop ly
} //phai dat tg va ck 16bit de mo rong thoi gian
//va so luong tan so am co the phat duoc
loa1=0;delay_ms(5); //dat khoang lang 5ms
}
void nhac()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);//****BAT time0 DO CHIA TAN 2
set_timer0(237);
LCD_putcmd(clear_scr);//xoa man hinh
printf(LCD_putchar," HAPPY BIRTHDAY ");
LCD_putcmd(0xC0); //xuong hang2
printf(LCD_putchar," MY DARLING");
delay_ms(1000);
LCD_putcmd(clear_scr);
printf(LCD_putchar," HAP");
not(c40,c41);
printf(LCD_putchar,"PY ");
not(c40,c41);
printf(LCD_putchar,"BIRTH");
not(d40*2,d41);
printf(LCD_putchar,"DAY");
not(c40*2,c41);
LCD_putcmd(0xC0);
printf(LCD_putchar," TO ");
not(f40*2,f41);
printf(LCD_putchar,"YOU");
not(e40*4,e41);
LCD_putcmd(clear_scr);
printf(LCD_putchar," HAP");
not(c40,c41);
printf(LCD_putchar,"PY ");
not(c40,c41);
printf(LCD_putchar,"BIRTH");
not(d40*2,d41);
printf(LCD_putchar,"DAY");
not(c40*2,c41);
LCD_putcmd(0xC0);
printf(LCD_putchar," TO ");
not(g40*2,g41);
printf(LCD_putchar,"YOU");
not(f40*4,f41);
LCD_putcmd(clear_scr);
printf(LCD_putchar," HAP");
not(c40,c41);
printf(LCD_putchar,"PY ");
not(c40,c41);
printf(LCD_putchar,"BIRTH");
not(c40*2,c41);;
printf(LCD_putchar,"DAY");
not(a40*2,a41);
LCD_putcmd(0xC0);
printf(LCD_putchar," DEAR ");
not(f40*2,f41);
printf(LCD_putchar,"SO ");
not(e40*2,e41);
printf(LCD_putchar,"SO ");
not(d40*2,d41);
LCD_putcmd(clear_scr);
printf(LCD_putchar," HAP");
not(b4b0,b4b1);
printf(LCD_putchar,"PY ");
not(b4b0,b4b1);
printf(LCD_putchar,"BIRTH");
not(a40*2,a41);
printf(LCD_putchar,"DAY");
not(f40*2,f41);
LCD_putcmd(0xC0);
printf(LCD_putchar," TO ");
not(g40*2,g41);
printf(LCD_putchar,"YOU");
not(f40*4,f41);
LCD_putcmd(clear_scr);
}
thạch anh 20MHz

ferari
24-09-2009, 09:55 PM
hay thế nhỉ

ganbaregenki
25-09-2009, 12:07 AM
Mạch của nó thì sao???

phamquang_hung
01-10-2009, 02:39 AM
Mạch của nó thì sao???

LCD bạn nối đến 1 cổng! còn loa bạn có thể nối qua 1 con tranzito đến bất cứ chân nào của PIC tùy bạn chọn và định nghĩa