2011-11-08 27 views
9

任何人都可以給我一個非常普遍的想法,如空調控制器如何在汽車上設置溫度,LED顯示等現在被編程的部分?所以假設我們有一個帶有按鈕的塑料面板,還有什麼不是,當我按下「+」時,我想要增加溫度或者採取一些機械部件來採取行動。電子元件編程問題

  1. 我猜測,有ROM和一些控制部件的軟件存儲的CPU芯片。現在這個軟件通常用Java或低級C(++?)編寫,甚至更低?

  2. 是否有任何圖書館常用於這種事情?或者芯片是用這些或者一些基本的操作系統預編程的?

  3. 該芯片如何用軟件編程?有什麼需要的ROM寫入設備是正確的?

  4. 這是什麼東西,可以通過我的筆記本電腦在家裏玩耍,如果有的話,除了筆記本電腦,我還需要什麼設備?

任何人都可以指向我的資源,我可以閱讀更多關於它嗎?我試圖弄清楚它是如何工作的,它是如何涉及到的,以及需要什麼技能來獲得這個工作。我明白這是一個很大的話題,但想知道如何做到這一點,即使我不能做這樣的事情,我自己也想知道這個過程以及涉及到什麼

再次,如果問題和我的解釋令人困惑,我道歉。我發現它很難解釋

+1

這是微控制器的世界,並且經常改變Microchip,Atmel,TI等8/16位處理器的世界。你可能想看看http://electronics.stackexchange.com。通常,這些微控制器具有內置的一切功能,並且只有少量的外部I/O接口連接到外部世界。通常和現在大部分都是現在用C編程的。 – kenny

+1

@kenny,在編程過程中,您從未真正編寫過驅動程序!是的,[Electronics.stackexchange.com](http://electronics.stackexchange.com)涵蓋了很多這方面的內容,並且有很多可用的問題。 – Kortuk

+0

此http://www.cvel.clemson.edu/auto/auto_buses01.html描述了當前汽車中可能存在的各種網絡。這家公司http://www.matrixmultimedia.com/eblocks.php構建了你想要的包含CAN和LIN模塊的系統。 – dbasnett

回答

1

更普遍的答案:

有一般閃存存儲。可能有一個微型 ROM與引導裝載程序。

Java很少用於各種原因; C/C++很常見。我更喜歡Forth,Scheme等,因爲它們更具互動性,而且速度還是相當快的,但C很好。大會仍然在使用,但通常很少,然後通常用於低級別,時間關鍵的事情。

操作系統到處都是。根據需要,有些應該是RTOS(實時操作系統,當事情必須確定時)。可能只是一個小的Linux內核,OS-9,uCos,自制的,你的名字。

一些通用嵌入式庫或抽象層,但許多嵌入式系統是非常專業的,使這樣的事情沒有用。 SOC(片上系統)製造商通常會擁有一個SDK,使其與特定硬件的接口更容易。

目前芯片通常通過USB /閃存等閃存。

Arduino已經被提及。有一個百萬不同的小微型計算機;檢查任何問題的電路酒窖足夠的廣告,讓你頭暈目眩。有些人比其他人更有趣,比如TI Watch dev system或USB加密狗大小的機器。

機器人技術是一個入門的好地方,因爲它們將幾乎所有嵌入式系統的需求融合在一起,等待接管世界。

7

看看Arduino。這是使用Atmel ATMega微控制器的好介紹。它的編碼語言與C++類似,稱爲Processing。

的樣本命令:

檢查是否按下按鈕,並且如果是這樣,打開的LED。按鈕位於引腳3(接地),4位是LED。

if(digitalRead(3) == HIGH){ 
    digitalWrite(4, HIGH); 
} 

閃爍LED。 (引腳13)

while(1){ 
    digitalWrite(13, HIGH); 
    delay(100); 
    digitalWrite(13, LOW); 
    delay(100); 
} 

Arduino使用內置的usb串口適配器通過USB對微控制器進行編程。你可以用它來控制任何東西 - 假設你想切換一個110V AC適配器。你可以連接一個繼電器,使其脫離5V線圈來開啓它。您還可以讀取開關,溫度傳感器,光線傳感器,磁性傳感器,加速度計,串行,TTL,SPI,1線等等。一旦您開始使用,唯一會阻止您的東西就是您的預算!

+1

可能值得注意的是,它可以通過USB進行編程,因爲它裝載了引導加載程序並正在寫入自己的ROM。嵌入式應用中的許多微控制器都具有內部硬件和外部編程器,可以在第一次寫入ROM。 – Kortuk

+0

好點,但對於提問者的觀點來說,他需要知道的一點是,代碼通過USB電纜流向他的LED。我相信這是他在旅程中最終會面臨的一種情況:) – Tim

+0

