не работает захват
- Войдите на сайт для отправки комментариев
Пт, 06/11/2020 - 14:33
доброго дня всем. может кто подскажет что не так в скетче.
нужно измерять скважность импульсов. для теста генерирую их тут же.
с 13й ноги импульсы есть но захват не работает.
//Counts overflovs
volatile uint16_t T1Ovs1, T1Ovs2;
//Variables holding three timestamps
volatile uint16_t Capt1, Capt2, Capt3;
//capture Flag
volatile uint8_t Flag;
//Initialize timer
void InitTimer4(void)
{
//Set Initial Timer value
TCNT4=0;
//First capture on rising edge
TCCR4B|=(1<<ICES4);
//Enable input capture and overflow interrupts
TIMSK4|=(1<<ICIE4)|(1<<TOIE4);
}
void StartTimer4(void)
{
//Start timer without prescaller
TCCR4B|=(1<<CS40);
//Enable global interrutps
sei();
}
//capture ISR
ISR(TIMER4_CAPT_vect)
{
if (Flag==0)
{
//save captured timestamp
Capt1=ICR4;
//change capture on falling edge
TCCR4B&=~(1<<ICES4);
//reset overflows
T1Ovs2=0;
}
if (Flag==1)
{
Capt2=ICR4;
//change capture on rising edge
TCCR4B|=(1<<ICES4);
//save first overflow counter
T1Ovs1=T1Ovs2;
}
if (Flag==2)
{
Capt3=ICR4;
//stop input capture and overflow interrupts
TIMSK4&=~((1<<ICIE4)|(1<<TOIE4));
}
//increment Flag
Flag++;
}
//Overflow ISR
ISR(TIMER4_OVF_vect)
{
//increment overflow counter
T1Ovs2++;
}
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
analogWrite(13,127);
// put your setup code here, to run once:
InitTimer4();
StartTimer4();
}
void loop() {
// put your main code here, to run repeatedly:
//dutycycle result holder
volatile uint8_t DutyCycle;
while(1)
{
//calculate duty cycle if all timestamps captured
if (Flag==3)
{
DutyCycle=(uint8_t)((((uint32_t)(Capt2-Capt1)+((uint32_t)T1Ovs1*0x10000L))*100L)
/((uint32_t)(Capt3-Capt1)+((uint32_t)T1Ovs2*0x10000L)));
//send Duty Cycle value to LCD or USART
Serial.println(DutyCycle);
//clear flag
Flag=0;
//clear overflow counters;
T1Ovs1=0;
T1Ovs2=0;
//clear interrupt flags to avoid any pending interrupts
TIFR4=(1<<ICF4)|(1<<TOV4);
//enable input capture and overflow interrupts
TIMSK4|=(1<<ICIE4)|(1<<TOIE4);
}
}
}
ноги 13 и 35 (ICP4) соединил конечно же
...ах да ...всё это на atmega 2560
отбой....
ноги попутал
отбой....
ноги попутал
отбой....
ноги попутал
Эффект желтой уточки: поставь перед собой желтую уточку, и начни детально рассказывать ей свою проблему. В процессе рассказа с высокой степенью вероятности тебе придет в голову путь решения проблемы.