调试Qwheel的一米米 心的?
今天开始调试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;
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是否合适?
哎 对不起大家,看来还是经验少,问题多啊! 1、用m88p的库没有什么大问题
2、QKey的问题可能是PCB的问题?
3、用这个库没有问题。 谢谢 傻孩子
您给的demo code中
#include <ioavr.h>
#include <intrinsics.h>
#include "touchstone_krs.h"
#include "twi_api.h"
#include "twi_lib.h"
#include "touchstone_krs.h"
#include "RD_TPL_AVR_WINDOW.h"
两次包含#include "touchstone_krs.h" 是笔误?还是?谢谢
QKey的问题可能是PCB的问题?
是走线的问题吗?这个幅度通过调节电阻和电容是不是无法改善啊?谢谢
那灵敏度和这个幅值有必然关系吗?谢谢。 纯属笔误……
QKey的问题,我不是太清楚……因为PCB差异性会可能会导致一些差异…… 有个小问题,你用的是M88P还是M88??两个芯片不一样的? 请问 Qwheel 的 PCB layout 你们是怎么实现的呢?我试图用 99SE 里的画圆工具来画 ,但是效果不佳,也很繁琐,请问你们是如何画出来的。 to 4 楼 我使用的是mega88pa 用的库是mega88p 貌似没有提供mega88pa的库,我只能使用最接近的库了
to 5 楼 本版有个兄弟把pcb放出来了,你可以去下载 【6楼】 yaya001
哈,那m88p就可以了,只很好奇你怎么能拿到88pa的芯片……国内很少的说 只是从你们atmel拿到的几片样片。
我现在是手触及Qkey 我在PD4 输出高电平 也就是
if ((unsigned int)(qt_touch_status.sensor_states) & BIT(1))成立时。
否则是低电平
我用示波器 死活只能看到低电平,晕啊
关键无处下爪了。 PD4……不要用D口,你用C口看看…… 谢谢傻孩子
好的
不过不是说 库修正了嘛 我不使用的为Touch的IO口
库不会修改他们的状态了嘛
谢谢 Hi 你们好,请问我用铺铜的方法画 Qwheel 时 为什么在我画的 KeepOutLaye 层外会多出一圈铺铜线 ,但是我用同事的电脑铺铜 就没有外面那个圈,可能是 Protel 99 SE 里设置的问题,请问是哪里设置的问题呀,谢谢了?
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_439242.jpg
rotro(原文件名:rotor.jpg) 没有遇到过耶
如果可能的话,可以打包把你画的这个图发上来,我用我的protel 99 se帮你看看。看是否能修改。 感觉这个圈会惹大麻烦…… rotro ourdev_439366.rar(文件大小:488K) (原文件名:PCB3_for_ouravr.rar)
这是我画的图,先用 KeepOutLaye 画的线 ,再铺铜。。。。
很想请教下你们是怎么画出来的啊?我这个画得很不标准。。。 回复【楼主位】yaya001
-----------------------------------------------------------------------
请问楼主,我用的mega88pa为什么用JTAG MkII仿真也不了熔丝位,但是可以下载进去程序,为什么呢,我的程序是用GCC+studio写的 to 【15楼】 dpedison
请把症状描述的清晰一些。 回复【16楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------
你好,请教你点问题,希望能指教。 我遇到个问题,仿真时进不了中断服务程序。jtag ice仿真 我用的芯片是mega88pa,语言是 GCC,但是GCC的IO.h头文件没有mega88pa,只有mega88p。
我建工程时选的mega88P。
我试验了个很小的程序, 我查看TCNT0的值 到FF后,TOIE0,TOVO也置为了,但是跳不到中断服务程序,TCNT0的值 到FF后,下一步到0,在下一步就到0x2D了,请指教下,很费解
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
void Timer0_Init() //初始化定时器0{
TCCR0A= 0x00;
TCCR0B=0x02;//定时器0预设8分频
TIMSK0 = 0x01; //定时器0启动
}
SIGNAL(SIG_OVERFLOW0){ //中断服务程序
i++;}
int main(){
Timer0_Init() ;
sei(); //开中断
while(1){
PORTD &= ~0x80;}
} 你的程序很奇怪i是什么东西……另外JTAGICE能仿真ATmega88? 回复【18楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------
JTAGICE下有ATmega88的啊, 头文件里得int i=0; 这只是个小试验,看看能不能仿真进中断
页:
[1]