WT61P9 Fan Control

Posted by: 邱小新 at 上午9:38 in
  • 板子上共有八個 Fan Control Pin(FAN1~FAN8),兩兩一組由 LPWM0~3 控制,PWM 值則存在 LPWM0_Duty(0x36)~LPWM3_Duty(0x39)。
  • PMCTL_DATA[PMCTL_DATA_PWM_EN_NO](0x26) 第三個 bit 要設成 1,才會啟動 PWM 控制。在 Init_PWM_Drv 時被強制打開,但是在 UARTprocess 則可以控制其開關。在 Check_PWM_Output 只是判斷而已,所以只能經由 I2C 控制打開轉速設定,但是關閉時無法將轉速關閉。
  • Routine_Read_En(0x1A) 第三個 bit 要設成 0,才能手動設定 PWM,不然會進入自動 Profile 設定。

NO.PINVariable板上的字
44GPIOD4/LPWM0LPWM0_DUTY(0x36)FAN1/FAN2
43GPIOD5/LPWM1LPWM1_DUTY(0x37)FAN3/FAN4
42GPIOD6/LPWM2LPWM2_DUTY(0x38)FAN5/FAN6
41GPIOD7/LPWM3LPWM3_DUTY(0x39)FAN7/FAN8

  • 讀取風扇轉速透過 CD4052 再經由 Frequency Count Detector 計算數值,所以必須設定 EN_F1_CNT=1(HV_FUN_EN) 及 EN_F2_CNT=1(HV2_FUN_EN)。
  • 讀取風扇轉速採用手動取樣方式,所以必須把中斷關閉,也就是要設定 IE1_FREQ1=0(INT_CTL_HV_EN) 及 IE1_FREQ2=0(INT_CTL_HV2_EN)。
  • FAN1,FAN3,FAN5,FAN7 接在 X 通道再經由 FREQ2B 計算,把值存在 FB2。HV2Sync_Detect_Routine 函數做計算動作
  • FAN2,FAN4,FAN6,FAN8 接在 Y 通道再經由 FREQ1B 計算,把值存在 FB1。HVSync_Detect_Routine 函數做計算動作。
  • Routine_Read_En(0x1A)=1 才會做風扇轉速計算。
  • 所讀得的轉速值則存在 FAN0_RPM(0x3A)~FAN7_RPM(0x41)。

indexdefaultR/Wbitname
300R/W5IE1_FREQ1
0R/W4IE1_FREQ2
400R/W7EN_F1_CNT
0R/W6EN_FB1_INT
0R/W4EN_FB1OV_INT
460R5-0FB1[5:0]
470R7-0FB1[13:6]
480R/W7-0FB1_LOV[7:0]
500R/W7EN_F2_CNT
0R/W6EN_FB2_INT
0R/W4EN_FB2OV_INT
560R5-0FB2[5:0]
570R7-0FB2[13:6]
580R/W7-0FB2_LOV[7:0]

TMP100 - Digital Temperature Sensor with I2C Interface

Posted by: 邱小新 at 上午11:38 in

TMP100 是一顆用來量測溫度的 IC,具有 I2C 接口可以讀取溫度數值。

Slave Address

ADDR1ADDR0address
000x90(1001000)
0float0x92(1001001)
010x94(1001010)
100x98(1001100)
1float0x9A(1001101)
110x9C(1001110)
float00x96(1001011)
float10x9E(1001111)

TMP100 的值只有四組,address 則由 Point Register 控制,其實說穿了根本就跟一般的存取動作一樣;也就是 slave address, point register, slave address, data 的方式做存取動作。

Point
Register
R/WDescription
0RTemperature Register
1R/WConfiguration Register
2R/WT/LOW Register
3R/WT/HIGH Register

Temperature Register

Temperature Register 只能讀取,其值是現在溫度,有正負數值。一次要讀二個 byte,第一個 byte 表示整數值的溫度,第二個 byte 的 bit(7~4) 表示小數值,bit(3~0) 沒用到。所以一般只讀一個 byte 即可,不用讀第二個 byte。

Temerature (°C)byte 1byte 2
1280111111111110000
127.93750111111111110000
1000110010000000000
250001100100000000
0.250000000001000000
00000000000000000
-0.251111111111000000
-251110011100000000
-1281000000000000000

Configuration Register

bitsignDescription
7SDShutdown Mode
6TMThermostat Mode
5POLPolarity
4F0FAULT QUEUE
3F1
2R0Converter Resolution
1R1
0OSOS/ALERT

WT61P9 的 Device_RW_Register_Routine

Posted by: 邱小新 at 上午11:05 in

Device_RW_Register_Routine 是同事設計用來做一些額外的工作。

  • (12)CMD_INDEX: command register,指令變數。
  • (13)CMD_REG: command parameter,給 shock command 用。
  • (14)CMD_DATA: command data,回傳或寫入資料。

CMD_INDEX

  • bit 7: new command,在 main loop 會判斷此值才進入 routine,該值會馬上被清空,以防止重覆執行。
  • bit 6: read。
  • bit 5: write。
  • bit 5&6: reset,重置所有 LED 警示燈號。
  • bit 4: slave done,指令做完會設成 1,當 busy flag 用。
  • bit 3: read profile parameter。
  • bit 2: write profile parameter。
  • bit 1: shock。
  • bit 0: TMP10x。

C preprocessor

Posted by: 邱小新 at 下午4:07

標準指令

  • #include
  • #define
  • #if
  • #ifdef
  • #ifndef
  • #else
  • #elif
  • #endif

特殊指令

  • #pragma
  • #error
  • #warning

巨集指令

  • __STDC__
  • __STDC_VERSION__
  • __cplusplus(C++)
  • __DATE__
  • __TIME__
  • __func__(C99)