搜索
bottom↓
回复: 136

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

[复制链接]
(367710276)

出0入0汤圆

发表于 2009-3-7 20:35:48 | 显示全部楼层 |阅读模式

要开发电容按键,特别是基于Atmel Touch Library的电容按键就要对其基本开发环境有相当的了解,这样才能事半功倍


Atmel Touch Library的来源
Atmel Touch Library的技术来源于Quantum,2008年ATMEL正式收购Quantum,并通过AVR & AVR32系列将电容按键接触以及其灵活的形式展现给业界。
Quantum是业界最早研究开发电容按键的公司,说来这里面还有件趣闻,Quantum的创始人原本是一家公司的工程师,在一次偶然的情况下注意到了电容转移的现象,于是就陷在其中。经过一番好好研究后,他自信满满的跑到老板的面前,推荐他的发现,认为大有可为,但是他老板对他嗤之以鼻,认为这只是一个简单的物理现象,让他好好做好自己的事。结果,Quantum的创始人炒了他老板的鱿鱼,自己开起了Quantum


Atmel Touch Library的优势
1、基于业界最为优秀的Qtouch技术,多年的技术积累,累积下多套算法,用于改善的电容按键的产品特性。
2、以AVR & AVR32作为基础实现平台,电容按键对于IO的以及MCU的运算要求颇高,只有高速IO以及强有力的运算能力才能以更快的速度完成检测运算以及IO的物理处理。而众所周知,AVR系列一向是同等级MCU中IO操作速度最快(IO speed = MCU speed),以及运算能力最为优秀的(1MIPS/MHz),在这一点上这是先天的优势,也就是说假如算法一致的情况下,AVR的电容按键性能是优于其它MCU的。
3、支持 QTouch QMatrix QSlider QWheel<font color=black>技术,为业界最丰富。

官方网址:
http://www.atmel.com/products/touch/touchswlib.asp?family_id=697


<font color=blue>支持器件<font color=black>
现在Atmel Touch Library第一批支持的芯片主要有以下几个型号,其他的AVR & AVR32的型号会按照既定的计划,逐步添加支持
<font color=red>ATtiny88 <font color=black> 支持技术QMatrix
<font color=red>ATmega88  ATmega88PA  ATmega168P  ATmega328P <font color=black>支持技术QTouch


<font color=blue>编译平台<font color=black> IAR Embedded Workbench for Atmel AVR
没错,现在支持编译Atmel Touch Library只能在IAR平台下,不过IAR提供了没有时间限制的4K版本,而Atmel Touch Library最多也就是用不到3K的容量,所以测试足够了~~
4K评估版,请勿恶意传播
点击此处下载 ourdev_425665.rar(文件大小:20.00M) <font color=green>(原文件名:EWAVR-KS4-WEB-520-2.part1.rar)

点击此处下载 ourdev_425671.rar(文件大小:20.00M) (原文件名:EWAVR-KS4-WEB-520-2.part2.rar)
点击此处下载 ourdev_425672.rar(文件大小:20.00M) (原文件名:EWAVR-KS4-WEB-520-2.part3.rar)
点击此处下载 ourdev_425673.rar(文件大小:17.83M) (原文件名:EWAVR-KS4-WEB-520-2.part4.rar)
点击此处下载 ourdev_425674.rar(文件大小:369字节) (原文件名:KS520.rar)
密码snailtouch


Qtouch基本设计元素
Qtouch Pad 一个通道最基本的元素是芯片IO * 2 + 电阻 * 1 + 电容 * 1 + 电容介质(比如铜层)
如下图

(原文件名:Qtouch.jpg)
需要注意的是,根据不同的环境与应用场合,电阻与电容需要通过穷举法来测定,电阻一般在几百欧姆至几K之间,电容在1nF到几百nF之间
测试方法是使用一个金属物体,比如硬币放在Pad上,使用示波器观察波形:

(原文件名:Qtouch3.jpg)
调整电容电阻以得到较好的波形,一般有Good就行了……

(原文件名:Qtouch2.jpg)
这样一个通道就设计完毕了。




