|
最近又入手PIC的單片機,之前有用AVR的,所以特想了解一下這兩種芯片的不同之處。于是搜集了網(wǎng)友的的評論。只可惜對這兩個芯片我都是用C作開發(fā),真正的區(qū)別估計要用匯編開發(fā)時才能發(fā)現(xiàn)到底用哪種芯片比較好用。
AVR陣營:
PIC的只有幾層堆戰(zhàn),用起來簡直繁的要死 ,尤其是PIC12C508 或者PIC16C54之類的 連個中斷都沒有,寫其程序來麻煩的要命 , 當(dāng)你連續(xù)調(diào)用兩個子程序的時候,堆棧就溢出了,你說痛苦不痛苦 ,更不要說移植UC/OS之類的操作系統(tǒng)了(操作系統(tǒng)一般都要頻繁的使用堆棧) 。就算PIC16F877還算可以,可是價格高的嚇?biāo)廊?和AVR的沒法比 , PIC唯一的優(yōu)點就是指令少 適合一些什么都不懂的初學(xué)者,只有33條指令,就是傻子也能學(xué)會 。但是如果你要進行判斷大與 小于 或者等與 之類的東西時 你就會知道 PIC是多么的垃圾.。我相信能用PIC指令獨立寫出 判斷大與 小于 或者等與 的不是很多. 。如果你用AVR的指令基本上1到2條指令就能很快的判斷出結(jié)果了. 。還有PIC的RAM和ROM都要來回的分頁,把你的頭都搞大了.而AVR的都是線性地址不存在分頁問題 AVR是是我用到的性價比最高的一款芯片,其速度也是最塊的,最近有好多新的單片機或者低價位的ARM ,我看了一下,其功能比AVR的強不了多少 ,現(xiàn)在用涌出了一大批臺灣系列的芯片,其內(nèi)核與PIC的差不了多少 ,就是因為PIC的內(nèi)核簡單,很容易被 。被人仿造,比如 義隆EMC 麥肯MDT HOLTEK合泰 普泰PT 通泰等等 你仔細分析一下其指令集和PIC的基本一致 有好多可以直接代替PIC的,比如EMC公司的 和MDT的 具體什么型號的我就不多說了 。但是市場上到現(xiàn)在為止沒有一款可以仿造AVR的內(nèi)核的 因為他是真正的好東西,不是誰都能仿造的 。其實PIC的片子和臺灣的片子功能大同小異,和AVR還是有點差距 ,臺灣合泰的片還是不錯的 C至少有一套完整的C開發(fā)工具,尤其最近還推出了可以反復(fù)擦寫的,比如 ,HT48E06等純IO口單片機.
PIC的OTP,說是能夠降低成本不少,但是看到武漢力源的報價,簡直就是殺人,而且,OTP在開發(fā)初期特別是資本小的時候,真的怕怕,如果用UV擦除的芯片,壽命不說,光擦除就夠受的了,麻煩死了,而16F84、16F877等等芯片比起同類AVR的可開發(fā)性和價格來說基本上就是垃圾。 HT還是好一點,價格好,開發(fā)費用算比較低的。雖然資源少,但是家電特別是小家電來說,足夠了。 很多人用NEC或者富士通芯片,不是為了別的,只是為了防止別人解密仿制,用量很少的芯片一般很少有人破解,這是個好處。但是PIC就麻煩得很,2K/1天就可以完全破解,連地攤老板都這么說。
PIC是最早推出來低價位的芯片,比如8只腳的PIC的PIC12C508 只有0。5K的ROM 還有PIC16C54 這兩個片子就是純IO口的 只有兩級堆棧,連個中斷都沒有, 就占了一個出來的最早的優(yōu)勢,但是那時候AVR是沒有研制出來,因為當(dāng)時不需要, 主要是AVR也是ATMEL的一個系列而已,ATmel的AT89C51已經(jīng)全世界都在用。 ATMEL公司當(dāng)時不把PIC當(dāng)作一回事。 不過有人說PIC的抗干擾能力好,是因為他的功能少只有IO,沒有中斷,肯定會好一些 ,但是功能多的72,或者73 抗干擾并不好。 現(xiàn)在有好多直接代替PIC的,不需要轉(zhuǎn)移程序,價格做到兩塊錢以下,但是PIC的價格連PIC12C508的都在4塊多。我不認為PIC現(xiàn)在的價格占優(yōu)勢。 你也不會拿16C54根MEGA48去比吧 ,懂行的人一看資料就是到這兩個片子不是一碼事
因為軟件仿真同實物還是有差別的,所以很多時候直接用實物運行,但是用OTP問題就來了,AVR的Mega16L我可以修改5000次(我現(xiàn)在就修改了5000多次了,好幾個東西用一片),不會增加負擔(dān),但是PIC的OTP就慘了,就算6元/pcs,5000次都是3萬哪。。。。實在受不了了。。。。。原來燒廢了100多片,心痛。
pic分頁讓人頭痛,一個函數(shù)大于分頁容量就編譯通不過了。對于一個函數(shù)大于2k似乎是設(shè)計不妥,但是在單片機范疇里,是有這種可能的,頻繁的調(diào)用對實時性是打折扣的~~~
另外,我同事在使用pic的過程中發(fā)現(xiàn),電路沒問題,c寫的軟件沒問題,但是程序就跑飛掉了,反匯編一看,果然是跳轉(zhuǎn)指令跳錯地方了,而應(yīng)該跳到的地址是在另外一頁相同偏移量的地方。這樣的問題應(yīng)該是分頁特性和編譯器造成的。解決方法更加夸張,我同事把幾個子程序長長短短的相隔排列,結(jié)果就好了,真是暈掉~~~ ,相比之下,還是信任AVR和avr-gcc。 PC上的gcc畢竟經(jīng)受了商業(yè)公司的考驗,例如google,ibm等,因為它們都使用了用gcc編譯的linux,而風(fēng)河的tornado5使用了arm-gcc-2.9.5。 移植為avr后,盡管有或這或那的問題,但是穩(wěn)定性是存在的,因為gcc的目的就是為了跨平臺,支持,至少不會出現(xiàn)PIC出現(xiàn)的問題~~~
PIC陣營:
用PIC的,為的是價格低。因為核芯簡單造價低便是一大好處。可能樓主沒有考慮過,好幾年前,AVR還沒有出生時,PIC與51相比,很有價格優(yōu)勢。之于開發(fā)難度大小問題,習(xí)慣了,開發(fā)起來一點也不難的。就像我認為AVR匯編很難,但老外還不是一樣用匯編寫操作系統(tǒng),而且性能很好。你認為難的,別人不一定認為難。再者難,只是難在工程師,老板卻不覺得。以10k的量,可以做otp加裸片。價格很低的,特別是玩具市場和小家電控制。還有AVR的內(nèi)核已經(jīng)有幾個仿造品了,而且是高檔的m128。性能比atmel的還好。只是它核芯復(fù)雜,成本高,利潤空間不大。用PIC的并不怕別人破解,因為破解了也掙不到什么錢。研發(fā)成本比破解費更低。
PIC的不是怎么爛的吧,它的抗干擾好象很強的嘛,有不少電能表都用PIC的片子的.
不過我最討厭的就是PIC什么都分頁,CALL個子程序先換頁,CALL回來再換頁.三換兩換頭都暈了
當(dāng)時還不會單片機的時候(多年以前),有個課題需要用單片機開發(fā)一個小板子,就拿來51書來看,看了半個月,還搞不清什么叫長跳轉(zhuǎn)。。。只是周圍的人都用51來開發(fā)項目,更可笑的是好多人爭搶一個仿真器的情形。有一天,看到網(wǎng)上有人賣PIC開發(fā)套件,ICD2+開發(fā)板,只要不到200元,遂決定買來一套玩玩。拿到手后對照其推薦的書籍學(xué)了一下,一周完全掌握了PIC16F877,一個月板子已經(jīng)裝在儀器中用著了。當(dāng)時感覺,這就是我要用的單片機!有相見恨晚的感覺。Microchip給樣片很大方,要過幾次,全部都給了,不過后來申請的從美國寄到中國就沒有了下文,據(jù)說是被代理收走了。學(xué)PIC的另一個原因是老外用PIC的很多,網(wǎng)上可找到大量資料;相對老外用51的少,可能是開發(fā)成本比較高吧(多年以前,51還是要用仿真器仿真的)。另外,PIC的很多功能都是內(nèi)置的,用起來很方便,同事開發(fā)的51的板子有10個左右的芯片,而我用PIC開發(fā)類似的板子只要3~4只片子就解決問題。 再一個我用PIC的原因是CCS-PICC的庫很全,感覺很方便。特別是Delay_ms() Delay_cycle() Delay_us() 這些庫很好用,不用任何計算,就可將延時精確做好。還有94C46、4x4鍵盤一類的驅(qū)動也都有。效率不高可以用FLASH大一倍的芯片嘛,不差那幾元錢,因為我的項目一般附加值都是很高的。 我雖然用PIC,但我也不排斥,不鄙視其它的單片機。因為適合自己的才是最好的,自己不熟悉的再優(yōu)秀也和自己沒關(guān)系。任何一個MCU大廠能夠生存下來,必然有它的道理。最近在看MSP430,就是想用它做兩節(jié)干電池能用1年的自容式設(shè)備。有些人爭論什么MCU效率高、價格如何如何,但對我一個開發(fā)者來說,一個月可做一個項目可以賺2萬;如果用效率很高,性能很好,且價格便宜10元,但自己不熟悉的MCU,多花一個月時間,就等于少賺2萬。所以我用熟了PIC,就一直用PIC,它能很好的為我賺錢,為何不繼續(xù)用呢?所以,適合自己的才是最好的,存在即有其合理性。
哈佛總線的一個好處,就是可以允許數(shù)據(jù)總線,指令總線具有不同的寬度, 可以設(shè)計出最具成本優(yōu)勢的MCU, 這就是為什么經(jīng)融危機下MICROCHIP可以到處撒錢收購別的企業(yè), ATMEL差點被收購的原因,”
雖然我說了關(guān)于好多PIC芯片方面的不足 但是我還是很感激PIC公司的,因為我可以直接在PICC下面進行寫程序 ,然后直接燒到兼容 PIC的片子里去(降低成本)。 由于工作的需要 我有時候不得不用PIC的東西,最近就剛剛用PIC10F202做了一個小產(chǎn)品(主要因為他是6只腳,天下沒有比他在小的東西) 其他公司的都太大了無法裝到產(chǎn)品上去,真是無奈。 本人用PIC單片機開發(fā)的東西太多了,有些情況是客戶指定要PIC的你沒辦法,還有些客戶指定要用2元的單片機 你也沒辦法,人生有時候太無奈。你想用好一點的片子 但是由于成本不允許,支能忍辱負重。
可是我們老板點名要用PIC,為什么,就是兩塊錢就能買得到代用片,呵呵!!!
我覺得PIC單片機事非常好用的。舉個例子:公司給我一個項目,前提是一定要PIC來做,首先聲明我以前沒有用過,但從認識到編寫程序就用了 一天時間,編寫10K代碼到調(diào)試完畢用了1個月,是不是很快,但用過AVR之后我覺得AVR要比PIC難用點,而且因為AD轉(zhuǎn)換器的原因,現(xiàn)在已經(jīng)棄而不用了,有時間研究AVR還不如直接上ARM,性能還是強很多的。
從51轉(zhuǎn)過來的人,用匯編開發(fā)的,都PIC好用,指令少。如果配合強大的偽指令,更省心。
一開始用C搞PIC的,也不會特別被分頁所困擾。PIC的編譯器,不論HI-TECH公司做的,還是MICROCHIP做的,都很優(yōu)秀。幾乎不曾聽過被優(yōu)化優(yōu)死掉的事情。
中間陣營:
pic和avr各有好處;這要看你的要求和習(xí)慣;
一個公司中要是同時使用幾種單片機,是有一定的壓力的;舉個例子:俺同學(xué)公司時作石油井下數(shù)據(jù)采集的,有一種是存儲式的,要放在井底一兩個星期才提升出來轉(zhuǎn)移數(shù)據(jù),老板以前請電子科大的人用51系列開發(fā)的,由于當(dāng)時并沒有用于高溫井(90度以上),所以還可以應(yīng)付;去年開始作100度以上的,51系列的麻煩就來了;工業(yè)級的已經(jīng)不夠用,到處托人情才買來一批軍工級的,可后續(xù)供貨就麻煩了;而pic系列的軍工級相對好買;avr的軍工級也比較好買;。。。 俺自己有些東西需要體積小重量小,如果用51系列就麻煩,avr和pic就好啦,但俺還是偏重于pic,這也就是習(xí)慣問題,畢竟俺去年才開始接觸avr;俺是半路出家的,學(xué)的專業(yè)是機械,但不能老是去求人做吧?反正東西也不復(fù)雜,俺也懂少許電子,早兩年接觸到pic的PICBASIC PRO編譯器,真的如獲至寶。。;以前用匯編用怕了;去年開始學(xué)AVR,如果還用匯編或C,太麻煩,幸虧有BASCOMAVR,呵呵,而且還有BASCOM 8051,..... 俺的用法是這樣的:簡單功能的用PIC,畢竟8腳的好買;涉及到復(fù)雜而且有界面要求的用AVR,畢竟BASCOMAVR對液晶和曲線等支持的多;51基本上不用啦; 對某些行業(yè)的設(shè)備要求極高,并不在乎幾百一兩千的費用,不需要去節(jié)約那一點點,而開發(fā)周期才是致命的,實際上的開發(fā)費用絕大部分都是處在開發(fā)期的時間和人工上。。 所以不一定非要強調(diào)只用哪一種單片機,公司內(nèi)部的習(xí)慣和技術(shù)的延續(xù)要求應(yīng)該是比較重要的。。
最早用PIC,匯編寫程序.感覺就是記住幾個常用指令程序就可以寫出來.很好用. 其實PIC應(yīng)用最大的問題就是要換頁,程序沒寫出來人先累死了.但PIC的C編譯器不大好用. AVR要配置的東西太多,個人感覺不用C的話大點的程序根本沒法完成,看那上百條的匯編指令頭就大了.能用匯編寫AVR的都是超人.
PIC不是想象的那么難寫了,只是很多人寫C習(xí)慣了,寫PIC的匯編寫的少,也只是一個熟練的程度而已,PIC的分頁,只要程序結(jié)構(gòu)安排合理,也不是那么復(fù)雜的,堆棧本來就是程序員自己心里要要清楚控制的,現(xiàn)在做過幾年MCU的人應(yīng)該說很少會死在堆棧上了吧.
要說功能,個人覺得都不錯,分工目的有些不一樣了,抗干擾的,高速AD和高速PWM我一般都用PIC的,低價格的一般用和PIC兼容的臺灣MCU(EMC,MDT,ALPHA,還有幾家了,好象現(xiàn)在海爾也是和PIC兼容的啊),呵呵,做一般的控制和普通功能的就用AVR,C語言寫起來快啊(不過說句,AVR的匯編是寫過的匯編中最難寫的,以前覺得是430的,^_^,寫過個語音的,用AVR匯編,寫的人是無法形容啊)
要說PIC我覺得在這個論壇上我算是有發(fā)言權(quán)了,我用了整整三年的PIC16c5X系列(12位指令)。要說PIC的性價比好,大概說的是以前,如今PIC12fF509(與5X為同一個檔次產(chǎn)品)在華強北大概是4元一片(兩級堆棧,41RAM,6IO)和ATtiny12,13相比價格相當(dāng),但其落后的架構(gòu)導(dǎo)致其在性能上卻相去甚遠。5x系列動不動就要切換RAM bank和ROM page,寫子函數(shù)要小心再小心,一不留神就會堆棧溢出,查表時表格放置位置有要求,長度有限制,就算你已經(jīng)調(diào)試好的代碼,很有可能在下次修改時增加兩句,而導(dǎo)致頁溢出,或表格中有幾行位置超出查表范圍,讓使你死的很難看。倒是有個C編譯器,但是不好用,也是一不留神就會出問題的, 這個不怪C編譯器的開發(fā)商,5x系列這個架構(gòu)是很難做出高效的C編譯器的。說了這些再看AVR就覺得順眼多了,tiny系列雖然資源也很少,開發(fā)起來就方便很多。最后說說抗干擾的問題,PIC的OTP芯片抗干擾是很不錯的,F(xiàn)LASH的好象就差一點,用過AVR Mega64片子感覺不比PIC的FLASH差,還有一點我覺得很重要的是PIC的抗干擾性得益于其簡單的架構(gòu),在PIC中低檔的產(chǎn)品中沒有那一條指令會超過一個字(字長固定12/14)的,當(dāng)其程序跑飛時不會落到數(shù)據(jù)區(qū),總是會落到指令區(qū),從而可以很方便的使用陷阱捕捉錯誤,但是即使捕捉到錯誤也很難處理,因其堆棧指針是不可改寫,你不能使用軟復(fù)位。這時一般都會用死循環(huán),使WDT溢出而強行硬復(fù)位,不過要是產(chǎn)品需要低功耗,WDT(wdt熔絲開啟)不能開,麻煩就大了,跑飛幾乎沒有有效的復(fù)位手段。
寫了這么一大段PIC的毛病,有人可能覺得奇怪了,那么不好你怎么還用呢。呵呵,因為我用的不是真正的MicroChip的產(chǎn)品,而是仿PIC的產(chǎn)品,價格超低,有錢賺,老板就要求用了,這在深圳實在不是什么秘密。
|
|