OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 51-shiyongzhu 进程贴 ************** USB

共22条 2/3 1 2 3 跳转至
助工
2013-06-24 00:51:28    评分
11楼

进程7  蜂鸣器实现演奏《光阴的故事》(自创哦)

乐曲演奏的两个基本参数是每个音符的频率值(音调)及其持续的时间(音长)。因此只要控制输出到扬声器的激励信号的频率和持续时间,就可以发出连续的音乐声。音调的控制频率的高低决定音调的高低。简谱中从低音1到高音1 的每个音名对应的频率如下表所示。

为了减小输出的偶次谐波分量,输出到扬声器的波形应为对称方波,因此在扬声器前要加一个二分频。表中给出了各音阶频率时计数器不同的预置数。采用加载预置数实现分频的方法比采用反馈复零法节约资源,实现起来也容易些。对于乐曲中的休止符,只要令分频系数设为0,即初始值为2e14-1=16383即可,此时扬声器将不会发出声。音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。 本例演奏的是最近正火着的《中国合伙人》的主题曲即罗大佑的《光阴的故事》片段,最短的音符为16分音符,经过不同16分音符的时间长度的比较,选择0.25s时长的16音符比较好。

考虑到如果基频过低,则由于分频比太小,造成四舍五入后误差较大;如果基频过高,虽然误差减小了,但是分频数变大。综合以上两个因素,选择5MHz作为基频。由于实验板上没有5MHz的时钟频率,所以必须先分频。 本实验要演奏的《光阴的故事》,各音阶频率及分频比见下表。

该演奏程序详见附件。附件中还带有笔者参考的一篇《ep2c35实验板蜂鸣器实验》文章、《怎样识谱》文章以及其他相关资料,供大家参考。

蜂鸣器相关资料.rar

 


 

 


助工
2013-06-30 19:48:06    评分
12楼
 进程串口收发功能的实现

串口是使用最为频繁的通讯接口,其根据电平的不同又可以分为RS232RS422RS485等等。利用CPLD实现串口功能很实用。串口根据收发数据的不同速率可以12002400480096001440019200等等,本次串口功能的实现,我选择了9600bps,其每发送的一位的所占用的时间为0.104166ms,对应50Hz大约需要5208个时钟周期,但是为了实现接受时,能够将读取数据的时刻对应于某一接受位的中间时刻,我们通常需要5208时钟周期的一半、四分之一或者是十六分之一,也即是将每位细分成两位、四位或者十六位。这里我们选择细分成四份,从而我们需要的时钟周期为5208/4=1302,更具体的实现过程推荐大家看侯伯亨所著的《VHDL硬件描述语言与数字逻辑电路设计》一书287SCI串行接口芯片设计实例。

本人做了两个串口程序一个是定时发送一个字节,一个是采用fifo发送多个字节,两个例子都有接收数据功能,通过上位机发送字节,可以点亮相应的led灯。

 下面给大家参考下我的代码,请大家批评指正。

SCI.rar


助工
2013-07-31 02:13:22    评分
13楼

进程9   LM75温度传感器读取

LM75温度传感器对应电路板中的元器件U3,由于该器件没有明显的引脚标示,所以大家在焊接一定要注意,正确的焊接方向是元器件上的标示LM75倒着的。

LM75温度传感器内部的传感器共5个寄存器,分别为指针寄存器、配置寄存器、温度寄存器、过热关断阈值寄存器、滞后寄存器,其中指针寄存器对于用户来说是不可访问的,但通过将指针数据字节包含到总线命令中可选择进行读/写操作的寄存器,温度寄存器用来保存测得的温度数据,该寄存器包含2个8位的数据字节,由一个高数据字节(MS)和一个低数据字节(LS)组成,其它寄存器的信息可以参照附件中的相关资料。对温度的读取即是对温度寄存器的读取,LM75采用I2C总线与主机进行通讯,具体时序见下图。

 


CPLD与LM75之间通信大概可以分为4种类型:启动、停止、写、读,启动需要在SCL中间时刻出现下降沿,停止需要在SCL中间的时刻出现上升沿,写需要满足在SCL为高电平数据数据线SDA上数据稳定,读需要在SCL中间时刻读取这时信号最为稳定。为此在产生SCL的同时产生一个SCL的2倍频的时钟SCLK,用于控制在SCL的中间时刻进行数据更新。

I2C总线通信主要采用有限状态机进行,这方面可以参考《verilog 数字系统设计教程》中168页。在此就不在叙述了,最后给大家附上代码及相关的参考资料,I2C总线调试面临诸多不确定的问题,希望大家耐心的分析,调这个程序我前前后后折腾了一个星期,预祝大家能够调试顺利。


 贴9.rar  PS:按S1刷新显示温度。


 



助工
2013-07-31 02:14:23    评分
14楼

进程10 EEROM烧写及读取

AT24C04的与主机同样采用I2C进行通信,通信协议可以参考附件中的相关资料,在此就不叙述了。本进程设计了一个AT24C04烧写和读取系统,数码管用于显示地址,LED显示相应地址的数据,拨码开关作为烧写数据的输入,按键S3用于控制烧写,按下则将当前的拨码开关对应数据烧写到AT24C04中,按键S7用于刷新AT24C04地址中数据,新数据烧写完按下S7即可刷新显示当前的新数据,按键S4和S8按动即可查看不同地址下存放的数据。

