PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cảm biến (http://www.picvietnam.com/forum/forumdisplay.php?f=18)
-   -   Dùng PIC6F877A phát 1 vài bản nhạc. (http://www.picvietnam.com/forum/showthread.php?t=4968)

thuyhutfet88 20-09-2009 01:32 PM

Dùng PIC6F877A phát 1 vài bản nhạc.
 
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

Trích:

Nguyên văn bởi thuyhutfet88 (Post 29673)
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

Trích:

Nguyên văn bởi thuyhutfet88 (Post 29678)
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

Trích:

Nguyên văn bởi ganbaregenki (Post 29760)
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


Múi giờ GMT. Hiện tại là 07:47 PM.

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