Qtouch Slider
也就是我们常见的滑条,Qtouch基础支持256级精度。
Qtouch Slider需要由三个基本的Qtouch通道组成,需要注意的是在ATMEL Touch Lib库中,Qtouch Slider仅限于通道0至2或者通道3至5使用,所以通道的编号不要弄错。

(原文件名:Qtouch4.jpg)
如上图,Qtouch通道依次分配,并且最外围(最左和最右)的电容介质需要只用同一个通道来检测。



QMatrix基本设计元素




未完待续……

临时处理
为了便于性急的网友,我先将开发的手册与软件库上传
点击此处下载 ourdev_424292.pdf(文件大小:327K) (原文件名:Atmel Touch Library User Guide.pdf)
点击此处下载 ourdev_424293.pdf(文件大小:1.04M) (原文件名:Touch Sensors Design Guide.pdf)
点击此处下载 ourdev_424294.rar(文件大小:2.13M) (原文件名:Atmel Touch SW Lib.rar)
(367710264)

出0入0汤圆

 楼主| 发表于 2009-3-7 20:36:00 | 显示全部楼层
[硬件Layout]

Qtouch Pad
最基本的电容按键,可以使用多种图形样式,比如圆形,正方形或者长方形。

(原文件名:Qtouch5.jpg)
一般,这些图形的长宽或者直径在8到10mm,太大或者太小都会影响电容按键的使用性能(太大减低电容对手指的灵敏度,太小容易误按,不人性化,并且有性能上问题。)

未完待续……
(367710250)

出0入0汤圆

 楼主| 发表于 2009-3-7 20:36:14 | 显示全部楼层

ATMEL QTouch Lib的软件设计
<font color=brown>
building
(367710240)

出0入0汤圆

发表于 2009-3-7 20:36:24 | 显示全部楼层
先支持一个
等硬件到手
(367707656)

出0入0汤圆

发表于 2009-3-7 21:19:28 | 显示全部楼层
板凳排队
(367707463)

出0入0汤圆

发表于 2009-3-7 21:22:41 | 显示全部楼层
支持!!!!!

以后做键盘输入就爽很多啦,
机箱也不用开键盘孔了~~~~~~~~~~~
(367707326)

出0入0汤圆

发表于 2009-3-7 21:24:58 | 显示全部楼层
最关注layout
(367707192)

出0入0汤圆

发表于 2009-3-7 21:27:12 | 显示全部楼层
想请教一下KoK,隔一层4mm厚的有机玻璃按键还能正常使用吗?
(367706873)

出0入0汤圆

 楼主| 发表于 2009-3-7 21:32:31 | 显示全部楼层
慢慢来哈,开发电容按键需要注意的事项,有很多,要一个一个理出来,我把文档先上传到顶楼有兴趣的人可以先看看
(367706781)

出0入0汤圆

 楼主| 发表于 2009-3-7 21:34:03 | 显示全部楼层
【7楼】 yhyf_heart
没有问题,我测试过5mm的情况,
最主要的问题是你有机玻璃上不能有其他含有可导电的物质,比如黑色含有石墨的涂层,会严重影响效果
(367704034)

出0入0汤圆

发表于 2009-3-7 22:19:50 | 显示全部楼层
HOLTEK好像也有类似的单片机
(367698120)

出0入0汤圆

发表于 2009-3-7 23:58:24 | 显示全部楼层
和泰的有一款带触摸的单片机,不知道性能怎么样!!!
(367696647)

出0入0汤圆

发表于 2009-3-8 00:22:57 | 显示全部楼层
期待中,准备自己做个板子来试试
(367658403)

出0入70汤圆

发表于 2009-3-8 11:00:21 | 显示全部楼层
kok,那个库是不是只能用IAR链接啊,我用GCC提示无法识别obj格式
(367642110)

出0入0汤圆

 楼主| 发表于 2009-3-8 15:31:54 | 显示全部楼层
【13楼】 PaulDE
在现有的情况下,只能通过IAR~~
以后呢……嘻嘻 ,我不知道哦
(367612699)

出0入70汤圆

发表于 2009-3-8 23:42:05 | 显示全部楼层
看来GCC让Atmel觉得不够安全啊,还是之前Quantum用的是IAR?

