这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » shark1234567 CPLD_DIY 进程贴

共96条 1/10 1 2 3 4 5 6 ›| 跳转至

shark1234567 CPLD_DIY 进程贴

助工
2013-06-14 07:32:53     打赏

突然发现很多回帖其实就是自己,真正回帖寥寥无几,所以给部分内容加上了可耻的回复可见,大家见谅!

此帖将会是shark1234567在本次CPLD DIY开发的进程帖。

    本人小菜鸟一名,对设计要求不慎了解,习惯于用最简单的方法解决问题。所以设计可能存在很多问题,望大家多指教。我会将我的经验分享给大家,也希望大家多提意见督促我进步,在此谢过、、、、、、

    我也是利用课余时间,所以内容更新可能不是很及时,每一部分可能也会分很多次完善,万望见谅。希望大家多提宝贵意见。再谢、、、、、、

目录:

一、器件焊接篇——魂牵梦绕的它、你来了!..............................2楼

二、LED篇——永恒的流水灯123【视频】..................................3楼

三、按键篇——第一次接触【视频】......................................4楼

四、数码管篇——另一种流水灯实现......................................5楼

六、LCD_1602篇——再简陋也是屏幕【电路修改】..........................7楼

七、LCD_12864篇——汉字来袭...........................................8楼

八、串口篇——通信无处不在【视频】....................................9楼

九、红外篇——第一次无线遥控【视频】.................................10楼

十、VGA篇——彩条彩格飘啊飘【视频】..................................12楼




关键词: shark1234567     进程    

助工
2013-06-14 07:33:26     打赏
2楼

一、器件焊接篇——魂牵梦绕的它、你来了!

    给力的快递大哥告诉我“取快递了”,我知道,它来了,不早不晚、、、、、、

    首先来看看全家福,这也算婚前公证吧!因为它们马上将要结合、、、、、、

器件包 散件

    接下来让我们看看我的工具,从右到左分别有调温台、锡丝、松香、镊子、助焊剂、棉棒、斜口钳。首先是调温台,功率60W,本次焊接用到两种烙铁头,分别是刀头和尖头。锡丝是国产63锡,某宝购得,价格实惠,虽然不是很亮但还是蛮好焊的。松香自不必讲了,脱焊神器,助我等小菜完成IC与PCB的统一大业。镊子个人习惯用直的。助焊剂基本属于打酱油的,但以备不时之需就把它拿出来了。当然洗板水也是要的,可是味道太大就先不出场了。

工具合集

    PCB“裸照”一张,这是他的婚前“遗像”了,他马上就要告别单身生活,走向婚姻殿堂了(上面的那些家伙都是见证人)。黑油白字,过孔盖油,沉金。我喜欢,绿的都看吐了,蓝的也快不行了。黑色的很酷,金字很亮,正点。可惜没有铜柱了,回头再想想办法、、、、、、

PCB裸照


    与主芯片结合图一张、、、、、、采用脱焊,技术一般,不是很漂亮,大家见笑。


    接下来是所有贴片都搞定了的照片!累死了、、、、、、终于快完事了。

所有贴片完成

    最终话!!!直接上图、、、、、、

焊接完成

    细节图、、、、、、

完成细节图

    焊接工作到此结束、、、、、、

 

经验教训

