微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 利用USB控制器设计的Windows音量控制器

利用USB控制器设计的Windows音量控制器

时间:11-20 来源:作者: 哈尔滨工程大学 于蕾 杨莘元 点击:

由TCDl208AP的时序图可以看出,TCDl208AP采用二相驱动脉冲工作,时序脉冲驱动电路提供4路工作脉冲,即光积分脉冲SH,电荷转移脉冲φ1、φ2,输出复位脉冲RS。系统提供的主时钟频率CLK为4 MHz,设定数据输出频率为1 MHz。TCDl208AP的典型最佳工作频率为l MHz,该器件具有2160位有效像元,正常工作时要有52个虚设单元输出(DUMMY 0UTPUTS)信号(含暗电流信号)。因为该器件是二列并行传输,所以在一个周期内至少要有1 106(2 212/2=1 106)个φ1脉冲,即TSH>

  当Windows识别并进行USB枚举后,为了得到上述格式的单字节响应,操作系统开始向终端3IN发送周期性IN请求。该部件监控旋转控制的变化情况,并且当有动作(如音量增加)请求时发送通信数据;没有动作请求时,该固件返回0值。

  MAX3420E简化了USB修改过程,SPI主控器(即ATtiny13)将报告数据字节写入EP3INFIFO(endpoint 3 IN FIFO)的寄存器。然后SPI主控器将数值1写入EP3INBC(endpoint3IN byte count)寄存器,表示为了响应USB的下一个IN请求,将会传送1个字节。传送发生后,MAX3420E产生中断请求,表明下一个字节的数据可以写入EP3INFIFO了。

  下面是完整的传送程序。可以将音量控制器的HID信息传送给PC机。看似非常简单,但是该编码却包含了很多的HID控制页面。剩余的代码实现代码循环。该循环会检测旋转控制器,然后点亮发光二极管。对任意USB外围器件来说,USB样板文件代码需要进行内部处理。这个样板文件代码控制着器件的枚举、悬挂、恢复以及USB总线置零等命令。

  Send_byte:
  idi  MAX_Reg,rEP3INFIFO
  mov  MAX_Dat,audio_flags
  clr  audio_flags
  rcall  wreg
  idi  MAX_Reg, rEP3INBC
  mov  MAX_Dat,1
  rjmp  wreg

4 读取旋转控制

  旋转编码器用格雷编码端子A和B分别表示顺时针和逆时针旋转。旋转控制器与MAX3420E上有内置上拉电阻的GPIN引脚相连。图2显示的是左旋和右旋时的开关转接状态。锁定位置状态1和3是控制停止位置。控制器经过1个或3个状态后,可到下一个锁定位置。该固件只需对旋钮旋转进行译码,就可以实现向锁定状态1和3的转换。例如,实现右旋状态转换需要由3到1或由2到3。

图2 旋转编码器的开关连接状态

5 完善代码

  ATtiny13有512字长的程序存储空间。编码需要完成以下几项工作: 首先要对设备进行枚举。这一步包括对MAX3420主控制器的各种类型的"获取描述符"请求进行解码,对对应的表数据进行定位以及对终端零值FIFO进行数据写入,以将其传送至固件。

  编码时也应该为随时发生的USB总线置0以及USB总线的悬挂和恢复进行测试。必须对旋转控制位置和按钮开关状态进行周期性读取和译码。当主机接受了由EP3IN传来的用于发送HID控制数据的信息包后,该代码还必须为下一次的IN传送进行终端的数据加载,并为下一次的数据传输表明控制端点。

  为了减小代码量,设计过程中采用下面的方法: 第一,省去了可选择性USB串描述符。这些描述符是描述诸如供应商、器件类型等的文本串。这些字符串只是信息性质的,对USB外围器件的操作来说,没有任何价值。第二,没有使用可选择性USB遥控唤醒部分。这个部分实现起来并不困难(MAX3420E会承担这项工作的绝大部分),但是却会占用码字空间。第三,没有把HID报告的描述符写入程序闪存器,而是写入EEPROM。ATtiny13有64字节的EEPROM,可以写入该EEPROM的任意表数据,都会保存在程序闪存器中。

6 写入代码

  如果只用图符方式进行此项设计,那么可以用6引脚的J2连接AVRISP2在线程序设计器来下载这些程序模块。如果想要研究或修改该代码,也可以把ATJTAGICE2ND(用于AVR系列的完全在线仿真器)连接到J2上。不管使用哪种下载方式,都不要忘记把HEX文件(闪存器代码)和EEP模块(EEPROM数据)都写进去。

7 总结[2]

  现在的电子应用中,USB接口几乎已经取代了串行接口成为PC机上接口连接的首选。本设计表明:虽然USB比串行端口更为复杂,但是USB连接却并不需要更多的代码或者昂贵的微处理器。代码的绝大部分是USB样板文件,因此可以在多项设计中重复使用它。另外,USB有巨大的优势:从电缆中获取电源,自动的"握手"和错误检测以及可以进行热插拔。如果想要保留已有的MCU和工具,可以采用诸如MAX3420E那样的基于SPI的USB控制器来搭建USB外围电路。

参考文献

[1] Maxim公司.MAX3420 datasheet,2005-09-26.
[2] 张弘.USB接口设计[M].西安:西安电子科技大学出版社,2002.
[3] 卢珞.罗婷. 基于SPI的USB控制器接口设计[J]. 单片机与嵌入式系统应用,2006(12): 41-45.

于蕾(讲师),主要研究方向为电子电路系统设计。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top