|
今天开始调试Qwheel,
代码如下:
#define TICKS_PER_MS 1000u
#define MEASUREMENT_PERIOD_MS 50u
#pragma vector=TIMER1_COMPA_vect
__interrupt void timer_isr( void )
{
static unsigned char n = 0;
n++;
if (n == MEASUREMENT_PERIOD_MS)
{
time_to_measure_touch = 1u;
current_time_ms += MEASUREMENT_PERIOD_MS;
n = 0;
}
}
void init_timer_isr( void )
{
/* set timer compare value (how often timer ISR will fire) */
OCR1A = TICKS_PER_MS;//( TICKS_PER_MS * MEASUREMENT_PERIOD_MS );
/* enable timer ISR */
TIMSK1_OCIE1A = 1u;
/* timer prescaler = system clock / 8 */
TCCR1B_CS11 = 1u;
/* timer mode = CTC (count up to compare value, then reset) */
TCCR1B_WGM12 = 1u;
}
void Timer0Init(void){
TCCR0A = (1<<COM0B1)|(0<<COM0B0)|(1<<WGM01)|(1<<WGM00);
TCCR0B = (0<<CS02)|(1<<CS01)|(0<<CS00);
DDRD |= (1<<DDC5);
}
unsigned char Result;
unsigned char ResultOne;
int main( void )
{
MCUCR_PUD = 1u;
/* set recalibrate time in units of 200ms */
qt_max_on_duration = (30000 / 200);
qt_enable_rotor( CHANNEL_0, CHANNEL_2, NO_AKS_GROUP, 16u, HYST_6_25, RES_8_BIT, 0u );
qt_enable_key( CHANNEL_3, NO_AKS_GROUP, 20u, HYST_6_25 );
qt_init_sensing();
init_timer_isr();
Timer0Init();
__enable_interrupt();
while(1){
if( time_to_measure_touch )
{
time_to_measure_touch = 0u;
qt_measure_sensors( current_time_ms );
if ((unsigned int)(qt_touch_status.sensor_states) & BIT(1)){
ResultOne = 1;
//PORTD |=(1<<DDC5);
}
else{
ResultOne = 0;
//PORTD &=~(1<<DDC5);
}
if ((unsigned int)(qt_touch_status.sensor_states) & BIT(0)){
Result = qt_touch_status.rotor_slider_values[0];
OCR0B = Result;
}
}
}
}
现在看来
1、如果使用JTAG MkII仿真器设断点观察qt_touch_status的相关值好像看不到,所以我把读到的值输出,反而看到了。如果使用大家使用断点来观察变量可能会被误导。 也许是我操作上的问题。
我现在遇到的问题:
1、atmel_touch_libraries_rev1.1 中找不到mega88pa的库了,我现在使用的是mega88p的。不知道是否有啥影响?
2、在测试波形是 Wheel的波形幅值能达到4V,而Qkey的仅有1V不到,不知道这个是什么原因?现在Qwheel转一周基本上能检测到,而Qkey是死活检测到?
这个问题我继续查。顺便说一下,现在的波形看起来基本上方波了。
3、还有就是我现在的工作在3.57M晶振下,选择m88p_8qt_BD_c3_krs.r90是否合适?
哎 对不起大家,看来还是经验少,问题多啊! |
|