有没有高手出来转换下,毕竟穷人多啊
(367612590)

出0入0汤圆

 楼主| 发表于 2009-3-8 23:43:54 | 显示全部楼层
【15楼】 PaulDE
其实,你找个IAR 4K的限制版不就行了? Touch库最大就2K5的样子,还有1K搞个通讯足够了~~
(367582832)

出0入0汤圆

发表于 2009-3-9 07:59:52 | 显示全部楼层
LZ 我很不明白 电容按键开 完全可以IO(冲放电)来搞定,方案很多如MICROCHIP有、SILICON LAB有等 都是用MCU的IO来搞定的;使用一个独立芯片只会增加系统成本?
(367557502)

出0入0汤圆

 楼主| 发表于 2009-3-9 15:02:02 | 显示全部楼层
【17楼】 hepingmail
?????完全不明白你的意思,AVR是通用芯片啊,怎么变成专用芯片了????
(367534886)

出0入296汤圆

发表于 2009-3-9 21:18:58 | 显示全部楼层
感谢金老师抢的楼,我把软件相关内容更新在2楼了。
(367532910)

出0入0汤圆

发表于 2009-3-9 21:51:54 | 显示全部楼层
他就是用通用的AVR芯片做的,只是官方的库只支持那几个型号
(367531916)

出0入0汤圆

发表于 2009-3-9 22:08:28 | 显示全部楼层
唉/////e文的水平太菜,没办法深入了解。期待哪位大侠翻译
(367531712)

出0入296汤圆

发表于 2009-3-9 22:11:52 | 显示全部楼层
米关系……耐心等中文版……或者搞过的人分享经验……
(367529114)

出0入0汤圆

发表于 2009-3-9 22:55:10 | 显示全部楼层
期待更多的资料~~~···     弱弱的问楼主一个问题    不用这个库函数的话效果会差很多吗(自己根据原理写一个简单的)? 假设我的应用场合并不那么复杂,只有几个简单的按键。
(367526531)

出0入296汤圆

发表于 2009-3-9 23:38:13 | 显示全部楼层
可以试一试,没有说这个库就的解决方案就是最好的。只能说官方发布了一个
目前使用效果令人满意的方案。
(367360097)

出0入0汤圆

发表于 2009-3-11 21:52:07 | 显示全部楼层
呵呵
以后 出来代码带上注释好吗?
好难懂哦!
(367358750)

出0入0汤圆

发表于 2009-3-11 22:14:34 | 显示全部楼层
这个是好东西,我要把它做到我的四轴上面。
好像在霹雳游侠里那样,在盖子上面比比划划就可以修改配置了。
(367349541)

出0入296汤圆

发表于 2009-3-12 00:48:03 | 显示全部楼层
飞机载下来我可不负责哈 ^_^
(367314836)

出0入0汤圆

发表于 2009-3-12 10:26:28 | 显示全部楼层
不知道有没有可能将Snail Touch板上那几个触摸部分做成Protel的Lib文件,这样大家如果想自己画这样的板就方便了。
按键和滑动条相对简单,但那个大圆盘就麻烦了。
自己想画但觉得画不出来。
(367307375)

出0入42汤圆

发表于 2009-3-12 12:30:49 | 显示全部楼层
如果MEGA169P也能支持,就酷毙了............
目前这个库支持的芯片还是太少,不是最容易采购和最常常的那些。
(367053182)

出0入0汤圆

 楼主| 发表于 2009-3-15 11:07:22 | 显示全部楼层
更新IAR开发平台下载
(366972459)

出0入0汤圆

发表于 2009-3-16 09:32:45 | 显示全部楼层
这个库能在iar4.2上用吗?
(366949905)

出0入296汤圆

发表于 2009-3-16 15:48:39 | 显示全部楼层
可以的。
(366923109)

出0入0汤圆

 楼主| 发表于 2009-3-16 23:15:15 | 显示全部楼层
更新Qtouch基本设计元素
(366884567)

出0入0汤圆

发表于 2009-3-17 09:57:37 | 显示全部楼层
{

   /* 关闭所有的上拉电阻 */
   MCUCR_PUD = 1u;
   ……
   /* 设置回调函数指针 */
   qt_filter_callback = Filter;
   ……
}

