本文最后更新于:星期一, 六月 15日 2020, 8:34 晚上

碰到的奇葩

单片机高低电平
单片机感知高低电平的时候对回路电流有没有要求呢?我觉得是就感知高低电平来说是没有的,应为书上都是用电压来衡量的,没见过谁提到过电流。不过,应该注意的是当引脚配置位输入模式时,对外界阻抗有要求。单片机引脚拉电流和灌电流都应该有个最大值,同一个单片机不同类型的引脚,以及引脚处的不同模式,它们的电平噪声容限是不同的。这些在设计时应仔细考虑,不然,会引起误动作。

设计外包
在一次和友商的交谈中得知这么一件事,友商把 PCB 设计外包给了第三方,但设计完成后,外包商只提供 Gerber 文件。其实在外包设计中,若提供设计文件,则相当于一次买断。不提供设计文件,则相当于定制开发,两者价格是完全不同的。所以在是否提供设计文件上,一定要在合同上写清楚,以免日后产生不必要的纠纷。

芯片烧录
说起烧芯片玩电子都不陌生吧,不知大家有没有遇到过烧录软件显示成功烧录,芯片就是没反应。其实烧录软件显示的信息未必是对的,准确地说,烧录是成功的,但是烧录进去的东西未必就是目标文件。大家要注意,一些不恰当的操作会导致烧录器把一个“空文件”烧进单片机,这时候回读数据,发现里面都是零。在需要人肉烧录大批量芯片时,这种错误容易出现,也很难被发现。

串口助手
我用 qt 写的串口工具在一台电脑上无法接收数据,但是其它的串口助手在此电脑上均正常工作,让人费解。qt 版的串口工具在我自己的电脑上正常工作。两台电脑都是 win10 ,只是小版本号不一样。

电机的功率
在会议上遇到一个问题,如何衡量一个发电机的输出功率。我司的解决方案是在发电机输出端加一个恒值电阻,通过测量电阻上的电压来解算电机的输出功率。友商对此表示反对,认为应通过在一定的电压上,达到一定的电流来衡量电机的输出功率。谁也没能说服谁,搞了好久。下班的路上我想了一会,有了自己的想法。我司的方案是把电机当作恒流源,友商的方案则是把电机当作恒功率源。看起来都是衡量功率,其实完全不是一回事。无外围电路的裸电机在不同的负载输出功率是不一样的,要是让电机在特定负载上达到额定功率,必须作阻抗变换。这就是 DC/DC 电路的一个重要作用。我以前一直认为 DC/DC 就是简单的变换电压,对阻抗变换也只是停留在解题上,今天算是学到新东西了。要是用过直流电源应该遇到过这样的事,明明调到 12V ,一接负载,电压立马就掉下去,再调大电压档也无用。其实这时候应该调电流档,原因同上。

该死的学习

写给高中的孩子

身边有几个同事的孩子要高考了,无意中谈起,激起些许回忆。我的高中过的很狗血,属于那种出道即巅峰。喜欢沉迷过往的人,都是混的不咋地的,为了避嫌就不讲故事了。学习是突变式的,努力很久都毫无波澜,突然一下子全都会了,这就是我对学习的感觉。别再想着奋斗 xx 天,高考逆袭 xx 分。这玩意跟买彩票没啥区别,你不能说它不存在,但你要把它当必杀技,那就有点二了。学习需要积累,从你第一天上学开始算起,一步一个脚印。真正决定你实力的时候不是在学校,而是在家。平时大家都学,你很难和同水平的人拉开距离。唯有放假,当别人放松警惕时,你才可以完成超越。学习是需要长时间付出,不是努力一周,一个月,甚至一个学期就能见成效的。至少以年为单位,才能看出变化。所以,像我这样心急得,喜欢速成的,在高考时,必然没啥好下场。

名师出高徒,老师最大的作用在于答疑解惑,快速避坑。这也是网课的疼点,有条件,一定找家教,上辅导班。因为你在家,十有八九会玩手机。补习班即使学不到啥东西,也把你时间占住了,让你没法玩手机。我高二之所以崩盘,跟寒暑假疯狂看电视有一丢丢关系,我那时候手机还不像今天这么流行。高二课程进度很快,加上和班主任硬刚等等因素,成绩迅速下滑。高中成绩一旦落后,再想补上来就比较困难了,因为课程进度在那摆着。只要有两门以上偏科,基本上玩球了。我就是先是英语渣,后来全面渣。偏科会使你限于两难境地,补差难培优,培优难补差。除非你的优势学科够牛逼,不过那时候你应该考虑参加竞赛。作为家长,有条件一定送孩子上名校,首先老师很优秀。普通学校老师都不咋地,课上的菜,学生自然啥也学不到。有些题可能老师自己都不会,怎么能给学生讲的明白。其次,同学很优秀,看见别人都在学习,也就不好意思玩。再说了,一个人也玩不起来呀。

