通讯地址错了?严格来,单片机系统中iic总线若是要串联多片芯片通信时,最基本的命令操作流程就是发送器件地址,器件内部的操作地址和需要操作的命令,若是器件地址错了,后面的两个数据就都会是摆设。||| .[][][][]}.
mpu9150这个陀螺仪是通过内部磁场相对于地磁变化的改变来感应各轴加速度的,内部可以通过iic总线直接读取因磁场变化而改变电压的ad值,ad值有四组,这四组数据名为四元数,读出这些数据后,经过软件上的滤波和欧拉角融合计算,就可以得到芯片三维空间上的yz轴上的姿态,同时,也可以得到三围方向的加速度和角速度。
同时,也可以通过读取第五组数据,取得电子罗盘的对应地磁的方向角。
完成这一切,都需要先要找到器件地址,然后再往相关的寄存器里发送指令,随后芯片才会把数据返回回来。
但是,因为mpu9150芯片内部还自带了一个数据处理器,名字叫dmp,就是运动处理器,这个处理器能够直接帮助处理器完成需要消费大量运算资源的四元数姿态融合过程,直接给处理器返回姿三轴姿态角度、三轴加速度,三向加速度和地磁角。是一个很方便的厉害的工具。
但是,在官方的reference里,提供有芯片的address。不过,在还分成了dmp处理器和直接读取四元数ad值两个地址。两个地址有不同的寄存器和控制命令。蓝泽光发现,这位董晨学长用的是移植的程序,是通过dmp来读取数据的。而他的器件地址,的宏定义,却写到了mpu9150的是四元数控制地址上了。
好吧,了这么多,蓝泽光只想表明一件事:那就是董晨学长你确实是弄错了。
“怎么可能!”他站起来一副就要和蓝泽光撕逼的样子。
不过轮无力,他这一个常年缺乏锻炼的弱鸡程序狗,怎么可能能撼动蓝泽光?
“可不可能改一改就知道了!”蓝泽光露出一副挑战的笑容。然后就在键盘上敲打了几下,把程序预编译宏命令的器件地址改掉,然后就摁下了编译按钮。
“卧槽都叫你不要改我程序了。等下子你改得回来吗?你乱弄什么%!#¥……”
后面的话蓝泽光就自动忽略了。虽然不能人家逗比,但蓝泽光理解一个程序猿的幸苦,一般是不希望别人来乱改自己辛辛苦苦写的程序的。不过蓝泽光看到这套程序,里面有一大堆的英文注视。就早知道是移植来的。
虽然移植也需要时间。但至少不会那么辛苦……
蓝泽光鄙夷了一下,这时候程序编译就完成了。0error,9arning,虽然有警告,但程序应该能用。于是蓝泽光顺手就击了loading,编译过可以调试的程序就下载到单片机里。复位之后,就可以在看到效果。
但是,什么效果都没有啊喂!
“……你看到了没有!你乱改是没有用的。快改回来!”学长又是一阵激动,然后就伸手想要去拉蓝泽光的肩膀。一副暴力的模样。
“也许是学长你移植得有问题呢?”蓝泽光耸了耸肩,动了动肩膀,把他的手拍开。
“别闹,怎么可能!”董晨学长继续伸出手,一都不怜香惜玉的想要把蓝泽光推开。
“怎么不可能,我来看看!”蓝泽光自信满满的,然后再一次把这位学长推开了。
“卧……这里是我的位置学妹你快走吧!到时候我把程序弄好移植正常了我给你好不好!”看着自己拼不过蓝泽光的样子,这位障崩溃般的叹着。
“反正我也要研究,我先来看看。”蓝泽光白了他一眼,然后就撑着桌子,聚精会神盯着那位学长的屏幕。学长就快要发飙了,又一次不知好歹的拉住了蓝泽光的肩膀,:“喂!你叫蓝泽光是吧?别以为你是女人我就不敢打你啊!”
“……”对于战斗力不足半只鹅的acer程序猿,蓝泽光根本就不怕他。她一边盯着屏幕找bug,一边调侃着这位学长,:“学长啊,你总是这样难怪找不到女朋友。都程序猿没有女朋友,是不是就是因为你这怪脾气呢?如果再加上acer的身份,那就更没有女朋友了!”
这不,蓝泽光瞟了瞟这位学长在acfun上看的视频,是van♂的fa乐谱,他没有开外放,但估计耳机里的声音会很愉悦。
都,acer没有女朋友的事实会给诸位acer会心一击,董晨学长也是如此。他被蓝泽光这么一吐槽,立刻就想到了什么似的扶住了额头。他这是在反省?不,没有女朋友就是没有女朋友,他才不会反省什么,死脑筋继续爆发。
“擦!谁要你管了!”
“如果不是学长你把9150拿走了我才不管你呢!”蓝泽光拢了拢,耳边的头发,然后就在那九个程序警报当中,找到了一些倪端。
在程序员的世界里,不同变量类型可能会让数据引起冲突。虽然有一些数据能够强制转换,但这可能会有一些灵异的情况。比如在某些编译器里,u8和char是同样一个变量,但有时候,却又有不同。
董晨学长的9个警告就出现在这里,融合数据的iic总线指针用了两种相似,但却又表示不同的变量。蓝泽光就拉出键盘把他改出来。
“你干嘛你干嘛!”看到蓝泽光又要动手动脚的,活该米女朋友的董晨学长又急了。
“我帮你把u8改成char让警告没有你还不感谢我?”改完,编译,依旧有警告,不过这些警告的内容是定义的变量没有被使用,这是无关紧要的事情。蓝泽光再编译,再次载入单片机,但是调试软件上依旧没有数据输出。
“你弄啥弄啥!越改越乱了!卧槽!你还更逗一!”董晨学长就站在蓝泽光身后,看着就快要杀人了。他旁边的同学干笑着拉住了他,:“董晨啊,你就让让学妹嘛,发什么火呢,有话好好呢!”
“让毛啊!”这家伙还在发飙。
而这时候,伙伴就把他扯了出去。
“喂!你对一妹子急啥急啊?我还巴不得人家来帮我改程序呢!改得乱七八糟的我还乐意,你脑子是不是有问题了啊?”
“你才有问题!”董晨学长狠狠的瞪了一眼自己的伙伴。
“那啥,我在想,你是不是大智若愚的吸引人家学妹的关注啊?再怎么着人家也是笑校花级的,虽然是有男朋友了……”一边着,他就一边看着坐在蓝泽光座位旁边翘着二郎腿看书的路西法。
唉,可爱的女孩子和可爱的男孩子的组合,真是太耀眼了。伪百合的世界就在眼前,对于一个宅男来,简直就是要把灵魂献给路西法的好机会。
不过,董晨可一都不是大智若愚,他就纯粹是一活该没有女朋友的傻逼。他一脸古怪的看着自己的伙伴,大吼着:“你脑子一定是不正常了,思维怎么那么跳脱呢?我怎么可能会对那种胡搅蛮缠的女生感兴趣?”
“……活该你没有女朋友!”
“你们强调这么多次是不是好了的啊啊混蛋!”
……
不得不,学长的伙伴把他拉出去后,蓝泽光就能静下心来看了看他的程序。因为是移植的,所以按照脑子里“老教授”的经验,蓝泽光很快就找到了可能出现的位置。那就是移植程序和原生程序交叉的地方,是自己书写的iic总线控制程序,和移植的程序的iic总线。
移植部分的程序董晨打了注释,不过通过对比,蓝泽光也能看得出来。
——问题出在这里!
移植的程序在iic总线初始化的设置上有问题。
可能是因为平日里很少会在iic总线上加挂一堆ic芯片的原因,董晨的程序的iic总线初始化是默认“单挂载”的,也就是,这样的iic程序可以跳过芯片地址应答的步骤。蓝泽光找到了宏定义部分的注释,很快就改掉了。
编译,编译完成。0error,0arning,然后击了loading的按钮,程序就下载到了单片机里。
而就在这个时候,董晨就挣脱了伙伴的纠缠,牛气哄哄的从实验室外走了回来,然后就看到了眼前的一幕。
蓝泽光拨弄着陀螺仪芯片,然后屏幕上就显示出了dmp控制器直接反馈回来的姿态数据,一些都很和谐。
“……”董晨瞪呆了眼睛。
当然,他是不会不服的。程序员除了没有女朋友,还有一个特质——就是对技术的狂热。
“你这是怎么做到的?”这位学长,一下子就扫除了之前的烦躁,一下子就狂热凑到了蓝泽光的面前。然后,就是程序猿只见的话题了。十分钟后,蓝泽光讲清楚了问题的所在,然后就从包包里抽出了u盘,。
“学长,程序我可以拿走吧!”
“哦……”董晨还在蓝泽光的清晰的讲解中回味无穷。然后听到蓝泽光变换话题,才猛地一惊。
“我……我去!你怎么可能会能找到这个bug!”(未完待续。。)