另外值得一提的是,Arduino程序(或草圖作爲項目奇怪地指向它們)是C的簡化子集。事實上,開發工具會生成C代碼和編譯它,所以是一種預處理器。 – Clifford

0

您已經提出了一個相當廣泛的問題 - 通常不是SO表格上的好形式,但是將其分解成更小的部分可能無法改善答案,所以我會按原樣回答。

許多嵌入式設備都是EEPROM-可編程的。您可以購買您自己的EEPROM刻錄工具。一些嵌入式設備是ASIC芯片,這是一種經濟實惠的方式來獲得定製編程的芯片,其中good customization via a programming languageCPU便宜一些,這可能需要更多的內存來存放類似於操作系統和編程環境的內存。

回到當天,我明白FORTH是嵌入式環境的常見選擇,因爲它沒有提供太多東西,也沒有多少要求 - 這非常簡單。 C語言是另一個不錯的選擇,因爲語言運行環境並不需要太多的東西,而且可以在不損失太多細節的情況下縮減很多。 (動態內存分配通常不可用。)

Some small chips are designed specifically for Java - 但我不知道它在現代工業中的存活情況如何。

1

查看Microchip的PIC microcontroller。您將需要某種類型的編程器或開發板。這些通常通過USB連接到PC進行編程。 PIC有很多編譯器。最流行的實現了類C語言。

Here是CCS開發工具包的目錄。

0

您將需要一款汽車級微控制器。有許多供應商和口味。是的,他們包括閃光燈和某種類型的內存。你以各種方式將程序燒入ROM,有時是一個特殊的程序員,或者JTAG或者有一個串行啓動加載程序。

像你這樣的聲音對這個環境並不是很熟悉,開始慢一點,閃爍一個LED,按一下按鈕,按照你的方式上升到液晶面板等,然後擔心像你正在談論的控制器這樣的完整應用程序。不用擔心獲得汽車等級,也不擔心自己製作電路板,還有大量價格低於50美元以及25美元以下的評估板。

來自TI的msp430很好,它們將它們送走,每個訂單最高爲3美元,價格爲4.30美元,你無法與此爭論,你需要五美元以下的所有東西(以及免費下載)。來自微芯片的PIC曾經非常流行,但大多數已經通過它們,它們可能具有最便宜的一次性編程,因爲處理器幾乎沒有。一段時間以來,來自atmel的avr廣受業餘愛好者的歡迎。在Arduino出現之前,它們很受歡迎,但現在發生了這種事情,它給了他們另一個提升。有很多口味。我認爲uno擁有所有的內容,其他一些雖然你想購買基於ftdi的串行連接到USB接口的USB接口。 sparkfun有幾個snap工具包,一個lillypad版本,也許還有arduino pro mini版本或類似的東西。哦,除了從ti和其他人那裏說出msp430之外,sparkfun.com是很多這些電路板的重要來源。你可以在那裏獲得msp430啓動板,並且還有五塊錢。無論如何,你正在尋找$ 40到$ 50來進入一個arduino。如果你使用的是免費的沙箱,你也可以編寫低級代碼,而不是卡在沙箱中。 ARM正在接管一切,他們有很好的基礎。你只能通過學習關於ARM處理器的東西來幫助你的職業生涯。他們可以在這個市場以及高端市場競爭,並且主宰電池供電的市場(手機,相機,MP3播放器等)。馬力的價格和尺寸,所以他們說權力,你不能競爭。較老的是基於arm7的,在sparkfun和世界其他地方有很多olimex頭板,例如sam7以20美元的價格出售,lpc's等。 cortex-m系列接管微控制器尺寸的胳膊,並且你有像stellaris那樣的東西(滴答你感興趣的所有東西給你的A/C控制器50美元到100美元)或stm32系列和一些lpcs。在sparkfun和其他公司銷售的mbed2板很容易使用,基於lpc,大約45美元到50美元,避免了lpcxpresso板順便說一句。你可以在stm32價值線系列中獲得價值10美元的基於stm32的電路板,其中有幾個,不要將它與stm8價值線發現混爲一談。

在github.com/dwelch67,我有一個不斷增加的主板和低級別示例程序列表(閃爍指示燈,發送一些字節出來的uart,讓你的腳溼,這樣你就可以無憂無慮地進行下一步) 。我也有幾個模擬器,所以你可以玩這些工具和編程,而無需投入任何資金。第一步是讓程序編譯並運行,第二步是一些簡單的I/O,然後學習各種接口(spi,i2c等)和外設(定時器,LCD控制器,pwm等)。然後你可以考慮一個完整的應用程序,就像你正在談論的應用程序。

+0

我相信飛思卡爾,瑞薩/ NEC和英飛凌擁有迄今爲止最大的汽車MCU市場份額。因此,如果您打算與汽車應用程序合作,那麼選擇其中一個可能更明智。 – Lundin

