ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






کاربران برچسب زده شده

نمایش نتایج: از 1 به 3 از 3
  1. #1
    2017/04/13
    64
    16

    مشکل در برنامه ِDFplayer mini (زبان c )

    داشتم یه mp3 player با DFplayer mini و یه ATmega32a و یه lcd 16*2 کاراکتری درست میکردم . همه چی خوب پیش رفت تا اینکه به مدار کلید های next track و previous track رو اضافه کردم و اینکار هم با موفقیت انجام شد اما زمانی که خواستم از پایه busy ماژول استفاده کنم و اونو به وقفه خارجی 1 دادم مشکلاتی شروع شد

    مشکل اینجاست که در حالی که مدار داره فایل های صوتی mp3 شماره 1 تا 11 رو که روی میکرو اس دی ریخته شده رو به ترتیب اجرا میکنه (با استفاده از پایه busy و int1 میکرو ) اگر از کلیدهای next یا previous استفاده کنم عدد track که روی lcd نمایش داده میشه به سرعت کم یا زیاد میشه و اینکار مرتب ادامه پیدا میکنه (اگر از کلیدهای دیگر مدار استفاده کنم مشکلی پیش نمیاد یعنی صدا کم و زیاد میشه و اکولایزر هم تغییر میکنه)
    به نظر میاد که مدار مرتب اینتراپت میخوره ... این در حالیه که وقتی وقفه سراسری رو غیر فعال میکنم مدار کاملا درست کار میکنه و کلید های next و previous کاملا درست کار میکنن
    و همونطور که در برنامه هم می بینید سعی کردم با غیر فعال کردن موقت وقفه سراسری و پرچم وقفه 1 جلو این موضوع رو بگیرم که نشد .

    پایه های مدار :
    portc.0 = LED
    portc.1 = next track
    portc.2 = previous track
    portc.3 = change_equalizer
    portc.6 = increase_volume
    portc.7 = decrease_volume
    portd.0 = txd
    portd.1 = rxd
    portd.3 = busy

    lcd کاراکتری به پورت b وصل شده
    و اینتراپت 1 در لبه بالارونده تنظیم شده و بین پایه int1 و busy یک مقاومت 10k گذاشتم


    برنامه :
    [FONT=Yekan]/*[/FONT]Project : 

    #include <mega32a.h>
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>
    #include <stdlib.h>


    int default_buffer[8] = {0x7E , 0xFF , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 , 0xEF}; // Default Buffer
    int buffer_data[8] = {0x7E , 0xFF , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 , 0xEF}; // Sending Buffer
    int vol=30;
    int eq=0;
    int track_number=1;


    void send_buffer(void) {
    int i;
    for( i=0; i< 8; i++){
    putchar(buffer_data[i]);
    buffer_data[i] = default_buffer[i];
    }
    }


    void play(void){
    buffer_data[3] = 0x0D;
    send_buffer();
    }


    void stop(void){
    buffer_data[3] = 0x16;
    send_buffer();
    }


    void pause(void){
    buffer_data[3] = 0x0E;
    send_buffer();
    }


    void play_next(void){
    track_number++;
    if (track_number>11){track_number=1;};
    buffer_data[3] = 0x01;
    send_buffer();
    delay_ms(10);
    //GIFR=(1<<INTF1);
    }


    void play_pre(void){
    track_number--;
    if (track_number<1){track_number=11;};
    buffer_data[3] = 0x02;
    send_buffer();
    delay_ms(10);
    //GIFR=(1<<INTF1);
    }


    void set_volume( int volume ) {
    buffer_data[3] = 0x06;
    buffer_data[6] = volume;
    send_buffer();
    }


    void increase_volume(void) {
    vol++;
    if (vol>30){vol=30;}
    buffer_data[3] = 0x06;
    buffer_data[6] = vol;
    send_buffer();

    }


    void decrease_volume(void) {
    vol--;
    if (vol<0){vol=0;}
    buffer_data[3] = 0x06;
    buffer_data[6] = vol;
    send_buffer();
    }


    void play_track(int track_id) {
    buffer_data[3] = 0x03;
    if(track_id < 256) {
    buffer_data[6] = track_id;
    } else {
    buffer_data[5] = track_id / 256;
    buffer_data[6] = track_id - 256 * buffer_data[6];
    }
    send_buffer();
    }


    void change_eq(void){
    eq++;
    if (eq>5){eq=0;}
    buffer_data[3] = 0x07;
    buffer_data[6] = eq;
    send_buffer();

    }


    void blinking_led(void){
    PORTC = (1<<PORTC.0);
    delay_ms(100);
    PORTC = (0<<PORTC.0);
    delay_ms(100);
    }






    void show_lcd(void){
    char buffer[16];
    lcd_gotoxy(7,0);
    lcd_puts(" ");
    sprintf(buffer,"Track %d",track_number);
    lcd_gotoxy(0,0);
    lcd_puts(buffer);
    sprintf(buffer,"Eq %d",eq);
    lcd_gotoxy(12,0);
    lcd_puts(buffer);
    lcd_gotoxy(8,1);
    lcd_puts(" ");
    sprintf(buffer,"Volume %d",vol);
    lcd_gotoxy(0,1);
    lcd_puts(buffer);
    delay_ms(5);


    }


    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    track_number++;
    if (track_number>11){track_number=1;}
    play_track(track_number);
    delay_ms(100);
    play();
    show_lcd();


    }






    void main(void)
    {
    delay_ms(1500);
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);


    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Rising Edge
    // INT1: Off
    // INT2: Off
    GICR|=(1<<INT1) | (0<<INT0) | (0<<INT2);
    MCUCR=(1<<ISC11) | (1<<ISC10) | (0<<ISC01) | (0<<ISC00);
    MCUCSR=(0<<ISC2);
    GIFR=(1<<INTF1) | (0<<INTF0) | (0<<INTF2);
    #asm("sei")


    DDRD = (1<<DDD1);
    PORTD = (1<<PORTD.0)|(1<<PORTD.1);
    DDRC = (1<<DDC0)|(0<<DDC1)|(0<<DDC2)|(0<<DDC3)|(0<<DDC6)|(0<<DDC7);
    PORTC = 0b11001110;
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    //////////////////////////// play track 1
    delay_ms(100);
    buffer_data[3] = 0x06;
    buffer_data[6] = vol;
    send_buffer();
    play_track(track_number);
    delay_ms(100);
    play();

    lcd_init(16);
    lcd_clear();
    show_lcd();




    while (1)
    {

    if (PINC.1==1){
    //#asm("cli")
    play_next();
    blinking_led();
    show_lcd();
    //#asm("sei")
    }

    if (PINC.2==1){
    //#asm("cli")
    play_pre();
    blinking_led();
    show_lcd();
    //#asm("sei")
    }

    if (PINC.3==1){
    change_eq();
    blinking_led();
    show_lcd();
    }

    if (PINC.6==1){
    increase_volume();
    blinking_led();
    show_lcd();
    }

    if (PINC.7==1){
    decrease_volume();
    blinking_led();
    show_lcd();
    }


    }




    }




    [FONT=Yekan] [/FONT]
    ویرایش توسط test001 : 2019/08/25 در ساعت 23:46
  2. #2
    2017/04/13
    64
    16

    پاسخ : مشکل در برنامه ِDFplayer mini (زبان c )

    فهمیدم چطوری درست میشه
    اولا باید قبل از فرمان next یا previous یک stop صادر کنیم و تاخیر هم بدیم وضمنا باید وقفه های سراسری رو بصورت موقت و پرچم وقفه int1 رو پاک کنیم در نتیجه برنامه بصورت زیر درست عمل میکنه :

    [FONT=Yekan]#include <mega32a.h>  [/FONT]
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>
    #include <stdlib.h>


    int default_buffer[8] = {0x7E , 0xFF , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 , 0xEF}; // Default Buffer
    int buffer_data[8] = {0x7E , 0xFF , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 , 0xEF}; // Sending Buffer
    int vol=30;
    int eq=0;
    int track_number=1;


    void send_buffer(void) {
    int i;
    for( i=0; i< 8; i++){
    putchar(buffer_data[i]);
    buffer_data[i] = default_buffer[i];
    }
    }


    void play(void){
    buffer_data[3] = 0x0D;
    send_buffer();
    }


    void stop(void){
    buffer_data[3] = 0x16;
    send_buffer();
    }


    void pause(void){
    buffer_data[3] = 0x0E;
    send_buffer();
    }


    void play_next(void){
    track_number++;
    if (track_number>11){track_number=1;};
    buffer_data[3] = 0x01;
    send_buffer();

    }


    void play_pre(void){
    track_number--;
    if (track_number<1){track_number=11;};
    buffer_data[3] = 0x02;
    send_buffer();

    }


    void set_volume( int volume ) {
    buffer_data[3] = 0x06;
    buffer_data[6] = volume;
    send_buffer();
    }


    void increase_volume(void) {
    vol++;
    if (vol>30){vol=30;}
    buffer_data[3] = 0x06;
    buffer_data[6] = vol;
    send_buffer();

    }


    void decrease_volume(void) {
    vol--;
    if (vol<0){vol=0;}
    buffer_data[3] = 0x06;
    buffer_data[6] = vol;
    send_buffer();
    }


    void play_track(int track_id) {
    buffer_data[3] = 0x03;
    if(track_id < 256) {
    buffer_data[6] = track_id;
    } else {
    buffer_data[5] = track_id / 256;
    buffer_data[6] = track_id - 256 * buffer_data[6];
    }
    send_buffer();
    }


    void change_eq(void){
    eq++;
    if (eq>5){eq=0;}
    buffer_data[3] = 0x07;
    buffer_data[6] = eq;
    send_buffer();

    }


    void blinking_led(void){
    PORTC = (1<<PORTC.0);
    delay_ms(100);
    PORTC = (0<<PORTC.0);
    delay_ms(100);
    }






    void show_lcd(void){
    char buffer[16];
    lcd_gotoxy(7,0);
    lcd_puts(" ");
    sprintf(buffer,"Track %d",track_number);
    lcd_gotoxy(0,0);
    lcd_puts(buffer);
    sprintf(buffer,"Eq %d",eq);
    lcd_gotoxy(12,0);
    lcd_puts(buffer);
    lcd_gotoxy(8,1);
    lcd_puts(" ");
    sprintf(buffer,"Volume %d",vol);
    lcd_gotoxy(0,1);
    lcd_puts(buffer);
    delay_ms(5);


    }


    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    track_number++;
    if (track_number>11){track_number=1;}
    play_track(track_number);
    delay_ms(100);
    play();
    show_lcd();


    }






    void main(void)
    {
    delay_ms(1500);
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);


    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Rising Edge
    // INT1: Off
    // INT2: Off
    GICR|=(1<<INT1) | (0<<INT0) | (0<<INT2);
    MCUCR=(1<<ISC11) | (1<<ISC10) | (0<<ISC01) | (0<<ISC00);
    MCUCSR=(0<<ISC2);
    GIFR=(1<<INTF1) | (0<<INTF0) | (0<<INTF2);
    #asm("sei")


    DDRD = (1<<DDD1);
    PORTD = (1<<PORTD.0)|(1<<PORTD.1);
    DDRC = (1<<DDC0)|(0<<DDC1)|(0<<DDC2)|(0<<DDC3)|(0<<DDC6)|(0<<DDC7);
    PORTC = 0b11001110;
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    //////////////////////////// play track 1
    delay_ms(100);
    buffer_data[3] = 0x06;
    buffer_data[6] = vol;
    send_buffer();
    play_track(track_number);
    delay_ms(100);
    play();

    lcd_init(16);
    lcd_clear();
    show_lcd();




    while (1)
    {

    if (PINC.1==1){
    #asm("cli")
    stop();
    delay_ms(100);
    play_next();
    blinking_led();
    show_lcd();
    GIFR=(1<<INTF1);
    #asm("sei")
    }

    if (PINC.2==1){
    #asm("cli")
    stop();
    delay_ms(100);
    play_pre();
    blinking_led();
    show_lcd();
    GIFR=(1<<INTF1);
    #asm("sei")
    }

    if (PINC.3==1){
    change_eq();
    blinking_led();
    show_lcd();
    }

    if (PINC.6==1){
    increase_volume();
    blinking_led();
    show_lcd();
    }

    if (PINC.7==1){
    decrease_volume();
    blinking_led();
    show_lcd();
    }


    }




    }




    [FONT=Yekan] [/FONT]
  3. #3
    2017/04/13
    64
    16

    پاسخ : مشکل در برنامه ِDFplayer mini (زبان c )

    دوستان بزرگوار اگر در برنامه اشکالی می بینید لطفا بهم گوشزد کنید چون من در زبان c کاملا مبتدی هستم
نمایش نتایج: از 1 به 3 از 3

موضوعات مشابه

  1. کپی برنامه روی wemos D1 mini
    توسط saeid_k68 در انجمن اینترنت اشیا - IOT
    پاسخ: 3
    آخرين نوشته: 2018/09/22, 09:50
  2. مشکل در برنامه(زبان بیسیک)
    توسط Mohammad elec در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2016/01/05, 01:17
  3. مشکل در برنامه نوشته شده به زبان C
    توسط i4man12 در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2012/06/02, 08:19
  4. مشکل در برنامه نویسی به زبان بیسیک
    توسط mohammadjavid2 در انجمن برنامه نویسی و اینترفیس
    پاسخ: 2
    آخرين نوشته: 2012/04/11, 21:09
  5. مشکل اين برنامه (زبان c و codevision)
    توسط M3R-E در انجمن میکروکنترلرهای AVR
    پاسخ: 11
    آخرين نوشته: 2010/07/16, 00:36

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •