Пост для тех, кто будет модифицировать прошивку мк в своей ваке/сиболе.
Наконец то отладил стейт машину работы тумблеров в вакуеро, теперь работает как в заводском приборе. Делал на основе информации из постов здесь, но строго по мануалу. В частности оказалось, что пинпоинтер в вакуеро - это временное переключение из дискрима в АллМет с разомкнутой петлей в операционнике (не-Ауто).
Чем описывать всю стейт машину, просто размещаю здесь Сишный код : кому надо - все поймут из кода.
Назначение выводов микроконтроллера соответствует моему проекту из этой ветки
viewtopic.php?f=25&t=11560 Другими словами, вакуеро теперь полностью работает на мк STM32F030. Если делать для PIC, то код будет необходимо откорректировать в соответствии с его выводами и библиотеками.
Код:
// Digital inputs
// A10 Discrim/AllMet Switch
// B1 PP_IN Switch
//
// Digital outputs
// A5 SelAB_OUT - 4053 control, muxes Disc with AllMet channel outputs
// A6 SelC_OUT - OpAmp loop. Closed by default
// PinPointer Button
// Note: Button works in toggle mode!
if (PP_btn != HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9)) { // PP Button toggles
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9) ==GPIO_PIN_RESET) { // PP is pushed ( switch closed - short to ground - 1'b0 reads)
// AllMEt mode
if( (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10) == GPIO_PIN_SET) || // switch opened - weak pullup - 1'b1 reads - AllMet Mode
(vdi_mode== 0x1) ) { // VDI mode behaves like AllMet
// Toggle output
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_SET) {
// Pinpointer (Dynamic) mode
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // RESET - SelC_OUT selects PP -Open loop in AllMet channel
} else {
// Auto (Static) mode - Default
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // SET - SelC_OUT selects Auto -Short loop in AllMet channel
}
} else { // switch closed - short to ground - 1'b0 reads - Discrim mode
// Toggle output
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_SET) {
// PinPoint mode (Fast switch to AllMet)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // RESET - SelAB_OUT selects AllMet channel
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); // RESET - SelC_OUT selects PP -Open loop in AllMet channel
} else {
// Back to Discrim mode
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // SET - SelAB_OUT selects Discrim channel
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // SET - SelC_OUT selects Retune -Short loop in AllMet channel
}
}
SysSound( FREQ_C_2, 30 );
}
PP_btn=HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9);
}
// Disc/AllMet switch
// Note: Switch works in ON/OFF mode!
if (AllM_btn != HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10)) { // AllM Switch toggles
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10) == GPIO_PIN_SET) { // switch opened - weak pullup - 1'b1 reads - AllMet Mode
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // RESET - SelAB_OUT selects AllMet channel
// Auto mode - by default in AllMet
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // SET - SelC_OUT selects Auto - Short loop in AllMet channel
} else { // switch closed - short to ground - 1'b0 reads - Discrim
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9) ==GPIO_PIN_SET) { // PP unpushed
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // SET - SelAB_OUT selects Discrim channel
// AllMet channel does Retune while MD works in Discrim mode
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // SET - SelC_OUT selects Retune - Short loop in AllMet channel
vdi_mode=0;
} else { //Experimental VDI mode. Activated by switching to Discrim while PP button is pushed
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // RESET - SelAB_OUT selects AllMet channel
// Auto mode - by default in AllMet
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // SET - SelC_OUT selects Auto - Short loop in AllMet channel
vdi_mode=1;
}
}
SysSound( FREQ_C_2, 30 );
AllM_btn=HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10);
}
Замечания по коду: сделаны две модификации - зажимать кнопку пинпоинта было неудобно, поэтому теперь для переключения режима достаточно нажать ее однократно (при этом раздастся писк), + добавлен новый режим для VDI - активируется переключением в дискрим с зажатой кнопкой пинпоинта. В этом режиме прибор переключается в АллМет с измененным тоном звука на основе VDI, который берется с X и Y (дискрим обязательно на 50% выкрутить). Изменение тона пока не работает
- работаю над этим.