有时候学习不好也不能全怪学生。有脑子笨的,性格差的,家里穷的,点够被的,身体差的等等。随便占一样,都要命。没啥特效药,人人都去清北,也不现实,想开点。高考考砸了也没啥想不开的,跟出身想比,高考错过的那点算个啥。其实你能考个啥玩意在高三以前就能看出来,高一学的不好,985 没啥事了,高二学的不好,十大名校没戏了,高三复习的不好,清北绝缘了。好坏的标准是标准高考试题,相应内容至少能搞定 80% 的分数。我说的都是上限,按这个标准,我只完成高一一项,高二直接班级倒数前十,高三班级倒数前二十,最后上了个普通一本。高考分数出来后我伤心的要死,当年爷们可是要考科大的人,最后得了这个结果,还它娘都是自己作的。我的虚荣心得不到满足让我难受,以至于从不和高中同学联系,毕业后再未踏于高中半步。有时候选择也挺重要的,我那时在普通班,高一分科考试时,可以稳上文科重点班,要是去了。以我们学校历年成绩,保底 211 。只是爸妈都是农民,关键时候连个拿事的人都么有。脑子一热,放弃资格。这应该才是最大的败笔,只要不是作的太狠,平台会同时决定你的上限以及下限。

我感觉考研老师刘晓燕讲挺好,不要把自己的失败归结于先天因素。我以前一直以为之所以高考失利,完全是家里没钱,运气太差。直到考研数学考了 20 多分,我终于明白自己是一个多么扯淡的人。即使给我一次穿越时空的机会,我的高考成绩照样是坨屎。抛开天赋,家境等因素,在主观能动性方面自己是否就做到了完美? 没事的时候,可以多想想这个问题。我特别喜欢毛老爷子,尤其是他的矛盾论。在大学时,我认真地读了五本毛选,终于理解了很多历史问题。对自己的人生,也有着一定的启发。事情总是比我们想象的复杂的多,就拿我自己来说。一个数学考 20 分的人,只要脑子没病,绝对是条懒狗。请大家原谅我用词粗鲁,我以前爱看这种用词原生态的小说,也改变了自己的说话习惯。可另一方面,我每天保证 5 点多就起床,中午不休息,10 点前睡觉,很少熬夜。标准的老年人生活。我还对游戏,抖音等软件有天然的抵抗力。连微信都不怎么刷,这一点我的所有同事都知道。问题来了,那都 TM 学哪去了。我忍受不了枯燥,也就不可能老老实实地在那学习。没啥娱乐活动并不代表就爱学习。我见一样,爱一样,但没有一样长久的。大学的时候迷恋小说,就连期末考试前一天,还必须先看会小说压压惊才能刷题。现在已经没啥感觉了。大一的时候迷恋 office 办公软件,大二的时候又爱上了机械,后来发现确实不是快料,主动放弃。大三,又研究上植物分类,疯狂搜集各种植物图册,毕业后不玩了。大三还研究过各种经济学和炒股,半年就黄了。大四的时,又搞上了摄影,想着等毕业了,就买个索尼M2 ,现在钱已经不是问题,但早就不想玩摄影了。毕业后,我感觉日剧太好看了,这才是数学崩盘的罪魁祸首,现在又没啥感觉了。我的性格从未变过,所以悲剧大概率还会继续。在这里,我建议家长应强制干预学生的爱好与选择。没有哪个理发师能给自己理发,也没有几个人能正视自己的不足,回首往事,绊倒自己的石头总是那么几块。

若家里有钱,孩子的成绩会好一点。我初一的时候,在公立学校。里面的学生基本都是人渣,动不动一觉醒来,裤子挂在宿舍门上,一周的生活费又被狗日的给偷了。现在想想,极有可能是同宿舍人干的。不然,他怎么偷完我的钥匙后还能在几千辆车子中准确地找到我的自行车,搞得我走了几个小时才回的家。这种学校,老师形同虚设。初一两次期末考试,九门课加起来不到四百分。在我的各种威胁下,初二,我爸把转到私立学校。每学期的票子,赶上我大学的一年。钱花到位了,成绩自然好了,初二的第一个学期我就考了八百多分。后来,我考上县里最好的高中。虽然是普通班,让我爸感到不太满意。我知道,这已经是我的极限了,以我的天资,两年的奋斗也就这个样了。要是初一就转到私立学校,我的英语也许不会那么烂;要是初一就转到最好的私立学校,也许能进重点班;要是小学就进私立学校,假期请几个家教,或许真的能考上科大。但是,要是家里穷成狗,我绝对连本科都上不了,这点我毫不怀疑。家里不差钱的,请使劲砸,一个好的学校,能让孩子少受很多苦。