一、贴片焊接:

      1.在焊接CPLD时,选用刀头,个人习惯温度在300~350左右。先在焊盘一个对角线上的两个角上上一点锡,尽量上的平整一些,这样便于对齐引脚。然后将芯片管脚与焊盘对正,这个过程尽量细致些,不要着急,这步做的不好后续工作无法进行。对齐后按住芯片中心将芯片压紧,是芯片与PCB板紧贴,用烙铁烫一下刚刚上锡的两个角,将芯片固定。再次仔细检查,观察管脚与焊盘是否全部对正,这是最后的机会了,所以一定要认真。如果保证所有管脚都已经对正,前期工作完成。我使用的方法是托焊,过程如下。先将烙铁头擦净,保证没有脏东西,烙铁头表面光洁平整。管脚上满锡,使管脚与焊盘充分被锡包裹,不用上很多,但要都上到。烙铁沾一点松香,将板子立起来斜放,使要焊接的则一排管脚斜着立起来,这样借用重力托焊起来方便很多,用烙铁将这一排管脚上的锡从分加热至全部融化,延由上至下的方向拖动至最下方,将烙铁头上的多余的锡擦净,如此反复至拖干净为止。焊接时注意芯片温度不要过热,如果有管脚间锡不易吸出,多沾一点松香就搞定了,板子放平,延管脚方向用松香带一下就出来了。一定要检查好关键是否有粘连,切记。检查时不一定要用放大镜,将电路板靠近光源对光检查也是可以看清的。其他IC也可以使用相同方法焊接。这样喊出来的管教焊点一致性高,外观圆润饱满,不会出现虚焊、毛刺、上锡不均匀等情况。当然这么焊也比较费锡

      特殊情况下亦可以一个个管脚焊接,比如对托焊没把握、IC被暴力拆下后管脚普遍不齐等。这么焊就纠结了,需要用尖头镊子,尖头烙铁,一个个对着焊盘点焊。不建议使用这种方法,这种方法仅适用于万般无奈的条件下,请慎重使用。一个个点焊是对耐心和眼力以及眼力的极大挑战、、、、、、

      2.在焊接电阻、电容和三极管时,选用尖头烙铁,温度在380~420上下。先在焊盘一个点上锡,个人习惯全部在一侧上锡,如横向的在右侧上,竖向的在上侧上,上锡量点到为止,切勿上多,如果掌握不好可以选用细的锡丝或是将锡上到烙铁头上转移焊接,上好锡后,用镊子夹好元件,将焊盘上的锡融化,将元件摆正烙铁撤出,待锡冷却后松开镊子。所有元件固定后再在另一侧上锡,同样是点到为止,贴片的上锡量其实很少。有条件的可以选用0.6的细锡丝,便于掌握上锡量。

二、贴片拆焊:

      有焊就有拆,谁也不能保证永远不犯错误,讲一点拆焊的方法。首选是电阻、电容和三极管,将焊点上的锡上的多一些,用烙铁反复加热焊点,元件很快便会脱离焊盘,沾附在烙铁上,烙铁头轻轻抖一下元件就会下来了。如果是拆焊双排的IC,可以将管脚上的锡上满,使用烙铁对两侧管脚来回反复加热,待两侧锡均融化时,斜向稍一用力,芯片就下来了。拆焊如本次活动中的CPLD这种芯片时,最好用风枪,选一个细一点的风枪头,对着焊盘转圈吹,待锡全部融化,有镊子一挑,大功告成。

*经验教训系本人亲身体会,如有谬论,欢迎指正。*

 

    测试用的是由51FPGA提供的下载文件。

测试一:LED


测试二:数码管


测试三:LCD_1602


    测试四是蜂鸣器,就不展示了。

    至此焊接篇终结。


助工
2013-06-14 07:33:36     打赏
3楼

二、LED篇——永恒的流水灯

    流水灯是永恒的,我相信,此时此刻,在世界的某个角落,一定有一人对着流水灯欣喜不已,这是一个设计的终点,也是学习的起点、、、、、、

永恒的流水灯1:仅仅只是流水灯

    我设计的流水的非常简单,使用计数进行分频,使用case语句进行循环,反复对LED数据进行赋值,已达到流水灯的效果。


视频地址:http://union.bokecc.com/flash/single/290666218ACBA694_0D274D20CE8735799C33DC5901307461_false_EEA982EE6B20F4D1_1/player.swf

永恒的流水灯2:交通灯

      我觉得,交通灯便是流水灯,本质上来讲都是一样的,设计思路也与永恒的流水灯1完全相同,仅仅加了一个控制秒单位数量的计数而已。


视频地址:http://union.bokecc.com/flash/single/290666218ACBA694_267338145BE7DF989C33DC5901307461_false_EEA982EE6B20F4D1_1/player.swf

