我把單片機玩死了-完整版
? ? 首先,自我介紹一下:電子工程師一枚,1986年生,09年畢業(yè),在京工作四年。
之所以把自己的經(jīng)歷寫出來,一是無聊,最近項目剛剛做完;二是經(jīng)常逛貼吧,在年輕人身上經(jīng)??吹阶约寒斈甑挠白?,所以不希望他們走彎路。那么現(xiàn)在,就讓時間回到2009年的夏天。
當時剛從大學畢業(yè),專業(yè)是微電子學。嚴格地說,我的專業(yè)是制作芯片,而我現(xiàn)在的工作是應用芯片,已經(jīng)走偏了。不過沒辦法,這個專業(yè)是學校新開的,各個老師都是學校東拼西湊過來的,那種感覺就像用韭菜和茄子做出來的大拌菜一樣,吃起來怪怪的。我到快畢業(yè)都沒想好該怎么找工作,剛好這個時候宿舍的一個哥們剛剛參加了一個培訓班回來。他覺得很好,因為剛好負責培訓的張老師來學校講課,于是跟我說:去*****吧,那里還不錯(此處無廣告)!
我就想無頭蒼蠅忽然遇到一扇窗戶一樣,畢業(yè)了家也沒回,直接背上行李去培訓部了。慶幸的是路上并不孤單,班里的同學凱凱、安保和超哥都一起去了。地點在燕郊的創(chuàng)業(yè)大廈,食宿條件很艱苦。住宿的地方是租的一個兩居室,里面放滿了上下鋪,還有其他來參加培訓的同學,他們來自各個地方。在之后的幾個月里,我和他們結(jié)下了深厚的友情。
20個人,分成了四組,每組負責不同的項目。我在第一組,要做一個波形發(fā)生器出來;凱凱在第二組,做一個具有IC卡讀寫功能的智能水表;安保在第三組,做一個帶有語音提示功能的溫度報警器;超哥在第四組,做一個按鍵可控的數(shù)字電源。
剛剛分到任務我有點暈,因為單片機我都還沒摸過,就要做東西,這是不是有點不合適?雖然在大學里學過課程,但完全是理論課,東西都沒見過,更別說做東西了。我估計凱凱他們跟我一樣心理犯嘀咕,搞不清楚什么狀況。但想想之前來參加的宿舍那哥們,他基礎跟我差不多,但是他能搞定,我應該問題不大,于是咬咬牙,開始搞了。
第一步,項目需求分析,為期一周。老張(就是張老師,我們暗地里習慣稱他為老張)在北京工作了近十年,各個公司都呆過,正規(guī)的,不正規(guī)的都熟悉,所以要求我們第一步先去做需求分析,知道自己負責的項目在市場上有沒有空間,該如何定位,技術(shù)指標如何確定,原理框圖如何繪制。
于是,我們開始了瘋狂的.......上網(wǎng),是的上網(wǎng)查資料。凡是和波形發(fā)生器相關的內(nèi)容,都下載下來,然后共享。相關的廠家、型號、技術(shù)指標、設計方案、參照代碼、市場分析等等等等,就記得那段時間是很瘋狂的一段日子。我們像公司員工一樣簽到、簽退,卻要比他們更辛苦,因為我們晚上11點才離開實驗室,是每天!大腦像運行到極致的CPU一樣,用力的查看著每一條可能有用的信息,每一次呼吸都感覺自己很累,不確定今天能得到什么結(jié)果,也不知道明天會怎么樣。于是,我不停的喝水,讓自己有更多的上廁所的時間,這樣可以多休息一會兒。
每周休息一天,日子很累,但卻充實。我已經(jīng)明顯感覺到和波形發(fā)生器相關的各種關鍵詞都充斥在我腦子里了,DDS、頻率范圍、單極性波形、雙極性波形、調(diào)節(jié)精度、輸出波形峰值等等。但這些還不夠,因為我們得到的這些信息都是搜集來的,并不確定可行性。一切的一切,需要下周一老張審核我們的方案。而我們的心態(tài),也從最開始的畏懼,逐漸被越來越多的疑問代替,然后抑制不住的想知道答案。
終于,開始方案審核了,老張讓我們每人挨個講解了一下自己的需求分析。然后指出不足,順便夸了幾句,給我們增加了點信心。最后給出了完整的方案。
第二步,開始動手?NO!老張說,去逛逛北京城吧!What?我們愣了.....好吧,最后才知道,原來是去中發(fā)電子市場采購。可以這么說,在北京搞電子的,沒有人不知道中發(fā)電子市場,你能想到的一切器件,在這都能找到。而且,畢竟巧婦難為無米之炊,我們動手,總要有器件才行啊。所以,根據(jù)方案列出器件清單。面包板有了,是老張?zhí)峁┑?,別的東西自己解決。于是,一群菜鳥,選了一個陽光明媚的日子,興沖沖的來到了中發(fā)電子市場,任人宰割.......
記得那天,我買完電阻,路過一家二手儀器儀表的店鋪,看著里面慢慢的儀器,不自主的就走了進去。老板以為我是某個學校的學生,隨口跟我聊了幾句,我問他二手示波器多少錢,他說看情況,便宜的三四千,好一點的七八千。忽然心里一動,又問他有沒有波形發(fā)生器,他說有,然后告訴我在哪,怎么用。我很認真的看了很久,心想這就是我要做的東西啊。
第三步,用匯編語言熟悉單片機的基本功能。是的,你沒看錯,是匯編語言!就是說,之后的項目也要用匯編去完成。當時沒有想明白,但是當我一個月后熟練的掌握51的底層結(jié)構(gòu)的時候,我已經(jīng)有點懂了。先從ORG開始,然后是MAIN...再然后MOVE來MOVE去,別人怎么寫,我就抄過來,背下來,然后反復寫幾遍,竟然就懂了。
從對單片機的一無所知,到跌跌撞撞不小心滾進單片機的大門,就這么發(fā)生了。那幾天是異常興奮的,我感覺我就是萬能的神,我可以控制一切芯片。每段代碼,我寫了好多遍,然后又下載了好多遍,每一次成功、失敗的過程都激勵著我前進。
記得有一天在調(diào)試數(shù)碼管,代碼改了一下,重新燒錄,結(jié)果整個電路忽然就不工作了。我愣了,不至于啊,改動不是很大,就算有問題,也不至于整個電路沒反應。于是我花了一個下午查看代碼、檢查電路都沒找到問題。我問阿海,他瞄了我一眼說,你電路有問題吧...我無語,我的電路我清楚,不應該的。到了晚上,八九點的時候,我想再下載一次試試吧,代碼沒動,燒錄進去,結(jié)果忽然就好了。我瞬間愣了一下,放佛想到了什么,馬上打開AT89S52的器件手冊,第一頁的一個參數(shù)解決了我的所有疑惑:該芯片的flash區(qū)擦寫次數(shù)為1000次。換句話說,因為多次擦寫程序,導致這塊單片機的程序存儲區(qū)壽終正寢,已經(jīng)快被我玩死了!
現(xiàn)在還記得當時興奮的感覺,可能是因為一群瘋瘋癲癲的年輕人湊在一起,所以學習的過程并沒有覺得多累,反而很嗨。當時用的ATMEL公司的89S52單片機,還是用并口線下載的。先從點亮LED開始,然后是蜂鳴器,串口掃描,串口中斷,鍵盤和燈,鍵盤控制數(shù)碼管,軟件延時,按鍵消抖等等。隨手放幾個當年的代碼,現(xiàn)在看來,真的是慘不忍睹。
這是個串口掃描的:?ORG 0000HLJMP MAINORG 0100HMAIN:MOV SP,#60HMOV TMOD,#20H MOV TL1,#0FDHMOV TH1,#0FDHMOV PCON,#00HSETB TR1MOV SCON,#50H ?LOOP:JB TI,FHJB RI,SDSJMP LOOPSD:CLR RIMOV A,SBUFINC AMOV SBUF,AFH:CLR TIJMP LOOPEND
這是個定時器定時的:ORG 0000HLJMP MAINORG 000BHLJMP INTERORG 0100HMAIN:MOV SP,#60HMOV TMOD,#01HMOV R2,#0FHACALL INTER1HERE:JMP HEREINTER1:MOV TL0,#0BCHMOV TH0,#03CHSETB EASETB ET0SETB TR0RETINTER:MOV TL0,#0BCHMOV TH0,#03CHDJNZ R2,FANCPL P1.0MOV R2,#0FHFAN:RETI?這是個按鍵控制數(shù)碼管顯示的:ORG0000HLJMPMAINORG0100HMAIN:CLRP2.0MOVP1,#0FEHMOVA,P1CJNEA,#0FEH,SAO1MOVP1,#0FDHMOVA,P1CJNEA,#0FDH,SAO2MOVP1,#0FBHMOVA,P1CJNEA,#0FBH,SAO3MOVP1,#0F7HMOVA,P1CJNEA,#0F7H,SAO4LJMPMAINSAO1:ACALLDELAYMOVA,P1CJNEA,#0FEH,PAN1LJMPMAINPAN1:CJNEA,#0EEH,PD1MOVA,#00HLJMPSENDPD1:CJNEA,#0DEH,PD2MOVA,#01HLJMPSENDPD2:CJNEA,#0BEH,PD3MOVA,#02HLJMPSENDPD3:MOVA,#03HLJMPSENDSAO2:ACALLDELAYMOVA,P1CJNEA,#0FDH,PAN2LJMPMAINPAN2:CJNEA,#0EDH,PD4MOVA,#04HLJMPSENDPD4:CJNEA,#0DDH,PD5MOVA,#05HLJMPSENDPD5:CJNEA,#0BDH,PD6MOVA,#06HLJMPSENDPD6:MOVA,#07HLJMPSENDSAO3:ACALLDELAYMOVA,P1CJNEA,#0FBH,PAN3LJMPMAINPAN3:CJNEA,#0EBH,PD7MOVA,#08HLJMPSENDPD7:CJNEA,#0DBH,PD8MOVA,#09HLJMPSENDPD8:CJNEA,#0BBH,PD9MOVA,#0AHLJMPSENDPD9:MOVA,#0BHLJMPSENDSAO4:ACALLDELAYMOVA,P1CJNEA,#0F7H,PAN4LJMPMAINPAN4:CJNEA,#0E7H,PD10MOVA,#0CHLJMPSENDPD10:CJNEA,#0D7H,PD11MOVA,#0DHLJMPSENDPD11:CJNEA,#0B7H,PD12MOVA,#0EHLJMPSENDPD12:MOVA,#0FHLJMPSENDSEND:MOVDPTR,#TABMOVCA,@A DPTRMOVP0,ALJMPMAINDELAY:MOVR7,#100D1:MOVR6,#50D2:DJNZR6,D2DJNZR7,D1RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,80H,0C6H,0C0H,86H,8EH,7FHEND?現(xiàn)在看來,寫的很簡陋。不過對于當時的自己來說,已經(jīng)很知足了。當時的我們,沒有開發(fā)板,只有一塊面包板。所有要用的東西,都是自己焊接的。可能耽誤了很多時間,但是對后來工作中電路的檢查能力,起到了很好的鍛煉。因為我們手動焊接每一個LED,每一個電阻,每一個按鍵,接觸了布局布線。所以導致我們對電路的敏感度非常高,在后來的工作中,檢查故障電路的時候可以很快推斷出故障出現(xiàn)的位置。這是那些整天叫囂仿真萬能的人體會不到的?。?!這里還是要說一句,個人觀點:初學者少碰protues仿真,什么時候用?當你已經(jīng)完全學會單片機,在項目中要驗證代碼和原理可行性的時候再去仿真。想通過protues仿真來學習單片機,這真的是笑話了!
第四步,真的要動手開始做了。玩真的!具體指標記不清了,大概是:4×4矩陣鍵盤控制,數(shù)碼管顯示,頻率10HZ~1000HZ按鍵可控,三角波、正弦波、方波可選。難點主要在頻率可通過按鍵控制上,就是說從10到1000,我隨便輸入一個數(shù)字,輸出端都要給出相應的頻率。頻率是通過定時器定時中斷控制的,這就要求有一個算法,能根據(jù)輸入值,計算出每次頻率更新時,需要賦給的定時器初值。這涉及到16位的除法運算,匯編里面的除法器貌似只有8位,不夠用。沒辦法,我們到處找16位除法的算法,最后用減法循環(huán)模擬了一個,效果還不錯。
雖然是一個小組,但是我們四個暗地里多少也會有點競爭,誰都不想落在最后。最快的是阿海,波形發(fā)生器的每一步都是他先規(guī)劃好,做出來,然后我們幾個再去模仿。當然,不是單純的復制。矩陣鍵盤的掃描上,我跟他的算法不一樣,DAC0832的驅(qū)動電路,我倆也各不相同。但是,不可否認的是,他給我樹立了很好的榜樣的力量,讓我知道,這個方向,這個思路是可行的。
記不清哪一天了,是個下午。我愣愣的把示波器打開,檢測輸出波形,當看到正弦波斷斷續(xù)續(xù)輸出的時候,我傻了,原來我真的可以做出來。而那一天,距離我們開始做需求分析,不到45天。
后面的事情,很順利了。大家的項目陸陸續(xù)續(xù)都出來,然后坐在一起進行經(jīng)驗交流。還有件事比較重要,就是學習C語言。雖然匯編效率高,但畢竟移植性太差,已經(jīng)慢慢沒落了,而C語言的生命力還很強,很多地方都能用到。
學完C語言,開始接觸AVR和430單片機。在51里面摸爬滾打了一個月,可以說,我們是把51揉碎了,一點一點學完的,跟那種自學,仿真,或者看視頻的效果完全不一樣。當我拿到430的開發(fā)板的時候,我只用了3天時間去熟悉它。前面一天熟悉開發(fā)環(huán)境和開發(fā)軟件,后面兩天看相關例程。因為我們動手過、實戰(zhàn)過、焊接過、調(diào)試過,當我們再去看這些高級單片機的時候,真的是一種輕而易舉、水到渠成的感覺。
總結(jié):很多人學51學的很倉促,覺得這是個很基本的東西,快沒人用了,簡單過一下就行。大錯特錯!上世紀80年代,intel將8051的內(nèi)核技術(shù)轉(zhuǎn)讓給各個廠家,才有了不同廠家的51單片機。而后續(xù)的各種高級單片機,可能內(nèi)核已經(jīng)不是51,但在用的時候,都可以看做是一些寄存器 功能模塊。記得逛一個論壇的時候,一位工作多年的老工程師說了這樣一句話:51,妙用無窮!現(xiàn)在我才有一點體會到這種感覺,可以這樣說,如果你能把51單片機吃透,記住,是吃透,市面上的所有單片機,你都可以信手拈來!另外,花錢的事。怎么說呢....先上圖?
?這是我學單片機買的板子,還有幾塊沒照,光這些已經(jīng)花了好幾百。首先要說的一點,也是重中之重:學單片機一定要買開發(fā)板!因為他是實戰(zhàn)的技術(shù),你在電腦上玩賽車玩的再好,到實際中也不管用。Protuse的問題我在上面已經(jīng)說過了,因為天朝大學的無能,沒有搞清楚這個軟件應該放在單片機應用的哪個階段(個人觀點,不喜勿噴)。
我參加培訓花了4000元,后面,陸陸續(xù)續(xù)買開發(fā)板花了也有一千左右。但是沒有一次會覺得不值。參加培訓,我是在拿錢換時間,我一下子就跟從業(yè)十年的單片機工程師坐到了一起,單片機市場、類型、編程語言、畫圖經(jīng)驗、應聘技巧等等,用我老師的原話:你能學到我的一兩成技術(shù),就能正常就業(yè)了。
這里,我不是要催大家去參加培訓,我的目的是轉(zhuǎn)換大家的思路。盡量少做伸手黨,要舍得投入,自學是最慢、最沒效果的。?大概是11月份,進入找工作的階段了。說起來比較丟人,因為我性格上比較內(nèi)向,面試的時候表現(xiàn)的不是很好,錯過了一些機會。找到的第一份工作是在一家醫(yī)療器械的小公司,月薪只有2500,因為當時已經(jīng)畢業(yè)幾個月了,不想再花家里的錢,所以有點著急。而且,試用的階段也是比較戲劇性的。為什么?
公司那邊同意給我一個試用的機會,前提是,把它們現(xiàn)有產(chǎn)品里面的一個bug改過來,限時一個月。當我打開他們的代碼的時候,我樂了!為什么?可能這個問題對于別的新人來說很麻煩,但對我來說,太簡單了。因為他們的代碼竟然是用匯編語言寫的!可能這就是緣分吧。
那個時候的我對匯編熟練到了什么狀態(tài)?我可以看代碼不需要注釋!當然現(xiàn)在不行了,畢竟好幾年沒用了。也很感謝當時項目組的王公,幫我講解產(chǎn)品的原理圖,我才能快速的明白電路原理,另外,程序風格寫的非常好。果然,半個月不到,問題解決了,我也順利入職了。
后面的工作,比我想象的輕松很多。因為公司小,產(chǎn)品單一,所以研發(fā)的事情一拖再拖。主要工作就是組裝機器、產(chǎn)品配送、故障電路調(diào)試、還有售后維修。周末偶爾回到燕郊培訓部,感受一下當初學習的氣息,順便拿幾片不要錢的芯片。也會跟找到工作的同學聊聊工作的內(nèi)容,發(fā)現(xiàn)各有搞笑和無奈的地方。
培訓部有一點很好,即使你離開了,想要什么資料,它都會幫你找來。記得10年初的時候想學一下cadence這個軟件,問那邊的朋友有沒有相關資料。結(jié)果給我發(fā)過來一個2G的系列視頻教程,是一個叫于博士的大神制作的視頻教程,從原理圖到PCB都有,把我樂壞了。因為當時這個教程在網(wǎng)上還沒傳開,所以顯得很珍貴。
終于,待了不到一年,大概是2010年八九月份。做夠了文案整理和國標的研究,我感覺到了自己的退化,這不是我應該做的。于是我提出了辭職,裸辭,就是說還沒找好下家。剛好趕上當時換住的地方,一下子交了很多房租和押金,弄得自己很拮據(jù)。所以,這里奉勸各位,辭職以前,盡量找好下家,不然的話后果很嚴重。
總結(jié):1、很多人寫程序風格很爛,什么注釋也不加。這是很坑人的,我可以負責任的告訴你,就算是自己寫的代碼,如果沒有注釋和良好的風格,三個月后,保證你自己也看不懂。這里貼一段當年入職時調(diào)試的代碼,懂的人自然就懂了,知道寫的風格有多好:;***************************************keyvalue ???data ???30hpower data 31h;理療輸出功率變量time data 32h;治療時間存儲變量timepal data 33h;輸出功率定時參數(shù)低位timepah data 34h;輸出功率定時參數(shù)高位timelastset ????data ???35h ????;備份用戶設置治療時間STORE_TIME ?????data ???36h ????;預熱開始定時參數(shù)位置值存儲空間 ??--------------------------------------------------------------------------checkkey: jnb keyflag,setbex1 ;有鍵盤中斷進入鍵盤處理程序,沒有則跳轉(zhuǎn)????????mov r1,keyvalue ????????k1: ????cjne r1,#0feh,k2????????lcall powinc ??????????;跳轉(zhuǎn)到功率增加子程序段??ajmp ?koutk2:??cjne r1,#0fdh,k3????????lcall powdec ?????????;跳轉(zhuǎn)到功率減少子程序段??ajmp koutk3:??cjne r1,#0fbh,k4 ??????????????lcall timeinc ????????;跳轉(zhuǎn)到時間增加子程序段??ajmp koutk4:??cjne r1,#0f7h,k5 ??????????????lcall timedec????????;跳轉(zhuǎn)到時間減少子程序段??ajmp koutk5: ????cjne r1,#0efh,setbex1 ????????lcall onoff ??????????;跳轉(zhuǎn)到onoff子程序段kout: ??clr keyflag ????????;清除鍵盤中斷標志????????lcall playkeysound ???;播放按鍵音; ??????lcall d100ms??lcall d100ms ?????????;每秒最多響應3次按鍵????????setb ex1 ?????????????;開鍵盤中斷
2、小公司鍛煉人,雖然待遇一般,但是接觸的東西多。一旦你換到一個新的環(huán)境,你會發(fā)現(xiàn)你比別人已經(jīng)優(yōu)秀太多了。
3、換工作的時候一定要謹慎,盡量找好下家再辭職,不然的話自己很被動。??當時在網(wǎng)上投了很多簡歷,記得有一天面試回來在公交車上。手機忽然響了,接通以后是一個中年男人的聲音:你會用單片機么,我們這需要單片機工程師,你過來吧!我樂了,心想這公司招人的方式也太直接了,我就問他:您那用的是什么單片機啊,51,430還是AVR?誰知道他說了一句:你說的都不對,430不是單片機,是DSP!
我愣了,心理納悶,這是哪路神仙在玩我啊,430用了好幾個月,明明是單片機,怎么到他那變成DSP了。直接說他不對吧,肯定不合適,會讓人很沒面子,于是問了問面試的地點,第二天就過去了。誰知道這一次,迎接我的,是一個超大的坑!坑爹的公司??!當然了,這是后話,當時我的愿望還是很美好的。
面試的過程很詭異,現(xiàn)在想想,他貌似沒有問我什么技術(shù)問題,當時的場景更像是一個傳銷人員給我洗腦。大致情況就是,他們公司之前是做工程項目的,比如修路什么的。企業(yè)很大,去年的利潤是十幾個億。但是是勞動力密集型企業(yè),現(xiàn)在想轉(zhuǎn)做技術(shù)密集型,所以準備成立一個部門,進駐電子行業(yè),將來你們都會成為這個部門的骨干。前期待遇不是很高,月薪只有2500,但是后面部門做起來......可以想象,沒經(jīng)過什么風雨的我,一下子就被那大叔的十幾個億吸引了,滿腦子都是錢,貌似沒怎么考慮就答應了。
第二天去他們辦公室,心涼了一半。真的是個辦公室啊,只有不到20平米,焊接的試驗臺都沒有,只是一個茶幾,上面放了一個尖嘴的烙鐵。尖嘴烙鐵,貌似只有入門的學生或者修理工人習慣用,正經(jīng)調(diào)試電路的人都是用平口烙鐵的。里面三個人,一個葉工負責帶頭,兩個小弟負責幫忙,其中一個人拿出本51的指令集,用手指著上面一個指令問我這是什么意思,貌似是想考考我。我瞄了一眼,順嘴一說,他就沒話了。雖然過去一年有點懈怠,但基本功還在。
當時貌似是在做一個單片機定時控制繼電器的一個設備,想用弱電控制強電的開關。難度不大,主要是安全問題需要注意。據(jù)說去之前,兩個小弟里面的一個已經(jīng)做了快半年還沒做好,用的還是51單片機。劉工(就是昨天面試我那個)問我:
你擅長哪個單片機,需要多久能搞定?我看了下他們的原理圖,以及需要實現(xiàn)的功能說:51,430,AVR都能做,十個工作日左右吧。劉工想了想說:別用51了,用高級一點的單片機,還能練練兵。我說:那就AVR吧,下載調(diào)試也方便。
第二天我就后悔了,不是說做不了。正常的實驗環(huán)境,是一點問題都沒有的,問題是他這里不正常,什么都沒有。沒有示波器,沒有試驗臺,沒有面包板,沒有下載線。僅有的一個烙鐵還是尖嘴的,還有一些零散的電阻和LED,以及控制電路要用到的器件。
我擦了下冷汗,算了算要用到的器件說:我去趟中發(fā)....
下載線我自己學習的時候買了一條,主要用他們提供的一塊液晶。AVR單片機控制的,具體型號記不清了,不過底層驅(qū)動都寫好了,我只負責應用。然后多出來的幾個引腳負責開關控制。總算在第十個工作日搞定了。這個時候,葉工有事請了半個月的假,又發(fā)生了一件讓我想不到的事.....
貌似聘請葉工的月薪是5K多一些,而我們幾個人都是2.5K,然后劉工感覺我的工作能力可以頂替葉工,畢竟這十個工作日我解決了很多問題。而且那兩個小弟也開始向我靠攏,于是,劉工私下主動辭退了葉工,這讓我們很是詫異,原來商場如戰(zhàn)場是真的.....
后面的工作,進入了研發(fā)的節(jié)奏,這是我想要的。定時控制完了之后,有個項目,是要給一個倉庫做一個溫度檢測系統(tǒng)。倉庫很大,所以要用到zigbee技術(shù),放置許多無線結(jié)點,然后數(shù)據(jù)上傳到電腦上。我對zigbee比較感興趣,于是著重看了很多相關的東西。最后發(fā)現(xiàn),這個技術(shù)對應到單片機上,只是一些指令的控制,畢竟讓一個單片機工程師整天研究通信頻率、通信協(xié)議不太正常。于是劉工申請了幾塊模塊,讓我們進行測試。
我選擇了mega8做為控制核心,一是調(diào)試方便,二是芯片體積小,引腳少用到溫度檢測上比較合適,第三,mega8上面有SPI接口,直接就能驅(qū)動zigbee模塊,省得模擬了。
那兩個小弟對此一片空白,于是我又去了一趟中發(fā),買了幾片mega8,焊接mega8的調(diào)試板,還有下載線,杜邦線。回來以后,又找了塊黑板,給他們講解了一下mega8如何使用。戲劇的是,去年這個時候我還在苦逼的學習,今年已經(jīng)可以給人講課了。
模塊調(diào)試的很順利,一個星期就調(diào)試通了,但是越來越感覺那個劉工人品有問題。之前辭掉葉工是一方面,后面許諾的很多福利都拿不到,然后又把銷售和研發(fā)放在一個辦公室,我一天有三分之一的時間都在聽那個銷售哥們打電話,根本沒辦法正常思考,最坑爹的是工資要拖欠三個月才發(fā)。反應了很多次,無果。
某天的一個下午,我給他們演示了如何把采集到的溫度數(shù)據(jù)無線接收后,上傳到電腦上,然后開始和軟件部門的同事商量如何編寫上位機收集串口數(shù)據(jù)的事情。劉工加入了我們的談話,然后徹底毀了我對他的印象...
軟件部的同事之前只會從數(shù)據(jù)庫,或者固定的文件讀取數(shù)據(jù),這次我把數(shù)據(jù)發(fā)到串口上以后,他們不會采集,或者說他們之前沒做過類似的東西。
這個時候,劉工插話了:是不是跟進制有關,換成二進制會不會好一些?我......劉工:要不八進制也試一下。我看了看軟件部沉默的同事,說:劉工,這個跟進制沒關系,是我們兩邊現(xiàn)在對接不上。劉工:真的么,換成十六進制呢?
我無語了,現(xiàn)在也想不起來那天是怎么結(jié)束的了,只是記得當時心里就累了,萌生了想走的想法,于是開始投簡歷。
總結(jié):很多公司習慣返聘一些退休的高級員工,他們回來工作不是為了錢,只是為了找點事情做,所以工資開的很低無所謂。但這對應屆生就有一個不好的影響,公司在招人的時候會說:我們這個德高望重的員工都拿這么點錢,你覺得你可以拿多少? 我相信很多應屆生都不知道該怎么回答。
另外,面試的時候千萬不要隨便相信一些不知名公司吹出來的牛皮,公司利潤再多,發(fā)不到你手上也沒用。而且,如果方便的話,可以適當要求參觀下辦公地點,一定要清楚地知道會不會拖欠工資。?越往后面試,越會覺得面試很直接。為什么?公司找你來是做項目的,行就是行,不行就是不行。而面試官基本都是懂技術(shù)的,幾句話就能問出你的深淺,你前面說的再好聽,技術(shù)不會別人也很難給你機會。因為你已經(jīng)不是應屆生了,沒有培養(yǎng)的意義,所以,我們在工作的路上,一定要學習不止,這樣,當機會來的時候,你才不會眼睜睜的看著它走掉。
簡單算了下,在第二家公司只待了三個月,zigbee的接觸與一些網(wǎng)絡協(xié)議是我最大的收獲。我想找一個靠譜的公司,讓我不用擔心餓肚子,同時也能認真做一些靠譜的研發(fā)工作。終于,有一家臺資企業(yè)愿意給個面試的機會,我把這一年的收獲整理了一下,對自己說了聲加油,然后就去了!
第二個星期,我拿到了這家公司的offer,月薪5K,四險一金都有。好吧,總算解決溫飽了,剩下的日子可能會有些累,但總算是一個成長的過程,很慶幸之前經(jīng)歷的那一切。最懷念的是當初的培訓部,那里教的不光是知識,還有學習的方法。即使有些東西是我不會的,但如果我想去學,借助那里的資源和學習的方法,我可以最快的速度學會。據(jù)說現(xiàn)在已經(jīng)變成在線輔導了,更適合廣大的學員,但已經(jīng)離我很遠了。?說一下這段時間斷更的原因:1、學車,一把年紀了,竟然沒有駕照,自然要抓緊時間。而且平時動腦多一些,動手少一些,導致學車的時候各種弱智的情況都有出現(xiàn),唉,不提了?,F(xiàn)今駕照已經(jīng)到手。在這里奉勸那些還在學校的朋友,抓緊寒假或者暑假的時間,趕緊把駕照弄下來。將來工作了,你就會明白什么是人在江湖身不由己,只能一個周末一個周末的擠時間去練車。
2、把妹...用這個詞不太合適,也是緣分到了,剛好遇到一個特別靠譜的妹子,結(jié)束了本人多年單身狗的生活。理科男大部分情商都偏低一些,遇見喜歡的女生都不好去表白,本人也是錯過了好多,不過這次總算是把握住了,狠狠地把握~~~(此處應該有鮮花)
個人建議,該理性的時候理性,該感性的時候感性!
3、公司項目緊,這才是最苦逼的。最忙的時候,連續(xù)兩個星期一直在加班,女朋友都異常的生氣,不過這也沒辦法,研發(fā)這行就是這樣,任務來了就要認真扛著。國慶前的那一個星期,整個工程部都在加班,早點的晚八點回家,晚一些的十點回家。?好了,言歸正傳,繼續(xù)苦逼的單片機學習之路。這家臺企公司挺小的,只有不到十人,進去以后才知道,總部在臺北,北京這里只是個研發(fā)部。老總每年春天會來呆一個月左右,視察一下工作狀況。平時都是公司的主觀大姐進行管理,公司在人民大學地鐵口附近。不過最近幾年因為霧霾的情況越來越嚴重,老總都不愿意來了,嘎嘎嘎~~~
幸運的是,從家到公司,有直達的公交車,四毛錢就搞定了。面試的時候主管大姐說,如果定下來的話,希望能盡快入職,因為公司有項目要進行,我一下子就興奮了,終于有東西可以做。
入職第一天,就是給我分了一臺舊電腦,然后重裝系統(tǒng)。系統(tǒng)裝好后,裝各種常用的編譯環(huán)境,51單片機用的自然是KEIL C,AVR單片機常用的有兩種ICCAVR和AVRSTUDIO,自學的時候我用的后面一種,不過進到公司里發(fā)現(xiàn)大家都用ICCAVR,于是我也慢慢換過來了。430的話,用的是iar embedded 。
第二天,技術(shù)主管方工拿了一塊板子,上面有一塊液晶屏,跟我說:這個液晶上電啟動的時候屏幕會黑一下,你查查看是什么毛病!
我問了下:這是什么單片機?方工:AVR mega128.我:液晶型號呢?方工:12864.
我一聽,心里有底了,雖然之前沒怎么用過這個液晶,但是我用過別的型號的,太復雜了不敢說,簡單的顯示個字符、符號,那都不是事兒!跟方工要了這個液晶的器件手冊,還有JTAG仿真器,mega128的器件手冊遍地都是,然后就開始調(diào)試了。
AVR的單片機有一點好處,那就是仿真器便宜,在某寶就賣四五十塊錢,仿真器上電連到板子上之后就能進行單步仿真,每一條指令執(zhí)行的效果都能在板子上看出來,這樣對于錯誤排查,是非常有效的。尤其是當你用一款不怎么熟悉的器件的時候,這種直觀的效果,比你傻傻的PROTUSE仿真形象多了。
用了半天時間,把液晶的器件手冊過了一遍,一個寄存器一個寄存器的看,然后對照當前的代碼,判斷問題出現(xiàn)的地方,就出在初始化的位置。具體黑屏的原因沒看出來,于是用仿真器連上板子,一步步查,很快,故障原因找到了,初始化順序有些問題,調(diào)整了一下就好了。??????這段時間很多人加我好友,問了很多問題,我知道的,我不知道的,都有很多。
????首先,我真的不是大神,只是在某些方面會的多一些,真正的大神,都在一聲不吭的忙著做項目,我也就愛閑逛,所以才多說一點,多寫一點。在一些真正的高手眼里,可能我還不入流。
????其次,這段時間真的被問了很多問題,也漸漸知道了自己不擅長的地方在哪,所以今后也會更加認真的去研究一些東西,有機會的話也會繼續(xù)分享自己學習的經(jīng)歷。
????第三,其實單片機入門真的很簡單,買塊開發(fā)板,然后跟著配套視頻學就行了,如果有不懂得地方,多聽幾遍,不理解的詞,多百度幾次,有句話說得很對:百度一下,你就知道,百度十下,你就知道的太多了!現(xiàn)在我遇到問題,也會習慣性的百度,基本都能解決。
????但是,還是像前面說的,向別人問問題的時候一定要說清楚自己在做什么,不要什么都不說,然后就:大神,我代碼調(diào)不通,什么問題????或者,粘貼一大片代碼過來,然后說:大神,我代碼有問題,這是啥原因?。?/span>
最后,分享兩個查芯片資料的網(wǎng)址,平時查什么芯片的datasheet,我基本都會用這兩個網(wǎng)站
http://www.datasheet5.com?還有?http://m.lujuzi.cn/??前段時間忙著訂婚,那叫一個緊張 激動,最興奮的還是收紅包的時候,多多的money啊~~,好了,繼續(xù)回到故事里!
現(xiàn)在想來,之前方工讓我調(diào)試那個液晶屏可能是對我的一種測試,不過當時沒有想到那里,所以也就順順利利的過去了。稍后的日子相對輕松一些,因為項目還沒有正式啟動,我每天就是看看資料,跟新公司的同事打好關系,例如時不時的打下熱水什么的,來了送快遞的,我就先跑出去。其實幫同事收快遞有個好處,我記性不好,剛見面的人很難記住名字,但是快遞單上都會有名字,這樣既當了好人,又能熟悉同事的名字。
慢慢都清楚大家的職責和負責的方面了,不算我,研發(fā)人員一共四個方工,精通光纖檢測方面的技術(shù)劉工,擅長網(wǎng)線、路由方面的檢測設備阿月(男的)主要負責DSP算法的設計,還有一個楊工,主要負責軟件、上位機方面的研發(fā),公司現(xiàn)有的上位機軟件都是他寫的,很厲害,說起各家大型的軟件機構(gòu),頭頭是道。
正式項目還沒有啟動,方工還在設計和規(guī)劃,公司自然不能讓我閑著,給我分配了兩個任務,沒想到的是,這兩個小任務都把我折騰了一下。?任務1:老產(chǎn)品升級!理論上來說這種活都是很簡單的,設計原理都不用考慮,因為東西是現(xiàn)成的,只需要對相應的部分進行優(yōu)化就好了。
那個任務交到我手上的時候,是這樣跟我說的:設備上的液晶部分的驅(qū)動IC停產(chǎn)了,于是廠家那邊重新?lián)Q了一顆IC進行液晶模塊的設計,IIC協(xié)議通信。接到我們的電路上的現(xiàn)象是字符有些亂碼,應該是IIC的時序不兼容,調(diào)整一下時序就好了。于是我真的以為就是時序不兼容,真的就傻傻的去調(diào)整時序去了,結(jié)果那真的是一個坑爹的活?。?/span>
于是那幾天的工作就是在各個驅(qū)動子程序里面添加 NOP,一個,兩個,八個,十個,但是怎么加,還是有亂碼,現(xiàn)在想來,自己真是夠傻的,不過當時真的就是被帶到死胡同里面去了。
不管怎么加,都是有亂碼,而且一點好轉(zhuǎn)的跡象都沒有,我開始有些疑惑:不應該這樣??!老的液晶加上后,顯示正常,新的液晶加上以后,打死也不正常。整個板子的供電電壓是3.3V,因為用的msp430f147,但是液晶部分的電源用了一個升壓芯片,升到了5V。也就是說,液晶的驅(qū)動信號是3.3V的,但電源是5V 的,會不會是5V的液晶不應該用3.3V的信號驅(qū)動?
看到有吧友說我更新斷斷續(xù)續(xù),我也沒辦法, 女朋友情緒不穩(wěn)定,總要我陪她,每天下班聊個電話要好久,然后就困得不行了........哎,大家忍忍吧?故事繼續(xù),于是我做了一個測試,從家里拿了一塊51的最小系統(tǒng)板,完完全全的5V供電,5V驅(qū)動。把430里面的驅(qū)動程序移植到51里面,做了一個簡單的液晶屏幕從左到右點亮的測試程序,很順利,沒有調(diào)試,一次就成功了。
接上新的液晶模塊,上電以后看效果,奇跡出現(xiàn)了!??!屏幕很完美的從左到右慢慢點亮,沒有一點亂碼。
到此為止,我覺得問題應該解決了,就跟廠家那邊溝通,說了自己的看法:認為新型的液晶驅(qū)動IC性能不如老款,5V電源供電的時候,3.3V的驅(qū)動信號無法讓液晶正常工作,然后整理文檔,開始寫總結(jié)了。
意外的是,下午的時候廠家那邊回了一封郵件,把我的推測完全推翻了!廠家回復說:他們做過測試,給液晶屏5V供電,用3.3V信號驅(qū)動,是沒有問題的。這下我暈了,只能重新找問題。?于是我拿著萬用表,量信號,一會兒量量電阻,一會兒量量電壓,其實自己也是暈的,感覺最有可能的結(jié)果被推翻。但是廠家那邊既然說了這個話,肯定是有依據(jù)的,畢竟要出那么多的貨。
于是重新整理思路,首先確認自己板子上的3.3V驅(qū)動信號,用萬用表量了一下,3.29V,沒問題;然后確認給液晶供電的5V電源芯片,用萬用表量了一下,5.11V?。?!之前培訓時大量的焊接、調(diào)試經(jīng)驗以及這兩天的調(diào)試過程,讓我對這個數(shù)值感覺到了一絲不安。其實之前就已經(jīng)量過,是有些偏高,但是一般的芯片兼容電壓都是比較寬的,不應該出事。
不過現(xiàn)在排除了那么多可能,剩下的要一個一個認真過濾。于是,用最小系統(tǒng)上面的5V接過來給液晶,GND連在一起,之前設備上的5.11V用壁紙刀割斷,上電,亂碼終于消失,瞬間,整個世界都美好了!
也就是說,因為升壓芯片性能不穩(wěn)定,原本該升到5.0V的,升到了5.1V,就因為這0.1V的電壓,導致液晶屏工作不正常。當我把這個結(jié)果告訴方工和劉工的時候,他倆也是一臉的不敢相信,因為通常來說,電子設備雖然有額定工作電壓,但是是有一個比較寬的范圍的,比如一些芯片5V額定電壓,但是4.5 到5.5也能運行,像這次這個液晶,及其罕見。
果然,下午的時候把結(jié)果發(fā)送給廠家那邊,他們沒話說了,兼容性做的這么差,估計他們自己也沒想到。?這周一去了趟上海,跑了兩個地方,累的要死,都沒時間看看東方明珠塔。感受有兩點:1、交通和北京一樣堵;2、說話很好聽,可能從小習慣了說普通話,沒有自己的第二語言,覺得每個地方的方言都有自己的特色。
好了,繼續(xù)更新。任務2,說不上是產(chǎn)品升級了,有一臺設備,線路通斷檢測用的,使用1602做的顯示屏??梢酝瑫r檢測12條線(或者是16條線,記不清了)中間是否有斷點。檢測結(jié)果會顯示在液晶屏上,上級感覺顯示結(jié)果排布的不夠美觀,想修改一下,于是也交給我了。這次任務的結(jié)果么,呵呵呵呵呵呵呵...................................
當時心里想的是,這個應該更簡單了,電路都不用動。單片機是AVR的AT MEGA32,于是拿了JTAG做單步調(diào)試用,跟主管要了源程序準備大干一場。打開代碼后,我大致看了一眼整體框架,心里有種不好的預感.......因為這個代碼寫的,真特么亂啊,怎么形容呢....
打個比方,原本是延時的子程序,他會寫一半,另一半放在中斷里;原本是中斷的子程序,他會寫一半,另一半放在顯示驅(qū)動里;原本是液晶顯示驅(qū)動的子程序,他會寫一半放在別的地方,于是整個框架你會看到他的各個地方調(diào)用各種看不出功能目的的子程序,不是一般的亂。
終于,我堅持看了三天,實在看不懂他的流程,找方工說了當前的狀態(tài)。方工哈哈一笑,說:交給楊工吧,這程序作者不在這上班了,風格確實寫的亂,我們看他的程序時也是一邊看一邊罵。
方工的話可能是種安慰,還是覺得心里過意不去。后來無意中聊起這個程序的作者,聽說當時跟公司的主管大姐鬧矛盾,故意把程序?qū)懙暮軤€,定義變量的時候經(jīng)常用fuck1、 fuck2來定義,后來直接走人了.....能有這樣的奇葩,也是醉了。
任務轉(zhuǎn)交給楊工,雖然他是寫上位機的,但是C語言功底很好,調(diào)試了四五天,搞定了,不過我感覺他也挺惱火這種事情的,只不過不好意思開口說臟話,后面主管大姐讓他再修改一些細節(jié),他都不愿意改,因為實在是太亂。
我很好奇這么亂的程序他是怎么看懂的,于是就跟他聊。他:你用軟件什么看代碼的?我:用的ICCAVR。他:怪不得看不懂,ICCAVR其實就是個編譯軟件,看代碼的話效果一般。你可以試試source insight,這個非常好。果然,我裝上試了下,看起來非常舒服,所有定義的變量,子函數(shù)都能自動識別出來,而且我后來才知道幾乎所有寫代碼的工程師都會用這個軟件,如果不知道這個軟件的話,會顯得有點業(yè)余....好吧,看來我真的很業(yè)余。如圖?
隨便打開了一個文件,左側(cè)是整個程序中用到的函數(shù)名、庫名,點擊函數(shù)名,會自動跳到該函數(shù)。所有引用的庫、定義的變量都會自動識別,給字體搭配不同的顏色方便區(qū)分,顏色也是可以定義的,還有更多功能就不一一介紹了,大家慢慢研究就行了。
使用方法也是我自己慢慢摸索的,所以也不要問我教程了,因為我也沒有。?總有朋友加我QQ,問我一些問題,問的最多的有兩個:1、51學到什么樣才算可以,這個問題確實要謹慎的回答。我想了想,分為內(nèi)外兩方面,內(nèi)部,熟悉51單片機的內(nèi)部結(jié)構(gòu),定時器、中斷、串口,想用哪一部分功能的時候都信手拈來,記得參加培訓的時候,我和凱凱因為按鍵的驅(qū)動程序爭執(zhí)了半天,他感覺只能通過中斷來進行按鍵檢測,而我用的掃描的方式,讓他覺得不可思議。外部,知道一些常用的器件,常用的總線通訊方式,例如IIC總線,SPI總線,都能用51的IO口模擬。
知道上面那兩部分就夠了么?不夠!因為單片機是用來做項目的東西,你只是知道了每個部分的環(huán)節(jié),沒有連起來,就好像練武功,你知道所有的招式,但如果不能把招式連起來形成一整套動作,沒有意義。所以必須要用51做個項目出來,只有這樣,你才能經(jīng)歷研發(fā)的整個流程,在實際中驗證自己所學的東西是否有用。?2、學習單片機需要什么樣的基礎?需要學好數(shù)模電才能學單片機么?如果看一些賣開發(fā)板的視頻教程上說的,他們會說的很輕松,只需要簡單的數(shù)電、模電、C語言基礎就可以。確實,按照視頻上講的,能夠玩轉(zhuǎn)他們的開發(fā)板,但是學習從來就不是輕松的事。而工作中更會遇到各種各樣的突發(fā)狀況。
為什么上完小學要上中學,為什么上完中學要上大學? 能不能直接上中學? 不行,因為小學的知識是為中學鋪墊的,中學的知識是為大學鋪墊的。而單片機是一項一直在鉆研的技術(shù),你會遇到各種新的芯片要了解,新的技術(shù)去學習,了解完當下的問題,你會遇到新的問題。你會的東西越多,越會感覺自己知道的東西少。
如果單從入門來說,高中生就可以進行單片機的學習,但是要學好,都會經(jīng)歷一段時間,就看自己的努力程度了。
非常對不起吧里的朋友,一下子斷更斷了半年多。中間經(jīng)歷了很多很多,有高興的,也有不高興的,但是對一個人的人生來說,都是一場經(jīng)歷,也是一種財富。這段時間我會試著把這個帖子結(jié)束,畢竟已經(jīng)拖得太久了,而且過后可能會嘗試換一種工作方式了。接下來,故事繼續(xù)。?還是在那家臺企的公司,那兩個任務完成以后,研發(fā)項目開始啟動。那是第一次接觸比較大的項目,要研發(fā)的設備名稱是OTDR,英文全稱是Optical Time Domain Reflectometer,翻譯成中文是光時域反射儀。它是利用光線在光纖中傳播時的瑞利散射和菲涅耳反射原理設計而成的一種光纖檢測設備。
如果你聽不懂沒有關系,用人類的語言來說,光在光纖中向前傳播的時候,會發(fā)生一些散射和反射,這些散射和反射的傳播方向與光源發(fā)出的光傳播方向相反,通過檢測這個反射回來的光對應時間的強度與狀態(tài),可以知道光纖的長度、故障點等等相關信息,所以這種設備在光纖施工的過程中是比較常用的。所以在心里我就把這個東西定義為一個檢測光纖的玩意兒。?
?怎么做?總負責人是方工,對光路檢測研究比較多。記得剛?cè)肼毜臅r候,還扔給我一本光學方面的書讓我看,當時我還納悶,這單位啥情況,不研究電子研究光。但是后面才意識到,電子電路也好、外語也好、編程也好,都只是一個工具,我們要做的是使用這些工具,按照特定的需求,做出產(chǎn)品,做出一個給人用的產(chǎn)品。例如,要做一個MP3,那么就要對音樂有一定的了解;要做一個相機,那就要對圖像效果有一定的研究,比如愛自拍的人喜歡什么樣的效果。
這些知識,或者需求,單單一個只懂電的人肯定是搞不懂的,你處在哪一行,就要研究哪一行的專業(yè)知識,這是必然的。
方工的做法很直接,買回來國外的設備,拆了復制。不要覺得詫異,北京中關村電子市場就有很多專門抄板的,我估計很多小公司也都是這樣做的,除非你處于行業(yè)里的領頭羊,那樣的話你就處于被抄襲的地位,否則多少都會有一些借鑒的地方。
在我來之前,國外設備的原理圖已經(jīng)被推測的七七八八了,處理器大致分為三部分:ARM DSP FPGA。
FPGA部分負責控制激光發(fā)射端和數(shù)據(jù)采集部分,FPGA收到采集的命令以后,首先控制激光頭發(fā)光,發(fā)光時間從10ns到幾百ns不等。發(fā)光的瞬間由一個并行AD對反射回來的光強度數(shù)據(jù)進行持續(xù)采樣,采樣時間貌似是和發(fā)光時間相等,時間太久記不清了。采到的數(shù)據(jù)存到FPGA內(nèi)部的RAM中,經(jīng)過簡單的處理然后通過MCBSP接口發(fā)送給DSP。
DSP對FPGA收到的數(shù)據(jù)進行分析,如果光纖是一條完整的線路,那么反射回來的光強度會隨著時間逐步衰減;但如果一條光纖是由兩條或者多條光纖通過端子連接起來的,那么連接點位置會反射回的光強度就比較大,通過判斷光強度隨時間變化的一個關系,就能大致知道光纖有沒有斷點或者彎折的地方,這是OTDR的大致原理。
ARM部分負責統(tǒng)籌全局,同時驅(qū)動屏幕把采樣結(jié)果通過曲線的形式顯示出來,畢竟圖像更容易讓人理解。
ARM部分和DSP部分都有人負責了,就剩下一個FPGA部分沒人管,于是乎,我又開始搞FPGA?,F(xiàn)在回想起來,那段時間其實也是挺開心的日子,衣食無憂,每天也能學到東西,領導提的要求都能滿足。
大學的時候接觸過CPLD,那時候用的編譯環(huán)境還是MAX PLUS II,編程語言是VHDL。MAX PLUS II是altera公司提供的開發(fā)工具,據(jù)說在2000年(百度上查到的數(shù)據(jù),官方的數(shù)據(jù)沒查到)左右就停止更新了。這次使用的器件是altera公司的cyclone ii系列的EP2C8T144,MAX PLUS II不支持,于是轉(zhuǎn)向了quartus II。
剛開始用的quartus II版本好像是7,有一個邏輯編譯死活過不去,是用switch語句寫的一個狀態(tài)機,當時覺得挺奇怪,因為就是一個很簡單的判斷過程,于是卸掉quartus II 7,改為quartus II 9,再次編譯,我靠,竟然就過去了。當時百度了一下原因,好像是因為軟件自身功能限制。所以現(xiàn)在養(yǎng)成一習慣,工作中比較重要的軟件,只要不是特別麻煩的,都會盡量升級到比較新的版本,即便不是最新,也是第二新。
印象中quartus ii 9這個版本還帶有仿真的功能,但是到了10就沒有了,后面的應該也沒了吧。一開始心里還有些不習慣,沒了仿真怎么驗證,后來發(fā)現(xiàn)了一款功能更強大的仿真軟件:ModelSim。
關于FPGA的仿真這里要說一下,玩過單片機的,調(diào)試的時候都習慣有個仿真器,這樣的話程序下載進去,通過點擊電腦這邊的仿真界面能控制實際電路中的單片機的運行步驟,執(zhí)行幾行指令、或者執(zhí)行到什么地方都能夠控制,實時在電路上看到現(xiàn)象,哪里出了問題能立刻找到,這樣調(diào)試非常方便。
但是FPGA中沒有這樣的仿真器(NIOS II軟核仿真除外),真的沒有!也就是說我們沒辦法像在線調(diào)試單片機那樣一步一步的在線調(diào)試FPGA,怎么辦?
答案是軟件仿真!關于軟件仿真,我找到了ModelSim。
ModelSim的使用方法很簡單,需要你會寫tesebench。也就是說你要模擬FPGA在電路中的工作條件,給它發(fā)送相應的控制信號,這樣的話FPGA的程序就會運行起來,無論是外部引腳還是內(nèi)部變量都會跟隨運行時間發(fā)生變化,只要觀察特定時間的信號是不是符合我們的要求就可以了。
我在網(wǎng)上找了幾個例子,參照了一下,發(fā)現(xiàn)寫法很簡單,也是基于硬件語言,基本上一天就搞定了。如圖所示,非常爽~~~?
然后說編程語言,編程語言肯定離不開VHDL與Verilog的比較。
由于就在那段時間用了一下可編程邏輯器件,所以這兩種語言的優(yōu)劣也不太清楚,VHDL據(jù)說是美國軍方設計的編程語言,相對復雜一些,而Verilog是民間研發(fā)的,入門更簡單一些。所以當時就選擇了Verilog。
C語言與VHDL或者Verilog語言最大的區(qū)別是什么?
很多初學者會覺得里面的if語句,或者while語句用法差不多,感覺區(qū)別不大。但實際上,C語言是順序執(zhí)行的語言,VHDL和Verilog語言是并行執(zhí)行的語言,這是他們最大的區(qū)別。
順序執(zhí)行指的是處理器只有一條任務線,所有的任務按照一定的順序排在這條線上,按照從上到下的順序循環(huán)執(zhí)行。偶爾有一些中斷、定時的需求,處理一下就完了,執(zhí)行的任務以任務線上的需求為主。
但是VHDL或者Verilog語言不一樣,它是并行執(zhí)行的語言,可以有多條任務線,這些任務線是同時進行的。
打個比方,C語言是一條流水線,一道工序挨著一道工序,想增大單位時間內(nèi)的工作量的話,只能加快速度。但是VHDL或者Verilog語言是多條流水線,想增大單位時間內(nèi)的工作量?簡單,再開一條流水線就行了。
硬件部分方工已經(jīng)設計好了,我主要負責在上面編程。剛開始的時候只是測試電路上的一兩個功能,任務少,我還沒什么感覺。但是當需求多了以后,我就有了一種明顯的精神分裂的感覺,感覺腦子里有團漿糊。這是寫慣了C語言順序執(zhí)行的程序,寫Verilog出現(xiàn)的一種癥狀。適應了幾天,然后就過去了。
那段時間每周都會開例會(這句話不標準,應該是大部分公司都會定期開會),上一周的工作總結(jié),下一周的工作安排。作為一個性格內(nèi)向的人,我是比較抵觸這種會議的,因為需要發(fā)言。但實際上這種會議對于工作的促進是非常有用的,它能讓你快速的理清楚你上一周做了什么,下一周應該做什么。進度到底是快了還是慢了。
當然,有的地方也會通過寫工作日志的方式來記錄工作的進度??梢钥隙ǖ氖?,在這兩種方式下工作、生活,效率都會很高。
前期調(diào)試的過程,大部分都比較順利,激光器的開關控制、數(shù)據(jù)的采集、數(shù)據(jù)的處理,雖說編程語言不一樣,但是有大量可借鑒的經(jīng)驗。唯獨一個地方出現(xiàn)了問題,那就是數(shù)據(jù)的上傳?,F(xiàn)在回想起來,這個問題算是不大不小,但是解決不了會讓人無比惡心的一個問題,那就是數(shù)據(jù)的上傳。
數(shù)據(jù)在FPGA,要上傳到DSP里,通過DSP的MCBSP接口。FPGA上面沒有這個接口,需要用普通的IO模擬,于是我把這個接口的時序圖拿來,一個時鐘一個時鐘的卡,確保每段時間都滿足。但是上傳的時候,死活傳不上去,比之前電壓的問題還要惱火。需要上傳的有幾百個字節(jié)的數(shù)據(jù),每次只能傳上去一個,然后就沒反應了??傊?,很惱火。
這個問題卡了我好幾天,方工也過來看了幾次,一開始他也覺得是個小問題,但是好幾天沒動靜,他也急了。我把情況跟他說了一遍,時序方面的事他對我也很放心,畢竟之前的工作表現(xiàn)都很好,不可能連個時序圖都模擬不好。他在他的位子上坐了一會兒,然后跟我說:
實在不行,改并行接口!我心里接受不了這個結(jié)果,說:很簡單的問題,不應該,而且那樣的話板子要重畫了。
方工又想了想:你在傳送的時候,每個字節(jié)之間多加一點延時試試。
我當時無精打采,明白方工的意思,但是心里對那個DSP的datasheet有股怨念:老子明明按照你的時序走的,為什么就是不行?
但是工作的事不能耽誤,于是我在每個字節(jié)之間加了一小段延時,好像是幾個us吧。再試,忽然就特么好用了,幾百個字節(jié)幾秒鐘就傳了上去。記得當時渾身都放松了下來,心里一塊大石頭落了地。然后楊工寫了個小軟件,把采到的數(shù)據(jù)繪制成曲線,當然,這其中有一定的處理,不過已經(jīng)不是我的工作范疇了。
繪制出來的曲線和我們買的樣機生成的曲線幾乎一致,在斷點處都會反射回較強的光,但是隨時間衰減的特性表現(xiàn)的不是很明顯,于是楊工和方工兩個人又開始到處找資料、研究算法。至于我,可以暫時休息一會兒了~~~
總結(jié):1、FPGA與單片機是兩種不同的器件,擅長的領域不一樣。注意,最關鍵的一點:FPGA的本質(zhì)是一堆邏輯門,通過硬件描述語言轉(zhuǎn)換成電路,所以它是沒有CPU的,它是一大坨可以任意定制的邏輯器件。當然通過一定的方法可以給它嵌入一個CPU軟核,這樣的話,它可以變成CPU 邏輯電路。在并行運算的方面具有非常大的優(yōu)勢,多用于通信、圖像處理等等。
單片機是有CPU的,可以被理解為跑程序的微型電腦。相比較而言,單片機C語言偏向于軟件。
2、關于經(jīng)驗。方工隨口一說加個延時,然后問題就解決了,靠的是什么?貌似也只能是以往大量的經(jīng)驗。
但是關于經(jīng)驗,有時候也是有爭議的。如果過于依賴經(jīng)驗,就會變成知其然不知其所以然,最常見的一句話:
這個電阻(或者電容)選這么大就行,經(jīng)驗值!
相信很多人都聽過這句話,我個人比較懶,聽到這種答復也懶得追究,畢竟省事、省心。但是對于愛刨根問底的人來說,這句話解決不了任何問題。
這里給大家的建議是:把經(jīng)驗當成一個工具,可以經(jīng)常使用,但是不能過度依賴,同時要搞清楚每一個“經(jīng)驗值”背后的原理。畢竟設計電路、分析電路,最本質(zhì)的依靠的還是原理,而不是經(jīng)驗。
3、流程圖。關于流程圖,很多人都不畫,直接去寫程序。倒不是說不行,分情況。
第一種,如果一段程序,你之前寫過類似的,整個流程已經(jīng)非常熟悉了,那樣的話是完全可以不畫流程圖的。
第二種,你要做的是一個新產(chǎn)品,之前沒有寫過類似的程序,那么強烈建議你畫一下流程圖。這樣的話,整個過程、其中的細節(jié)、先后的順利你就都能整理清楚,甚至一些沒考慮到的細節(jié)在畫圖的時候自然而然的就考慮到了。
經(jīng)常有一些新手,程序不知道怎么寫。但是我問他這個功能他知道,我問他那個功能,他也知道,所以不是不會寫,而是理不清流程。不知道應該先做什么后做什么,只要把流程圖畫出來以后,相信一半以上的問題都能解決。
OTDR的項目告一段落之后,方工覺得我能力還可以,因為我總是能在他們覺得沒問題的地方發(fā)現(xiàn)問題,并解決問題,于是開始讓我獨立負責一些簡單的項目。
事實上,電子產(chǎn)品設計調(diào)試的過程中,解決問題很麻煩,發(fā)現(xiàn)問題同樣很麻煩!注意,這里說的是發(fā)現(xiàn)問題的根源。問題根源找到之后,解決起來就相對容易一些。就如同看病一樣,如果找不到病因,那么你是沒辦法對癥下藥的。
獨立負責項目的過程很激動,也很辛苦。因為在此之前,方案都是由別人確定好,或者分工好,然后我這里執(zhí)行的是一個確定好的方案。但是獨立負責的話,你就要考慮很多之前沒考慮過的事,例如方案是否合理,怎樣能滿足需求,成本如何控制更低一些,器件如何選型等等。這些事情都是你自己要先拿出一個基本的思路,然后再和別人討論的。如果沒有足夠的知識儲備,做這些事是很吃力的。
獨立研發(fā)的過程不多說了,因為涉及到當時公司的一些產(chǎn)品原理,萬一手一哆嗦寫多了不好。上面的項目我只涉及了三分之一的部分,寫出來也沒有太大影響。
總之,那幾年經(jīng)歷了一些項目,學到了很多東西。有些事,真的要自己經(jīng)歷過才能明白,加班在公司過夜的情況也出現(xiàn)過,但是很開心,沒有怨言。
在北京的日子雖然悠閑自在,但畢竟不是家,所以從2013年開始我就在想一件事,北京對我來說到底是什么?這是每個去大城市的人必然要思考的一個問題,每個人的答案都不一樣,因為每個人的經(jīng)歷也都不一樣。
第一個問題:要在這里定居嗎?不會!雖然這里很發(fā)達,什么都有,但是缺少家的感覺,更不要說那恐怖的房價。我是個戀家的人,肯定會回去。而且父母年紀大了,需要人照顧。
第二個問題:要在這里呆多久?這個問題很難回答,當一個問題很難回答的時候,可以使用排除法。福爾摩斯說過一句話:把所有的不可能排除掉,剩下的,無論多么不可思議,它就是真相。
呆多久我不知道,但是我知道的是,呆的越久,越不想走。因為我認識的朋友很多都在這邊,生活習慣也越來越適應這里。呆的越久越走不掉,既然這樣的話,越早離開這里越好。所以,意識到這個問題以后,我就開始考慮回家的事。
第三個問題:回去以后能做什么?繼續(xù)搞自己專業(yè)?我打開智聯(lián)招聘,看了一下廊坊本地的相關職業(yè)。果然,比北京少太多太多太多太多了....但也不是完全沒機會。
花錢找個事業(yè)單位上班? 每天開關電腦,然后喝茶看報紙?老媽到時挺希望我找個這樣的工作,但是我閑不住??!
假如專業(yè)沒得搞,事業(yè)單位也去不了,怎么辦?能否找到自己的第二職業(yè)?這三個問題差不多是每個離開大城市的人都可能會考慮的,我自己么,呵呵~~~仔細盤算了很久,當時我得到的答案是:首選當然是找到自己專業(yè)相關的工作;次之的話,去做銷售,畢竟門檻低,為此還買了好多相關的書去學習;最后,如果前面兩個選擇都不合適,那就花錢找個事業(yè)安心單位上班吧。這三個答案確定下來以后,就開始著手離開的事了。
首先,專業(yè)不能丟。我和單片機之間已經(jīng)不是簡單的工作關系了,而是一種骨子里的喜愛,即便換了工作,我也會在業(yè)余的時候研究一下。而且還會繼續(xù)學習,有位前輩曾經(jīng)說過一句話:高級電子工程師和初級電子工程師之間的區(qū)別在于,在面對基礎知識的時候,高級工程師基本上是沒有盲點的。我想,我會一直向著這個方向?qū)W習的。
其次,銷售方面的書買了幾本,什么《羊皮卷》啊,《營銷與策劃》啊?!抖ㄎ弧钒≈惖模灰欢芸聪氯?,但至少擺擺樣子。
第三,開始和公司提出辭職,同時和北京的朋友一一告別。公司那邊很意外,開始挽留,我把真實的想法跟公司同事說了之后,同事也表示理解。
為什么理解?因為其中一個同事也有了類似的想法,只不過他更瀟灑一些。怎么瀟灑?那哥們2009年在北京沙河買的房子,當時花了60萬左右,后來漲到了200萬。由于個人問題一直沒解決,于是在我辭職沒多久他也辭職,把房子賣了,然后全國旅行去了,我那個羨慕啊~~~
走的那天,主管大姐安排我們幾個同事一起吃了個飯,算是給我送行。很感激這家公司的幾個同事,有問題一起分析,沒有太多勾心斗角,平淡,真誠。
其他的一些朋友也找時間給我送別,當初一起來北京的幾個同學,有的已經(jīng)離開了,還有的貸款買了房子,準備留下來。當初來北京時的意氣風發(fā)已經(jīng)磨掉了很多,可能這就是成長吧。沒有挽留,也沒有喝的酩酊大醉,就是坐在一起聊聊天,如果時間倒回到剛來北京的那兩年,估計兩者畫面差不多,只是幾年前的畫面里多了一些人,每個人臉上還有很多的憧憬。
呵呵,寫的有些傷感了。所以,把一切收拾妥當,沒用的扔掉,2014年我回到了廊坊,一個熟悉又陌生的城市。可能有的人會說:你在外面讀了那么多年書,又在大城市生活過,可是現(xiàn)在回到小城市,和那些一直生活在小城市的人有什么區(qū)別呢?
我想,可能就和那只井里的青蛙一樣吧。如果我沒有出去過,我的世界就是井口這么大;但是當我出去后又回來的話,再次望向井口的時候,我必然會看到不一樣的風景!本帖結(jié)束。??