搜索
bottom↓
回复: 136

Snail Touch 电容按键开发教程 手把手 Atmel Touch Library 开发详解

[复制链接]

出0入0汤圆

发表于 2009-4-1 17:04:02 | 显示全部楼层
请问Gorgon Meducer 在Timer0_COMPA_ISR中这段代码是为了实现什么功能?

    if (qt_touch_status.sensor_states & BIT(1))
    {
        if (
                (qt_touch_status.rotor_slider_values[1] <= 1)
           )
        {
            s_hwRotorRecalibrationCounter++;
            
            if (s_hwRotorRecalibrationCounter >= 500)
            {
                s_hwRotorRecalibrationCounter = 0;
                s_hwSliderRecalibrationCounter = 0;
                s_chIfRecalibrate = 1;
            }
        }
        else
        {
            s_hwRotorRecalibrationCounter = 0;
        }
    }

    if (qt_touch_status.sensor_states & BIT(0))
    {
        if (
                (qt_touch_status.rotor_slider_values[0] <= 1)
           )
        {
            s_hwSliderRecalibrationCounter++;
            
            if (s_hwSliderRecalibrationCounter >= 500)
            {
                s_hwRotorRecalibrationCounter = 0;
                s_hwSliderRecalibrationCounter = 0;
                s_chIfRecalibrate = 1;
            }
        }
        else
        {
            s_hwSliderRecalibrationCounter = 0;
        }
    }
   
    if (qt_touch_status.sensor_states == 0)
    {
        s_hwSystemFreeCounter++;
        
        if (s_hwSystemFreeCounter > 500)
        {
            s_hwSystemFreeCounter = 0;
            qt_max_on_duration = (5000 / 200);
            if (s_chIfRecalibrateConfirm == 0)
            {
                s_chIfRecalibrate = 1;
            }
        }
    }
    else
    {
        qt_max_on_duration = 0;
        s_chIfRecalibrateConfirm = 0;
        s_hwSystemFreeCounter = 0;
    }

出0入0汤圆

发表于 2009-4-1 17:19:14 | 显示全部楼层
以下这段代码把测得的值移掉低五位,只保留高三位,g_chPWMChannalB 和 g_chPWMChannalA 值的范围也只保留到0-7


        if (qt_touch_status.sensor_states & BIT(0))
        {
            if (qt_touch_status.sensor_states & BIT(1))
            {
                g_chPWMChannalB = qt_touch_status.rotor_slider_values[1] >> 5;
                g_chPWMChannalA = BIT(3) - g_chPWMChannalB - 1;
            }
            else
            {
                g_chPWMChannalB = qt_touch_status.rotor_slider_values[0] >> 5;
                g_chPWMChannalA = BIT(3) - g_chPWMChannalB - 1;
            }
        }
        else if (qt_touch_status.sensor_states & BIT(1))
        {
            g_chPWMChannalB = qt_touch_status.rotor_slider_values[1] >> 5;
            g_chPWMChannalA = BIT(3) - g_chPWMChannalB - 1;
        }
        else
        {
            g_chPWMChannalA = 0;
            g_chPWMChannalB = 0;
        }

然后在时间中断里面实现对双色灯的控制:

       s_chPWMCounter ++;
        s_chPWMCounter &= (BIT(3) - 1);
   
        if (s_chPWMCounter < g_chPWMChannalA)
        {
            LED_C_ON;
        }
        else
        {
            LED_C_OFF;
        }
   
        if (s_chPWMCounter < g_chPWMChannalB)
        {
            LED_D_ON;
        }
        else
        {
            LED_D_OFF;
        }

这样子的话,实际上不论rotor还是slider只实现了8级的数据,就是说这个例程只实现8级数据的验证,没实现256级的。
不知版主之前有没有做过256级的,精度如何?

出0入0汤圆

发表于 2009-4-1 23:20:31 | 显示全部楼层
ATMEL QTouch Lib for ATmega88 Lib的运行特征  
    运行模式:          官方的Touch库在完成初始化以后,主要通过在主循环里面运行一个Task()函数
                        来实现对外部电容信息的采样。
    中断:              Task()函数会在极短的时间内屏蔽全局中断。这个时间大约是1ms
                        (我喜欢把这个1ms的时间称为“我家代码屋顶上1ms的天窗”)

这个屏蔽全局中断是不可避免的吗?能不能设置不让它屏蔽?
如果不采用内部晶振,采用外部晶振,频率高些的,比如20M的外部晶振,这个1ms会不会缩小一些?

出0入0汤圆

发表于 2009-4-7 19:34:35 | 显示全部楼层
如果用QTouch来设计一个手持的低功耗设备,比如手持游戏机,用电池供电,没有开关,全部采用QTouch的key,slider,rotor来实现输入,该如何实现低功耗设计?
使用QTouch来实现输入时,AVR单片机必需时时刻刻在运行,在检测吧?无法实现平时不工作,有输入时中断激发单片机进入正常工作模式来实现低功耗方式。

出0入0汤圆

发表于 2009-4-7 20:34:15 | 显示全部楼层
使用picoPower技术的ATMEGA88P供货了没有?金老师有有相关资料吗?

出0入0汤圆

发表于 2009-4-7 21:13:50 | 显示全部楼层
谢谢金老师的解答!!!

出0入0汤圆

发表于 2009-4-11 19:35:05 | 显示全部楼层
金老师能不能把Snail Touch的sch和PCB文件上传呢?想做块实验板玩玩,但那个 Qtouch Wheel 画起来有点难度。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 06:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表