找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 9436|回復(fù): 0
收起左側(cè)

玩單片機(jī)的過(guò)來(lái)看看AVR和PIC的PK

[復(fù)制鏈接]
ID:108531 發(fā)表于 2016-3-12 18:11 | 顯示全部樓層 |閱讀模式
最近又入手PIC的單片機(jī),之前有用AVR的,所以特想了解一下這兩種芯片的不同之處。于是搜集了網(wǎng)友的的評(píng)論。只可惜對(duì)這兩個(gè)芯片我都是用C作開(kāi)發(fā),真正的區(qū)別估計(jì)要用匯編開(kāi)發(fā)時(shí)才能發(fā)現(xiàn)到底用哪種芯片比較好用。
  AVR陣營(yíng):
        PIC的只有幾層堆戰(zhàn),用起來(lái)簡(jiǎn)直繁的要死 ,尤其是PIC12C508 或者PIC16C54之類(lèi)的  連個(gè)中斷都沒(méi)有,寫(xiě)其程序來(lái)麻煩的要命 , 當(dāng)你連續(xù)調(diào)用兩個(gè)子程序的時(shí)候,堆棧就溢出了,你說(shuō)痛苦不痛苦 ,更不要說(shuō)移植UC/OS之類(lèi)的操作系統(tǒng)了(操作系統(tǒng)一般都要頻繁的使用堆棧) 。就算PIC16F877還算可以,可是價(jià)格高的嚇?biāo)廊?和AVR的沒(méi)法比 , PIC唯一的優(yōu)點(diǎn)就是指令少 適合一些什么都不懂的初學(xué)者,只有33條指令,就是傻子也能學(xué)會(huì) 。但是如果你要進(jìn)行判斷大與 小于 或者等與 之類(lèi)的東西時(shí) 你就會(huì)知道 PIC是多么的垃圾.。我相信能用PIC指令獨(dú)立寫(xiě)出 判斷大與 小于 或者等與 的不是很多. 。如果你用AVR的指令基本上1到2條指令就能很快的判斷出結(jié)果了. 。還有PIC的RAM和ROM都要來(lái)回的分頁(yè),把你的頭都搞大了.而AVR的都是線性地址不存在分頁(yè)問(wèn)題 AVR是是我用到的性價(jià)比最高的一款芯片,其速度也是最塊的,最近有好多新的單片機(jī)或者低價(jià)位的ARM ,我看了一下,其功能比AVR的強(qiáng)不了多少 ,現(xiàn)在用涌出了一大批臺(tái)灣系列的芯片,其內(nèi)核與PIC的差不了多少 ,就是因?yàn)镻IC的內(nèi)核簡(jiǎn)單,很容易被 。被人仿造,比如 義隆EMC 麥肯MDT HOLTEK合泰 普泰PT 通泰等等 你仔細(xì)分析一下其指令集和PIC的基本一致 有好多可以直接代替PIC的,比如EMC公司的 和MDT的 具體什么型號(hào)的我就不多說(shuō)了 。但是市場(chǎng)上到現(xiàn)在為止沒(méi)有一款可以仿造AVR的內(nèi)核的 因?yàn)樗钦嬲暮脰|西,不是誰(shuí)都能仿造的 。其實(shí)PIC的片子和臺(tái)灣的片子功能大同小異,和AVR還是有點(diǎn)差距    ,臺(tái)灣合泰的片還是不錯(cuò)的 C至少有一套完整的C開(kāi)發(fā)工具,尤其最近還推出了可以反復(fù)擦寫(xiě)的,比如 ,HT48E06等純IO口單片機(jī).

       PIC的OTP,說(shuō)是能夠降低成本不少,但是看到武漢力源的報(bào)價(jià),簡(jiǎn)直就是殺人,而且,OTP在開(kāi)發(fā)初期特別是資本小的時(shí)候,真的怕怕,如果用UV擦除的芯片,壽命不說(shuō),光擦除就夠受的了,麻煩死了,而16F84、16F877等等芯片比起同類(lèi)AVR的可開(kāi)發(fā)性和價(jià)格來(lái)說(shuō)基本上就是垃圾。 HT還是好一點(diǎn),價(jià)格好,開(kāi)發(fā)費(fèi)用算比較低的。雖然資源少,但是家電特別是小家電來(lái)說(shuō),足夠了。 很多人用NEC或者富士通芯片,不是為了別的,只是為了防止別人解密仿制,用量很少的芯片一般很少有人破解,這是個(gè)好處。但是PIC就麻煩得很,2K/1天就可以完全破解,連地?cái)偫习宥歼@么說(shuō)。

      PIC是最早推出來(lái)低價(jià)位的芯片,比如8只腳的PIC的PIC12C508 只有0。5K的ROM 還有PIC16C54 這兩個(gè)片子就是純IO口的 只有兩級(jí)堆棧,連個(gè)中斷都沒(méi)有, 就占了一個(gè)出來(lái)的最早的優(yōu)勢(shì),但是那時(shí)候AVR是沒(méi)有研制出來(lái),因?yàn)楫?dāng)時(shí)不需要, 主要是AVR也是ATMEL的一個(gè)系列而已,ATmel的AT89C51已經(jīng)全世界都在用。 ATMEL公司當(dāng)時(shí)不把PIC當(dāng)作一回事。 不過(guò)有人說(shuō)PIC的抗干擾能力好,是因?yàn)樗墓δ苌僦挥蠭O,沒(méi)有中斷,肯定會(huì)好一些 ,但是功能多的72,或者73 抗干擾并不好。 現(xiàn)在有好多直接代替PIC的,不需要轉(zhuǎn)移程序,價(jià)格做到兩塊錢(qián)以下,但是PIC的價(jià)格連PIC12C508的都在4塊多。我不認(rèn)為PIC現(xiàn)在的價(jià)格占優(yōu)勢(shì)。 你也不會(huì)拿16C54根MEGA48去比吧 ,懂行的人一看資料就是到這兩個(gè)片子不是一碼事

       因?yàn)檐浖抡嫱瑢?shí)物還是有差別的,所以很多時(shí)候直接用實(shí)物運(yùn)行,但是用OTP問(wèn)題就來(lái)了,AVR的Mega16L我可以修改5000次(我現(xiàn)在就修改了5000多次了,好幾個(gè)東西用一片),不會(huì)增加負(fù)擔(dān),但是PIC的OTP就慘了,就算6元/pcs,5000次都是3萬(wàn)哪。。。。實(shí)在受不了了。。。。。原來(lái)燒廢了100多片,心痛。
        pic分頁(yè)讓人頭痛,一個(gè)函數(shù)大于分頁(yè)容量就編譯通不過(guò)了。對(duì)于一個(gè)函數(shù)大于2k似乎是設(shè)計(jì)不妥,但是在單片機(jī)范疇里,是有這種可能的,頻繁的調(diào)用對(duì)實(shí)時(shí)性是打折扣的~~~