0

帶有用戶界面(頭部單元)的部件不需要是做這項工作的部件,它們可以是通過總線連接的不同單元(大部分時間在汽車中可以是CAN,但也可以是便宜的和更簡單的LIN和其他一些)。現代汽車中有很多小電腦(比如50)。

  1. 大多數包含集成閃存和RAM的微控制器,較大的也有外部存儲器。它從幾KB開始,上升到幾十或幾百MB。大多數情況下,它們都是用C編程的,或者C++用於像頭部單元這樣的更大的東西。 Java exists但很少見,雖然有些人現在在head units with Android上工作。

  2. 這是一團糟。最小的那個沒有太多的操作系統可以說,或者可能OSEK,更大的有一些實時操作系統(RTOS,我知道VxWorks,QNX,μItron)或者不是那麼實時的操作系統(Linux ,Windows CE,Android)。至於圖書館,由於缺乏資源(特別是內存)或由於特殊需要,很多是從頭開始編寫的,有些代碼(例如操作系統,編解碼器)已獲得許可,甚至是開源的。

  3. 這是一團糟。這些器件通常包含閃存,但每個製造商甚至每個器件系列都有其獨特的編程方法,通常通過經常使用JTAG的調試器進行編程。或者通過連接到串口的引導程序。或USB。或者通過USB適配器通過以太網進行FTP。通常你必須按正確的順序進行一些有趣的動作(按下一些按鈕,通過各種接口發出一些命令,重新啓動)。

  4. Arduino是一個不錯而且溫和的開始,如果你願意的話,你也可以在C編程底層的AVR。 8位AVR之後的下一個邏輯步驟是使用32位ARM Cortex M3的廉價開發板,例如Olimex LPC-P1343。儘管根據我的經驗,汽車行業使用了很多瑞薩控制器,但作爲業餘愛好者有點難以掌握。但是,開始使用嵌入式編程並不重要。

0

我猜,有ROM和地方軟件控制部分存儲一些CPU芯片。

許多嵌入式系統使用micro-controller(MCU)system-on-a-chip (SoC),這些包括在單個芯片上的一個或多個CPU核心,加ROM(通常爲閃存)存儲器,RAM,以及選擇外圍設備和這樣的接口的如UART,USB,GPIO,ADC,DAC,SPI,I2C,定時器/計數器,以太網控制器,CAN,SDIO,LCD控制器等等。由於芯片空間的限制以及閃存和SRAM的密度相對較低,MCU也可能具有外部ROM或RAM存儲器,並且可能具有SDRAM控制器以允許使用高密度且廉價的SDRAM。

通常代碼存儲在片上Flash或OTP ROM(一次性可編程ROM)中,但可以使用外部存儲器。某些系統直接從ROM執行代碼,其他系統則將ROM映像複製到RAM中執行(通常速度更快,ROM映像可能會被壓縮以減少佔用空間)。如果代碼不是從ROM中執行的,而是複製到RAM中,則代碼可以存儲在廉價,高密度的NAND Flash中。

現在這個軟件通常用Java或低級C(++?)編寫,甚至更低?

運行Java需要一個JVM,通常是一個操作系統。手機應用程序和Android應用程序通常用java編寫,但它不是系統級語言。核心操作系統和JVM本身將用低級本地執行的語言編寫。一些芯片包括硬件中的部分Java字節碼執行(例如ARM的Jazelle單元),但是這樣做的目的是加速Java執行,而不是直接在硬件中實現完整的JVM。

C是深度嵌入式系統中最常用的系統和應用程序級語言,越來越多地使用C++,特別是在大型系統上。彙編代碼通常只用於最低級別的引導程序和初始化代碼;一旦建立了C運行時環境,更高級的語言更爲常見。一些非常小的8位系統仍然可能在彙編器中完全編碼。而如果你的系統足夠大以運行Linux,它甚至可以爲應用程序的某些元素使用腳本語言。儘管通常的標準功能和算法通常由工具或芯片供應商(有時是相同的)提供爲更高級語言的庫,但許多時間關鍵的DSP功能通常也以彙編方式編碼。

是否有任何圖書館常用於這種事情?或者芯片是用這些或者一些基本的操作系統預編程的?

有一個廣泛的嵌入式系統庫的生態系統,包括商業和開源。這些可能包括RTOS內核,完整的操作系統,文件系統和外設庫。芯片供應商通常會提供驅動程序庫或片上外設。這些驅動程序通常是「裸機」(即不依賴操作系統),作爲源代碼提供,通常爲低級別。如果你在一個操作系統中使用它們,你通常可能需要使用它們來構建一個更高級別,更適合操作系統的驅動程序。