单片机

今天无意中浏览到一个帖子,有点感受,就随意写点东西。工作至今,也有了几载,没啥朋友,平时也不咋出门。没啥卵事就写写代码,画画板子。当然,这不是加班,纯粹是个人娱乐工具。我中学的就喜欢玩电子产品,家境贫寒,讽刺的是直到大学毕业,才拥有人生的第一台电脑。毕业后,在一国企搞嵌入式。在企业,我才学会用示波器。这里补充一下,我上的学校比较烂,我的专业也是机械类的,所以在大学没多少接触仪器的机会。单片机是玩嵌入式的必经之路吧,我开始也是在网站看视频学习,当时特别想买开发板,但是穷给我留下了严重的后遗症,那就是 “扣”。结果想必大家已经知道了。当时我太菜鸡了,还不会画板子,就委托我的大师兄 “L 哥”,给我画了一块开发板。MCU 是 14 个腿 PIC 单片机,外围电路就是一三端稳压器组成的电源模块,连个晶振都没有。打 50 块板子,现在还没用完。

玩单机的第一步不就是亮个灯吗,我的板子磕碜的连个 LED 都没有,只能把 IO 口接在示波器上看波形。我是个急性子,看视频看的很快就烦了。我就下了份数据手册,对照数据手册上的说明一步步地向前推。可一个配置字就把我干趴下了,完全不懂,当时就直接从别人的代码抄了份,悲剧就从这里开始。配置字是会影响一些寄存器功能的,我当时啥也不懂呀,配置字搞得是外部晶振,代码却写的内部晶振,简直不能看,光亮个灯折腾了一周。我想要是买开发板,对着视频改例程,顶多一天就能搞定吧。话说回来,PIC 的教程和板子真不多,跟 51 比差远了。下一步就是搞个跑马灯,阻塞式的延时函数我就不说了,就说说定时器中断吧,我当时特别费解,那个中断函数命名为啥是那样的,单片机怎么知道它就是中断函数不是普通函数,就因为那个关键字吗? 我看所有网上的代码,中断函数的命名都是一个样,我能换一个不? 我当时也不知道找啥资料,后来摸索了很久,才知道这玩意应该查编译器手册。当时用的是 HI Tech C ,用谷歌翻译,硬是看完了整个手册。在手册中我发现,HI Tech C 里面的 char 默认是无符号的,这一点跟标准 C 完全不同,我不知道这玩意打了多少人的脸。后来我知道了,有个叫中断入口的东西,低端 8 位 PIC 单片机只有一个 ,高端 8 位 PIC 单片机有 2 个,还可以设置中断优先级。之后我有了新问题,单片机是怎么启动的。它好像没有 BIOS 呀,又折腾蛮久,原来这玩意是有专门的启动代码的,只是编译器自动嵌入罢了。问题总是一个接一个,配置字是怎么回事,它好像在 main 函数之前呀。寄存器到底是怎么控制硬件的,初始化外设我能好像能理解,那 CPU 和时钟又是谁初始化的呀,又是一顿上下求索,原来是有个叫状态机的玩意。这样前前后后折腾了一年,回头看去,8 位单片机也就那点东西吗,不就是配置各种寄存器吗。至于算法,那玩意能跑动啥复杂的算法。