另外,我同事在使用pic的過(guò)程中發(fā)現(xiàn),電路沒(méi)問(wèn)題,c寫(xiě)的軟件沒(méi)問(wèn)題,但是程序就跑飛掉了,反匯編一看,果然是跳轉(zhuǎn)指令跳錯(cuò)地方了,而應(yīng)該跳到的地址是在另外一頁(yè)相同偏移量的地方。這樣的問(wèn)題應(yīng)該是分頁(yè)特性和編譯器造成的。解決方法更加夸張,我同事把幾個(gè)子程序長(zhǎng)長(zhǎng)短短的相隔排列,結(jié)果就好了,真是暈掉~~~ ,相比之下,還是信任AVR和avr-gcc。 PC上的gcc畢竟經(jīng)受了商業(yè)公司的考驗(yàn),例如google,ibm等,因?yàn)樗鼈兌际褂昧擞胓cc編譯的linux,而風(fēng)河的tornado5使用了arm-gcc-2.9.5。 移植為avr后,盡管有或這或那的問(wèn)題,但是穩(wěn)定性是存在的,因?yàn)間cc的目的就是為了跨平臺(tái),支持,至少不會(huì)出現(xiàn)PIC出現(xiàn)的問(wèn)題~~~
        PIC陣營(yíng):
        用PIC的,為的是價(jià)格低。因?yàn)楹诵竞?jiǎn)單造價(jià)低便是一大好處。可能樓主沒(méi)有考慮過(guò),好幾年前,AVR還沒(méi)有出生時(shí),PIC與51相比,很有價(jià)格優(yōu)勢(shì)。之于開(kāi)發(fā)難度大小問(wèn)題,習(xí)慣了,開(kāi)發(fā)起來(lái)一點(diǎn)也不難的。就像我認(rèn)為AVR匯編很難,但老外還不是一樣用匯編寫(xiě)操作系統(tǒng),而且性能很好。你認(rèn)為難的,別人不一定認(rèn)為難。再者難,只是難在工程師,老板卻不覺(jué)得。以10k的量,可以做otp加裸片。價(jià)格很低的,特別是玩具市場(chǎng)和小家電控制。還有AVR的內(nèi)核已經(jīng)有幾個(gè)仿造品了,而且是高檔的m128。性能比atmel的還好。只是它核芯復(fù)雜,成本高,利潤(rùn)空間不大。用PIC的并不怕別人破解,因?yàn)槠平饬艘矑瓴坏绞裁村X(qián)。研發(fā)成本比破解費(fèi)更低。
         PIC的不是怎么爛的吧,它的抗干擾好象很強(qiáng)的嘛,有不少電能表都用PIC的片子的.