設備通常不會預編程。某些開發和評估硬件可能會使用演示代碼進行預編程,較大的評估硬件可能預裝有Linux或WinCE。

該芯片如何用軟件編程?有什麼需要的ROM寫入設備是正確的?

有可能的方法。許多現代MCU包括片上調試和編程硬件(通常是JTAG接口,儘管專用接口也是通用的),這允許片上,並且在許多情況下使用JTAG從PC主機對片外閃存進行編程調試器或程序員。

爲了允許編程而不需要昂貴的JTAG編程器,許多MCU都包含一個預編程的bootrom。這是一個小程序,允許通過諸如UART(串行)或USB等接口加載和執行代碼。 bootrom可能包含Flash編程代碼,或者它可能比這更簡單,並且需要在RAM中加載和執行輔助啓動加載程序並將該程序設置爲Flash。

對於批量生產,芯片可以在被團伙編程人員放置在板上之前進行預編程。這通常是由設備供應商或電路板組裝商提供的服務。

是這個東西,就能夠通過我的筆記本電腦玩在家裏,如果是的話,我需要在除了筆記本電腦什麼樣的設備?

該問題的答案完全取決於您的預算。你可以開始幾十美元。對於嚴重的開發,您將需要一些調試硬件,以便您可以在PC應用程序中使用基於PC的源代碼級調試器運行芯片。

任何人都可以指向我的資源,我可以閱讀更多關於它嗎?

專業資源是Embedded.Com(現在已更名但不易記憶爲嵌入式EETimes),但這應該從深層次開始!你可能會更喜歡相對簡單的Arduino project或更高端的BeagleBoard project

如果您碰巧選擇了Atmel AVR系列MCU,那麼一個很好的愛好者資源是AVR Freaks。 AVR的優勢在於我認爲GNU編譯器支持的唯一的8位器件。

另一個資源,如果你想在ARM平臺上開發使用開源工具的項目(或者其中有很多),那麼在Windows上是Martin Thomas的優秀網站ARM-Projects。他主持了自己的GNU工具分發,但也有可能更新和維護的其他鏈接。

我想知道它是如何工作的,它是如何參與的,以及需要什麼技能來獲得這個工作。

自己可能需要一段時間才能獲得有趣的啓動和運行,但是有很多示例和應用說明可以讓您更快速地滿足您的需求。電子知識是有用的。雖然大多數開發板和評估板都有各種接口,開關,按鈕,指示器,有時還有LCD顯示器或其他設備,但它們通常主要用於與您自己構建的專用硬件接口。對於機電一體化系統尤其如此,在這種系統中,您將需要額外的硬件來驅動和控制大電流設備,例如電機和執行器,或與傳感器連接。

1

我猜測有ROM和一些CPU芯片,其中控制零件的軟件 存儲。

是的。所有嵌入式系統上的軟件都是從ROM(閃存)執行的,而不是像PC中那樣從RAM中執行。需要保存的數據也存儲在ROM(eeprom/flash)中。

現在這個軟件通常用Java或低級C(++?)編寫,甚至更低?

所有現代汽車固件開發最有可能在C完成。較舊的固件很可能用匯編寫成。 C++在一些極少數情況下使用。 Java根本不被使用。

是否有任何圖書館常用於這種事情?或者芯片是用這些或者一些基本的操作系統預編程的?

沒有,所有的硬件驅動程序通常由各個廠商開發的,沒有標準庫,這樣,除在汽車的大流行語,現在,AUTOSAR,這是規範普通司機,讓他們預先的嘗試 - 用硬件製造,以減少軟件錯誤。

該芯片如何用軟件編程?有什麼需要的ROM寫入設備是正確的?

是的。你有一種「連接器」,會將連接器的輸出燒錄到片上ROM中。最常見的行業事實上的接口是JTAG,但除此之外,每個MCU製造商都傾向於擁有自己的非標準解決方案。

是這個東西,就能夠通過我的筆記本電腦玩在家裏,如果是的話,我需要在除了筆記本電腦什麼樣的設備?

當然,您需要的僅僅是MCU供應商提供的「入門套件」。這些通常包括預製評估板,編程器和編譯器。我不一定會跟着目前的市場炒作,我真的不明白Atmel或ARM如何比其他任何東西更適合初學者。如果您對某種特定的汽車模型感興趣,您應該瞭解該模型正在使用的MCU並選擇相同的模型。我相信瑞薩/ NEC和飛思卡爾擁有大部分汽車MCU市場,儘管我不能引用任何報道。無論如何,這兩個汽車MCU肯定擁有最好的聲譽。

會有人能夠給點我的資源在那裏我可以閱讀更多關於它

初學者指南C編程MCU上/嵌入式系統可以發現here。它使用摩托羅拉/飛思卡爾過時的汽車微控制器68HC12,但其原理對於任何MCU都是通用的。