这时候我开始对外围电路感兴趣了,首先是那该死的电容电阻。这个阻值是咋定的呀,为啥要在这搞个电容呀。怀着这些疑问,我买了电路原理,数字电路,模拟电路。专业书真鸡儿贵,心疼的好几夜睡不着。这些钱够我吃半个月的盒饭。补充说明,我这地方偏僻,饭钱不像大城市。这些书看着看着就卡了,尤其是二阶动态电路,一大坨公式,到底是咋回事,毕业的时候不该把书扔了。又买了一堆书,自然又难过了几个日日夜夜。时间总是那么快,不知不觉就要成为大龄单身狗。学了点东西,人也从容不少,也终于搞明白了开漏,上拉,下拉等一大堆庞杂的知识。我是个实用主义者,用啥学啥。为了装 X ,我自学 Qt 写了一堆诸如串口助手的小软件。在客户那里调板子时,用的都是自己开发软件,极大地满足了我的虚荣心。为了管理我的电子元件,又自学了 Spring 用来定制一个开源 ERP 系统,搞得同事们以为我要改行了。其实我学技术没啥目的,就想解决遇到各种问题,我也不管它能不能捞钱,反正闲着也是闲着,撸它一下也不损失啥。说了这么多废话,我想告诉大家的是,开发板是老手用来快速设计,新手用来入门的。不要太迷恋它。嵌入式这碗饭,可软可硬。嵌入式不像通用计算平台,软硬分的很开。不管你选哪一样,一定要搞懂理论,知其所以然。不要沉迷于那些教学视频,不要以为玩个无人机参加个比赛就能学到多少东西,也不要把实验室里的玩具和工业产品混为一谈。尤其是那些想搞硬件的,一定要有自己的想法,照猫画虎,学的都是皮毛。

硬件的门槛那是算是比较高的。所以,我至今没听说过这个领域出现过少年天才。先说基础理论体系,电路,数电,模电,高频,电磁学,其中除了数电菜鸡点,哪个也不是省油灯。要是数学渣,门门要你命,当然这也只是你入门的基础课。再说实践,示波器,万用表,信号发生器等等一大堆仪器,哪一个的价格都能让你肉疼。这些仪器的好坏,直接决定你的研究水平。举个例子,示波器差了,你就基本上看不清楚信号的真实面貌,那还玩个毛呀。这一点也基本上堵死了自学的路。电学里的很多东西,受限于人类的科技水平,还停留在经验的阶段,这就造成了在工业界有很多玄学一样的电路问题。有些电路看起来很简单,可你搞出来,总是问题频出,让人头大。这些天坑要么靠高人指点,要么一点点地平趟。基本不存在啥捷径,总的来说,一方面多看书,提高理论学平;另一方面,多实践,慢慢填坑。不到一定年龄,想做出啥牛逼的电路成果,基本不可能。大学玩的单片机,参加的比赛,对个人技术有一定的帮助,但离成为高手还差得远。一是画的电路,撸的代码,基本都是抄抄改改,没啥技术含量。二是时间太短,没机会遇到的更多的坑,经验欠缺。工业界对产品的要求比大学的实验室严苛的多,几周就能搞出来的东西,基本上没啥商业价值。随着芯片集成化,使用分立器件的地方将越来越少,硬件的门槛也会逐步降低。换句话来说,硬件这个行业待遇也会持续走低,芯片原厂就是大牛的头号敌人,小白的救世主。

软件这玩意,咋说呢,知识体系更新速度太快,以至于你的积累的技术经验很快一文不值。软件的门槛确实够低,只要肯费工夫,混口饭不难。8 位单片机软件灵魂就是寄存器,中断,定时器。新手的第一步应该是配置时钟,之后再把各个外设逐一攻破,其中定时器是最大的坎。按着简单外设一周,复杂外设两周,完全搞懂单片机也仅需一年的时间。我现在已经不在研究 8 位单片机了,东西就那点,仅仅利用下班时间,不到一年就玩的差不多了。现在玩的是 32 位单片机,给我的最大感觉是,PIC 单片机太牛了,能把 8 位单片机做的跟 M0+ 正面刚。跟 8 位 PIC 单片机相比,无非是主频拉高了,寄存器变多了,更大的存储空间。但学习的方法依旧不变,先从库函数入个门,再从寄存器下手,逐个突破每个外设。我为什么还要坚持寄存器,而不是全面倒向库函数。嵌入式跟通用计算平台不一样,它需要你对底层有足够的了解。Windows ,Android 它们的爸爸的技术够牛 X ,外加它们的抽象层次够高,能做到应用编程完全与硬件无关。反观 ST 等芯片厂商,软件水平自然比普通人高多了,但跟前面的相比,还不在一个量级上。HAL 库也只是一个封装库,并不是一个操作系统,并不能真正地做到硬件无关,库的本身也存在不少问题。在论坛上瞅一瞅,你就明白那些只会用库的小白翻车的概率有多大。我给自己的定位是,先从库函数开始,再折返至寄存器。学一门 RTOS ,通过增设设备驱动的方式,来屏蔽不同厂商芯片间的差异。目前来看,国产 ARM 芯片的固件库问题多多,用库开发无异于给自己挖坑。


其它     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

一步又一步
走过的路