不過(guò)我最討厭的就是PIC什么都分頁(yè),CALL個(gè)子程序先換頁(yè),CALL回來(lái)再換頁(yè).三換兩換頭都暈了

      當(dāng)時(shí)還不會(huì)單片機(jī)的時(shí)候(多年以前),有個(gè)課題需要用單片機(jī)開(kāi)發(fā)一個(gè)小板子,就拿來(lái)51書(shū)來(lái)看,看了半個(gè)月,還搞不清什么叫長(zhǎng)跳轉(zhuǎn)。。。只是周?chē)娜硕加?1來(lái)開(kāi)發(fā)項(xiàng)目,更可笑的是好多人爭(zhēng)搶一個(gè)仿真器的情形。有一天,看到網(wǎng)上有人賣(mài)PIC開(kāi)發(fā)套件,ICD2+開(kāi)發(fā)板,只要不到200元,遂決定買(mǎi)來(lái)一套玩玩。拿到手后對(duì)照其推薦的書(shū)籍學(xué)了一下,一周完全掌握了PIC16F877,一個(gè)月板子已經(jīng)裝在儀器中用著了。當(dāng)時(shí)感覺(jué),這就是我要用的單片機(jī)!有相見(jiàn)恨晚的感覺(jué)。Microchip給樣片很大方,要過(guò)幾次,全部都給了,不過(guò)后來(lái)申請(qǐng)的從美國(guó)寄到中國(guó)就沒(méi)有了下文,據(jù)說(shuō)是被代理收走了。學(xué)PIC的另一個(gè)原因是老外用PIC的很多,網(wǎng)上可找到大量資料;相對(duì)老外用51的少,可能是開(kāi)發(fā)成本比較高吧(多年以前,51還是要用仿真器仿真的)。另外,PIC的很多功能都是內(nèi)置的,用起來(lái)很方便,同事開(kāi)發(fā)的51的板子有10個(gè)左右的芯片,而我用PIC開(kāi)發(fā)類(lèi)似的板子只要3~4只片子就解決問(wèn)題。 再一個(gè)我用PIC的原因是CCS-PICC的庫(kù)很全,感覺(jué)很方便。特別是Delay_ms() Delay_cycle() Delay_us() 這些庫(kù)很好用,不用任何計(jì)算,就可將延時(shí)精確做好。還有94C46、4x4鍵盤(pán)一類(lèi)的驅(qū)動(dòng)也都有。效率不高可以用FLASH大一倍的芯片嘛,不差那幾元錢(qián),因?yàn)槲业捻?xiàng)目一般附加值都是很高的。 我雖然用PIC,但我也不排斥,不鄙視其它的單片機(jī)。因?yàn)檫m合自己的才是最好的,自己不熟悉的再優(yōu)秀也和自己沒(méi)關(guān)系。任何一個(gè)MCU大廠能夠生存下來(lái),必然有它的道理。最近在看MSP430,就是想用它做兩節(jié)干電池能用1年的自容式設(shè)備。有些人爭(zhēng)論什么MCU效率高、價(jià)格如何如何,但對(duì)我一個(gè)開(kāi)發(fā)者來(lái)說(shuō),一個(gè)月可做一個(gè)項(xiàng)目可以賺2萬(wàn);如果用效率很高,性能很好,且價(jià)格便宜10元,但自己不熟悉的MCU,多花一個(gè)月時(shí)間,就等于少賺2萬(wàn)。所以我用熟了PIC,就一直用PIC,它能很好的為我賺錢(qián),為何不繼續(xù)用呢?所以,適合自己的才是最好的,存在即有其合理性。

