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