не работает захват

fusic
Offline
Зарегистрирован: 08.02.2017

доброго дня всем. может кто подскажет что не так в скетче.

нужно измерять скважность импульсов. для теста генерирую их тут же.

с 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);
        }
    }
}

 

fusic
Offline
Зарегистрирован: 08.02.2017

ноги 13 и 35 (ICP4) соединил конечно же

fusic
Offline
Зарегистрирован: 08.02.2017

...ах да ...всё это на atmega 2560

fusic
Offline
Зарегистрирован: 08.02.2017

отбой....

ноги попутал

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

fusic пишет:

отбой....

ноги попутал

Раньше говорили "бес попутал"...

5N62V
Онлайн
Зарегистрирован: 25.02.2016

fusic пишет:

отбой....

ноги попутал

Эффект желтой уточки: поставь перед собой желтую уточку, и начни детально рассказывать ей свою проблему. В процессе рассказа с высокой степенью вероятности тебе придет в голову путь решения проблемы.