今天有点小困就不再详细的分析实现的代码具体结构了,附件中的代码大家可以自由查看,若有疑问可以与我取得联系。 (不好意思,上传附件出现了服务器错误,改日再上传了,请大家见谅)

13_AT24C04.rar

 


助工
2013-08-11 07:28:22    评分
15楼

进程11  RTC时间读取

            RTC的与主机同样采用I2C进行通信,通信协议可以参考附件中的相关资料,在此就不叙述了。本进程设计了一个RTC时间读取系统,与前面几个I2C程序类似依然采用状态机进行读写,数码管用于读取RTC芯片中的内容 ,由于要显示的内容比较的多,需要分两个屏显示,本程序中设置S3为切换显示的按键。由于CPLD逻辑资源比较有限抑或由于程序较为慵长,本人原本打算再加入一段向RTC设置新时间的程序,但是逻辑单元老是超出范围,所以这个程序只能用于显示RTC中的时间。 详细程序见附件,请大家批评指正。

贴11-RTC.rar



助工
2013-08-11 08:52:41    评分
16楼

进程12  IR红外接收

终于可以和I2C告一段落,入手IR了。做IR接收程序首先面临的问题就是发射源即红外遥控器问题,当然淘宝上是有得卖的了,如下图所示各式各样,但是本着最低成本DIY原则,还是另辟蹊径吧,下面看看偶的方法,权当抛砖引玉吧。

 

红外遥控器其实生活之中随处可见,如电视遥控器、空调遥控器。想到了这一点,本人果断的拿出了我住处的春兰空调遥控器,如下图所示。


下一步就是需要知道该遥控器的通信协议了,但是百度了一大圈也没搜到其协议究竟是什么(春兰牌子也还可以啊?)。不知道协议咋办,这时在网络搜到一篇《红外遥控器编码大全》的文章,粗略的看了下这篇文章,不同协议之间区别不是太大,较大的区别就是起始码的时间长短(需要大家自己了解下红外的一些基本知识),换句话说只要能够测出这个红外遥控器起始码的时间即基本上能够确定所使用的协议。于是本人写了一段测起始码时间的程序,详细程序见附件中8_Infrared—start.rar。经过本人的多次测试基本确定了春兰遥控器的起始码时间为13.5ms。满心鼓舞的我查了下《红外遥控器编码大全》内起始码时间为13.5ms的协议,其如下图所示,包括起始结束位共有34位。但是很遗憾我接收到的脉冲数比这要多,包含引导码和结束码一共74位,其中数据位为72位9个字节,看来春兰自个把这个协议改造了一下。


改了协议也不怕,只要起始码找到就行,根据“0”和“1”脉冲时间长短可以接收数据了,接收程序见附件中8_Infrared—rec.rar,该程序只适合春兰的空调遥控器,当使用在其它红外遥控器时需根据实际协议进行配置。

贴12-IR.rar



高工
2013-08-12 14:44:06    评分
17楼

加油继续!


助工
2013-08-12 19:28:23    评分
18楼

好的,哈哈。


助工
2013-09-04 23:41:20    评分
19楼

进程13  USB转PS2鼠标读取

最近一直在折腾PS2鼠标读取问题,中途遇到了诸多的问题,所以帖子才迟迟没有更新,所幸最终还是解决了PS2鼠标的读取问题,下面来扒一扒PS2鼠标的读取问题。

按道理来说,做这个实验首先得需要有个PS2鼠标或者PS2键盘,但是这种比较古董的接口的设备已经很罕见了,很不幸,在家找了半天也没发现有这个接口的设备。可是幸运的是,最近单位搬家,有很多废弃的USB转PS2的接口的设备(如下图所示)。于是本人突发奇想,可不可以将我的USB鼠标插入USB转PS2的接口上,再将这个转接头插入PS2接口上,于是乎在单位搜集了好几个这个转接头回家准备大干一场。

                                   

起先我的思路是:由于使用了USB转PS2转接头,所以应该根据USB的协议来进行编程读取USB鼠标的值。根据这个思路,我读了大量的USB协议的书籍。根据USB协议,USB设备数据采用NRZI 编码,数据线是差分的,于是我用CPLD读取Data+这根数据,发现数据很奇怪,像是一个时钟的信号,大概在13Khz左右。再读Data-发现和Data+并不是差分的,非常奇怪。搞不清是什么原因,我只能拆开鼠标一探究竟,该鼠标主芯片采用A2611(见图中),看了该芯片datasheet后,发现其也兼容PS2协议,彻底凌乱了,搞了半天还是PS2协议,早知如此,我费那么多功夫干嘛。迅速的学习PS2的协议后(在这里我就不仔细介绍具体的协议了),我开工了,编程顺利的读取了,鼠标上电时发的数据 0xAA 和 ID 0x00。要得到鼠标的信息还需要鼠标工作起来,需要向鼠标发送0xF4,启动鼠标向主机发送数据,奇迹出现了,成功接收到了鼠标发送的数据,这么多天的努力终于没白费。 

应啸风网友要求上几张效果图,请注意不同情况下led灯

尚未操作鼠标

 按住单击键不松开

按住中键不松开

按住右击键不松开

 主要资料代码:

贴13 ps2鼠标.rar

 

 




专家
2013-09-04 23:48:12    评分
20楼
希望楼主能拍点效果图或者视频

共22条 2/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]