tingsi 发表于 2009-6-18 23:41:55

现在按键一按就几个灯一起亮,这样怎么办呢?

如题,我不知道我的通道是否有错,用的是tinny88,和IAR5.20的新版本,希望各位帮我看一下,哪有问题,主程序如下:
__task void main( void )
{
/* initialise host app, pins, watchdog, etc */
   init_system();
   /* enable sensor 0: a rotor on channels 0..3 sensor 0 */
   qt_enable_rotor( CHANNEL_0, CHANNEL_3, NO_AKS_GROUP, 16u, HYST_6_25, RES_8_BIT, 3u);

   /* enable sensors 1..4: keys on channels 4..7 respectively */
   qt_enable_key( CHANNEL_4, AKS_GROUP_1, 10u, HYST_6_25 );   //sensor 1
   qt_enable_key( CHANNEL_5, AKS_GROUP_2, 10u, HYST_6_25 );   //sensor 2
   qt_enable_key( CHANNEL_6, AKS_GROUP_3, 10u, HYST_6_25 );   //sensor 3
   qt_enable_key( CHANNEL_7, AKS_GROUP_4, 10u, HYST_6_25 );   //sensor 4



   
   
   /* initialise touch sensing */
   qt_init_sensing();
   
   /* configure timer ISR to fire regularly */
   init_timer_isr();

   
   
   /* configure the debug data reported to the PC */
   board_info.qt_max_num_rotors_sliders_board_id = ( ( QT_MAX_NUM_ROTORS_SLIDERS << 4 ) | EVK2080B );
    board_info.qt_num_channels = QT_NUM_CHANNELS;

   sensor_config = SENSOR_CONFIG( CHANNEL_0, CHANNEL_3, SENSOR_TYPE_ROTOR );         
   sensor_config = SENSOR_CONFIG( CHANNEL_4, CHANNEL_4, SENSOR_TYPE_KEY );
   sensor_config = SENSOR_CONFIG( CHANNEL_5, CHANNEL_5, SENSOR_TYPE_KEY );
   sensor_config = SENSOR_CONFIG( CHANNEL_6, CHANNEL_6, SENSOR_TYPE_KEY );
   sensor_config = SENSOR_CONFIG( CHANNEL_7, CHANNEL_7, SENSOR_TYPE_KEY );
   sensor_config = SENSOR_CONFIG( CHANNEL_0, CHANNEL_0, SENSOR_TYPE_UNASSIGNED );
   sensor_config = SENSOR_CONFIG( CHANNEL_0, CHANNEL_0, SENSOR_TYPE_UNASSIGNED );
   sensor_config = SENSOR_CONFIG( CHANNEL_0, CHANNEL_0, SENSOR_TYPE_UNASSIGNED );

   /* enable interrupts */
   __enable_interrupt();
   /* loop forever */
for( ; ; )
   {
      /* test flag: is it time to measure touch? */
      if( time_to_measure_touch )
      {
         /* clear flag: it's time to measure touch */
      time_to_measure_touch = 0u;

         /* measure touch sensors */
         qt_measure_sensors( current_time_ms );
         
         /* report debug data to host */
         report_debug_data();
      }
      
      
      /*检测key4.1*/
         if (qt_touch_status.sensor_states & CHANNEL_4)
          {
         PORTD_Bit4 = 1;
          }

         else
          {
         PORTD_Bit4 = 0;
          }
      /*检测key3.1*/
         if (qt_touch_status.sensor_states & CHANNEL_5)
          {
         PORTA_Bit2 = 1;
          }

         else
          {
         PORTA_Bit2 = 0;
          }
       /*检测key2.1*/
      if (qt_touch_status.sensor_states & CHANNEL_6)
          {
         PORTD_Bit5 = 1;
          }

         else
          {
         PORTD_Bit5 = 0;
          }
      /*检测key1.1*/
         if (qt_touch_status.sensor_states & CHANNEL_7)
          {
         PORTB_Bit7 = 1;
          }

         else
          {
         PORTB_Bit7 = 0;
          }
   }
   
}

tingsi 发表于 2009-6-19 14:28:37

怎么没有人呢?帮忙看看,我是新手,不懂呀!!各位帮帮忙啊!

pipige 发表于 2009-6-19 21:20:24

