2013年8月21日 星期三

[ Android CAR ] CAN 微控器內部結構

CAN 微控器內部結構如下圖:
CAN核心(CAN Core):包括CAN協定控制器及Rx/Tx 位移暫存器。
Message RAM:儲存CAN訊息物件及代碼遮罩。
Message Handler:處理CAN訊息並產生中斷訊息。

2013年8月16日 星期五

[ Android CAR ] 淺談數位輸出控制

車身電子網路模擬模組提供了4顆LED,如下圖:

這是4顆LED採用共陽極接上正電源,負極當成控制點,因此接地時為亮,否則不亮,分別接至P:3.0~P3.4。
因此在程式中,我們使用SFR巨集指令。
SBIT (LED1, SFR_P3, 0);      // LED='0'表示亮 ,led1燈負極接至P3.0
SBIT (LED2, SFR_P3, 1);      // LED='0'表示亮 ,led2燈負極接至P3.1
SBIT (LED3, SFR_P3, 2);      // LED='0'表示亮 ,led3燈負極接至P3.2
SBIT (LED4, SFR_P3, 3);      // LED='0'表示亮 ,led4燈負極接至P3.3

在使用LED1~LED4來開關LED時,要先做埠的初始化:
SFRPAGE = ACTIVE_PAGE;  // 選擇SFR的地址為主動暫存器頁
PCA0MD &= ~0x40;                // 禁止看門狗
SFRPAGE = CONFIG_PAGE;
    P3MDOUT |= 0x0F;                    // 將P3.0~P3.3設定成輸出
    P3SKIP  |= 0x0F;                    // P3.0~P3.3設定成跳過交叉開關
    XBR2     = 0x40;                    // 啟動交叉開關
    SFRPAGE = ACTIVE_PAGE;    // 選擇SFR的地址為主動暫存器頁



完整程式列表如下:















執行結果如下:



[ Android CAR ] 特殊功能暫存器分頁概念

一般計算機結構常見在記憶體及輸出入埠,記憶體用來儲存資料或程式碼,而輸出入埠則用來連接硬體設備,然而不管是記憶體或是輸出入埠都需要編位址,用位址來存取內容。若把記憶體及輸出入埠分開編位址,我們稱為Port Mapped I/O,若是合在一起則稱讚Memory Mapped I/O,可以參考維基百科上的暫存器映射輸出輸入的。典型Port Mapped I/O電腦結構就是x86系統;大部份微處理機和8051微處理器是採用Memory Mapped I/O,採用Memory Mapped I/O,會把輸出入埠及記憶體一起編位址,以8051為例暫存器有256個,從00H~FFH,而00H~7FH是屬於一般用途暫存器,80H~FFH則是屬於特殊功能暫存器,簡稱SFR
對於C8051F500微處理機,是以8051為核心,擴充許多硬體,包括:看門狗、ADC、DAC、電壓比較器、電壓基準、計時器、PWM、溫度感知器、UART、SPI、SMBUS、CAN、LIN、USB等。因此80H~FFH空間不夠使用,所以採用分頁來處理,C8051F500微處理機把SFR分成三頁,利用特殊功能暫存器頁面選擇暫存器(Special Function Register Page Selection register, SFRPAGE),把內容設定成0x0, 0xC, and 0xF就能選擇,所以要操作特殊功能暫存器,就必須先設定特殊功能暫存器頁面選擇暫存器的內容,再利用MOV指令來直接存取。
在C8051F500_defs.h標頭檔的最後面,有定義特殊功能暫存器的頁面:
//-----------------------------------------------------------------------------
// SFR Page Definitions
//-----------------------------------------------------------------------------

#define  CONFIG_PAGE       0x0F        // System and Port Configuration Page
#define  ACTIVE_PAGE       0x00        // Active Use Page
#define  CAN0_PAGE         0x0C        // CAN0 Registers

在程式中就可以使用下列命令來存取主動頁面
SFRPAGE = ACTIVE_PAGE;
來存取設定配置面頁暫存器
SFRPAGE = CONFIG_PAGE;
來存取設定CAN面頁暫存器
SFRPAGE =  CAN0_PAGE;




[ Android CAR ] C8051F500微控器簡介

C8051F500是一顆很實用的車用或工業用微控器,其主要特色如下:

  • 50 MIPS 8051 CPU
  • 64 or 32 kB Flash memory
  • 4 kB RAM
  • 24 MHz on-board oscillator (±0.5%) with clock multiplier
  • 12-bit, 200 ksps ADC, ±1LSB INL (類比/數位轉換器)
  • Up to 32 analog inputs (類比輸入)
  • Up to 40 digital I/O (數位輸出入)
  • CAN 2.0 B, LIN 2.1
  • 2 x UART, SPI, I2
  • PWM, Timers (脈波寛度調變及計時器)
  • 1.8 to 5.25 V 輸入工作電壓
  • –40 to 125 ºC 操作範圍
  • 晶片內含兩個比較器及溫度感測器

其內部結構圖如下:
其內部結構可區分成三大區塊,最上面是類比週邊電路及數位輸出入,中間則是內部振盪及多工電路,最下面則是高速微控器核心。



[ Android CAR ] C8051F500程式燒錄

參考畫

工具:Silicon Laboratories Flash Utility
啟動後的畫面

選擇Connect/Disconnect頁籤,在Debug Interface選擇 C2,C2是Silicon公司制定的2線式通訊協定,JTAG則是由聯合測試工作群組所制定的規範。
點擊Connect按鈕,結果如下圖:
觀察結果忘了打開開源

 打開電源
再按一下Connect按鈕,成功連線如下圖:
 再來選擇Dowload Hex File/Go/Stop頁籤,按下Browse鈕,選取要燒錄的程式,本實驗選擇Timer0_LED實驗,透過計時器來控制LED的明亮/熄掉。
 選擇Erase all Code Space before download,再按下Download鍵。
 燒錄完成
在左側有個LED,目前狀態全熄
全亮

[ Android CAR ] 車載資通訊電子服務整合平台初體驗

車載資通技術與先進交通服務聯盟即將在2013年8/31~9/1,開辦CAN BUS車身電子通訊網路實務班,報名網址:http://tta.iecs.fcu.edu.tw/index.php/2-news/10-2013-06-27-05-50-35,該班課程採用長高科技車載資通訊電子服務整合平台,如下圖:
實驗測試步驟如下:
1. 連接電源及CAN BUS將控制器及Android平台聯接起來,並打開電源。



2.當Android平台完成開機動作,在主畫面上有一個ACanBusSystem的應用程式,雙擊該圖示,起動車載資通訊電子服務整合平台APP。
 3. 起動的歡迎畫面
 4.起動後的主選單
 5.選擇主選擇中的感測訊息
 6.選擇畫面中ALL按鈕讀取所有資料
7. 按下返回鍵回到主畫面
 8.選擇引擎轉速的選項,並"+"按鍵啟動馬達。

 9. 執行結果