gpt4 book ai didi

c - atmega128中输入捕获值是双倍

转载 作者:行者123 更新时间:2023-11-30 17:07:27 24 4
gpt4 key购买 nike

我正在使用 Atmega128 和 Atmel Studio 学习嵌入式 C。

我想编写代码来显示传感器的温度和湿度。

我正在学习输入捕获,我的第一个问题是:

我得到的 IC 值为 5000(句点),但我认为 2500 是正确的。我计算得对吗?如果是这样,你知道为什么 IC 的值是错误的吗?

16000.000/64 = 250000

1 second 250000 puls

100 ms x = 2500

董事会信息:

avr128

16.000.000 external clock.



philips puls generator info:

Repitation 100 mili s
Duration 10 ms
5 volt

我的代码

    volatile uint32_t iccnt=0,ovfcnt=0;
volatile uint32_t myCapt [2],lastCapt;

//__________________________

void initTimer()
{
TCNT1 =0;//Max=65535
TCCR1B |= 1<<CS10 | 1<<CS11 ;
// 1<<CS10 | 1<<CS11 ;//16000000/16=250000
//250000/65535=3.81
//TCCR1B |= 1<<WGM13 |1<<WGM12;
TIMSK |= 1<<TOIE1;
TIFR = 1<<TOV1;
sei();
}

void initInputCapture()
{
// First Capture on rising edge
TCCR1B |=1<<ICES1;
//ic intrrupt flag enable
TIMSK |= 1<< TICIE1;
// set input pin to get signal

}
void initlcd()
{
lcd_init(LCD_DISP_ON_CURSOR_BLINK);
lcd_clrscr();
}
void ShowA(unsigned int a)
{
char aa[11];
if (a >32000) {
itoa(a - 32000,aa,10);
lcd_puts("32000+");
lcd_puts(aa);
} else {
itoa(a,aa,10);
lcd_puts(aa);
}
}
ISR(TIMER1_OVF_vect)
{
ovfcnt++;

}
ISR(TIMER1_CAPT_vect)
{

iccnt++;

myCapt[iccnt % 2] = ICR1 - lastCapt;
lastCapt = ICR1;

}

void ShowCaptureTime2()
{
lcd_clrscr();

ShowA (iccnt);
lcd_puts(": \n");
ShowA(myCapt[(iccnt - 1) % 2]);

for (int j=0;j<(1000) ;j++)
{
for (int i=0;i<4000;i++)
{

}
}

}

//*******************************
//*******************************
int main(void)
{
DDRG = 0b11111111;

int cnt = 0;

initlcd();
initTimer();
initInputCapture();

while(1)
{
ShowCaptureTime2();

}
}

最佳答案

我昨天就能找到答案。代码没有问题。脉冲发生器工作不正确!输入错误!!!! – 萨姆软件

关于c - atmega128中输入捕获值是双倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34065075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com