哈佛總線的一個(gè)好處,就是可以允許數(shù)據(jù)總線,指令總線具有不同的寬度,  可以設(shè)計(jì)出最具成本優(yōu)勢(shì)的MCU,  這就是為什么經(jīng)融危機(jī)下MICROCHIP可以到處撒錢(qián)收購(gòu)別的企業(yè),  ATMEL差點(diǎn)被收購(gòu)的原因,”

        雖然我說(shuō)了關(guān)于好多PIC芯片方面的不足 但是我還是很感激PIC公司的,因?yàn)槲铱梢灾苯釉赑ICC下面進(jìn)行寫(xiě)程序 ,然后直接燒到兼容 PIC的片子里去(降低成本)。 由于工作的需要 我有時(shí)候不得不用PIC的東西,最近就剛剛用PIC10F202做了一個(gè)小產(chǎn)品(主要因?yàn)樗?只腳,天下沒(méi)有比他在小的東西) 其他公司的都太大了無(wú)法裝到產(chǎn)品上去,真是無(wú)奈。  本人用PIC單片機(jī)開(kāi)發(fā)的東西太多了,有些情況是客戶指定要PIC的你沒(méi)辦法,還有些客戶指定要用2元的單片機(jī) 你也沒(méi)辦法,人生有時(shí)候太無(wú)奈。你想用好一點(diǎn)的片子 但是由于成本不允許,支能忍辱負(fù)重。

    可是我們老板點(diǎn)名要用PIC,為什么,就是兩塊錢(qián)就能買(mǎi)得到代用片,呵呵。!
    我覺(jué)得PIC單片機(jī)事非常好用的。舉個(gè)例子:公司給我一個(gè)項(xiàng)目,前提是一定要PIC來(lái)做,首先聲明我以前沒(méi)有用過(guò),但從認(rèn)識(shí)到編寫(xiě)程序就用了 一天時(shí)間,編寫(xiě)10K代碼到調(diào)試完畢用了1個(gè)月,是不是很快,但用過(guò)AVR之后我覺(jué)得AVR要比PIC難用點(diǎn),而且因?yàn)锳D轉(zhuǎn)換器的原因,現(xiàn)在已經(jīng)棄而不用了,有時(shí)間研究AVR還不如直接上ARM,性能還是強(qiáng)很多的。

從51轉(zhuǎn)過(guò)來(lái)的人,用匯編開(kāi)發(fā)的,都PIC好用,指令少。如果配合強(qiáng)大的偽指令,更省心。  
一開(kāi)始用C搞PIC的,也不會(huì)特別被分頁(yè)所困擾。PIC的編譯器,不論HI-TECH公司做的,還是MICROCHIP做的,都很優(yōu)秀。幾乎不曾聽(tīng)過(guò)被優(yōu)化優(yōu)死掉的事情。

       中間陣營(yíng):