if ((qt_touch_status.sensor_states & CHANNEL_4) 中不能用CHANNEL_4,而应该把它改成0x01,其它的应该为0x02,0x04,0x08。还有,如果你希望4个键之间不互相干扰,应该在enable_key函数中把它们设置为相同的group。希望对你有帮助。

tingsi 发表于 2009-6-20 08:15:58

非常感谢,我试试

tingsi 发表于 2009-6-21 09:59:38

还是不行呀!换成01、02、04、08之后,跟原来一样,那个对于通道的管脚,需要设置吗?我用的是PB0-PB3四个口,需要设置他们的输入输出吗?

pipige 发表于 2009-6-21 11:36:03

让我再想想啊
1、如果你没有用到滑条,只是4个按键,那么这句话可以删掉qt_enable_rotor( CHANNEL_0, CHANNEL_3, NO_AKS_GROUP, 16u, HYST_6_25, RES_8_BIT, 3u);

2、在删掉了上面的那句话后,把 qt_enable_key( CHANNEL_4, AKS_GROUP_1, 10u, HYST_6_25 );里的CHANNEL_4改成CHANNEL_0,其它三组类似地改成CHANNEL_1~CHANNEL_3

3然后在确认楼上我说的“01、02、04、08”改动已经实施。

输入输出不用设置。按照例子程序的默认设置就可以。我用了这个库,只带了一个按键,没有问题的。多多交流吧,我也是才接触这个玩艺没多久,现在还在被灵敏度的问题困扰着,呵呵。

希望有帮助。

tingsi 发表于 2009-6-21 12:50:58

谢谢,十分感谢,基本解决了,还有一点小干扰,我再调调。

pipige 发表于 2009-6-21 16:08:06

你的灵敏度咋样?我想达到手还没碰到板子就能检测到的结果,但一直很不理想。我想用这个做个类似接近开关的东西。

tingsi 发表于 2009-6-21 17:12:31

这个不知道,我这个就是四个按键,按上灯亮就行了,论坛里不是说,可以调节qt_enable_key( CHANNEL_4, AKS_GROUP_1, 10u, HYST_6_25 );   这个语句中10u的大小来进行吗?你试试吧

tingsi 发表于 2009-6-21 17:37:24

你有没有这种情况,就是正面不怎么好用,但是反面很敏感。

Goahead 发表于 2009-6-21 19:49:08

程序我没有细看,不知道有没有软件抗干扰。

Gorgon_Meducer 发表于 2009-6-22 00:03:57

把门限的10改为30或40看看。

tingsi 发表于 2009-6-22 09:18:50

那个门限是越大越敏感吗?

tingsi 发表于 2009-6-22 09:46:21

调试这个,是通过调试current_time_ms 的大小,来完成吗?

pipige 发表于 2009-6-22 09:56:09

那个threshold是越大越敏感啊?!,我的样板已经封到了机器里,拿不出来了。tingsi,你能试一下看看吗?要不我从10调到2都没什么变化呢。我的正反面区别不是太大,都是手指碰上才能有反应。

tingsi 发表于 2009-6-22 10:01:06

不能呀!我也就是问问,我从10调到30后,根本就没有反应了,还有你的current_time_ms是多大呀?这个有什么用呀?

tingsi 发表于 2009-6-22 10:33:24

我试了一下,调到3基本上就可以提前触发了

pipige 发表于 2009-6-22 10:55:45

谢谢,看来不同板子对threshold的要求还是不一样的,我可能要重新layout一下了。
current_time_ms感觉是库函数里用来校准漂移用的,也就是说,一段时间后,它要根据环境(温度?湿度?电场?)的变化重新校准检测中的一些参数什么的。这个值不需要很准确,我感觉。

Gorgon_Meducer 发表于 2009-6-22 12:57:56

current_time_ms一定要填写当前的客观毫秒数……别乱填写……这是整个系统的时间标尺……

pipige 发表于 2009-6-22 15:55:33

哦,那还是如实赋值吧

tingsi 发表于 2009-6-22 16:34:36

谢谢各位的指导,current_time_ms我赋的是感应电容高脉冲的时间与中断的时间,可以自动更新的,效果还不错,应该是这样的吧

Gorgon_Meducer 发表于 2009-6-22 20:50:33

【20楼】 tingsi
    给一个一直累加的毫秒计数器就可以了……和你说的XXXX时间,貌似米太大关系……

tingsi 发表于 2009-6-23 10:10:32

又有一个问题了,我用的是PB0到PB3四个口,我要控制8个按键,所以我用跳线进行了选择,分别把每四个键连在了PD0和PD1上,这样能实现八个键分别控制八个灯亮,而不互相干扰吗?

tingsi 发表于 2009-6-23 10:53:41

各位大哥,帮帮忙呀!

guantingwei 发表于 2009-9-28 18:58:05

我感觉QTouch2.0的滑条和滚轮的库有bug,至少对于部分芯片是这样的,整体而言,处理得也不甚严谨。

zhoud 发表于 2009-9-29 09:36:07

现在出QTouchLib3.0了,不知道有没大大改进,可以在哪下载到??
页: [1]
查看完整版本: 现在按键一按就几个灯一起亮,这样怎么办呢?