Filed under 电子制作

风扇软件设计

准备用Open hardware mointor,代码在这里:http://code.google.com/p/open-hardware-monitor/。 Google Code就是烂,Fork没有,Clone也没有,不知道怎么check-in code,必须成为committer么?好像有把Google Code同步到GitHub上的工具,而且也可以merge。

1. 如果要添加新硬件,必须修改Hardware/Computer.cs,手工的add,比如Add(new Heatmaster.HeatmasterGroup(settings)),没有类似FakeSMC.kext插件的形式。

2. 整个代码是用c#写的,既然是操作硬件的,为啥不用c呢?可能界面是个大问题吧。不过这个项目已经支持不少的硬件包括一些新的芯片和主板,这个是关键。所以将就用吧。

3. 操作USB的方式。直接用c#应该也可以,因为操作主板LPC都可以,何况小小USB。可能是借助于WinRing0这个库。另外一种方式是使用libusb这个开源而且跨平台的库,独立出一个层来,接口有得到RPM、设置风扇duty。而且把USB的通讯报文的处理也封装在这个里面。好处是这样这个层也是跨平台的。对于其他的open hardware mointor不支持一些平台,比如Mac,可以暂时使用命令行的方式来控制风扇。

……….

电子元件选择

1. 风扇数量:暂时搞4个吧,多了在计算转速时timer中断太长,怕软件USB受不了不稳定。

2.4个风扇都要用PWM信号来控制转速,不管风扇是3pin还是4pin。所以需要有4个PWM,而一个timer最多有2个PWM,加上上面计算转速的timer,至少得3个timer。这个一来,tiny系列就全军覆没了。而atmega8才3个PWM,买了这个看来得放弃了。还是只支持3个风扇?2*3pin + 1*4pin?这样比较经济。但是没有道理。atmega48一样的价格,但是有6个pwm。

3.芯片的INT0端口是留给VUSB的,这个不能留作他用。atmega48这点是符合的。

准备用Arduino了

这些天做测速器,卡住了,很郁闷。

具体情况是Attiny45的external interrupt有些妖,我明明设置了只有pin4可以响应pin change,结果pin3,pin4都可以响应。在中断程序中我要读取计时器来确定pin change响应间隔,结果值一直为0,设为violate也无用。另外USB也时不时的断线,有时候断后要过一会才能连接上(电容的缘故么?)。看来系统不稳定,最怕这种事情。唯一确认的是pin change可以捕捉到,调试的LED也是有频率的闪动。想调试吧,软件USB不可靠,UART接口attiny45没有,手头有个atmega8l,阵脚多,有uart口,兴匆匆在taobao上买了个uart-usb转接口,焊好后发现这芯居然没有pin change中断,悲剧啊。

中断在这里用的很合适,attiny45也有很多用在工业马达控制上的,就是新手难以驾驭啊。

一直在关注Arduion,用的也是avr方案,而且封装的不是很厉害,有点avr经验的就会发现好多东西是一样的。比如这里测速的话直接用pulseIn方法,返回就是时间,也不用操作寄存器,多简单,去tmd的中断。

Arduion用的语言跟C极为相似,我怀疑是不是就是几个宏而已。当然,操作也简化了很多,函数库有具体含义的方法名,比操作神马DDRB更明了。如果这种语言能翻译成C代码就好了,这样菜鸟可以学习,也好用到成品中去。

taobao上买了个国产的,88¥,比意大利产200¥便宜,当然YY度也少了。玩单片机后发现这东西折腾起来花不了多少钱,不像电脑硬件,一个普通的显卡就得1000¥。富玩表,穷玩车,宅男玩电脑,我看这些都是穷人玩不起的。我单片机100个电阻2¥,谁比我便宜啊?搞错了、搞坏了也不纠结不后悔,扔掉再买,哥不差钱。

其实最好折腾的是软件……好吧,再说。