永恒的流水的3:呼吸灯

    准确的来说,其实呼吸灯并不应该算到流水灯中,它并不是几个LED交替变化。而是占空比变化导致LED明暗变化所致,可我又比较懒,一丁点再开个PWM相关的帖子的欲望都没有。所以既然都是用LED,算到LED篇也就不为过了。设计的是2秒钟完成一次明暗变化,第一次做,时间掌握的不太好,但效果还是有的,请看视频。


视频地址:http://union.bokecc.com/flash/single/290666218ACBA694_10FA23304D6FBD299C33DC5901307461_false_EEA982EE6B20F4D1_1/player.swf

设计思路:

    1.首先,为了保证能够分辨出流水灯的效果,用原有的50MHz晶振肯定是不行了,除非用高速照相技术,或者你是外星人。所以必须要分频。对于分频个人比较习惯于用系统时钟作为触发,通过计数器使能的方法来进行使能。也有一种做法是通过计数器和反转命令来产生新的时钟信号。我之所以钟情于前者,完全出于对后者新产生的时钟信号的驱动能力的怀疑。我觉得自行产生的时钟信号是一个基于寄存器型的数据,对他的驱动能力、线延时等不确定因素太多,秉着错杀三千绝不放过一个的原则,选择了使用计数经行使能已达到分频的目的。当然如果我的理解有问题也希望大家指正。在这个电路中使用的是0.5秒作为时间间隔。分频有了,如何实现流水那?为了花样多一些,我使用了case语句来实现,每一句控制一种LED的亮灭情况,一共60句,对应了60种变化。当然如果你仅仅想要让它一个LED点亮延单一方向循环的话,就更简单了,一个移位寄存器足矣搞定。

    2.上面也说到了,其实交通灯就是一种流水灯,所以大体思路同上。具体细节变化有这些。首先根据实际情况将时间间隔调整为1S,其次在case语句中都加入了计数器来控制每一种状态的维持次数已达到交通信号灯的实际作用。

    3.呼吸灯的实现是基于占空比的不断变化,致使LED亮度变化,从而产生一亮一暗的效果,在我的电路中,以0.2毫秒为周期,没次一周期循环完毕,占空比产生一次变化,占空比从最初的0增加到最后的1,再减小到0,周而复始。

经验教训:

    其实对于流水灯,真的没什么可说的,只提一点就好吧,说一个很常见的又会在发现时觉得自己很白痴的错误,就是没有控制好间隔时间,导致流水速度过快,肉眼无法识别,最终看到的是全亮,将流水灯变成了动态扫描。

    在做呼吸灯时一定注意周期切记太短,这样会导致呼吸灯变化速度很快,效果不明显。


      至此LED篇终结。 

 


助工
2013-06-14 07:33:44     打赏
4楼

三、按键篇——第一次接触

     按键作为最基本的输入方式自然是人机交流必不可少的组成部分。

    在我的电路中,实现以下功能:延时检测信号用以消抖,并检测下降沿,当下降沿来时输出1个时钟宽度的标记信号,每来一个标记信号,对应的LED状态变换一次。

    上视频!!!


视频地址:http://union.bokecc.com/flash/single/290666218ACBA694_D42273B8049F01699C33DC5901307461_false_EEA982EE6B20F4D1_1/player.swf

设计思路:

    输入信号处理主要对键盘输入的信号进行去抖与同步。接收时钟信号与来自按键的低电平信号,通过延时检测,使按键消抖,并去除毛刺。这样,第一级触发器采集到的信号就是真实有效的。通过3个D触发器将接收到的信号与时钟同步,且避免亚稳态的产生。通过逻辑门,检测输入信号的下降沿,并输出一个1个时钟宽度的标记信号。这样就得到了一个真实、稳定的同步信号供后续电路使用。


经验教训:

    这个,其实,真没有,实在不知道有什么好分享的,因为实在是、、、、、、没什么好说、、、、、、


助工
2013-06-14 07:33:53     打赏
5楼