pic和avr各有好處;這要看你的要求和習(xí)慣;
一個(gè)公司中要是同時(shí)使用幾種單片機(jī),是有一定的壓力的;舉個(gè)例子:俺同學(xué)公司時(shí)作石油井下數(shù)據(jù)采集的,有一種是存儲(chǔ)式的,要放在井底一兩個(gè)星期才提升出來(lái)轉(zhuǎn)移數(shù)據(jù),老板以前請(qǐng)電子科大的人用51系列開(kāi)發(fā)的,由于當(dāng)時(shí)并沒(méi)有用于高溫井(90度以上),所以還可以應(yīng)付;去年開(kāi)始作100度以上的,51系列的麻煩就來(lái)了;工業(yè)級(jí)的已經(jīng)不夠用,到處托人情才買(mǎi)來(lái)一批軍工級(jí)的,可后續(xù)供貨就麻煩了;而pic系列的軍工級(jí)相對(duì)好買(mǎi);avr的軍工級(jí)也比較好買(mǎi);。。。 俺自己有些東西需要體積小重量小,如果用51系列就麻煩,avr和pic就好啦,但俺還是偏重于pic,這也就是習(xí)慣問(wèn)題,畢竟俺去年才開(kāi)始接觸avr;俺是半路出家的,學(xué)的專(zhuān)業(yè)是機(jī)械,但不能老是去求人做吧?反正東西也不復(fù)雜,俺也懂少許電子,早兩年接觸到pic的PICBASIC PRO編譯器,真的如獲至寶。。;以前用匯編用怕了;去年開(kāi)始學(xué)AVR,如果還用匯編或C,太麻煩,幸虧有BASCOMAVR,呵呵,而且還有BASCOM 8051,..... 俺的用法是這樣的:簡(jiǎn)單功能的用PIC,畢竟8腳的好買(mǎi);涉及到復(fù)雜而且有界面要求的用AVR,畢竟BASCOMAVR對(duì)液晶和曲線等支持的多;51基本上不用啦; 對(duì)某些行業(yè)的設(shè)備要求極高,并不在乎幾百一兩千的費(fèi)用,不需要去節(jié)約那一點(diǎn)點(diǎn),而開(kāi)發(fā)周期才是致命的,實(shí)際上的開(kāi)發(fā)費(fèi)用絕大部分都是處在開(kāi)發(fā)期的時(shí)間和人工上。。 所以不一定非要強(qiáng)調(diào)只用哪一種單片機(jī),公司內(nèi)部的習(xí)慣和技術(shù)的延續(xù)要求應(yīng)該是比較重要的。。

最早用PIC,匯編寫(xiě)程序.感覺(jué)就是記住幾個(gè)常用指令程序就可以寫(xiě)出來(lái).很好用. 其實(shí)PIC應(yīng)用最大的問(wèn)題就是要換頁(yè),程序沒(méi)寫(xiě)出來(lái)人先累死了.但PIC的C編譯器不大好用. AVR要配置的東西太多,個(gè)人感覺(jué)不用C的話大點(diǎn)的程序根本沒(méi)法完成,看那上百條的匯編指令頭就大了.能用匯編寫(xiě)AVR的都是超人.

       PIC不是想象的那么難寫(xiě)了,只是很多人寫(xiě)C習(xí)慣了,寫(xiě)PIC的匯編寫(xiě)的少,也只是一個(gè)熟練的程度而已,PIC的分頁(yè),只要程序結(jié)構(gòu)安排合理,也不是那么復(fù)雜的,堆棧本來(lái)就是程序員自己心里要要清楚控制的,現(xiàn)在做過(guò)幾年MCU的人應(yīng)該說(shuō)很少會(huì)死在堆棧上了吧.
