ФОРУМ › Микросхемы и Контроллеры › JL SoC, AC109N, AC209N, AC309N, AC410N, AC460N, AC690N, AC692N ETC…
- В этой теме 85 ответов, 12 участников, последнее обновление 16.02.2021,13:18 сделано StrangerIV.
-
АвторСообщения
-
01.01.2021 в 01:15 #1709
BIOS
Модератор- Offline
@bios497—————————————————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
————————————————————————————————————————Вложения:
01.01.2021 в 06:58 #1722Leks
Участник- Offline
@leks154BIOS, без подробностей, односложно, для самых сообразительных типа меня:
А можно ли будет менять прошивки модулей? А то жаль вот такую красоту заменять в мини муз центре (источник для УНЧ с АС)?
Или это потребует самодельного программатора (сложный/нет).
Специального софта.
Вложения:
01.01.2021 в 13:28 #1733Сергей 78
Модератор- Онлайн
@ser174Насколько знаю, вставляешь влешку с прошивкой и он прошивается через порт USB.
01.01.2021 в 14:52 #1737BIOS
Модератор- Offline
@bios497А можно ли будет менять прошивки модулей? А то жаль вот такую красоту заменять в мини муз центре (источник для УНЧ с АС)? Или это потребует самодельного программатора (сложный/нет). Специального софта.
Можно, при наличии правильной прошивки — можно прошиться 3 разными способами.
1 — DFU (USB, mSD)
2 — UART
3 — Boot Mode
В первых двух пунктах — прошивальщик не нужен, главное правильная прошивка. А с этим проблемы, от банально — отключили DFU, до ключей — если ключи не совпадают — то ничего не будет обновляться. Но это все относиться к AC692- серии и выше. С AC690 таких проблем нет.
Позже напишу что да как и закреплю в первом смс.
А вот в 3 пункт, самый интересный, им можно скармливать разные прошивки.
02.01.2021 в 23:27 #1866BIOS
Модератор- Offline
@bios497И всё таки я разобрался! За два вечера, Удалось прикрутить обычный (не хитрый) семисегментник, не с 7 выводами, а с 12, 4 сегмента, с точками, и двоеточием между цифрами. Разобрался, как подключать с общим анодом, и с общим катодом) , увеличил яркость, осталось только со временем обновления поработать. Это не может не радовать)))
Только сегмент G в последнем разряде пострадал в ходе отладки(((
02.01.2021 в 23:37 #1873BIOS
Модератор- Offline
@bios497Код 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»
#endifLED7_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]);
}
#endifvoid 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]
03.01.2021 в 13:24 #1891Leks
Участник- Offline
@leks154Удалось прикрутить обычный (не хитрый) семисегментник, не с 7 выводами, а с 12, 4 сегмента, с точками
Т.е как я понимаю, скоро будем строить свои устройства на чипах из модулей? Такова цель?
03.01.2021 в 14:01 #1894BIOS
Модератор- Offline
@bios497ак я понимаю, скоро будем строить свои устройства на чипах из модулей? Такова цель?
Да, будут проекты, (как минимум — BT приемник/передатчик, и аудио плеер/ресивер с OLED/7SEG + DAC + куча кодеков + оптический вход/выход) и что бы разобраться как это работает, и познать программирование)))
Начать решил с RISC 8051, (ac690 серия — это 32Bit RISC + DSP , по факту там не только это, там реальная SoC ) потом STM / ARM, ну и как вишенка на торте — FPGA. Соответственно очень интересны языки C, C++ и VHDL)
—————————————————————————————————
Сами чипы — просто шикарны, такая периферия, и цена) , но вот в большинстве случаев — плохая схемотехническая реализация.
03.01.2021 в 15:12 #1902BIOS
Модератор- Offline
@bios497Заказал вот таких индикаторов, 5 грн (13 руб) за штуку, буду городить)
Доделываю модули и отладочную плату.
Вложения:
08.01.2021 в 22:34 #2793drumatizacia
Участник- Offline
@drumatizacia14Здравствуйте, всех с праздниками)
по теме: приехали с Китая Bluetooth модули якобы для подключения к магнитоле BMW, но это е важно. На чипе логотип JL, маркировка следующая AC18AP1M524-25A4. Сначала просто хотел переименовать модуль, тк один в машине, другой в системе logitech z906, но было это уже давно и толком не нашел инфо как и что да с чем. Теперь появилось желание не только переименовать, но и управлять с магнитолы и кнопок руля(CAN шина). Но инфо по микросхеме не нашел, подключение ЮСБ по схеме АС690Х не канает — вход аудио 7,8 нога(П+Л), питание на 18 ноге — ок, D+D- пробовал подцепить на 4,3 ноги соответственно — зеро реакции при подключении к ЮСБ. Кто в курсе что за чип и можно ли переименовать его для начала?
спасибо)
09.01.2021 в 01:08 #2799BIOS
Модератор- Offline
@bios497Это AC6925A, переименовать можно разными способами. Главное что бы загрузчик не был запаролен.
Если готовы экспериментировать — скажите имя которое хотите, я создам файл обновления, который заденет только имя и мощность приема\передачи. Так же могу добавить пароль на подключение, и по подробнее про девайс, сфоткайте морду, кишки и прочие «прелести» ….
09.01.2021 в 04:12 #2807drumatizacia
Участник- Offline
@drumatizacia14Эксперименты не проблема, но хотелось бы самому попробовать) BIOS, хватит ли статьи од Кристиана чтобы переименовать мой АС6925 и поиграться с ним? Да и вообще, можно ли снять дамп прошивки и отредактировать её?
А фотки завтра обязательно, сейчас на работе
Спасибо.
09.01.2021 в 10:08 #2816drumatizacia
Участник- Offline
@drumatizacia14Фото модуля. С того что понял: прошивка здесь урезанная-только выход аудио, индикатор подключения БТ и микрофон, ибо попытка имитировать кнопку плэй/пауза не увенчалась успехом, распиновку МС прилогаю. С того что понял из статьи — файл обновления делается по инструкции, потом на карту и к модулю, и модуль должен схавать этот файл? Но всё же, можно ли снимать прошивки с них и прошивать другими?
Блин, МС копеечная, модуля на ней по 2-3 бакса, не думал что он не даст мне спать)
09.01.2021 в 19:49 #2940drumatizacia
Участник- Offline
@drumatizacia14Ребят,кто зарегестрирован на csdn?можна попросить скачать файлы для АС692? Я блин целый день потратил на регистрацию- с ФБ на виват,с вичата на csdn, а сейчас чтобы что то скачать надо вписать номер, а с предложеных кодов стран только Китай,Америка,Япония и т.д.
09.01.2021 в 20:34 #2945drumatizacia
Участник- Offline
@drumatizacia14BIOS, все-таки прошу о помощи, впишите пожалуйста имя Z906, пароль на сопряжение не нужен, и объясните как залить файл обновления? Подключать МС через Ардуино как Кристиан, или попробовать припаять СД?
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.