'单片机' Tag

  • 明年的毕业设计的初步设想

    六月 20, 2009

    最近给我们上《分布式系统概论》的老师找我在学校实验室哪里部署一套运算集群,说这个题目以后你还可以弄成毕业设计什么的,大有文章可做;了解了集群系统的一些资料后,最终知道集群计算的核心是算法。算法决定了整个集群系统的架构网络的架构,至于MPI、Cluster OpenMP之类的东东,只是无关要紧的小工具而已。 说实话,我个人对纯粹的算法学的不是很感兴趣。算法是基于问题而产生,但是因为没有问题而要创造问题来研究算法,感觉是吃饱了撑着的人干的事——比如那帮搞数学的人就是……当然这是个人感觉,我知道历史上一般都是理论上获得了突破,最终推动业界发展(又或者其实是相互促进的?不讨论了……不专业)。也就是说如果让我糊里糊涂搭一个貌似强大的环境然后跑个不知道干吗的算法,再做一系列糊弄老师们的文字,确实不大愿意。 桌面上还摆着之前玩单片机时候用面包板插的板子,后来作成了能够显示从串口发送过来的字符的小玩意。似乎这个没什么技术含量,但如果拿这个来做毕业设计,应该兴致会高一点。 主要是想做成一个显示主机系统运行状态的小玩意,就如罗技G19键盘上面的屏幕那样(当然暂时还没有这么漂亮的屏幕),实时现实系统状态、cpu温度占用内存占用网络带宽占用等,当然这还不够特色,不过主要是看上位软件怎么设计吧,可以弄成是libnotify的硬件版,呵呵。 单片机硬件上,现在单1602屏幕就占了10多个IO口,其中的8位数据线好像有点浪费,要是配上一些按键,一堆LED什么的,作成真正意义上的数据总线,似乎颇有可玩性。 另外呢现在跟主机通迅是通过串口的,我用了一条PL2302的USB串口线来连接,要是自己实现一个USB的协议呢? =。=越说越复杂了,这时候有技术含量了吧!哈!感觉这样做毕设比较有趣,至少不会像有些人做个xx管理系统,或者一个asp,单纯在UI代码上面就花了一大番功夫。

  • 为AVR写的1602A液晶屏幕驱动程序

    四月 12, 2009

    为1602ALCD屏幕实现的基本驱动功能,8位数据线,3位控制线,可自定义端口,可从LCD_Init函数设定工作方式,实现发送单字符和字符串的基本功能,带busy_wait。使用avr-gcc 编译。 代码下载:http://code.google.com/p/ptcoding/source/browse/trunk/AVR 更新:SVN目录内还有串口通讯的模块,以及串口和LCD驱动结合起来的一个试验性程序 参考资料:lcd1602a_398762.pdf(英文) ourAVR (注意两份资料的出入,前者更详细) 开发手记: 之前从天河赛格买了个1602的液晶屏,折腾了两天,终于让ATmega48驱动起来。 1602本来是一个挺简单的器件,8位数据线和3位控制线,其工作时序图初看起来挺复杂,但其实也就E端使能脉冲的事情,但是折腾下来,再一次验证了“简体中文”资料的不可靠,还有就是“这就是传说中的‘驱动程序’”。 首先我是从ourAVR网站提供的1602B液晶使用范例提供的资料入手(1602A、B好像没太大区别),借鉴了人家用ICCAVR写的代码(虽然代码是我敲的,但是基本上还是抄的),当LCD上显示出第一个字母时,还挺兴奋的,然而,这只是刚刚开始……(才100多行代码,加上看资料个把小时什么都好了。) 接下来才是噩梦般的调试,要么给黑方块,要么乱码,不稳定,这次能显示,重启就不行……还是ourAVR那篇资料提醒了我,初始化工作做的不够,写个循环发20次初始化信号,果然稳定了…… 奇怪阿,我明明按照Datasheet的数据来写的,怎么初始化不够呢?……说起1602的Datasheet,ourAVR那里提供了一份中文版,由“长沙太阳人电子有限公司”整理的,区区5页PDF,我另外Google了一份英文版的,顶,80多页,仔细一看,时序图居然有出入!转念一想,1602作为一种标准产品,一般的厂商只是兼容罢了,有多少出入还是正常的吧?不能全相信网上的Datasheet... 也从网上找了其他人写的1602驱程,51的、汇编的什么都来,有些的E使能脉冲居然是下降沿的,如此借鉴来借鉴去,折腾了两天。 最后还是被编译器“跹”了一回,比如把字符串写在发送函数的参数里就给我显示黑方块、乱码,又看了半天AVR的Flash空间、SRAM空间、EEPROM空间等的一大堆,最后才确定,是因为我使用之前《初尝Linux下的AVR单片机开发》里面的avr-objcopy -j .text参数,导致被放在.data段的字符串根本没有放到烧录文件内。 最后还有时序问题。一开始我使用了Busy Wait(读LCD的D7),认为以后就不用考虑命令时序了(LCD接受的命令有us级的一般命令ms级的两条清屏命令),结果还是乱的一团糟,最后往Busy Wait里面放了个死循环,发现程序根本都不绕进去,原来AVR芯片太快的,输出E信号后等不及LCD输出。 其他人写的驱动中,有些根本不考虑Busy标志的问题(干脆R/W接地),只要等候的时间足够,就可以保证写入的正常。在我最后写好的驱动中,我尝试把调用LCD_Busy_Wait的地方换成_delay_ms(5),把整个LCD_Busy_Wait注释掉,这样工作起来是完全正常的,而且还省了36字节的程序,只是感觉上屏幕的反应就有那么一点的拖滞感。也可以把这个delay换成_delay_us(100),这样没有拖滞感,但注意0x01这样的复位命令要注意要加个ms级的延时,但如果这样的延时语句多几条,程序在延时上膨胀的体积就远不止36字节了(别小看_delay_ms(),延时越久代码就越大),还不如用上Busy_Wait,这就需要应用在的来衡量了。

  • 初尝Linux下的AVR单片机开发

    四月 2, 2009

    此前接触过AVR单片机,发现无论是书店里面的教材,还是网上一大堆的中文资料,无一例外都是说windows下使用WinAVR、ICCAVR之类的,Linux方面的简直只字不提,难道这就是传说中的中国国情?外国情况可很不一样,玩单片机的Geek一般都很哈Linux,做单片机开发的软件一应俱全,当然还是开源的。 昨天从淘宝重新买了条USB的下载线,回来一看是USBasp的设计,附送的光盘当然也是win下的驱动和说明了,忽略。 插上下载器,lsusb,认倒是认出来了,叫做VOIT,那怎么用呢?上网一搜,原来USBasp是德国人的设计http://www.fischl.de/usbasp/,GPL的,其中提到AVRDUDE支持USBasp,当然也有源码下载。不过我用的是Ubuntu,发挥超级牛力的时候到了:sudo apt-get install avrdude,恩,几秒钟搞定,让他们去编译吧! Linux下做单片机开发当然首选GCC,就如这些英文教程说的,下载源码?No,No,APT has Super Cow Powers,继续sudo apt-get install gcc-avr binutils-avr avr-libc 几分钟装完,很好,估计那些下载源码回来编译的同学要去喝两个小时茶才能用了。 万事俱全,先写个单片机的HelloWorld,借用micahcarrick的源码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #define F_CPU 1000000UL /* 1 MHz CPU clock */   #include <util/delay.h> #include <avr/io.h> [...]

Page optimized by WP Minify WordPress Plugin

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org