四、数码管篇——另一种流水灯再现

    其实数码管也仅仅是另一种流水灯,大同小异,说穿了不过是一堆排列好了的LED,仅此而已,不用不他看的太复杂。我写了一个最简单的数码管译码与动态扫描电路,让八位数码管显示八个数。为了适应16进制数显示的需要,数字可以是0~F中任意一个。

    闲言少叙,上图、、、、、、

显示0~7、、、、、、


显示8~F、、、、、、


设计思路:

    数码管怎么说那,我觉得他就是两组流水灯,一组控制哪一位点亮叫位选,一组控制哪一段点亮叫译码,它俩配合,照着规定的速度跑起来,数码管就完成了。

    提到数码管就不得不说到动态扫描了,了解的同学就跳过这段吧。所谓动态扫描,就我理解,简单来说就是刷新速度主够快,人眼识别到的是同时点亮。一般来说绝大多数的视频都是25帧左右,也就是说,当图像刷新速度大于25帧,人眼看到的就是同时点亮了,动作连贯。不会发现图像之间有间隔有差异。放到数码管上来说,就是一位位去点亮,但每一位都不停的去点亮,一个接着一个,当速度快到一定程度,在人眼中看到的就是它们同时点亮。

    首先是控制速度的分频信号,这个也没有什么硬性规定,不快不慢刚好就好了,过慢数码管显示看不出动态扫描的效果,过快眼睛识别出来会有乱码甚至全亮。我习惯于在50MHz的时钟下计12500个数,既以0.25毫秒为时间间隔进行动态扫描。然后说说位选,可以使用一个计数器来实现位选信号的循环,比如8位数码管,弄一个0~7计数就可以表示8个不同位了,再根据计数值的不同,送入相应的位选信号和对应位的显示数据。其实将计数值对应成为位选信号完全可以看做是一个译码器,比如8位数码管,将0~7的二进制数翻译成对应的位选,不正好是一个38译码器吗!

    译码短路是跟着数据来的,显示数据变化,译码电路将相应的数码管段信号送出,比如数码管低有效,若显示“0”,按abcdefg的顺序,译码电路应送出“0000001”,显示“1”,应送出“1001111”,显示“2”,应送出“0010010”。以此类推不再详述。

经验教训:

    其实LED流水灯如果能搞出来,数码管就自然不在话下。要说经验吗、、、、、、也没啥,教训吗、、、、、、也没啥。感觉自己说得内容好水。但真不知道说什么,在做数码管时很容易就出来了,真没啥可说的.

    至此数码管篇终结。 


助工
2013-06-14 07:45:37     打赏
6楼

五、蜂鸣器篇

     


助工
2013-06-14 07:45:43     打赏
7楼

六、LCD_1602篇——再简陋也是屏幕

      LCD屏幕现在越用越少了,但作为最常见的最低成本的显示字符的器件,开放板上自然是少不了滴。做个时钟、温度计,显示个字符串都是不二选择。虽然功能不是多强大,但人家胜在便宜好用。作为小菜鸟的我设计的电路,自然也是功能最简单的,不断刷新显示“LCD_1602 ——SHARK1234567”这几个字符,细心的朋友可能发现,不对啊,为什么第一行最后有个“9”????????????其实是这样的,以为我做的是没光标没闪烁不断刷新,所以数据送一遍后就看不出差别了,为了分辨它到底干没干活就加了一个秒计数,一秒计一个数,0~9循环,看看到底有没有数据变化

      附一个数据手册,不用看的多仔细,电器特性什么的随便看看。着重看时序关系和配置过程,这两样明白了,剩下的就仅仅是读手册查不同配置寄存器的功能了。通用1602LCD使用手册_中文.pdf

      言已至此,上图、、、、、、

设计思路:

      因为LCD_1602的配置过程是串行的,所以使用了case语句,已达到穿行的目的。而对于我这种懒得不能再懒的人来说,设计一个读忙的电路无疑是在要我的命,那怎么办,苦思后得到了惊人的答案:切,慢点刷新好了。打个比方,无论你LCD_1602多慢,总有个最长的工作时间,具体多少有些忘了,反正我送给你的速度比这慢就好了。所以必然用到了分频。现在大框架有了,一个分频信号控制一个case做循环进行配置,配置完后,case进入小循环负责送数据,来刷新显示。为了使case小循环不用写那么长,所以两句来回循环就好了,前一句送地址,后一句送数据。可有怎么送总计32组地址与对应的数据那???再来个译码电路,里面包含着地址与对应的数据。可译码电路又由谁控制那?在case小循环里加一个计数器喽!打完收工。设计思路理清了,可以去堆代码了。

