Сб дек 02, 2017 10:44:04
//----------
//глобальные переменные
//----------
const char Text_Main_Init[] PROGMEM = " Initialization \0";
const char Text_Main_Wait[] PROGMEM = " Please wait... \0";
...
//----------
//основная функция программы
//----------
int main(void)
{
InitAVR();
DRAM_Init();
WH1602_Init();
WH1602_SetTextProgmemUpLine(Text_Main_Init);
WH1602_SetTextProgmemDownLine(Text_Main_Wait);
SD_Init();
FAT_Init();
// Проверить на наличие TAP файлов
if (FAT_BeginFileSearch()==false)
{
WH1602_SetTextProgmemUpLine(Text_Tape_Menu_No_Image);
WH1602_SetTextDownLine("");
_delay_ms(2000);
while(1);//нет ни одного TAP файла
}
//запускаем основное меню
...
Сб дек 02, 2017 13:27:23
В этом случае проверку на наличие TAP файлов было бы логично сделать, перед тем как отображать основное меню.
Чт дек 07, 2017 09:39:27
Чт дек 07, 2017 11:07:49
Чт дек 07, 2017 16:13:46
Пт дек 08, 2017 15:03:05
Сб дек 09, 2017 10:55:18
void TIM6_DAC_IRQHandler(void)
{
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
/* USER CODE END TIM6_DAC_IRQn 0 */
HAL_TIM_IRQHandler(&htim6);
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
static uint16_t tim6_countersec=3293; //счетчик секунд
static uint32_t tim6_counterbit=0; //счетчик загрузки bit
/********************определяем пилот-тон***********************************************************/
if (TapeInMode>=TAPE_IN_STOP){
//tim6_counterbit=0; //счетчик загрузки bit
return;}
if (TapeInMode==TAPE_IN_LEAD){
TIM6->ARR = 2168*2;//начальное значение таймера
if (tim6_countersec > 0) {
tim6_countersec--;
if (HAL_GPIO_ReadPin(T_IN_GPIO_Port, T_IN_Pin) == GPIO_PIN_SET){
tim6_counterbit++;
};
}
else{
#if Debug_TIM
SEGGER_RTT_printf(0,"\nTAPE_IN_LEAD END tim6_counterbit=%u\n", tim6_counterbit);
#endif
tim6_countersec = 3223;//Время воспроизведения пилот тона 2 сек.
tim6_counterbit=0; //счетчик загрузки bit
TapeInMode=TAPE_IN_STOP;
return;}}
/* USER CODE END TIM6_DAC_IRQn 1 */
}
Сб дек 09, 2017 14:03:28
Протестировал получается 1614..1610 когда как. Я так понимаю это 3223/2 в точности должно быть 1646
Как выявить синхросигналы?
Сб дек 09, 2017 17:41:52
void EXTI15_10_IRQHandler(void)
{
/* USER CODE BEGIN EXTI15_10_IRQn 0 */
/* USER CODE END EXTI15_10_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
/* USER CODE BEGIN EXTI15_10_IRQn 1 */
/********************переменные*********************************************************************/
static uint16_t exti15_countersec=3293; //счетчик секунд
static uint32_t exti15_counterbit=0; //счетчик загрузки bit
/********************определяем пилот-тон***********************************************************/
if (TapeInMode==TAPE_IN_LEAD){
TIM6->ARR = 2168*2;//начальное значение таймера
if (HAL_GPIO_ReadPin(T_IN_GPIO_Port, T_IN_Pin) == GPIO_PIN_SET) exti15_counterbit++;
if (exti15_countersec > 0) exti15_countersec--;
else{
#if Debug_TIM
SEGGER_RTT_printf(0,"\nTAPE_IN_LEAD exti15_counterbit=%u\n", exti15_counterbit);
#endif
TapeInMode = TAPE_IN_STOP;
exti15_counterbit = 0;
exti15_countersec = 3223;//Время воспроизведения пилот тона 2 сек.
return;}
}
/* USER CODE END EXTI15_10_IRQn 1 */
}
Вс дек 10, 2017 15:56:04
void EXTI15_10_IRQHandler(void)
{
/* USER CODE BEGIN EXTI15_10_IRQn 0 */
/* USER CODE END EXTI15_10_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
/* USER CODE BEGIN EXTI15_10_IRQn 1 */
if (TapeInMode==TAPE_IN_LEAD){
TIM6->ARR = 2168*2;//начальное значение таймера 807Гц
//TIM6->ARR = 2272*2;//начальное значение таймера 770Гц
//TIM6->ARR = 2187*2;//начальное значение таймера 800Гц
if (TapeIn==true){
TIM6->CNT = 0;
HAL_TIM_Base_Start (&htim6);
HAL_TIM_Base_Start_IT (&htim6);
TapeIn=false;}
else{
HAL_TIM_Base_Stop (&htim6);
HAL_TIM_Base_Stop_IT (&htim6);
counterbit = __HAL_TIM_GET_COUNTER(&htim6);
if ((counterbit < 4336-20)&&(counterbit > 4336+20)) TapeInMode = TAPE_IN_STOP;
#if Debug_TIM
SEGGER_RTT_printf(0,"\n counterbit %u\n", counterbit);
#endif
EXTI->PR|=0x0F; //Очищаем флаг
TapeIn=true;}
}
/* USER CODE END EXTI15_10_IRQn 1 */
}
Пн дек 11, 2017 03:50:42
Вт дек 12, 2017 09:07:40
void EXTI15_10_IRQHandler(void)
{
/* USER CODE BEGIN EXTI15_10_IRQn 0 */
/* USER CODE END EXTI15_10_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
/* USER CODE BEGIN EXTI15_10_IRQn 1 */
/*********************блок переменных************************************************************/
static const uint8_t delta = 50; //дельта для диапозона пилот тона
static const uint16_t pilot_ARR = 2168*2; //значение таймера для пилот-тона 807Гц
static const uint16_t syn1_ARR = 667; //значение таймера synchro1 5247Гц
static const uint16_t syn2_ARR = 735; //значение таймера synchro2 4761Гц
/***********************************************************************************************/
/********************чтение пилот-тона**********************************************************/
if (TapeInMode==TAPE_IN_LEAD){
TIM6->ARR = pilot_ARR;
if (TapeIn==true){
TIM6->CNT = 0; //начальное значение для отсчета
HAL_TIM_Base_Start (&htim6);
HAL_TIM_Base_Start_IT (&htim6); //включить таймер
TapeIn=false; //переключатель на выкл. таймера
EXTI->PR |= (0x15); //Очищаем флаг и останавливаем прерывание
return;
}
else{
HAL_TIM_Base_Stop (&htim6);
HAL_TIM_Base_Stop_IT (&htim6); //выключить таймер
counterbit = __HAL_TIM_GET_COUNTER(&htim6); //взять значение отсчета таймера
/*проверка на ввод пилот тона, если нет сигнала то стоп прием и переход к ледующему шагу*/
if ((counterbit > pilot_ARR-delta) && (counterbit < pilot_ARR+delta) ) {
#if Debug_TIM
SEGGER_RTT_printf(0,"\n counterbit %u\n", counterbit);
#endif
TapeInMode = TAPE_IN_LEAD; //продолжим прием пилот-тона
}
else
{
#if Debug_TIM
SEGGER_RTT_printf(0,"\n Exit %u\n", counterbit);
#endif
TapeInMode = TAPE_IN_SYNCHRO_1; //прием Synchro1
EXTI->PR |= (0x15); //Очищаем флаг и останавливаем прерывание
EXTI->RTSR |= 0x15; //по нарастающему фронту
}
TapeIn=true; //переключатель на старт таймера
return;
}
}
/********************читаем синхросигнал 1******************************************************/
if (TapeInMode==TAPE_IN_SYNCHRO_1){
TIM6->ARR = syn1_ARR;//начальное значение таймера 5247Гц
//EXTI->RTSR |= 0x15;
if (TapeIn==true){
TIM6->CNT = 0; //начальное значение для отсчета
HAL_TIM_Base_Start (&htim6);
HAL_TIM_Base_Start_IT (&htim6); //включить таймер
TapeIn=false; //переключатель на выкл. таймера
//EXTI->PR |= (0x15); //Очищаем флаг и останавливаем прерывание
return;
}
else {
HAL_TIM_Base_Stop (&htim6);
HAL_TIM_Base_Stop_IT (&htim6); //выключить таймер
counterbit = __HAL_TIM_GET_COUNTER(&htim6); //взять значение отсчета таймера
TapeInMode = TAPE_IN_SYNCHRO_2; //стоп прием
EXTI->PR |= (0x15); //Очищаем флаг и останавливаем прерывание
EXTI->FTSR |= 0x15; //по спадающему фронту
#if Debug_TIM
SEGGER_RTT_printf(0,"\n Exit Synchro1 %u\n", counterbit);
#endif
}
TapeIn=true; //переключатель на старт таймера
return;}
/**************************************************************************************************/
/********************читаем синхросигнал 2******************************************************/
if (TapeInMode==TAPE_IN_SYNCHRO_2){
TIM6->ARR = syn2_ARR;//начальное значение таймера 4761Гц
//EXTI->FTSR |= 0x15;
if (TapeIn==true){
TIM6->CNT = 0; //начальное значение для отсчета
HAL_TIM_Base_Start (&htim6);
HAL_TIM_Base_Start_IT (&htim6); //включить таймер
TapeIn=false; //переключатель на выкл. таймера
//EXTI->PR |= (0x15); //Очищаем флаг и останавливаем прерывание
return;
}
else {
HAL_TIM_Base_Stop (&htim6);
HAL_TIM_Base_Stop_IT (&htim6); //выключить таймер
counterbit = __HAL_TIM_GET_COUNTER(&htim6); //взять значение отсчета таймера
TapeInMode = TAPE_IN_STOP; //стоп прием
EXTI->PR |= (0x15); //Очищаем флаг и останавливаем прерывание
EXTI->RTSR |= 0x15; //по нарастающему фронту
#if Debug_TIM
SEGGER_RTT_printf(0,"\n Exit Synchro2 %u\n", counterbit);
#endif
}
TapeIn=true; //переключатель на старт таймера
return;}
/**************************************************************************************************/
Вт дек 12, 2017 10:46:35
Пока не получилось, может, что пропустил ?
Чт май 17, 2018 01:09:30
Чт май 17, 2018 08:45:34
Чт май 17, 2018 13:01:41
Чт май 17, 2018 15:29:46
Чт май 17, 2018 16:43:25
Сб май 19, 2018 08:11:28
Сб май 19, 2018 08:50:51