要說(shuō)功能,個(gè)人覺(jué)得都不錯(cuò),分工目的有些不一樣了,抗干擾的,高速AD和高速PWM我一般都用PIC的,低價(jià)格的一般用和PIC兼容的臺(tái)灣MCU(EMC,MDT,ALPHA,還有幾家了,好象現(xiàn)在海爾也是和PIC兼容的。呛,做一般的控制和普通功能的就用AVR,C語(yǔ)言寫(xiě)起來(lái)快。ú贿^(guò)說(shuō)句,AVR的匯編是寫(xiě)過(guò)的匯編中最難寫(xiě)的,以前覺(jué)得是430的,^_^,寫(xiě)過(guò)個(gè)語(yǔ)音的,用AVR匯編,寫(xiě)的人是無(wú)法形容。

要說(shuō)PIC我覺(jué)得在這個(gè)論壇上我算是有發(fā)言權(quán)了,我用了整整三年的PIC16c5X系列(12位指令)。要說(shuō)PIC的性價(jià)比好,大概說(shuō)的是以前,如今PIC12fF509(與5X為同一個(gè)檔次產(chǎn)品)在華強(qiáng)北大概是4元一片(兩級(jí)堆棧,41RAM,6IO)和ATtiny12,13相比價(jià)格相當(dāng),但其落后的架構(gòu)導(dǎo)致其在性能上卻相去甚遠(yuǎn)。5x系列動(dòng)不動(dòng)就要切換RAM bank和ROM page,寫(xiě)子函數(shù)要小心再小心,一不留神就會(huì)堆棧溢出,查表時(shí)表格放置位置有要求,長(zhǎng)度有限制,就算你已經(jīng)調(diào)試好的代碼,很有可能在下次修改時(shí)增加兩句,而導(dǎo)致頁(yè)溢出,或表格中有幾行位置超出查表范圍,讓使你死的很難看。倒是有個(gè)C編譯器,但是不好用,也是一不留神就會(huì)出問(wèn)題的, 這個(gè)不怪C編譯器的開(kāi)發(fā)商,5x系列這個(gè)架構(gòu)是很難做出高效的C編譯器的。說(shuō)了這些再看AVR就覺(jué)得順眼多了,tiny系列雖然資源也很少,開(kāi)發(fā)起來(lái)就方便很多。最后說(shuō)說(shuō)抗干擾的問(wèn)題,PIC的OTP芯片抗干擾是很不錯(cuò)的,F(xiàn)LASH的好象就差一點(diǎn),用過(guò)AVR Mega64片子感覺(jué)不比PIC的FLASH差,還有一點(diǎn)我覺(jué)得很重要的是PIC的抗干擾性得益于其簡(jiǎn)單的架構(gòu),在PIC中低檔的產(chǎn)品中沒(méi)有那一條指令會(huì)超過(guò)一個(gè)字(字長(zhǎng)固定12/14)的,當(dāng)其程序跑飛時(shí)不會(huì)落到數(shù)據(jù)區(qū),總是會(huì)落到指令區(qū),從而可以很方便的使用陷阱捕捉錯(cuò)誤,但是即使捕捉到錯(cuò)誤也很難處理,因其堆棧指針是不可改寫(xiě),你不能使用軟復(fù)位。這時(shí)一般都會(huì)用死循環(huán),使WDT溢出而強(qiáng)行硬復(fù)位,不過(guò)要是產(chǎn)品需要低功耗,WDT(wdt熔絲開(kāi)啟)不能開(kāi),麻煩就大了,跑飛幾乎沒(méi)有有效的復(fù)位手段。
    寫(xiě)了這么一大段PIC的毛病,有人可能覺(jué)得奇怪了,那么不好你怎么還用呢。呵呵,因?yàn)槲矣玫牟皇钦嬲腗icroChip的產(chǎn)品,而是仿PIC的產(chǎn)品,價(jià)格超低,有錢(qián)賺,老板就要求用了,這在深圳實(shí)在不是什么秘密。


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表