#include "RD_TPL_Avr_Window.h"

/* 使用模板定义滑动窗口均值滤波通道 */
START_DEFINE_WINDOW(CHANNAL_0,3,uint16_t,uint8_t,uint16_t)
END_DEFINE_WINDOW
START_DEFINE_WINDOW(CHANNAL_1,3,uint16_t,uint8_t,uint16_t)
END_DEFINE_WINDOW
START_DEFINE_WINDOW(CHANNAL_2,3,uint16_t,uint8_t,uint16_t)
END_DEFINE_WINDOW
START_DEFINE_WINDOW(CHANNAL_3,3,uint16_t,uint8_t,uint16_t)
END_DEFINE_WINDOW
START_DEFINE_WINDOW(CHANNAL_4,3,uint16_t,uint8_t,uint16_t)
END_DEFINE_WINDOW
START_DEFINE_WINDOW(CHANNAL_5,3,uint16_t,uint8_t,uint16_t)
END_DEFINE_WINDOW

static void Filter(void)  
kingofkings 技术火腿(KoK)
不好意思 问下这是用什么编写的我 想学习AVR 要 学习什么语言
(366884440)

出0入0汤圆

 楼主| 发表于 2009-3-17 09:59:44 | 显示全部楼层
【34楼】 shunzi6
在IAR平台下,用C语言设计的
(366877448)

出0入0汤圆

发表于 2009-3-17 11:56:16 | 显示全部楼层
kingofkings 技术火腿(KoK)
我想学学C JAVA 没有基础,也不知道买什么资料,能不能推荐些基础的书
(366876677)

出0入296汤圆

发表于 2009-3-17 12:09:07 | 显示全部楼层
to 【36楼】 shunzi6  
    谭浩强的《C语言》 + 《深入浅出AVR单片机——从ATmega48/88/168开始》
(366876176)

出0入0汤圆

发表于 2009-3-17 12:17:28 | 显示全部楼层
谢谢Gorgon Meducer 傻孩子
(366770773)

出0入0汤圆

发表于 2009-3-18 17:34:11 | 显示全部楼层
我用IAR4.21A不能编译,出现下面问题:

Error[e46]: Undefined external "qt_enable_slider" referred in main ( D:\Works\Lamp Contral System\touchstone\Release\Obj\main.r90 )
Error[e46]: Undefined external "qt_enable_rotor" referred in main ( D:\Works\Lamp Contral System\touchstone\Release\Obj\main.r90 )
Error[e46]: Undefined external "qt_enable_key" referred in main ( D:\Works\Lamp Contral System\touchstone\Release\Obj\main.r90 )
Error[e46]: Undefined external "qt_init_sensing" referred in main ( D:\Works\Lamp Contral System\touchstone\Release\Obj\main.r90 )
Error[e46]: Undefined external "qt_measure_sensors" referred in main ( D:\Works\Lamp Contral System\touchstone\Release\Obj\main.r90 )
Error[e46]: Undefined external "channel_signals" referred in main ( D:\Works\Lamp Contral System\touchstone\Release\Obj\main.r90 )
Error[e46]: Undefined external "channel_references" referred in main ( D:\Works\Lamp Contral System\touchstone\Release\Obj\main.r90 )
Error[e46]: Undefined external "sensor_deltas" referred in main ( D:\Works\Lamp Contral System\touchstone\Release\Obj\main.r90 )
Error[e46]: Undefined external "qt_touch_status" referred in main ( D:\Works\Lamp Contral System\touchstone\Release\Obj\main.r90 )
但我已经把m88_8qt_c1_krs.r90和touchstone_krs.h都自制到项目的文件夹里了。不知道是啥原因,请高手指点一下
(366770713)

出0入0汤圆

发表于 2009-3-18 17:35:11 | 显示全部楼层
m88_8qt_c1_krs.r90和touchstone_krs.h是官方下载的
(366769056)

出0入296汤圆

发表于 2009-3-18 18:02:48 | 显示全部楼层
光复制不行的……还要设置Link选项
(366754622)

出0入0汤圆

