无线部分因为原来的产品都在用,底层的初始化代码直接用的现成的,当然在这之前我也看了一下无线的手册,稍微弄明白了一些基本的原理,无线模块和CPU是通过SPI总线通讯的,拿到初始化代码后,我看原来的SPI读写函数不是我的编程习惯,我一般是先拉低电平,再读写数据,再拉高点平;而老大给我的源码确实先读写的数据,再拉低电平延时后拉高电平。我这个人有点奇葩,我觉得不符合我的习惯,我就改成和我习惯一样的,当然两种方法都没错。修改后,自我感觉良好,一仿真,发现程序呆在无线接收中断里出不来(纯粹的软件仿真,这是硬件板子还没到),我用的是Mega48的外部中断,设置的是低电平模式,一看手册,原来电平一直处于低位,怎么设置都不行,没办法,改成引脚电平中断模式,这下终于好了。当然,串口部分在学校是也用过丁点,自觉问题不大。
板子终于来了,刚来这边,人生地不熟,板子不好叫焊接的兄弟帮忙,自己动手吧,第一次焊接贴片元器件,幸好老大早有所料,叫我接收项目前,焊了三天板子(这里还有个丑事,下次和大家分享)。慢慢动手,终于一天多一点完成了三块板子的焊接(老大负责主机,他没空拿主机和我对调,叫我多焊块板子自己模拟一个主机通信)。板子焊好了,又按照无线的通信方式做了个假主机。
一切准备就绪,下载程序,半毛钱反应也没有。一下子蒙了,幸好本科的时候做过51的开发,知道把程序简化,一步步调试。先看灯吧,把板子上的灯点亮,这肯定是成功的,接下来将无线和串口分开,先调无线部分,因为无线的程序是在其他产品上测试通过的,肯定移植过来只要改一下端口,那就没问题了,立即行动,将无线程序独立出来,还是没有反应。我前面说过我将“看不惯”的程序改成了自己习惯的那种方式,会不会是那儿出问题了啊,又改回去吧,还是不行。端口是不是配错了啊,仔细一检查,真有个配错了,万分欣喜之下下载程序,还是有问题。自己的检查了端口,焊点,都没有问题啊,找老大问问吧。老大说你触发一下,看看能不能进中断,当场照办,能进,中断设置没有问题;又去找他,他说仔细核对代码,看看和成功的程序有何不同,一一对照,还是没问题,悲了个剧,我直接复制源程序过来,还是通信不成功。尴尬的事情发生了,一连几天,老大都叫我查代码,一看真没问题啊!问题出在哪儿呢?老大事情比较多,没办法,找Q哥吧。Q哥一直和老大在一起,老大负责主机,他负责中端设备,这程序他肯定调过,Q哥过来弄了几天也没弄出来,我在旁边看着他调试,也学到了一些方法。从焊好电路板到现在已经过去一周了,一周时间都在围绕这个已经通信成功好多次的通信程序打转转,压力山大啊,这时感觉老大对我有点无语了,因为老大也是和这边合作的,他把我招来,当时给公司boss说我来后就能上手,结果一个小项目居然出问题,问题还出在一个成熟的地方,老大很不理解。
那几天刚来公司,刚开始适应就遇到这个难题,心里真心难受啊!都有想回学校继续“学习”的冲动了,但想想每天在学校没事可干,吃老本的情况,有有些不忍心。那是和女朋友聊天每天说起这些事,很是郁闷,她一直给我打气,一直叫我坚持,引导我分析问题,把问题细化,但每晚分析、方法之后的自信又被第二天无情的现实打击了。
心情在最底层的时候就是翻身的时候,即将成功的时候,22号早,Q哥给我装了根天线(本来觉得不到半米的近距离不需要天线),同样的程序一测试,通过了!搞了一周的时间,查了一周的错误,最后是没有装天线的缘故!又是欣喜,又是抱怨,这根小小的天线害的我啊!为了证明原来的修改没有问题,我装载了最初的那个程序,也是正确的!至此,无线调试终于告一段落!
趁势拿下串口吧!无线程序备份后(我怕又出问题,保留了一份成功的程序),添加了串口的代码,啊!串口也不成功!直接把串口拿出来调试吧,还是不行,硬件上我是通过max3232连接到RS232转换头的,因为没有笔记本串口,我们有一个USB转TTL的头子,直接在max3232的输入端取信号,发送一个数据,接收到的是别的!这时候想到的就是波特率设置相不相同,仔细检查,都是9600,接收端换到所有的波特率,都不成功。周末了,回学校放松一下...放松时没敢太放松,带着板子回去了,因为我那边有根USB转232的线,看看不取信号直接接回怎么样,回学校一插线,LED的亮度都减小了,call老大反应情况,他说回公司商议。周一一大早回公司,路上堵车,迟了约半个小时吧,从老大的表情看得出他不高兴了,来三周,每周都回去(其实都是有事),老大肯定不爽啊!周一调试,还是有问题,找老大,按照他的方法修改波特率什么的,还是没搞定,找Q哥,弄了几天也没搞定,后来Q哥说把MAX3232芯片取了吧,我说没进芯片啊,没必要取嘛,他说可能有干扰,一取芯片,好了!妥妥的!
终于松了口气了,两边都成功了,只需要和在一起,加上协议了!原来没弄过具体的协议,通过这次也加深了了解,一步步调试,终于基本上搭好了,只等着网关和上位机和我对接了(现在用的是拿另一个板子做的模拟主机,都通过了)。
我对硬件不熟悉,只有些基本的数模电知识,不知道怎么去测试硬件电路什么的,这次遇到的两个问题,都是硬件问题,都花了一周时间看程序,其实程序没有错,硬件出了故障再完美的程序也是白搭啊!通过这次的经验,现在调试出了代码,我还会花些时间了解硬件,看看硬件可能出现什么故障,以及怎么样去解决这些问题。原来很少用仿真软件仿真电路,现在也逐步在了解,做个产品,软硬件不分家,硬件是我的软肋(想对软件而言,其实软件也要更多的学习),需要花时间好好积累一些经验!
不知不觉,啰啰嗦嗦写了这么多了,我知道吃了亏才会进步和学习,自己懂了才是真正懂了。我也知道以后会遇到更多的问题,自己多找方法解决,不要局限在程序上,更要考虑与产品相关的各个方面,站在一个更高的角度思考和解决!对公司的生活,我也以一个更加积极的心态来对待,将自己看成是公司的主人,产品的设计者,更多的融入公司文化!
菜鸟经验,当是自己成长的印迹吧,没有人是抱着单片机出生的,每个人都是从菜鸟走过来的,不是么?!