Нужен совет, появился у меня ультразвуковой датчик HC-SR04. Взял стандарный простой пример:
http://www.ccsinfo.com/forum/viewtop...ghlight=hcsr04
Всё работает только подвисает часто.
Использовал более сложный пример с (INT_CCP1)
#include ‹hc-sr04.h›
#define HC_SR04_TRIGGER_PIN PIN_B1
#define HC_SR04_ECHO_PIN PIN_C2
#define FE 0
#define RE 1
unsigned int16 rise_cnt,fall_cnt,pulse_width_cnt,cm; //вырезал in
int8 ccp_mode;
#int_CCP1
void CCP1_isr(void)
{
if (ccp_mode==RE){
rise_cnt = CCP_1;
ccp_mode=FE;
setup_ccp1(CCP_CAPTURE_FE);
}
else {
fall_cnt = CCP_1;
if (fall_cnt›=rise_cnt) pulse_width_cnt = fall_cnt - rise_cnt;
else pulse_width_cnt = 65536+fall_cnt - rise_cnt;
ccp_mode=RE;
setup_ccp1(CCP_CAPTURE_RE);
}
}
unsigned int16 HC_SR04_RangeRaw()
{
unsigned int16 value;
value=0;
pulse_width_cnt=0;
output_low(HC_SR04_TRIGGER_PIN);
delay_us(10);
set_timer1(0);
ccp_mode=RE;
setup_ccp1(CCP_CAPTURE_RE);
//// trigger measurement
output_high(HC_SR04_TRIGGER_PIN);
delay_us(10);
output_low(HC_SR04_TRIGGER_PIN);
delay_ms(40); //// allow CCP interrupt to see both edges of max pulse=38ms
//// pulse_width_cnt is in 2us units
value=pulse_width_cnt;
return value;
}
int16 HC_SR04_RangeInches(unsigned int16 gRng_Raw)
{unsigned int16 inches;
inches=gRng_Raw/74;
return inches;
}
int16 Inches_To_cm(unsigned int16 gRng_Raw)
{unsigned int16 cmm;
cmm=(gRng_Raw*2.54)/74;
return cmm;
}
void serv()
{
unsigned int16 serva=((cm-
*100)+800;
if(serva‹800) serva=800;
if(serva›2200 || cm‹=3 ) serva=2200;
for(int8 tmp=0; tmp‹20; ++tmp){
output_high(pin_B4);
delay_us(serva);
output_low(pin_B4);
delay_ms(20);
}
}
void HC_SR04_setup() {
setup_timer_1(T1_INTERNAL|T1_DIV_BY_
;//start 2us per inc timer
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
}
void main(){
HC_SR04_setup();
while(TRUE)
{
HC_SR04_RangeRaw();
//in= HC_SR04_RangeInches(pulse_width_cnt);//TODO: User Code
cm= Inches_To_cm(pulse_width_cnt);
serv();
delay_ms(250);
}
}
Подвисание реже происходит но убрать подвисание не смог, при работе НС-SR04 создаёт еле слышное пошёлкивание, при подвисании он молчит самое неприятное при остановки дебага рабочая точка на инициализации кварца стоит и не видно причин.