发表于 2009-3-18 22:03:22 | 显示全部楼层
Gorgon哥,腿哥:
俺看了两个手册很久,对比了很久,没有头绪,理解力不行,不如直接请教二位了:
1、mage8和mega88在这个touchlib上应用应该可以通用吧,对比半天得出这个结论,不知对否?
2、2维触摸应用应该是绝对是个killer-application,不知为何还要签NDA,二位有没有计划可以放出来,atmel官方那里有没有问题?
3、在audio产品设计上UC3会比较好用,官方应该有类似的方案,不知道咱们的snail会不会支持这块,什么时候,期待呀?
4、兄弟我是个穷人,又想能不用D版东东就不用,因此虽然刚刚接触AVR不久,但是咬咬牙直接从GCCAVR+eclipse入手了(因为AVR32也是GCC支持好),这些lib能不能用到GCC上,不怕你们笑话,我现在基本靠Procyon AVRlib过活,没有办法基础差呀。
(366754032)

出0入296汤圆

发表于 2009-3-18 22:13:12 | 显示全部楼层
to 【43楼】 imyth88
   1、Mega8不能使用M88的库
   2、本活动暂不牵涉2纬触摸
   3、Audio产品很快就有项目推出,一个一个来
   4、IAR的库只能在IAR上用……
(366752099)

出0入0汤圆

发表于 2009-3-18 22:45:25 | 显示全部楼层
那就是说,我如果铁定用GCC就得自己学会造轮子咯......又多个任务.......
(366751997)

出0入296汤圆

发表于 2009-3-18 22:47:07 | 显示全部楼层
to 【45楼】 imyth88
    可怜的孩子……
(366746728)

出0入0汤圆

发表于 2009-3-19 00:14:56 | 显示全部楼层
mark
(366716466)

出0入0汤圆

发表于 2009-3-19 08:39:18 | 显示全部楼层
Gorgon Meducer 傻孩子:
Link选项要怎么设置啊?
(366715912)

出0入0汤圆

发表于 2009-3-19 08:48:32 | 显示全部楼层

(原文件名:1.JPG)

我的LINK选项就像这个图一样的设置,其他的是默认值
(366712973)

出0入0汤圆

 楼主| 发表于 2009-3-19 09:37:31 | 显示全部楼层
【43楼】 imyth88  
Gorgon哥,腿哥:
俺看了两个手册很久,对比了很久,没有头绪,理解力不行,不如直接请教二位了:
1、mage8和mega88在这个touchlib上应用应该可以通用吧,对比半天得出这个结论,不知对否?
mega8和mega88不通用,因为编译无法通过,48和88到是还可以兼容下
2、2维触摸应用应该是绝对是个killer-application,不知为何还要签NDA,二位有没有计划可以放出来,atmel官方那里有没有问题?
2维涉及到很多工艺问题,一个ITO就已经让很多国内的生产厂家头大了……,一般是企业级客户比较适合开发,既然是企业级就要NDA了
3、在audio产品设计上UC3会比较好用,官方应该有类似的方案,不知道咱们的snail会不会支持这块,什么时候,期待呀?
哈,正在努力中。
4、兄弟我是个穷人,又想能不用D版东东就不用,因此虽然刚刚接触AVR不久,但是咬咬牙直接从GCCAVR+eclipse入手了(因为AVR32也是GCC支持好),这些lib能不能用到GCC上,不怕你们笑话,我现在基本靠Procyon AVRlib过活,没有办法基础差呀。
为什么不用我给出的4K免费IAR版本???
(366712916)

出0入0汤圆

 楼主| 发表于 2009-3-19 09:38:28 | 显示全部楼层
【49楼】 409272864
比较简便的方式是你直接用LIB里的例子启动,配置全设好的
(366708168)

出0入0汤圆

发表于 2009-3-19 10:57:36 | 显示全部楼层
我现在用的IAR版本是iar4.2的,但是不能直接打开LIB里的例程。你给出的4K免费IAR版本下载回来解压出错,用不了。
(366708153)

出0入0汤圆

