JL SoC, AC109N, AC209N, AC309N, AC410N, AC460N, AC690N, AC692N ETC…

ФОРУМ Микросхемы и Контроллеры JL SoC, AC109N, AC209N, AC309N, AC410N, AC460N, AC690N, AC692N ETC…

  • В этой теме 1,245 ответов, 31 участник, последнее обновление 1 месяц сделано BIOS.
Просмотр 15 сообщений - с 1 по 15 (из 1,246 всего)
  • Автор
    Сообщения
  • #1709
    BIOS
    Модератор
    1,226

    —————————————————RU——————————————————————
    Тема по системам на кристалле от Zhuhai Jieli Technology Co Ltd. Прошивки, софт, документация, реверс-инжиниринг, схемы, обсуждения, предложения. Для связи с со мной пишите на e-mail :  mail.scmc.tech@gmail.com
    ————————————————————————————————————————-
    —————————————————ENG—————————————————————-
    System-on-a-chip topic from Zhuhai Jieli Technology Co Ltd. Firmware, software, documentation, reverse engineering, diagrams, discussions, suggestions. To contact me, write to e-mail: mail.scmc.tech@gmail.com
    ————————————————————————————————————————

    Вложения:
    #1722
    Leks
    Участник
    266

    BIOS, без подробностей, односложно, для самых сообразительных типа меня:

    А можно ли будет менять прошивки модулей? А то жаль вот такую красоту заменять в мини муз центре (источник для УНЧ с АС)?

    Или это потребует самодельного программатора (сложный/нет).

    Специального софта.

     

    Вложения:
    #1733
    Сергей 78
    Модератор
    258

    Насколько знаю, вставляешь влешку с прошивкой и он прошивается через порт USB.

    #1737
    BIOS
    Модератор
    1,226

    А можно ли будет менять прошивки модулей? А то жаль вот такую красоту заменять в мини муз центре (источник для УНЧ с АС)? Или это потребует самодельного программатора (сложный/нет). Специального софта.

    Можно, при наличии правильной прошивки — можно прошиться 3 разными способами.

    1 — DFU  (USB, mSD)

    2 — UART

    3 — Boot Mode

    В первых двух пунктах — прошивальщик не нужен, главное правильная прошивка. А с этим проблемы, от банально — отключили DFU, до ключей — если ключи не совпадают — то ничего не будет обновляться. Но это все относиться к AC692- серии и выше. С AC690 таких проблем нет.

    Позже напишу что да как и закреплю в первом смс.

    А вот в 3 пункт, самый интересный, им можно скармливать разные прошивки.

    #1866
    BIOS
    Модератор
    1,226

    И всё таки я разобрался! За два вечера,  Удалось прикрутить обычный (не хитрый) семисегментник, не с 7 выводами, а с 12, 4 сегмента, с точками, и  двоеточием  между цифрами. Разобрался, как подключать с общим анодом, и с общим катодом) , увеличил яркость, осталось только со временем обновления поработать. Это не может не радовать)))

    Только сегмент G в последнем разряде пострадал в ходе отладки(((

     

    #1873
    BIOS
    Модератор
    1,226

    Код led7.c

    [spoiler]

    #include «ui/ui_api.h»

    #if UI_ENABLE

    #include «ui/ui_common.h»
    #include «ui/led/led7_drv.h»
    #include «fm_radio.h»
    #include «dec/decoder_phy.h»
    #include «music_ui.h»
    #include «music.h»
    #include «timer.h»
    #include «key_drv/key.h»
    #include «file_operate/file_op.h»
    //#include «play_file.h»
    #include «dac/dac.h»
    #include «rtc_setting.h»

    #if REC_EN
    #include «encode/encode.h»
    #endif

    LED7_VAR led7_var;

    const u8 LED_NUMBER[10] =
    {
    /*0*/
    (u8)(LED_A | LED_B | LED_C | LED_D | LED_E | LED_F),
    /*1*/
    (u8)(LED_B | LED_C),
    /*2*/
    (u8)(LED_A | LED_B | LED_D | LED_E | LED_G),
    /*3*/
    (u8)(LED_A | LED_B | LED_C | LED_D | LED_G),
    /*4*/
    (u8)(LED_B | LED_C | LED_F | LED_G),
    /*5*/
    (u8)(LED_A | LED_C | LED_D | LED_F | LED_G),
    /*6*/
    (u8)(LED_A | LED_C | LED_D | LED_E | LED_F | LED_G),
    /*7*/
    (u8)(LED_A | LED_B | LED_C),
    /*8*/
    (u8)(LED_A | LED_B | LED_C | LED_D | LED_E | LED_F | LED_G),
    /*9*/
    (u8)(LED_A | LED_B | LED_C | LED_D | LED_F | LED_G),
    };

    const u8 LED_LARGE_LETTER[26] =
    {
    0x77,0x40,0x39,0x3f,0x79,///<ABCDE
    0x71,0x40,0x76,0x06,0x40,///<FGHIJ
    0x40,0x38,0x40,0x37,0x3f,///<KLMNO
    0x73,0x40,0x50,0x6d,0x78,///<PQRST
    0x3e,0x3e,0x40,0x76,0x40,///<UVWXY
    0x40///<Z
    };

    const u8 LED_SMALL_LETTER[26] =
    {
    0x77,0x7c,0x58,0x5e,0x79,///<abcde
    0x71,0x40,0x40,0x40,0x40,///<fghij
    0x40,0x38,0x40,0x54,0x5c,///<klmno
    0x73,0x67,0x50,0x40,0x78,///<pqrst
    0x3e,0x3e,0x40,0x40,0x40,///<uvwxy
    0x40///<z
    };

    /***********新7段数码管真值表**************/
    /* 0 1 2 3 4 5 6
    0 X 2A 2B 2C 2D 2E 2F
    1 1A X 2G : . MHz MP3
    2 1B X X 4A 4B 4C 4D
    3 1C PLAY 3A X 4E 4F 4G
    4 1D PAUSE 3B 3E X X X
    5 1E USB 3C 3F X X X
    6 1F SD 3D 3G X X X
    */
    const u8 led_7[36][2] = ///< 新7断数码管转换表
    ///A C///
    {
    {4,0},//1A
    {5,0},//1B
    {6,0},//1C
    {7,0},//1D
    {8,0},//1E
    {9,0},//1F
    {10,0},//1G

    {4,1},//2A
    {5,1},//2B
    {6,1},//2C
    {7,1},//2D
    {8,1},//2E
    {9,1},//2F
    {10,1},//2G

    {4,2},//3A
    {5,2},//3B
    {6,2},//3C
    {7,2},//3D
    {8,2},//3E
    {9,2},//3F
    {10,2},//3G

    {4,3},//4A
    {5,3},//4B
    {6,3},//4C
    {7,3},//4D
    {8,3},//4E
    {9,3},//4F
    {10,3},//4G

    {0,0},//LED_PLAY A
    {0,0},//LED_PAUSE B
    {0,0},//LED_USB C
    {0,0},//SD D
    {12,1},//: E
    {0,0},//MHz F
    {0,0},//. G
    {0,0},//MP3 H
    };

    //按位于 查表
    const u8 bit_table[8] =
    {
    0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
    };

    const u8 playmodestr[][5] =
    {
    » ALL»,
    » dev»,
    «Fold»,
    » ONE»,
    » rAn»,
    };

    const u8 menu_string[][5] =
    {
    » HI «,
    «boot»,
    » bt «,
    » PC «,
    » UP «,
    » dN «,
    » AUX»,
    «-AL-»
    };
    const u8 other_string[][5]=
    {
    «Eq «,
    «V «,
    «P «,
    » NOP»,
    » rec»,
    };

    /*—————————————————————————-*/
    /**@brief Music模式 设备显示
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_dev(void)
    */
    /*—————————————————————————-*/
    void led7_show_dev(u8 dev)
    {
    // /*Music Device type*/
    /* MUSIC_DIS_VAR *music_var; */
    /* music_var = (MUSIC_DIS_VAR*)UI_var.ui_buf_adr; */

    /* if(music_var) */
    {
    if((dev == SD0_DEVICE)||(dev == SD1_DEVICE))
    {
    LED_STATUS |= LED_SD;
    }
    else if(dev == USB_DEVICE)
    {
    LED_STATUS |= LED_USB;
    }
    }
    }

    /*—————————————————————————-*/
    /**@brief led7_drv 状态位缓存清除函数
    @param void
    @return void
    @author Change.tsai
    @note void led7_clear_icon(void)
    */
    /*—————————————————————————-*/
    void led7_clear_icon(void)
    {
    led7_var.bFlashChar = 0;
    led7_var.bFlashIcon = 0;
    led7_var.bShowBuff[4] = 0;
    }

    /*—————————————————————————-*/
    /**@brief led7_drv 显示坐标设置
    @param x:显示横坐标
    @return void
    @author Change.tsai
    @note void led7_setX(u8 X)
    */
    /*—————————————————————————-*/
    void led7_setX(u8 X)
    {
    led7_var.bCoordinateX = X;
    }

    /*—————————————————————————-*/
    /**@brief LED 清屏函数
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_null(void)
    */
    /*—————————————————————————-*/
    void led7_show_null(void)
    {
    led7_clear_icon();
    led7_var.bShowBuff[0] = 0;
    led7_var.bShowBuff[1] = 0;
    led7_var.bShowBuff[2] = 0;
    led7_var.bShowBuff[3] = 0;
    }

    /*—————————————————————————-*/
    /**@brief led7_drv 扫描函数
    @param void
    @return void
    @author Change.tsai
    @note void led7_init(void)
    */
    /*—————————————————————————-*/
    void led7_init(void)
    {
    led7_clear();
    s32 ret;
    ret = timer_reg_isr_fun(timer0_hl,1,led7_scan,NULL);
    if(ret != TIMER_NO_ERR)
    {
    printf(«led7_scan err = %x\n»,ret);
    }
    }

    /*—————————————————————————-*/
    /**@brief led7_drv 单个字符显示函数
    @param chardata:显示字符
    @return void
    @author Change.tsai
    @note void led7_show_char(u8 chardata)
    */
    /*—————————————————————————-*/
    void led7_show_char(u8 chardata)
    {
    //必须保证传入的参数符合范围,程序不作判断
    //if ((chardata < ‘ ‘) || (chardata > ‘~’) || (led7_var.bCoordinateX > 4))
    //{
    // return;
    //}
    if ((chardata >= ‘0’) && (chardata <= ‘9’))
    {
    led7_var.bShowBuff[led7_var.bCoordinateX++] = LED_NUMBER[chardata — ‘0’];
    }
    else if ((chardata >= ‘a’) && (chardata <= ‘z’))
    {
    led7_var.bShowBuff[led7_var.bCoordinateX++] = LED_SMALL_LETTER[chardata — ‘a’];
    }
    else if ((chardata >= ‘A’) && (chardata <= ‘Z’))
    {
    led7_var.bShowBuff[led7_var.bCoordinateX++] = LED_LARGE_LETTER[chardata — ‘A’];
    }
    else if (chardata == ‘:’)
    {
    LED_STATUS |= LED_2POINT;
    }
    else if (chardata == ‘ ‘)
    {
    led7_var.bShowBuff[led7_var.bCoordinateX++] = 0;
    }
    else //if (chardata == ‘-‘) //不可显示
    {
    led7_var.bShowBuff[led7_var.bCoordinateX++] = BIT(6);
    }
    }

    /*—————————————————————————-*/
    /**@brief led7_drv 字符串显示函数
    @param *str:字符串的指针 offset:显示偏移量
    @return void
    @author Change.tsai
    @note void led7_show_string(u8 *str)
    */
    /*—————————————————————————-*/
    void led7_show_string(u8 *str)
    {
    while (0 != *str)
    {
    led7_show_char(*str++);
    }
    }

    /*—————————————————————————-*/
    /** @brief:
    @param:
    @return:
    @author:
    @note:
    */
    /*—————————————————————————-*/
    void led7_show_string_menu(u8 menu)
    {

    if(menu >= (sizeof(menu_string)/5))
    {
    printf(«*strid(%d) is over!\n»,menu);
    }
    else
    {
    led7_show_string((u8 *)menu_string[menu]);
    }
    }

    void led7_show_linin_main(u8 menu)
    {
    led7_show_string_menu(menu);

    #if REC_EN

    RECORD_OP_API * rec_var_p;
    REC_CTL * rec_ctl_var;

    rec_var_p = *(RECORD_OP_API **)UI_var.ui_buf_adr;
    if((UI_var.ui_buf_adr)&&(rec_var_p))
    {
    rec_ctl_var = rec_var_p->rec_ctl;

    LED_STATUS &= ~(LED_PLAY | LED_PAUSE);
    LED_STATUS &= ~(LED_SD|LED_USB);

    if((menu == MENU_AUX_MAIN)||(menu == MENU_BT_MAIN))
    {
    if((rec_ctl_var)&&(ENC_STOP !=rec_ctl_var->enable))
    {
    if (ENC_STAR == rec_ctl_var->enable)
    LED_STATUS |= LED_PLAY;
    else if(ENC_PAUS == rec_ctl_var->enable)
    LED_STATUS |= LED_PAUSE;

    led7_show_dev(rec_ctl_var->curr_device);
    }
    }
    }
    #endif
    }
    /*—————————————————————————-*/
    /**@brief Music 播放文件号显示函数
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_filenumber(void)
    */
    /*—————————————————————————-*/
    void led7_show_filenumber(void)
    {
    MUSIC_DIS_VAR *music_var;

    music_var = (MUSIC_DIS_VAR*)UI_var.ui_buf_adr;

    if(music_var)
    {
    /*Music File Number info*/
    //printf(«ui_music.ui_play_file_num = %u—-\n»,ui_music.ui_play_file_num);
    itoa4(music_var->ui_curr_file);
    led7_show_string((u8 *)bcd_number);
    }
    }

    /*—————————————————————————-*/
    /**@brief 红外输入文件号显示函数
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_IR_number(void)
    */
    /*—————————————————————————-*/
    void led7_show_IR_number(s32 arg)
    {
    u16 ir_num;
    ir_num = (u16)(arg&0xffff);
    /*IR File Number info*/
    itoa4(ir_num);
    led7_show_string((u8 *)bcd_number);
    }

    /*—————————————————————————-*/
    /**@brief Music模式 显示界面
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_music_main(void)
    */
    /*—————————————————————————-*/
    void led7_show_music_main(void)
    {
    //led7_show_string((u8*)»MUSI»);
    u32 play_time;
    MUSIC_DIS_VAR *music_var;

    music_var = (MUSIC_DIS_VAR*)UI_var.ui_buf_adr;

    if(music_var)
    {
    /*Music Play time info*/
    play_time = music_var->play_time;

    itoa2(play_time/60);
    led7_show_string((u8 *)bcd_number);

    itoa2(play_time%60);
    led7_show_string((u8 *)bcd_number);

    /* led7_show_dev(); */
    led7_show_dev(music_var->ui_curr_device);

    LED_STATUS |= LED_2POINT | LED_MP3;

    if (*music_var->ui_curr_statu == DECODER_PLAY)
    {
    LED_STATUS |= LED_PLAY;
    LED_STATUS &= ~LED_PAUSE;
    led7_var.bFlashIcon |= LED_2POINT;
    }
    else if (*music_var->ui_curr_statu == DECODER_PAUSE)
    {
    LED_STATUS &= ~LED_PLAY;
    LED_STATUS |= LED_PAUSE;
    }
    //
    // if(mute)
    // {
    // led7_var.bFlashIcon |= LED_MP3;
    // led7_var.bFlashChar = 0x0f;
    // }
    // else
    // {
    // led7_var.bFlashIcon &= ~LED_MP3;
    // led7_var.bFlashChar = 0x00;
    // }
    }
    }

    /*—————————————————————————-*/
    /**@brief EQ显示函数
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_eq(s32 arg)
    */
    /*—————————————————————————-*/
    void led7_show_eq(s32 arg)
    {
    u8 eq_cnt;
    eq_cnt = (u8)arg;
    led7_show_string((u8 *)other_string[0]);
    led7_show_char(eq_cnt%10 + ‘0’);
    }

    /*—————————————————————————-*/
    /**@brief 循环模式显示函数
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_playmode(s32 arg)
    */
    /*—————————————————————————-*/
    void led7_show_playmode(s32 arg)
    {
    u8 pm_cnt;
    pm_cnt = (u8)arg;
    led7_show_string((u8 *)&playmodestr[pm_cnt-FOP_MAX-1][0]);
    }

    /*—————————————————————————-*/
    /**@brief 音量显示函数
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_volume(s32 vol)
    */
    /*—————————————————————————-*/
    void led7_show_volume(s32 vol)
    {
    u8 tmp_vol;

    tmp_vol = (u8)vol;
    led7_show_string((u8 *)other_string[1]);
    itoa2(tmp_vol);
    led7_show_string((u8 *)bcd_number);
    }

    /*—————————————————————————-*/
    /**@brief FM 模式主界面
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_fm_main(void)
    */
    /*—————————————————————————-*/
    void led7_show_fm_main(void)
    {
    /*FM — Frequency*/
    #if 1
    FM_MODE_VAR * fm_var;

    if(!UI_var.ui_buf_adr)
    return;

    fm_var = *(FM_MODE_VAR **)UI_var.ui_buf_adr;

    if(fm_var)
    {
    itoa4(fm_var->wFreq);

    if (fm_var->wFreq <= 999)
    bcd_number[0] = ‘ ‘;
    LED_STATUS |= LED_DOT;

    led7_show_string((u8 *)bcd_number);
    LED_STATUS |= LED_MHZ;

    #if REC_EN
    RECORD_OP_API * rec_var_p;
    REC_CTL * rec_ctl_var;

    if((fm_var->fm_rec_op)&&(*(RECORD_OP_API **)(fm_var->fm_rec_op)))
    {
    rec_var_p = *(RECORD_OP_API **)fm_var->fm_rec_op;
    rec_ctl_var = rec_var_p->rec_ctl;

    if((rec_ctl_var)&&(ENC_STOP != rec_ctl_var->enable))
    {
    LED_STATUS &= ~(LED_PLAY | LED_PAUSE);
    LED_STATUS &= ~(LED_SD|LED_USB);

    /* led7_show_dev(); */
    led7_show_dev(rec_ctl_var->curr_device);
    if (ENC_STAR == rec_ctl_var->enable)
    LED_STATUS |= LED_PLAY;
    else if(ENC_PAUS == rec_ctl_var->enable)
    LED_STATUS |= LED_PAUSE;
    }

    }
    #endif
    }

    #endif // 0
    }

    /*—————————————————————————-*/
    /**@brief FM 模式主界面
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_fm_station(void)
    */
    /*—————————————————————————-*/
    void led7_show_fm_station(void)
    {
    // /*FM — Station*/
    #if 1
    FM_MODE_VAR * fm_var;

    if(!UI_var.ui_buf_adr)
    return;

    fm_var = *(FM_MODE_VAR **)UI_var.ui_buf_adr;

    if(fm_var)
    {
    led7_show_string((u8 *)other_string[2]);
    itoa2(fm_var->wFreChannel);
    led7_show_string((u8 *)bcd_number);
    }
    #endif
    }

    #if 1 //RTC_CLK_EN
    /*—————————————————————————-*/
    /**@brief RTC 显示界面
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_RTC_main(void)
    */
    /*—————————————————————————-*/
    void led7_show_RTC_main(void)
    {
    RTC_SETTING * rtc_var;
    RTC_TIME *ui_time;

    rtc_var = (RTC_SETTING *)UI_var.ui_buf_adr;

    if(rtc_var)
    {
    ui_time = rtc_var->calendar_set.curr_rtc_time;

    itoa2(ui_time->bHour);
    led7_show_string((u8 *)bcd_number);
    itoa2(ui_time->bMin);
    led7_show_string((u8 *)bcd_number);

    led7_var.bFlashIcon |= LED_2POINT;
    LED_STATUS |= LED_2POINT;

    if(rtc_var->rtc_set_mode == RTC_SET_MODE)
    {
    if(rtc_var->calendar_set.coordinate == COORDINATE_MIN)
    led7_var.bFlashChar = BIT(0)|BIT(1);
    else
    led7_var.bFlashChar = BIT(2)|BIT(3);
    }
    else
    led7_var.bFlashChar = 0;
    }
    }

    /*—————————————————————————-*/
    /**@brief Alarm 显示界面
    @param void
    @return void
    @author Change.tsai
    @note void led7_show_alarm(void)
    */
    /*—————————————————————————-*/
    #if 1 //RTC_ALM_EN
    void led7_show_alarm(void)
    {
    RTC_SETTING * rtc_var;
    RTC_TIME *ui_time;
    rtc_var = (RTC_SETTING *)UI_var.ui_buf_adr;

    if(rtc_var)
    {
    puts(«led7_show_alarm\n»);

    ui_time = rtc_var->alarm_set.curr_alm_time;
    itoa2(ui_time->bHour);
    led7_show_string((u8 *)bcd_number);
    itoa2(ui_time->bMin);
    led7_show_string((u8 *)bcd_number);

    LED_STATUS |= LED_2POINT;

    if(rtc_var->rtc_set_mode == ALM_SET_MODE)
    {
    if(rtc_var->alarm_set.coordinate == COORDINATE_MIN)
    led7_var.bFlashChar = BIT(0)|BIT(1);
    else
    led7_var.bFlashChar = BIT(2)|BIT(3);
    }

    /*Alarm info — Switch On/Off*/
    if (rtc_var->alarm_set.alarm_sw)
    {
    LED_STATUS |= LED_PLAY;
    }
    else
    {
    LED_STATUS |= LED_PAUSE;
    }
    }
    }
    #endif
    #endif

    #if REC_EN
    /*—————————————————————————-*/
    /**@brief REC 显示界面
    @param void
    @return void
    @note void led7_show_rec_start(void)
    */
    /*—————————————————————————-*/
    static void led7_show_rec_start(REC_CTL * rec_ctl_var)
    {
    u32 rec_time;

    // LED_STATUS &= ~(LED_PLAY | LED_PAUSE);
    // if(rec_ctl_var)
    {
    rec_time = rec_ctl_var->file_info.enc_time_cnt;

    itoa2(rec_time/60);
    led7_show_string((u8 *)bcd_number);

    itoa2(rec_time%60);
    led7_show_string((u8 *)bcd_number);

    /* led7_show_dev(); */
    led7_show_dev(rec_ctl_var->curr_device);

    LED_STATUS |= LED_2POINT; //| LED_PLAY;

    if (ENC_STAR == rec_ctl_var->enable)
    LED_STATUS |= LED_PLAY;
    else if (ENC_PAUS == rec_ctl_var->enable)
    LED_STATUS |= LED_PAUSE;
    }
    }

    /*—————————————————————————-*/
    /**@brief REC 显示界面
    @param void
    @return void
    @note void led7_show_rec_main(void)
    */
    /*—————————————————————————-*/
    void led7_show_rec_main(void)
    {
    RECORD_OP_API * rec_var_p;
    REC_CTL * rec_ctl_var;

    LED_STATUS &= ~(LED_PLAY | LED_PAUSE);
    LED_STATUS &= ~LED_2POINT; //| LED_PLAY;
    LED_STATUS &= ~(LED_SD|LED_USB);

    if(UI_var.ui_buf_adr)
    {
    rec_var_p = *(RECORD_OP_API **)UI_var.ui_buf_adr;
    if(rec_var_p)
    {
    rec_ctl_var = rec_var_p->rec_ctl;
    if((rec_ctl_var)&&(ENC_STOP != rec_ctl_var->enable))
    {
    led7_show_rec_start(rec_ctl_var);
    return;
    }
    }
    }

    led7_show_string((u8 *)other_string[4]);
    }
    #endif

    void LED_drive7(void)
    {
    u8 k,i,j,temp;
    k=0;

    //led7_var.bShowBuff[0]=0xff;
    //led7_var.bShowBuff[1]=0xff;
    //led7_var.bShowBuff[2]=0xff;
    //led7_var.bShowBuff[3]=0xff;
    //led7_var.bShowBuff[4]=0xff;

    led7_var.bShowBuff1[0]=0;
    led7_var.bShowBuff1[1]=0;
    led7_var.bShowBuff1[2]=0;
    led7_var.bShowBuff1[3]=0;
    led7_var.bShowBuff1[4]=0;
    led7_var.bShowBuff1[5]=0;
    led7_var.bShowBuff1[6]=0;
    led7_var.bShowBuff1[7]=0;
    led7_var.bShowBuff1[8]=0;
    led7_var.bShowBuff1[9]=0;
    led7_var.bShowBuff1[10]=0;
    led7_var.bShowBuff1[11]=0;
    led7_var.bShowBuff1[12]=0;

    for(i=0;i<5;i++)
    {
    temp = led7_var.bShowBuff;
    if (get_sys_halfsec())
    {
    if ((led7_var.bFlashIcon) && (i == 4))
    {
    temp = LED_STATUS & (~led7_var.bFlashIcon);
    }
    else if (led7_var.bFlashChar & BIT(i))
    {
    temp = 0x0;
    }
    }

    for(j=0;j<7;j++)
    {
    if(temp & bit_table[j])
    {
    led7_var.bShowBuff1[led_7[k][0]] |= bit_table[led_7[k][1]];
    }
    k++;
    }
    if(j == 7)
    {
    if(temp & bit_table[j])
    led7_var.bShowBuff1[led_7[35][0]] |= bit_table[led_7[35][1]];
    }
    }
    }

    /*—————————————————————————-*/
    /**@brief LED清屏函数
    @param x:显示横坐标
    @return void
    @author Change.tsai
    @note void led7_clear(void)
    */
    /*—————————————————————————-*/
    void led7_clear(void)
    {
    LEDN_PORT0_OUT &= ~(BIT(LEDN_S0_BIT));
    LEDN_PORT0_DIR |= (BIT(LEDN_S0_BIT));
    LEDN_PORT0_PU &= ~(BIT(LEDN_S0_BIT));
    LEDN_PORT0_PD &= ~(BIT(LEDN_S0_BIT));
    LEDN_PORT0_HD &= ~(BIT(LEDN_S0_BIT));

    LEDN_PORT1_OUT &= ~(BIT(LEDN_S1_BIT));
    LEDN_PORT1_DIR |= (BIT(LEDN_S1_BIT));
    LEDN_PORT1_PU &= ~(BIT(LEDN_S1_BIT));
    LEDN_PORT1_PD &= ~(BIT(LEDN_S1_BIT));
    LEDN_PORT1_HD &= ~(BIT(LEDN_S1_BIT));

    LEDN_PORT2_OUT &= ~(BIT(LEDN_S2_BIT));
    LEDN_PORT2_DIR |= (BIT(LEDN_S2_BIT));
    LEDN_PORT2_PU &= ~(BIT(LEDN_S2_BIT));
    LEDN_PORT2_PD &= ~(BIT(LEDN_S2_BIT));
    LEDN_PORT2_HD &= ~(BIT(LEDN_S2_BIT));

    LEDN_PORT3_OUT &= ~(BIT(LEDN_S3_BIT));
    LEDN_PORT3_DIR |= (BIT(LEDN_S3_BIT));
    LEDN_PORT3_PU &= ~(BIT(LEDN_S3_BIT));
    LEDN_PORT3_PD &= ~(BIT(LEDN_S3_BIT));
    LEDN_PORT3_HD &= ~(BIT(LEDN_S3_BIT));

    LEDN_PORT4_OUT &= ~(BIT(LEDN_S4_BIT));
    LEDN_PORT4_DIR |= (BIT(LEDN_S4_BIT));
    LEDN_PORT4_PU &= ~(BIT(LEDN_S4_BIT));
    LEDN_PORT4_PD &= ~(BIT(LEDN_S4_BIT));
    LEDN_PORT4_HD &= ~(BIT(LEDN_S4_BIT));

    LEDN_PORT5_OUT &= ~(BIT(LEDN_S5_BIT));
    LEDN_PORT5_DIR |= (BIT(LEDN_S5_BIT));
    LEDN_PORT5_PU &= ~(BIT(LEDN_S5_BIT));
    LEDN_PORT5_PD &= ~(BIT(LEDN_S5_BIT));
    LEDN_PORT5_HD &= ~(BIT(LEDN_S5_BIT));

    LEDN_PORT6_OUT &= ~(BIT(LEDN_S6_BIT));
    LEDN_PORT6_DIR |= (BIT(LEDN_S6_BIT));
    LEDN_PORT6_PU &= ~(BIT(LEDN_S6_BIT));
    LEDN_PORT6_PD &= ~(BIT(LEDN_S6_BIT));
    LEDN_PORT6_HD &= ~(BIT(LEDN_S6_BIT));

    LEDN_PORT7_OUT &= ~(BIT(LEDN_S7_BIT));
    LEDN_PORT7_DIR |= (BIT(LEDN_S7_BIT));
    LEDN_PORT7_PU &= ~(BIT(LEDN_S7_BIT));
    LEDN_PORT7_PD &= ~(BIT(LEDN_S7_BIT));
    LEDN_PORT7_HD &= ~(BIT(LEDN_S7_BIT));

    LEDN_PORT8_OUT &= ~(BIT(LEDN_S8_BIT));
    LEDN_PORT8_DIR |= (BIT(LEDN_S8_BIT));
    LEDN_PORT8_PU &= ~(BIT(LEDN_S8_BIT));
    LEDN_PORT8_PD &= ~(BIT(LEDN_S8_BIT));
    LEDN_PORT8_HD &= ~(BIT(LEDN_S8_BIT));

    LEDN_PORT9_OUT &= ~(BIT(LEDN_S9_BIT));
    LEDN_PORT9_DIR |= (BIT(LEDN_S9_BIT));
    LEDN_PORT9_PU &= ~(BIT(LEDN_S9_BIT));
    LEDN_PORT9_PD &= ~(BIT(LEDN_S9_BIT));
    LEDN_PORT9_HD &= ~(BIT(LEDN_S9_BIT));

    LEDN_PORT10_OUT &= ~(BIT(LEDN_S10_BIT));
    LEDN_PORT10_DIR |= (BIT(LEDN_S10_BIT));
    LEDN_PORT10_PU &= ~(BIT(LEDN_S10_BIT));
    LEDN_PORT10_PD &= ~(BIT(LEDN_S10_BIT));
    LEDN_PORT10_HD &= ~(BIT(LEDN_S10_BIT));

    LEDN_PORT11_OUT &= ~(BIT(LEDN_S11_BIT));
    LEDN_PORT11_DIR |= (BIT(LEDN_S11_BIT));
    LEDN_PORT11_PU &= ~(BIT(LEDN_S11_BIT));
    LEDN_PORT11_PD &= ~(BIT(LEDN_S11_BIT));
    LEDN_PORT11_HD &= ~(BIT(LEDN_S11_BIT));

    LEDN_PORT12_OUT &= ~(BIT(LEDN_S12_BIT));
    LEDN_PORT12_DIR |= (BIT(LEDN_S12_BIT));
    LEDN_PORT12_PU &= ~(BIT(LEDN_S12_BIT));
    LEDN_PORT12_PD &= ~(BIT(LEDN_S12_BIT));
    LEDN_PORT12_HD &= ~(BIT(LEDN_S12_BIT));
    }

    /*—————————————————————————-*/
    /**@brief LED扫描函数
    @param void
    @return void
    @author Change.tsai
    @note void led7_scan(void *param)
    */
    /*—————————————————————————-*/
    void led7_scan(void *param)
    {
    static u8 cnt;
    u8 seg;

    LED_drive7();

    seg = led7_var.bShowBuff1[cnt];

    led7_clear();

    switch(cnt)
    {
    case 0:
    LEDN_PORT0_OUT |= BIT(LEDN_S0_BIT);
    LEDN_PORT0_HD |= BIT(LEDN_S0_BIT);
    LEDN_PORT0_DIR &= ~BIT(LEDN_S0_BIT);
    break;

    case 1:
    LEDN_PORT1_OUT |= BIT(LEDN_S1_BIT);
    LEDN_PORT1_HD |= BIT(LEDN_S1_BIT);
    LEDN_PORT1_DIR &= ~BIT(LEDN_S1_BIT);
    break;

    case 2:
    LEDN_PORT2_OUT |= BIT(LEDN_S2_BIT);
    LEDN_PORT2_HD |= BIT(LEDN_S2_BIT);
    LEDN_PORT2_DIR &= ~BIT(LEDN_S2_BIT);
    break;

    case 3:
    LEDN_PORT3_OUT |= BIT(LEDN_S3_BIT);
    LEDN_PORT3_HD |= BIT(LEDN_S3_BIT);
    LEDN_PORT3_DIR &= ~BIT(LEDN_S3_BIT);
    break;

    case 4:
    LEDN_PORT4_OUT |= BIT(LEDN_S4_BIT);
    LEDN_PORT4_HD |= BIT(LEDN_S4_BIT);
    LEDN_PORT4_DIR &= ~BIT(LEDN_S4_BIT);
    break;

    case 5:
    LEDN_PORT5_OUT |= BIT(LEDN_S5_BIT);
    LEDN_PORT5_HD |= BIT(LEDN_S5_BIT);
    LEDN_PORT5_DIR &= ~BIT(LEDN_S5_BIT);
    break;

    case 6:
    LEDN_PORT6_OUT |= BIT(LEDN_S6_BIT);
    LEDN_PORT6_HD |= BIT(LEDN_S6_BIT);
    LEDN_PORT6_DIR &= ~BIT(LEDN_S6_BIT);
    break;

    case 7:
    LEDN_PORT7_OUT |= BIT(LEDN_S7_BIT);
    LEDN_PORT7_HD |= BIT(LEDN_S7_BIT);
    LEDN_PORT7_DIR &= ~BIT(LEDN_S7_BIT);
    break;

    case 8:
    LEDN_PORT8_OUT |= BIT(LEDN_S8_BIT);
    LEDN_PORT8_HD |= BIT(LEDN_S8_BIT);
    LEDN_PORT8_DIR &= ~BIT(LEDN_S8_BIT);
    break;

    case 9:
    LEDN_PORT9_OUT |= BIT(LEDN_S9_BIT);
    LEDN_PORT9_HD |= BIT(LEDN_S9_BIT);
    LEDN_PORT9_DIR &= ~BIT(LEDN_S9_BIT);
    break;

    case 10:
    LEDN_PORT10_OUT |= BIT(LEDN_S10_BIT);
    LEDN_PORT10_HD |= BIT(LEDN_S10_BIT);
    LEDN_PORT10_DIR &= ~BIT(LEDN_S10_BIT);
    break;

    case 11:
    LEDN_PORT11_OUT |= BIT(LEDN_S11_BIT);
    LEDN_PORT11_HD |= BIT(LEDN_S11_BIT);
    LEDN_PORT11_DIR &= ~BIT(LEDN_S11_BIT);
    break;

    case 12:
    LEDN_PORT12_OUT |= BIT(LEDN_S12_BIT);
    LEDN_PORT12_HD |= BIT(LEDN_S12_BIT);
    LEDN_PORT12_DIR &= ~BIT(LEDN_S12_BIT);
    break;
    default :
    break;
    }

    if(seg & BIT(0))
    {
    LEDN_PORT0_OUT &= ~BIT(LEDN_S0_BIT);
    LEDN_PORT0_HD |= BIT(LEDN_S0_BIT);
    LEDN_PORT0_DIR &= ~BIT(LEDN_S0_BIT);

    }

    if(seg & BIT(1))
    {
    LEDN_PORT1_OUT &= ~BIT(LEDN_S1_BIT);
    LEDN_PORT1_HD |= BIT(LEDN_S1_BIT);
    LEDN_PORT1_DIR &= ~BIT(LEDN_S1_BIT);
    }

    if(seg & BIT(2))
    {
    LEDN_PORT2_OUT &= ~BIT(LEDN_S2_BIT);
    LEDN_PORT2_HD |= BIT(LEDN_S2_BIT);
    LEDN_PORT2_DIR &= ~BIT(LEDN_S2_BIT);
    }

    if(seg & BIT(3))
    {
    LEDN_PORT3_OUT &= ~BIT(LEDN_S3_BIT);
    LEDN_PORT3_HD |= BIT(LEDN_S3_BIT);
    LEDN_PORT3_DIR &= ~BIT(LEDN_S3_BIT);
    }

    if(seg & BIT(4))
    {
    LEDN_PORT4_OUT &= ~BIT(LEDN_S4_BIT);
    LEDN_PORT4_HD |= BIT(LEDN_S4_BIT);
    LEDN_PORT4_DIR &= ~BIT(LEDN_S4_BIT);
    }

    if(seg & BIT(5))
    {
    LEDN_PORT5_OUT &= ~BIT(LEDN_S5_BIT);
    LEDN_PORT5_HD |= BIT(LEDN_S5_BIT);
    LEDN_PORT5_DIR &= ~BIT(LEDN_S5_BIT);
    }

    if(seg & BIT(6))
    {
    LEDN_PORT6_OUT &= ~BIT(LEDN_S6_BIT);
    LEDN_PORT6_HD |= BIT(LEDN_S6_BIT);
    LEDN_PORT6_DIR &= ~BIT(LEDN_S6_BIT);
    }

    if(seg & BIT(7))
    {
    LEDN_PORT7_OUT &= ~BIT(LEDN_S7_BIT);
    LEDN_PORT7_HD |= BIT(LEDN_S7_BIT);
    LEDN_PORT7_DIR &= ~BIT(LEDN_S7_BIT);
    }

    if(seg & BIT(8))
    {
    LEDN_PORT8_OUT &= ~BIT(LEDN_S8_BIT);
    LEDN_PORT8_HD |= BIT(LEDN_S8_BIT);
    LEDN_PORT8_DIR &= ~BIT(LEDN_S8_BIT);
    }

    if(seg & BIT(9))
    {
    LEDN_PORT9_OUT &= ~BIT(LEDN_S9_BIT);
    LEDN_PORT9_HD |= BIT(LEDN_S9_BIT);
    LEDN_PORT9_DIR &= ~BIT(LEDN_S9_BIT);
    }

    if(seg & BIT(10))
    {
    LEDN_PORT10_OUT &= ~BIT(LEDN_S10_BIT);
    LEDN_PORT10_HD |= BIT(LEDN_S10_BIT);
    LEDN_PORT10_DIR &= ~BIT(LEDN_S10_BIT);
    }

    if(seg & BIT(11))
    {
    LEDN_PORT11_OUT &= ~BIT(LEDN_S11_BIT);
    LEDN_PORT11_DIR &= ~BIT(LEDN_S11_BIT);
    }

    if(seg & BIT(12))
    {
    LEDN_PORT12_OUT &= ~BIT(LEDN_S12_BIT);
    LEDN_PORT12_DIR &= ~BIT(LEDN_S12_BIT);
    }
    cnt = (cnt >= 13) ? 0 : cnt+1;
    }
    #endif

    [/spoiler]

    #1891
    Leks
    Участник
    266

    Удалось прикрутить обычный (не хитрый) семисегментник, не с 7 выводами, а с 12, 4 сегмента, с точками

    Т.е как я понимаю, скоро будем строить свои устройства на чипах из модулей? Такова цель?

    #1894
    BIOS
    Модератор
    1,226

    ак я понимаю, скоро будем строить свои устройства на чипах из модулей? Такова цель?

    Да, будут проекты, (как минимум — BT приемник/передатчик, и аудио плеер/ресивер с OLED/7SEG + DAC + куча кодеков + оптический вход/выход) и что бы разобраться как это работает, и познать программирование)))

    Начать решил с RISC 8051, (ac690 серия — это 32Bit RISC + DSP , по факту там не только это, там реальная SoC ) потом STM / ARM, ну и как вишенка на торте — FPGA. Соответственно очень интересны языки C, C++ и VHDL)

     

    :bye:

    —————————————————————————————————

    Сами чипы — просто шикарны, такая периферия, и цена) , но вот в большинстве случаев — плохая схемотехническая реализация.

    #1902
    BIOS
    Модератор
    1,226

    Заказал вот таких индикаторов, 5 грн (13 руб) за штуку,  буду городить)

    Доделываю модули и отладочную плату.

    Вложения:
    #2793
    drumatizacia
    Участник
    14

    Здравствуйте, всех с праздниками)

    по теме: приехали с Китая Bluetooth модули якобы для подключения к магнитоле BMW, но это е важно. На чипе логотип JL, маркировка следующая AC18AP1M524-25A4. Сначала просто хотел переименовать модуль, тк один в машине, другой в системе logitech z906, но было это уже давно и толком не нашел инфо как и что да с чем. Теперь появилось желание не только переименовать, но и управлять с магнитолы и кнопок руля(CAN шина). Но инфо по микросхеме не нашел, подключение ЮСБ по схеме АС690Х не канает — вход аудио 7,8 нога(П+Л), питание на 18 ноге — ок, D+D- пробовал подцепить на 4,3 ноги соответственно — зеро реакции при подключении к ЮСБ. Кто в курсе что за чип и можно ли переименовать его для начала?

    спасибо)

    #2799
    BIOS
    Модератор
    1,226

    Это AC6925A,  переименовать можно разными способами. Главное что бы загрузчик не был запаролен.

    Если готовы экспериментировать — скажите имя которое хотите, я создам файл обновления, который заденет только имя и мощность приема\передачи. Так же могу добавить пароль на подключение,  и по подробнее про девайс, сфоткайте морду, кишки и прочие «прелести» …. :bye:

    #2807
    drumatizacia
    Участник
    14

    Эксперименты не проблема, но хотелось бы самому попробовать) BIOS, хватит ли статьи од Кристиана чтобы переименовать мой АС6925 и поиграться с ним? Да и вообще, можно ли снять дамп прошивки и отредактировать её?

    А фотки завтра обязательно, сейчас на работе :dum:

    Спасибо.

    #2816
    drumatizacia
    Участник
    14

    Фото модуля. С того что понял: прошивка здесь урезанная-только выход аудио, индикатор подключения БТ и микрофон, ибо попытка имитировать кнопку плэй/пауза не увенчалась успехом, распиновку МС прилогаю. С того что понял из статьи — файл обновления делается по инструкции, потом на карту и к модулю, и модуль должен схавать этот файл? Но всё же, можно ли снимать прошивки с них и прошивать другими?

    Блин, МС копеечная, модуля на ней по 2-3 бакса, не думал что он не даст мне спать)

    Вложения:
    #2940
    drumatizacia
    Участник
    14

    Ребят,кто зарегестрирован на csdn?можна попросить скачать файлы для АС692? Я блин целый день потратил на регистрацию- с ФБ на виват,с вичата на csdn, а сейчас чтобы что то скачать надо вписать номер, а с предложеных кодов стран только Китай,Америка,Япония и т.д.

    #2945
    drumatizacia
    Участник
    14

    BIOS, все-таки прошу о помощи, впишите пожалуйста имя Z906, пароль на сопряжение не нужен, и объясните как залить файл обновления? Подключать МС через Ардуино как Кристиан, или попробовать припаять СД?

Просмотр 15 сообщений - с 1 по 15 (из 1,246 всего)
  • Тема «JL SoC, AC109N, AC209N, AC309N, AC410N, AC460N, AC690N, AC692N ETC…» закрыта для новых ответов.
Внимание! Форум переехал на Tehnodium.ru