经验教训:

      配置这东西,够用就好,不用每一个都配置到,只要将你要用到的配置了就行。最开始刷新速度慢一点,使用的分频信号频率低一点,比如100K(如果没记错我最开始就用的这么大,后来为了配合秒计数稍稍调高了分频信号的频率)。

电路修改:

      因为我所使用的LCD_1602与开发板设计不够一致,导致对比度惨不忍睹,所以对电路板稍作修改。将原来给12864的电位器接给了1602以方便调节1602的对比度。当然,原来接给1602的R64需要摘掉。话不多说,上图。



      修改完毕!!!


助工
2013-06-14 07:45:50     打赏
8楼

七、LCD_12864篇——汉字来袭

      LCD1602据说好像也可以用显示中文,是按图形来的,没试过不便评论。但我相信,大多数人一提到LCD、中文,首先想到的还是LCD_12864。

      附送手册,同样建议大家着重看时序关系就好了,12864与1602相似度极高,如果你在此前将1602搞出来了,那我相信,已完全可以将1602的设计移植过来,稍作修改,在很短的时间就能搞定。因为我就是这么干的骑远飞J12864中文液晶使用说明.pdf

数字和英文字符、、、、、、


汉字来袭、、、、、、


图像显示、、、、、、这个没做,没找到会用的取模工具,并且觉得暂时显示图像没啥大用,作为懒人,暂时搁置、

设计思路:同LCD_1602。这个真的不是我懒,实在是相似度太高,直接移植稍作修改就好了,12864比1602多了一条坑爹的信号线,可这条信号线完全可以忽略,在这块开发板中也的确忽略了,所以你都可以不去看它了,这样就导致真的没什么可说的了。

经验教训:同LCD_1602。LCD_12864每行的地址其实我也没看得很明白,实在没办法,我就用了种最笨的方法,只送地址开头,然后数据挨着送,不去考虑后面数据的地址,结果好使了,其实我也不知道这是为什么。有懂得众神们,还望指教。


助工
2013-06-14 07:45:57     打赏
9楼

八、串口篇——通信无处不在

     ——回复可见内容——



助工
2013-06-14 07:46:07     打赏
10楼

九、红外篇——第一次无线遥控

[/hid]

     红外遥控想来应该是最简单的、最便宜的、最广泛的一种遥控方式了。这次的设计中,使用的是NEC编码格式的遥控器,为了直观反映每个按键的不同,直接将收到的32为数据以16进制数的形式显示在8位数码管上。

查看了如下资料。

      http://baike.baidu.com/view/4239582.htm

      全面了解红外遥控(中文版).pdf

      基于fpga的红外线解码.pdf

实验效果如下:

 
视频地址:http://union.bokecc.com/flash/single/290666218ACBA694_20D9199A6E6CFE0B9C33DC5901307461_false_EEA982EE6B20F4D1_1/player.swf

设计思路:

      个人感觉IR和串口其实挺像的,只要时序搞懂了就一切OK。自己的思路就不说了,和网上找到的代码非常相似。我是写了一个大状态机,人家的是时序、功能、输出分开写,描述的更加详细。我自己的设计最终出现了一个严重问题、、、、、、就是超资源了。放到自己的FPGA上是小意思,可这个CPLD真心超资源。最后被逼无奈山寨了一把。基本就是照抄网上找到的代码,人家的设计真心不错,几乎同样的思路,设计的风格比我优秀很多。比我省了40%左右的资源。汗颜啦!自己还是太差了。继续努力!

经验教训:

      切记,接收器收到的信号与遥控器发射的信号是反向的。

[/hid]




共96条 1/10 1 2 3 4 5 6 ›| 跳转至

回复

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