发表于 2009-3-19 10:57:51 | 显示全部楼层
我现在用的IAR版本是iar4.2的,但是不能直接打开LIB里的例程。你给出的4K免费IAR版本下载回来解压出错,用不了。
(366707977)

出0入296汤圆

发表于 2009-3-19 11:00:47 | 显示全部楼层
重新下载……
(366705132)

出0入0汤圆

发表于 2009-3-19 11:48:12 | 显示全部楼层
kingofkings 技术火腿(KoK):
Gorgon Meducer 傻孩子:
终于下载得了,只能解压:
ourdev_425665.rar(文件大小:20.00M) (原文件名:EWAVR-KS4-WEB-520-2.part1.rar)
ourdev_425671.rar(文件大小:20.00M) (原文件名:EWAVR-KS4-WEB-520-2.part2.rar)
ourdev_425674.rar(文件大小:369字节) (原文件名:KS520.rar)
              不能解压:
ourdev_425672.rar(文件大小:20.00M) (原文件名:EWAVR-KS4-WEB-520-2.part3.rar)
ourdev_425673.rar(文件大小:17.83M) (原文件名:EWAVR-KS4-WEB-520-2.part4.rar)  
  
(366705077)

出0入0汤圆

发表于 2009-3-19 11:49:07 | 显示全部楼层
ourdev_425672.rar(文件大小:20.00M) (原文件名:EWAVR-KS4-WEB-520-2.part3.rar)  
ourdev_425673.rar(文件大小:17.83M) (原文件名:EWAVR-KS4-WEB-520-2.part4.rar)
这两个压缩文件里面是什么东西,不要可以吗?
(366703274)

出0入0汤圆

发表于 2009-3-19 12:19:10 | 显示全部楼层
记下来,以后学单片机时研究。
(366702827)

出0入296汤圆

发表于 2009-3-19 12:26:37 | 显示全部楼层
to 【55楼】 409272864  
    下载以后要按照原名进行重命名才能正常解压缩……
(366697459)

出0入0汤圆

发表于 2009-3-19 13:56:05 | 显示全部楼层
谢谢哦
还有一个问题:如何配置官方提供的库函数,直接根据MCU选择相应的库就行了吗?
(366694692)

出0入296汤圆

发表于 2009-3-19 14:42:12 | 显示全部楼层
to 【59楼】 409272864
    是的,根据MCU选择相应的库……其它请参考用户手册。
(366691438)

出0入0汤圆

发表于 2009-3-19 15:36:26 | 显示全部楼层
谢谢哦,解决了大部分问题了哈。
可以上传 Snail touch的程序参考一下吗。
(366691240)

出0入296汤圆

发表于 2009-3-19 15:39:44 | 显示全部楼层
to 【61楼】 409272864
    早就上传了……在别的帖子里面……
(366485959)

出0入0汤圆

发表于 2009-3-22 00:41:05 | 显示全部楼层
【50楼】 kingofkings 技术火腿(KoK)
谢谢,腿哥!
为什么不用我给出的4K免费IAR版本???
-------------我是用的M128设计的东东,不知道怎么用?芯片不行呀,另外用不如采用专门的Q-TOUCH芯片,却不知道要多少米?现在先用IO交付一个测试版本看看反映。
2维涉及到很多工艺问题,一个ITO就已经让很多国内的生产厂家头大了...........
---------------“ITO”?.....难道还要在PCB上做,头一次听说可以在PCB上做,如果这样就麻烦了,的确没有什么厂家愿意做(会做)。这不如直接采用触摸屏膜来的实在,不用专门芯片,就是AD驱动也不会麻烦多少。这样的2D的触摸恐怕没有什么竞争优势。我以为也可以象wheel、slider和touch一样线路板上那个啥啥一下就可以了(如果这样就太逆天了,我看了文档后就是这样理解的)。

(原文件名:2Dtouch.jpg)
(366484598)

出0入0汤圆

 楼主| 发表于 2009-3-22 01:03:46 | 显示全部楼层
【63楼】 imyth88
M128不在支持的芯片之列啊
(366350364)

出0入0汤圆

