yaya001 发表于 2009-4-21 17:26:49

调试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是否合适?

哎 对不起大家,看来还是经验少,问题多啊!

Gorgon_Meducer 发表于 2009-4-21 17:56:26

1、用m88p的库没有什么大问题
2、QKey的问题可能是PCB的问题?
3、用这个库没有问题。

yaya001 发表于 2009-4-21 20:50:17

谢谢 傻孩子

您给的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的问题?

是走线的问题吗?这个幅度通过调节电阻和电容是不是无法改善啊?谢谢
那灵敏度和这个幅值有必然关系吗?谢谢。

Gorgon_Meducer 发表于 2009-4-21 21:09:48

纯属笔误……
QKey的问题,我不是太清楚……因为PCB差异性会可能会导致一些差异……

kingofkings 发表于 2009-4-21 21:32:38

有个小问题,你用的是M88P还是M88??两个芯片不一样的?

betwins 发表于 2009-4-21 23:54:31

请问 Qwheel 的 PCB layout 你们是怎么实现的呢?我试图用 99SE 里的画圆工具来画 ,但是效果不佳,也很繁琐,请问你们是如何画出来的。

yaya001 发表于 2009-4-22 10:05:00

to 4 楼 我使用的是mega88pa 用的库是mega88p 貌似没有提供mega88pa的库,我只能使用最接近的库了

to 5 楼 本版有个兄弟把pcb放出来了,你可以去下载

kingofkings 发表于 2009-4-22 10:10:36

【6楼】 yaya001
哈,那m88p就可以了,只很好奇你怎么能拿到88pa的芯片……国内很少的说

yaya001 发表于 2009-4-22 10:24:55

只是从你们atmel拿到的几片样片。


我现在是手触及Qkey 我在PD4 输出高电平 也就是

if ((unsigned int)(qt_touch_status.sensor_states) & BIT(1))成立时。
否则是低电平

我用示波器 死活只能看到低电平,晕啊

关键无处下爪了。

Gorgon_Meducer 发表于 2009-4-22 11:02:43

PD4……不要用D口,你用C口看看……

yaya001 发表于 2009-4-22 11:05:02

谢谢傻孩子

好的

不过不是说 库修正了嘛 我不使用的为Touch的IO口

库不会修改他们的状态了嘛


谢谢

betwins 发表于 2009-4-23 23:58:29

Hi 你们好,请问我用铺铜的方法画 Qwheel 时 为什么在我画的 KeepOutLaye 层外会多出一圈铺铜线 ,但是我用同事的电脑铺铜 就没有外面那个圈,可能是 Protel 99 SE 里设置的问题,请问是哪里设置的问题呀,谢谢了?
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_439242.jpg
rotro(原文件名:rotor.jpg)

yaya001 发表于 2009-4-24 07:52:07

没有遇到过耶

如果可能的话,可以打包把你画的这个图发上来,我用我的protel 99 se帮你看看。看是否能修改。

Gorgon_Meducer 发表于 2009-4-24 09:09:55

感觉这个圈会惹大麻烦……

betwins 发表于 2009-4-24 13:27:25

rotro ourdev_439366.rar(文件大小:488K) (原文件名:PCB3_for_ouravr.rar)
这是我画的图,先用 KeepOutLaye 画的线 ,再铺铜。。。。
很想请教下你们是怎么画出来的啊?我这个画得很不标准。。。

dpedison 发表于 2010-9-2 16:46:56

回复【楼主位】yaya001
-----------------------------------------------------------------------

请问楼主,我用的mega88pa为什么用JTAG MkII仿真也不了熔丝位,但是可以下载进去程序,为什么呢,我的程序是用GCC+studio写的

Gorgon_Meducer 发表于 2010-9-3 09:40:11

to 【15楼】 dpedison
    请把症状描述的清晰一些。

dpedison 发表于 2010-9-14 16:51:46

回复【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;}      
}

Gorgon_Meducer 发表于 2010-9-19 10:23:00

你的程序很奇怪i是什么东西……另外JTAGICE能仿真ATmega88?

dpedison 发表于 2010-9-19 16:52:37

回复【18楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------

JTAGICE下有ATmega88的啊, 头文件里得int i=0; 这只是个小试验,看看能不能仿真进中断
页: [1]
查看完整版本: 调试Qwheel的一米米 心的?