发表于 2009-3-23 14:21:00 | 显示全部楼层
void qt_calibrate_sensing( void );
extern void (*qt_filter_callback)( void );
typedef enum tag_aks_group_t
extern int16_t sensor_deltas[QT_NUM_CHANNELS];
extern uint16_t channel_references[QT_NUM_CHANNELS];
extern uint16_t channel_signals[QT_NUM_CHANNELS];
extern recal_threshold_t qt_recal_threshold;
extern uint8_t qt_pos_drift_rate;
extern uint8_t qt_neg_drift_rate;
extern uint8_t qt_drift_hold_time;
extern uint8_t qt_di;
extern qt_touch_status_t qt_touch_status;

这些函数和变量的含义不是很理解,可否提供些中文解释啊。
(366348452)

出0入296汤圆

发表于 2009-3-23 14:52:52 | 显示全部楼层
稍后会有较为详细的中文文档……
(366344673)

出0入0汤圆

发表于 2009-3-23 15:55:51 | 显示全部楼层
还要等多久啊,可以先讲讲typedef enum tag_aks_group_t 的含义及其在程序中的意义吗?
(366169894)

出0入0汤圆

发表于 2009-3-25 16:28:50 | 显示全部楼层
技术火腿就是金老师
失敬,失敬
(366167194)

出0入0汤圆

发表于 2009-3-25 17:13:50 | 显示全部楼层
Qtouch牛啊~今后要好好学学!!
想不到楼主还是我的校友,真佩服啊!!
(365631568)

出0入0汤圆

发表于 2009-3-31 22:00:56 | 显示全部楼层
用IAR Embedded Workbench for Atmel AVR时候为什么编译后为什么会出现“configuration is up-to-date”或者“容量大于1K不能编译”的提示的呢?加的那个License type是Stand alone - Time limited
(365630348)

出0入0汤圆

发表于 2009-3-31 22:21:16 | 显示全部楼层
好贴!  支持,全力支持
(365628779)

出0入0汤圆

 楼主| 发表于 2009-3-31 22:47:25 | 显示全部楼层
更新Qtouch Slider部分原理设计,以及Qtouch Pad硬件PCB Layout部分
(365562982)

出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;
    }
(365562070)

出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级的,精度如何?
(365560604)

出0入296汤圆

发表于 2009-4-1 17:43:40 | 显示全部楼层
to 【74楼】 zh313212  
    256级的做过阿,如果你用Snail GUI套件就能看到效果了。^_^256级不是盖的哦……
精度当手按住不动时,只有正负2度以内的变化(这里已经换算成角度了)。

to 【73楼】 zh313212
    那段代码是我尝试做的重新自适应代码。大体功能是,当没有任何按键,包括Slider、
Rotor被触发的状态下,500ms后立即进行一次且仅进行一次环境自适应。当无任何触发的
状态一直保持下去时,每5s进行一次环境自适应。
(365540393)

出0入0汤圆

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

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

出0入296汤圆

发表于 2009-4-2 22:01:41 | 显示全部楼层
不可避免……如果使用外部晶体,肯定要损失一个通道,但这个1ms的天窗会小一点……
(365035549)

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2009-4-7 19:57:37 | 显示全部楼层
【78楼】 zh313212
其实,ATMEL Touch Lib真正采样的全部时间很短 ,一般在1ms,然后库中还可以设计定每秒的刷新频率,所以,做低功耗还是可行的啊
比如,采样频率50Hz,一秒钟全速跑得时候也就50ms 其他时间可以进入低功耗模式~如果配合picopower技术效果会更更好咯~
(365031969)

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2009-4-7 20:45:19 | 显示全部楼层
【80楼】 zh313212
ATMEGA88P的数据手册官网上有咯~
点击此处下载 ourdev_433834.pdf(文件大小:7.91M) (原文件名:m48P_88P_168P_328P_H0209.pdf)
货源的话,可以咨询在代理吧,我现在不清楚你是否有生产计划,有批量的话最好提早向代理备案,88P已经量产很长时间了
(365029594)

出0入0汤圆

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

出0入0汤圆

发表于 2009-4-9 14:37:57 | 显示全部楼层
hello
我想问问,上边提供下载的  
编译平台 IAR Embedded Workbench for Atmel AVR   是4K限制版的吧,
Fatal Error[e89]: Too much object code produced (more than 0x1000 bytes) for this package
kingofkings 技术火腿  你是怎么编译的啊,我为啥每次编译都提示这个问题啊!
(364689919)

出0入0汤圆

发表于 2009-4-11 19:35:05 | 显示全部楼层
金老师能不能把Snail Touch的sch和PCB文件上传呢?想做块实验板玩玩,但那个 Qtouch Wheel 画起来有点难度。
(364683657)

出0入0汤圆

 楼主| 发表于 2009-4-11 21:19:27 | 显示全部楼层
【83楼】 Iamavr 啊,来啦!
这个……
我使用的是IAR提供的正版……
【84楼】 zh313212  
原理图已上传
PCB库文件请首先确认你的电脑是比较好的配置,那个库是用几十万条的细线组成的,卡死你不要命,还是建议按照手册,画线条然后用辅铜的形式。
(364453863)

出0入0汤圆

发表于 2009-4-14 13:09:21 | 显示全部楼层
本帖有硬件的部分么?
(364446217)

出0入0汤圆

发表于 2009-4-14 15:16:47 | 显示全部楼层
楼主 程序里面的channel,sensor ,detect_threshold是怎么回事,指的是什么?
(364445825)

出0入296汤圆

发表于 2009-4-14 15:23:19 | 显示全部楼层
channal是指一个电容采样通道,对M88来说,分别有8个电容采样通道;
sensor是指由至少一个连续的电容采样通道组合而成的传感器,比如按键Key(1个通道);
滑条Slider(3个通道);滑环Rotor(3个通道)。
detect_threshold是指当这些通道的变化量超过一定数值以后就判定该传感器被触发,
这里的detect_threshold就是所谓的判定门限。
(364441059)

出0入0汤圆

发表于 2009-4-14 16:42:45 | 显示全部楼层
非常感谢Gorgon Meducer 傻孩子无私的帮助,永远支持你,your fans!
(364439498)

出0入0汤圆

发表于 2009-4-14 17:08:46 | 显示全部楼层
实在实在有太多的???,楼主能否再帮帮忙?

上面“这些通道的变化量”指的是什么的变化量,时间还是电位差?

程序中的定时器是用来干嘛的? 是用来记录电容的冲放电时间吗?

按键被触摸是不是通过检查电容的冲放电时间来判定的?还是~~~~~~~

void qt_calibrate_sensing( void )这个函数校准的是什么东东,为什么要校准?
(364433894)

出0入296汤圆

发表于 2009-4-14 18:42:10 | 显示全部楼层
这些内容已经牵涉到库原理本身,我们也不是很清楚。
(364425604)

出0入0汤圆

发表于 2009-4-14 21:00:20 | 显示全部楼层
空了也做做实验玩玩
(364265717)

出0入0汤圆

发表于 2009-4-16 17:25:07 | 显示全部楼层
为什么旧版本的LIBRARY所建的工程换了新版本的LIBRARY和头文件后,检测是哪个传感器作用时会出现在错误,改为数组形式后却只能识别一个传感器。
if (qt_touch_status.sensor_states[1])
      {
        LED1_ON ;
      }
(364261201)

出0入296汤圆

发表于 2009-4-16 18:40:23 | 显示全部楼层
没有这个问题啊……我更新的工程用的就是新版库函数……所有机能一切正常啊。
(327216702)

出0入0汤圆

发表于 2010-6-19 12:48:42 | 显示全部楼层
mark
(325764345)

出0入0汤圆

发表于 2010-7-6 08:14:39 | 显示全部楼层
先顶一下,以后会用到。
(325763645)

出0入0汤圆

发表于 2010-7-6 08:26:19 | 显示全部楼层
MARK
(316295299)

出0入0汤圆

发表于 2010-10-23 22:32:05 | 显示全部楼层
不错
(315203415)

出0入0汤圆

发表于 2010-11-5 13:50:09 | 显示全部楼层
电容按键
(311627138)

出0入0汤圆

发表于 2010-12-16 23:14:46 | 显示全部楼层
好东西,记下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号-1 )

GMT+8, 2020-10-31 18:20

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

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