|
基本資料
Question 1
HT46 A/D with LCD Type MCU內容如何?
Answer
HT46 A/D with LCD型MCU提供2K、4K及8KROM的OTP Type及Mask Type各一對MCU,編號為HT46R62/HT46C62、HT46R63/HT46C63、HT46R64/HT46C64、HT46R65/HT46C65總共8顆IC,規格功能請參考Holtek Data Sheet。
Question 2
HT46X63及HT46X6X功能有何不同?
Answer
| Part
No. |
VDD |
System
Clock |
Program
Memory |
Data
Memory |
I/O |
LCD |
Timer |
Interrupt |
A/D |
PWM |
PFD |
UART |
Stack |
Package |
| 8-bit |
16-bit |
RTC |
Ext. |
Int. |
HT46R62
HT46C62* |
2.2V~
5.5V |
400kHz~
8MHz or
32768Hz |
2Kx14 |
88x8 |
20 |
19x4
or
20x3 |
1 |
-- |
v |
2 |
4 |
9-bitx6 |
8-bitx3 |
v |
-- |
6 |
56SSOP |
HT46R63
HT46C63 |
2.2V~
5.5V |
400kHz~
8MHz |
4Kx15 |
208x8 |
32 |
19x4
or
20x3 |
-- |
1 |
v |
2 |
4 |
8-bitx8 |
8-bitx4 |
-- |
-- |
8 |
56SSOP,
100QFP |
HT46R64
HT46C64* |
2.2V~
5.5V |
400kHz~
8MHz or
32768Hz |
4Kx15 |
192x8 |
24 |
32x4
or
33x3 |
1 |
1 |
v |
2 |
5 |
10-bitx8 |
8-bitx4 |
v |
-- |
8 |
56SSOP,
100QFP |
HT46R65
HT46C65* |
2.2V~
5.5V |
400kHz~
8MHz or
32768Hz |
8Kx16 |
384x8 |
24 |
40x4
or
41x3 |
-- |
2 |
v |
2 |
5 |
10-bitx8 |
8-bitx4 |
v |
-- |
16 |
56SSOP,
100QFP |
HT46R66*
HT46C66* |
2.2V~
5.5V |
400kHz~
8MHz or
32768Hz |
16Kx16 |
576x8 |
32 |
46x4
or
47x3 |
1 |
2 |
v |
2 |
6 |
12-bitx8 |
8-bitx4 |
v |
v |
16 |
56SSOP,
100QFP |
註:細節規格請參考
Holtek Data Sheet。
Question 3
HT46 A/D with LCD Type MCU提供何種類的封裝型式?
Answer
| HT46R62/HT46C62 : |
56SSOP |
| HT46R63/HT46C63 : |
100QFP |
| HT46R64/HT46C64 : |
56SSOP |
| : |
100QFP |
| HT46R65/HT46C65 : |
56SSOP (與HT46R64腳位功能相同,方便客戶MCU升級使用) |
| : |
100QFP (與HT46R64腳位功能相同,方便客戶MCU升級使用) |
註:Mask type MCU同樣提供上述相同封裝
Question 4
HT46 A/D with LCD Type MCU的工作頻率為何?
Answer
在5V、3.3V及3個電池的應用,工作頻率達Max. 8MHz (3.3V)。
在3V及2個電池的應用,工作頻率達Max. 4MHz (2.2V)。
Question 5
當系統時鐘選擇RC振盪器時,頻率誤差為何?
Answer
當系統時鐘選擇RC振盪器時,由於製程的因素造成的每個批號頻率誤差為±20%。假如外加電阻之誤差為±5%,那麼總頻率誤差就是±25%。
上述的誤差範圍僅供參考,不予保證,若客戶需要精準的頻率,請使用RESONATOR或CRYSTAL。
功能說明
Question 1
HT46 A/D with LCD Type MCU有何重要功能及特性? Answer
工作電壓範圍 2.2V ~ 5.5V
工業溫度規格 -40°C ~ +85°C
高抗雜訊能力
Low Voltage Reset功能
OTP / Mask Type MCU相容
其它請參考 Holtek Data Sheet
Question 2
間接定址如何使用?
Answer
首先將要讀寫之Data Memory的位址先存入位址指標暫存器 (MP),然後對IAR執行讀寫 (例如: MOV a,
IAR),即可讀到MP所指到的Data (MP的內容當位址)。間接定址功能特別方便於數列 (array) 的處理,一般先將數列位址放入MP做運算後再讀取所需的數列Data。
Question 3
查表指令如何使用,有何注意事項?
Answer
查表指令有二種,一種是TABRDC指令,此指令讀取目前指令所在表資料,另一種為TABRDL指令,此指令固定讀取最後一頁表資料。要查表時首先必需將表的Low Address填入TBLP再執行查表指令,表的Low Byte Data將存入指令指定的記憶體;表的High Byte Data被存入TBLH中,要注意未滿16-Bit之表Data高位元會補0。
Question 4
HT46 A/D with LCD Type MCU之RTC、WDT和Time Base等三個Timer的時鐘源選擇?
Answer
HT46 A/D with LCD Type MCU之RTC、WDT和Time Base等三個Timer的時鐘源(fS)必需同時選擇,且由Configuration Option選擇。
當系統頻率為RTC OSC時,則RTC、WDT和Time Base之時鐘源為RTC OSC,因RTC OSC不受HALT影響,亦即是這是一個不停的時鐘源。此時WDT OSC顯然多餘。為了省電所以將WDT OSC關閉,並將其時鐘源固定為RTC OSC。
當系統頻率不是RTC OSC時;則時鐘源有以下3種:
-
fSYS/4
-
RTC OSC
-
WDT OSC
Question 5
WDT時鐘源選用WDT OSC時,看門狗時間如何計算?
Answer
WDT OSC的時鐘週期在工作5V時約65µs (32µs~130µs),看門狗時間約為65µs x
212=0.266 Sec.到65µs x 216=4.26Sec.之間。(由WDT configuration option 選擇)。
Question 6
WDT Clock Source選擇WDT OSC和選擇 fSYS/4有何差別?
Answer
WDT Clock Source選擇WDT OSC則在系統誤入HALT時WDT Timer仍然繼續工作,當WDT Time-out可以再啟動系統。若選擇 fSYS/4則在誤入HALT後,則一直沈睡下去無法Wake-up,但選擇WDT OSC則需花一些代價 (消耗電流)。在另外一種情形,如果系統正常就有HALT功能,且在HALT時不希望被WDT叫醒,則此時WDT Source可選 fSYS/4。
Question 7
8-Bit TMR值如何設定?
Answer
8-Bit Timer/Counter為一向上數之計數器 (Counter),每當Counter數到255 (0FFH) 溢位0H時產生中斷 (Interrupt),所以若要計數為N (N < 256);則TMR值要設定成 256-N,設定好後啟動TMR;TMR即從設定值往上數到255溢出到0 (即256),故所得值即256-(256-N)=N。
Question 8
16-Bit TMR值如何設定?
Answer
16-Bit Timer/Counter為一向上數之計數器 (Counter),每當Counter數到65535 (0FFFFH)溢位0H時產生中斷 (Interrupt),所以若要計數為N (N < 65536);則TMR值要設定成 65536-N,設定好後啟動TMR;TMR即從設定值往上數到65535溢出到0 (即65536),故所得值即65536-(65536-N)=N。
Question 9
16-Bit Timer/Counter的設定和讀取順序?
Answer
HT46 A/D with LCD Type MCU內部Data Bus均為8-Bit,對於16-Bit的資料必需兩次才能完成,對16-Bit Timer/Counter的寫必需先寫Low Byte然後High Byte,而讀的順序必需先讀High Byte然後Low Byte。
Question 10
Timer/Counter之Timer Mode如何設定?
Answer
因Timer/Counter有3種模式,即Timer、Event Counter和Pulse Width等3種。
要執行Timer Mode要執行以下動作設定:
-
先選定Timer/Counter的時鐘源
-
設定Timer/Counter為Timer Mode (TM1、TM0=10H)
-
設定計數初始值 (TMR)
-
開相對應中斷致能旗標 (ETI和EMI)
-
設定 Timer ON (TMRC.4=1)
當Timer被打開後,Timer開始向上計數,若Timer OFF (TMRC.4=0),則Timer立即停止。下次Timer再ON,則從上次停留值繼續往上數,直到滿位溢出產生中斷,同時Timer 重新載入初始值。
Question 11
Timer/Counter之Event Counter Mode如何設定?
Answer
因Timer/Counter有3種模式,即Timer、Event Counter和Pulse Width等3種。
要執行Event Counter Mode要執行以下動作:
-
設定Timer/Counter為Event Counter Mode (TM1、TM0=01H)
-
選擇TE; TE=1則Count Falling Edge,TE=0則Count Rising Edge
-
設定計數初始值 (TMR)
-
打開相對應中斷致能旗標 (ETI和EMI)
-
控制Timer ON (TMRC.4=1)
Question 12
Timer/Counter之Pulse Width Mode如何設定?
Answer
因Timer/Counter有3種模式,即Timer、Event Counter和Pulse Width測量等3種。
要執行Pulse Width Mode要執行以下動作:
-
選定Timer/Counter時鐘源
-
設定Timer/Counter為Pulse Width Measurement Mode (TM1、TM0=11H)
-
選擇TE; TE=1量High Pulse,TE=0量Low Pulse
-
設定TMR計數初始值 (一般設定=0)
-
打開相對應中斷致能旗標
-
打開Timer ON (TMRC.4)
執行完以上步驟,程式可抽空Check TON值,若TON=0表示Pulse Width量度完成。
Question 13
Timer/Counter 0中的時鐘源如何選擇?
Answer
HT46R63/HT46C63有一個16-bit的Timer,其內部時鐘源只有fSYS/4一種。
HT46R62/HT46C62的8-bitTimer/Counter和HT46R64/HT46C64的8-bitTimer/Counter0 以及HT46R65/HT46C65的16-bit Timer/Counter0,其內部時鐘源經由PSC2~PSC0的選擇可設為fSYS ~
fSYS /128。
Question 14
Timer/Counter 1中的時鐘源如何選擇?
Answer
Timer/Counter 1中的時鐘源可以有二種選擇,包括fSYS/4及32768Hz。
TS=0選擇fSYS/4;TS=1選擇32768Hz。
Question 15
PWM (6+2) Mode和 (7+1) Mode之頻率為何? Answer
PWM (6+2) Mode是將PWM的值分成4次送出,即每64個時鐘送出PWM/4,其PWM頻率為
fSYS/26。PWM (7+1) Mode是將PWM的值分成2次送出,即每128個時鐘送出PWM/2,其PWM頻率為
fSYS/27。所以說 (6+2) Mode與8 Bit Mode相比其PWM頻率提高為4倍,而 (7+1) Mode與8 Bit Mode相比其頻率提高為2倍。
Question 16
A/D轉換的TAD時鐘頻率如何計算?
Answer
A/D轉換需要76個TAD時鐘,時鐘的頻率由ADCS1和ADCS0決定,其計算如下表:
| ADCS1 |
ADCS0 |
TAD頻率 |
| 0 |
0 |
fSYS/2 |
| 0 |
1 |
fSYS/8 |
| 1 |
0 |
fSYS/32 |
| 1 |
1 |
Undefined |
Question 17
HT46 A/D with LCD Type MCU之LCD頻率如何設定?
Answer
-
Configuration Option時鐘源 (同RTC、WDT & Time Base時鐘源)。
-
Configuration Option選除級,使LCD頻率
(fLCD=fS/22~28) 約為4kHz。
Question 18
HT46 A/D with LCD Type MCU 之LCD Bias選R Type或C Type有何差別?
Answer
LCD選R Type可省零件,而選C Type可較省電,若介意耗電問題可選C Type,若沒有耗電顧慮可以選省3顆電容的R Type。但要注意選C Type LCD且1/3 Bias時LCD的電壓是3/2 VLCD。
Question 19
HT46 A/D with LCD Type MCU的系統頻率有那些?
Answer
HT46系列MCU的系統頻率來源有三種,如下:
-
外部RC
-
外部 Crystal
-
外部 RTC OSC Crystal
Question 20
ADCLK時鐘頻率設定是否有限制 , 如何計算?
Answer
HT46 A/D with LCD Type MCU 的 A/D Clock Period (TAD) 最快為1us , 因此由ADCS1和ADCS0設定時鐘頻率需確定tAD不可小於1us . 其計算可參考下表:
| fSYS |
A/D Clock Period (tAD) |
ADCS1,ADCS0 = 00
(fSYS/2) |
ADCS1,ADCS0 = 01
(fSYS/8) |
ADCS1,ADCS0 = 10
(fSYS/32) |
ADCS1,ADCS0 =11 |
| 1 MHz |
2 us |
8 us |
32 us |
Undefine |
| 2 MHz |
1 us |
4 us |
16 us |
| 4 MHz |
*500 ns |
2 us |
8 us |
| 8 MHz |
*250 ns |
1 us |
4 us |
*星號表示ADCS1和ADCS0設定值不正確 ,
tAD小於1us .
Question 21
A/D取樣時間為何?
Answer
A/D取樣時間(A/D Sampling Time) 需32tAD . 若A/D Clock Period 為4us 則A/D Sampling Time = 128us。
Question 22
A/D type MCU其外部類比訊號源輸入A/D 的等效電路為何?
Answer
A/D type MCU其外部類比訊號源輸入A/D 類比輸入PIN的等效電路如下:

符號說明:
VA : 外部的類比訊號源
RA : 外部的類比訊號源輸出阻抗
AN0~AN7 : 類比訊號輸入PIN
CPIN : 類比訊號輸入PIN輸入電容, CPIN = 5pF
D1, D2 : PAD 上的保護二極體, VT=0.6V
II : PAD 上的漏電流, II = ±1μA (最大值)
SS : 類比訊號取樣開關
RSS : 類比訊號取樣開關等效阻抗; 大約等於100/200Ω at 5V/3V
CS/H : 取樣保持電容; 其值請參考下列表格
| |
HT46R23, HT46R24, HT46R64, HT46R65 |
HT46C23, HT46C24, HT46C64, HT46C65 |
HT46R47, HT46R22, HT46R62 |
HT46C47, HT46C22, HT46C62 |
HT46R63 |
HT46C63 |
| CS/H |
225.3pF |
94.2pF |
112.6pF |
71.3pF |
56.32pF |
35.6pF |
|
A/D 解析度 |
10-bit |
10-bit |
9-bit |
9-bit |
8-bit |
8-bit |
|
A/D 轉換時間 |
76tAD |
76tAD |
76tAD |
76tAD |
64tAD |
64tAD |
|
A/D 取樣時間 |
32tAD |
32tAD |
32tAD |
32tAD |
32tAD |
32tAD |
Note: tAD為 DATA SHEET 中 A/D clock period.
Question 23
請問WDT之功能為何?
Answer
Watchdog Timer(WDT)主要用於監視MCU內部功能(software及hardware)之執行是否正常, 使用者必須適當設計software及運用clear WDT(CLR
WDT, CLR WDT1, CLR WDT2)之指令, 使程式正常執行時, WDT不會overflow, 並且在當系統不正常執行時, WDT可以overflow造成WDT reset, WDT reset之效能, 主要由software設計所決定。
Question 24
在HT46RU66/HT46CU66中,具有一個多功能中斷MFI ,請問其中斷請求旗標MFF是如何置起的?
Answer
MFI (Multi-Function Interrupt ),指的是多功能中斷,它是由時基溢出(TBF)、RTC溢出(RTF)或定時/計數器2溢出(T2F)觸發的。當時基溢出(TBF=1)且相應的中斷控制位元ETBI=1、RTC溢出(RTF=1)
且相應的中斷控制位元ERTI=1,或者定時/計數器2溢出(T2F=1)且相應的中斷控制位元ET2I=1三者任一條件成立,MFF都將會置起。如果總中斷打開(EMI=1),相關的中斷允許(EMFI=1),
且堆疊未滿,當MFF被置位時,會產生位址018H的子程式呼叫。進中斷後MFF和EMI會被清零,以禁止其它中斷響應。TBF、RTF和T2F被置位表明發生了時基、RTC或定時/計數器2溢出,
中斷旗標TBF、RTF和T2F不會自動清除,必須由程式員用軟件清除。其中斷過程如附件圖(FAQ-10.bmp)表虛框部分所示。
應用說明
- Question 1
LCD映射資料記憶體如何使用?
- Question 2
HT46 A/D with LCD Type MCU有兩組MP使用有何不同?
- Question 3
沒有Push和POP指令;中斷時資料要如何備份?
- Question 4
可以在Interrupt Service Routine內執行Call嗎?
- Question 5
中斷處理中可否允許相同的中斷再進入?
- Question 6
沒有用到的I/O Pin如何處理?
- Question 7
PA已經Low為何沒有喚醒MCU?
- Question 8
為何外部中斷有下降緣,仍然沒有喚醒MCU?
- Question 9
可以讓外部中斷不產生喚醒MCU嗎?
- Question 10
2個CLR WDT指令如何使用?
- Question 11
HT46 A/D with LCD Type MCU之PWM功能如何使用?
- Question 12
HT46 A/D with LCD Type MCU 的 A/D
Converter 如何使用?
- Question 13
HT46 A/D with LCD Type MCU的RTC如何使用?
- Question 14
HT46 A/D with LCD Type MCU的Buzzer如何使用?
- Question 15
HT46 A/D with LCD Type MCU的PFD如何使用?
- Question 16
HT46 A/D with LCD Type MCU的Time Base如何使用?
- Question 17
在什麼情形下要關閉32K快速起振?
- Question 18
2顆電池 (2.2V~3.8V) 的工作電壓操作可以使用LVR嗎?
- Question 19
系統頻率Fsys=4MHz , ADCLK =
fsys/32 , A/D input signal 是一個square wave(250us), A/D要對square wave之 level 進行轉換,但是有時就轉換不正確 .
- Question 20
Holtek MCU 之Stack 除了做CHIP reset之外, 有無其它方法可以重設 stack pointer?
- Question 21
當系統時鐘選擇RC振盪器時,應用電路上OSC1外接的電阻與電容有何功能?電容可以不加嗎?
- Question 22
如何決定 RA ?
- Question 23
如何看待 A/D 的輸入阻抗呢 ?
- Question 24
與 A/D 相關的另一個參數是 A/D Acquisition
Time(tAC), 通常我們需要知道 A/D Acquisition
Time(tAC) 的最小值為何?
- Question 25
A/D 類比輸入 PIN 的輸入電壓範圍為何 ?
- Question 26
HT46單片機怎樣在PD口輸出自己所需要的PWM頻率?
- Question 27
HT46系列之MCU,如有使用A/D Converter,當進入HALT
MODE前,應作何處理以省電?
- Question 28
3 pin 之resonator/crystal用於MCU之時基時, 電容之Vss pin可改接Vdd嗎?
- Question 29
寫程式時,如欲在program memory建立Table,如何建於絕對位址,為何ORG不適用,有其他方法嗎?
- Question 30
請問要如何以C語言讀取OTP WRITER燒入IC之序號?
- Question 31
用HT46/HT47/HT48/HT49系列單片機的BZ/BZB功能時感覺聲音不夠響亮,該怎麼辦?
- Question 32
為何寫TMRL和TMRH不能改變其中的值?程式如下:
mov a,131
mov tmrl,a
mov a,0ffh
mov tmrh,a
執行了以上這幾條指令,TMRL和TMRH中的值依然保持原來的資料而未被改變!
- Question 33
使用HOLTEK MCU做一個聲音的產品,在程式中,會應用到查表:
| TABLE1: |
DC 0FFE1H,0FE32H,0FA34H,0FC78H |
|
|
DC 0FECDH,0FEDCH,0FE57H,0FD87H |
; 16位表格值 |
請問16位的查表表格定義能否按TABLE1的格式?
- Question 34
HT46R62的SEG腳掩膜做邏輯輸出後怎麼控制?
- Question 35
使用帶有PA控制寄存器(PAC)的8位MCU作母體調試程式時,為什麼向PA PIN腳的某一位寫0再寫1,在寄存器觀察窗口中卻看不到PA PIN腳這一位的值有所變化?
- Question 36
當選用PFD功能時,PA3端口是否仍可以用作輸入口?
- Question 37
在HALT狀態下,LVR有沒有作用?
- Question 38
請問與A/D複用的I/O Port設為A/D輸入後,是否還支援普通I/O功能?
- Question 39
模擬器在模擬HT46R72D-1時LCD無法輸出波形?
- Question 40
定義在不同RAM Bank中的變數,是否可以通過變數名來直接進行讀寫操作?
- Question 41
請問HT46RU66的LVD功能如何使用?HALT下LVD是否工作?
- Question 42
HT46RU66/HT46CU66中ROM分為兩個Bank,程式跳轉到不同的Bank時需如何處理?
- Question 43
HT46RU66中的UART如何設置喚醒功能?
- Question 44
在HT46RU66中,對於定義在Bank1中的表格,使用TBHP和TBLP進行查表,請問應使用相對地址還是絕對地址進行操作?
Question 1
LCD映射資料記憶體如何使用?
Answer
LCD的映射資料記憶體位於BANK 1的40H開始的位置,故欲使LCD顯示對應的內容時,需先將BP(Bank Pointer)設為1,然後利用間接定址的方式存取LCD Display Memory的內容,LCD映射資料記憶體不能使用直接定址方式存取。
Question 2
HT46 A/D with LCD Type MCU有兩組MP使用有何不同?
Answer
MP0/IAR0和MP1/IAR1必需配對使用,其中MP0/IAR0只能用在RAM BANK0,MP1/IAR1則可以在任何RAM BANK使用。
Question 3
沒有Push和POP指令;中斷時資料要如何備份?
Answer
雖然沒有Push和POP指令,程式員仍可指定專用記憶RAM BYTE (例如:db
ACCStack; for ACC Storage) 儲存中斷時會被破壞的資料。首先將ACC存入專用記憶體,然後利用ACC依序將Status和其它資料搬移至各別之專用記憶體。在中斷返回前,再反序將其它備份資料,Status和ACC回存,最後再執行RETI返回主程式。
Question 4
可以在Interrupt Service Routine內執行Call嗎?
Answer
因為HT46 A/D with LCD Type MCU 堆疊暫存器(Stack)數目有限,在Interrupt中執行Call要特別注意,如果在進入Interrupt時Stack已經滿了,則會造成Stack Over,而使得程式無法返回。所以若要在Interrupt內執行Call,必需考慮在最差情況下之Stack使用數目,務必使在最差狀況下進入Interrupt仍有Stack空間。
Question 5
中斷處理中可否允許相同的中斷再進入?
Answer
理論上在進入中斷時MCU會自動清除EMI旗標 (EMI=0),並禁止所有中斷的再進入,若中斷處理中用軟體設定EMI旗標 (EMI=1),則在Stack有空之下,所有中斷(含相同中斷)皆可再進入。要允許相同的中斷再進入,需特別注意備份資料的處理,應避免已備份之資料被再進入的中斷所破壞。若不是非常緊急中斷,一般不建議中斷再中斷。
Question 6
沒有用到的I/O Pin如何處理?
Answer
若不用之I/O Pin浮接時,會造成IC的耗電,最好的處理方式就是將不用的I/O Pin設定成Output Pin。如果要設成Input Pin則要選擇Pull-high 電阻,如果不選用Pull-high電阻,則將Pin腳接地。
Question 7
PA已經Low為何沒有喚醒MCU?
Answer
MCU的PA Port喚醒為瞬間下降緣觸發,若在執行HALT之前PA已經Low,且在HALT期間一直維持在Low,因為沒有下降緣動作,所以無法喚醒MCU。
Question 8
為何外部中斷有下降緣,仍然沒有喚醒MCU?
Answer
雖然MCU可由中斷喚醒,但嚴格的說是要靠中斷要求旗標 (Request Flag) EIF0/EIF1由0變1才能喚醒。若在MCU進入HALT之前EIF0/EIF1已經設定 (EIF0/EIF1=1),則再來之INT無法改變EIF0/EIF1的值,亦即是EIF0/EIF1不能由0變1,所以不能喚醒MCU。
Question 9
可以讓外部中斷不產生喚醒MCU嗎?
Answer
在執行HALT之前先清除EMI再設定EIF=1,則外部中斷就無法喚醒MCU。
Question 10
2個CLR WDT指令如何使用?
Answer
2個CLR WDT可以增加系統可靠性。若程式有2個主要的交替循環Loop;則可在1個Loop放CLR WDT1,在另1個Loop放CLR WDT2,一旦程式錯誤或受雜訊干擾造成一直停留在某一個Loop時;WDT就會啟動,發出WDT Time-out重新啟動MCU。
Question 11
HT46 A/D with LCD Type MCU之PWM功能如何使用?
Answer
首先Configuration Option需選擇PWM功能,使用時,先設PDC.0=1再寫入一個欲輸出的值丟到PWM暫存器,當PD.0=0則PWM輸出0;當PD.0=1輸出PWM波形 (若有第2個PWM則控制PDC.1和PD.1)。
Question 12
HT46 A/D with LCD Type MCU的 A/D Converter如何使用?
Answer
使用A/D要執行以下動作:
-
首先定義Port B Configuration (PCR2、PCR1、PCR0) 選定有幾個類比輸入通道。
-
選定特定通道 (ACS2、ACS1、ACS0),此通道必需在前項選定通道內。
-
命令A/D開始轉換 (ADCR.7=0 --> 1 --> 0),此時A/D顯示忙碌
(EOCB=1)。
-
等待76個TAD時鐘,A/D顯示轉換完成
(EOCB=0);並產生中斷要求旗標(ADF=1)。
-
讀取資料 (ADRL和ADRH)。
Question 13
HT46 A/D with LCD Type MCU的RTC如何使用?
Answer
RTC類似Time Base設定,最大的差別為其頻率可以軟體設定。
-
首先Configuration Option選好時鐘源。
-
依需要,程式隨時設定RTC除頻。fRTC=fS/28~215 (其中
fS為前項之時鐘源)。
-
依據中斷需求設定中斷致能旗標(ERTI=1)。
以上設定完成,RTC會不停運作,每次RTC到時,RTC旗標會被設定(RTF=1),並產生相應中斷。
Question 14
HT46 A/D with LCD Type MCU的Buzzer如何使用?
Answer
使用Buzzer要先執行以下設定:
-
Configuration Option設定PA0、PA1成CMOS Output。
-
Configuration Option選擇Buzzer。
-
Configuration Option選定時鐘源 (同RTC、WDT和Time Base時鐘源)。
-
Configuration Option設定Buzzer頻率。fBUZZER=fS/22~29
(fS為前項時鐘源)。
以上設定完成,在程序中設定PA0和PA1即可控制Buzzer輸出。
當PA0、PA1=0,則BZ、BZ兩者輸出,當PA0=0、PA1=1則僅BZ輸出,當PA0=1則BZ、BZ兩者皆不輸出。
Question 15
HT46 A/D with LCD Type MCU的PFD如何使用?
Answer
使用PFD要執行以下設定:
-
Configuration Option選擇PFD功能輸出。
-
當有2個以上PFD時;Configuration Option選擇由那一個PFD輸出。
-
設定PFD頻率;分8 Bit和16 Bit二種。
8 Bit: fPFD=fINT/(2 x (256-N))
16 Bit: fPFD=fINT/(2 x (65536-N))
其中fINT為Timer之時鐘源
-
打開選定之Timer (TON)
以上設定完成;在程式控制PA3=0,則PFD輸出。
Question 16
HT46 A/D with LCD Type MCU的Time Base如何使用?
Answer
使用Time Base要執行以下設定:
-
首先Configuration Option選好時鐘源。
-
依需要;Configuration Option選擇Time Base除頻。
fTIME BASE=fS/212~215 (其中fS為前項之時鐘源)。
-
依據中斷需求設定中斷致能旗標
(ETBI=1)。
以上設定完成,Time Base會不停的運作,每次Time Base到時,Time Base旗標會被設定(TBF=1),並產生相應中斷。
Question 17
在什麼情形下要關閉32K快速起振?
Answer
MCU開機上電後32K振盪器起動快速起振。若考慮省電可在2秒鐘後關閉快速起振,如此在3V工作電壓下可省1~2µA,在5V工作電壓下可省3~4µA。
Question 18
2顆電池 (2.2V~3.8V) 的工作電壓操作可以使用LVR嗎?
Answer
LVR的動作點在2.7V~3.3V之間,所以2.2V的工作電壓不能選擇LVR,若一定要偵測2.2V低壓,可以外加Voltage Detector (HT70XX系列)。
Question 19
系統頻率Fsys=4MHz , ADCLK = fsys/32 , A/D input signal 是一個square wave(250us), A/D要對square wave之 level 進行轉換,但是有時就轉換不正確 .
Answer
HT46 A/D with LCD Type MCU 的轉換時間(A/D conversion time)為76
TAD . 於此轉換進行期間會先進行 S&H 動作, 其時間為32
TAD . 參考下圖 : A/D Conversion Timing .
若 fsys = 4MHz, ADCLK = fsys/32, A/D Sampling Time需32TAD = 256us
因 ADCLK之除級為free run counter, 所以A/D Sampling Time tolerance應為31~32
ADCLK; 248us<A/D S&H time<256us , 就造成A/D conversion 結果有時數值正確, 有時又不正確 .
此問題可修改 ADCLK 為fsys/8 , 縮短A/D Sampling Time 為64us .
Question 20
Holtek MCU 之Stack 除了做CHIP reset之外,有無其它方法可以重設 stack pointer?
Answer
堆疊指標會受到中斷與呼叫附程式與返回指令影響,除此之外,除了透過CHIP
reset,並無其它方法可以重設(reset) Holtek MCU
的堆疊指標。
Question 21
當系統時鐘選擇RC振盪器時,應用電路上OSC1外接的電阻與電容有何功能?電容可以不加嗎?
Answer
OSC1外加電阻是為了產生一bias以控制內部的RC充放電,電阻值決定RC震盪頻率。外加電容建議為470pF,OSC1外加電容是為了避免和OSC2產生交越干擾,以便讓OSC2輸出一穩定1/4系統頻率的時脈。假如你不需要使用到OSC2輸出的1/4系統頻率的時脈,那麼電容器是可以省略的。
Question 22
如何決定 RA ?
Answer
以 5V, 10-bit A/D 來看, VA 輸入到 AN0~AN7 PIN, 訊號衰減不得超過 1/4
LSB,以維持 ADC 轉換過程中的精確度, 因此相對應下來為 5V/4096 約等於 1.2mV
所以 1uA×RA < 1.2 mV → RA < 1.2kΩ , 1uA 為
II 的值
建議 RA 不要大於 1.2kΩ, 以維持 10-bit ADC 的精確度
對 9-bit 及 8-bit ADC而言, RA 不要大於 2.4kΩ及4.8kΩ, 以維持其相對的精確度
Question 23
如何看待 A/D 的輸入阻抗呢 ?
Answer
在 A/D 不做轉換時, SS 是處在 OPEN 的狀態, 在 A/D 開始轉換時, 會有兩段時間, 一是 SAMPLE 的時間, 需要 32 個
tAD, 此時 SS CLOSE; 之後的 44個 tAD 時間SS OPEN, 執行 A/D 轉換的工作, 執行A/D轉換總共需要76個tAD,
tAD為 DATA SHEET 中 A/D clock period.
所以我們分兩個部分來看 A/D 的輸入阻抗
(1). 當類比訊號取樣開關SS OPEN 時, A/D輸入阻抗, 只剩下漏電流產生的等效阻抗

此時輸入阻抗大約等於 RVDD 並聯 RVSS,
RVDD 與 RVSS 分別為 PIN 漏電流所產生的電阻,
RVDD = RVSS = 5V/1uA = 5MΩ
RVDD 並聯 RVSS = 2.5MΩ
(2). 當類比訊號取樣開關 SS CLOSE 時, A/D輸入阻抗約等於如下之等效電路(忽略CPIN
)

此時輸入阻抗分析如下:
以DC來分析, 其DC輸入阻抗 大約等於 RVDD 並聯
RVSS, RVDD 與 RVSS 分別為 PIN 漏電流所產生的電阻,
RVDD = RVSS = 5V/1uA = 5MΩ
RVDD 並聯 RVSS = 2.5MΩ
以AC來分析, 其 time constant = (RA+RSS)×C, 其值如下表
| |
HT46R23, HT46R24, HT46R64, HT46R65 |
HT46C23, HT46C24, HT46C64, HT46C65 |
HT46R47, HT46R22, HT46R62 |
HT46C47, HT46C22, HT46C62 |
HT46R63 |
HT46C63 |
| CS/H |
225.3pF |
94.2pF |
112.6pF |
71.3pF |
56.32pF |
35.6pF |
| RA+RSS |
1.3kΩ |
1.3kΩ |
2.5kΩ |
2.5kΩ |
4.9kΩ |
4.9kΩ |
| Time constant |
0.29μs |
0.12μs |
0.28μs |
0.18μs |
0.28μs |
0.17μs |
Question 24
與 A/D 相關的另一個參數是 A/D Acquisition Time(tAC), 通常我們需要知道 A/D Acquisition
Time(tAC) 的最小值為何?
Answer
其求法為, 假設 VA 類比訊號源輸入到 CS/H 的電壓不得誤差
VA/2048, 才能維持 10-bit ADC 的精確度, 所以當 SS CLOSE 時,
CS/H 的電壓, 必須大於 VA-VA/2048
所以 VA-VA/2048 < VA(1-EXP(-tAC/R×C);
R=RA+RSS, C=CS/H
VA-VA/2048 < VA(1-EXP(-tAC/R×C)
→ 1/1028 > EXP(-tAC/R×C)
→ -7.625 > - tAC/R×C
→ tAC > 7.625×R×C
以不同型號的MCU, 可得到下表不同的值
| |
HT46R23, HT46R24, HT46R64, HT46R65 |
HT46C23, HT46C24, HT46C64, HT46C65 |
HT46R47, HT46R22, HT46R62 |
HT46C47, HT46C22, HT46C62 |
HT46R63 |
HT46C63 |
| CS/H |
225.3pF |
94.2pF |
112.6pF |
71.3pF |
56.32pF |
35.6pF |
| RA+RSS |
1.3kΩ |
1.3kΩ |
2.5kΩ |
2.5kΩ |
4.9kΩ |
4.9kΩ |
| tAC |
2.2μs |
0.93μs |
2.1μs |
1.4μs |
2.1μs |
1.3μs |
| A/D 取樣時間 |
32tAD
32μs(最小值) |
32tAD
32μs(最小值) |
32tAD
32μs(最小值) |
32tAD
32μs(最小值) |
32tAD
32μs(最小值) |
32tAD
32μs(最小值) |
由上表可知 A/D 取樣時間為 32tAD, 根據規格tAD 最小值為 1μs, 算出取樣時間最小為32μs, 必須大於tAC.
Question 25
A/D 類比輸入 PIN 的輸入電壓範圍為何 ?
Answer
因為 AN0~AN7 PIN上都有 保護二極體, 所以 AN0~AN7 PIN上的電壓, 絕對不得大於VDD + 0.3 或是小於 VSS-0.3, 以免造成其他不可預期的耗電及誤動作.
Question 26
HT46單片機怎樣在PD口輸出自己所需要的PWM頻率?
Answer
HT46系列MCU的PWM輸出頻率是由系統頻率決定的,Fpwm=Fsys/256;即系統頻率定了之後,PWM頻率也就定了。PWM頻率是不可調的,只能調占空比(通過給PWM寄存器賦值)。
Question 27
HT46系列之MCU,如有使用A/D Converter,當進入HALT MODE前,應作何處理以省電?
Answer
由於進入HALT MODE時,A/D Converter並不會關掉,仍會耗電,故當進入HALT MODE前,應將ADCR Register之PCR0,PCR1,PCR2等3位元設為000,以關掉A/D Converter達成省電,待WAKE UP返回NORMAL MODE後再重設PCR0,PCR1,PCR2等3位元,將A/D Converter 開啟。
Question 28
3 pin 之resonator/crystal用於MCU之時基時, 電容之Vss pin可改接Vdd嗎?
Answer
3pin之resonator/crystal 用於MCU之時基時,配合Layout方便,
電容之Vss pin亦可改接Vdd。
Question 29
寫程式時,如欲在program memory建立Table,如何建於絕對位址,為何ORG不適用,有其他方法嗎?
Answer
ORG expression : expression 是對於目前SECTION
起始位址的offset,並非絕對位址,可使用SECTION來建立Table於絕對位址,例如:
table .section at 300 'code' -即可將接下去之Table起始位置建立於絕對位址300。
Question 30
請問要如何以C語言讀取OTP WRITER燒入IC之序號?
Answer
在C語言中須以Inline assembly來讀取OTP WRITER燒入IC之序號, 程式範例如下:
首先, 宣告一變數並指定 ram 位址
unsigned long series_num @0x80;
然後, 將 serial number 讀入此 variable, 方法如下:
|
#asm
|
|
|
tblp equ [07h]
|
; define table address
|
|
mov a,20h
|
|
|
mov tblp,a
|
; set table pointer to 20h (series number at 20h of last page)
|
|
tabrdl [80h]
|
; load first byte of series number to series_num (0x80h);
|
|
inc tblp
|
|
|
tabrdl [81h]
|
; second byte of series number
|
|
inc tblp
|
|
|
tabrdl [82h]
|
; third byte of series number
|
|
inc tblp
|
|
|
tabrdl [83h]
|
; fourth byte of series number
|
|
#endasm
|
|
Question 31
用HT46/HT47/HT48/HT49系列單片機的BZ/BZB功能時感覺聲音不夠響亮,該怎麼辦?
Answer
BZ/BZB的輸出頻率要與蜂鳴器的頻率對應,每種蜂鳴器都有各自的中心頻率,設置的頻率要儘量靠近中心頻率。如果蜂鳴器直接接在BZ,BZB兩個管腳,那麼這兩個管腳 對應的IO口都要設成輸出。
Question 32
為何寫TMRL和TMRH不能改變其中的值?程式如下:
mov a,131
mov tmrl,a
mov a,0ffh
mov tmrh,a
執行了以上這幾條指令,TMRL和TMRH中的值依然保持原來的資料而未被改變!
Answer
在寫入TMRL和TMRH前要先關掉計時中斷。
Question 33
使用HOLTEK MCU做一個聲音的產品,在程式中,會應用到查表:
| TABLE1: |
DC 0FFE1H,0FE32H,0FA34H,0FC78H |
|
|
DC 0FECDH,0FEDCH,0FE57H,0FD87H |
; 16位表格值 |
請問16位的查表表格定義能否按TABLE1的格式?
Answer
HOLTEK各系列MCU的ROM有不同的字節長度,每一個字節最低含14個位,最多含16個位。
字節長度為16位的MCU可以按TABLE1格式定義出16位表格,其他MCU只能定義出最長14位或15位的表格。
Question 34
HT46R62的SEG腳掩膜做邏輯輸出後怎麼控制?
Answer
HT46R62的SEG0~SEG15可掩膜選擇為邏輯輸出,一旦LCD設置為邏輯輸出,LCD存儲區的bit0將控制相關SEG腳的輸出狀況。掩膜選擇時SEG0~SEG7 是按字節設置的,SEG8~SEG15 是按位設置的。
Question 35
使用帶有PA控制寄存器(PAC)的8位MCU作母體調試程式時,為什麼向PA PIN腳的某一位寫0再寫1,在寄存器觀察窗口中卻看不到PA PIN腳這一位的值有所變化?
Answer
要向PA數據寄存器的某一位寫入數據,必需先將PA的控制寄存器(PAC)的對應位清0,也就是將其設置為輸出口時,才能有效的將數據寫入數據寄存器(PA)中,反之,如果此位是輸入狀態則通過程式不能改變數據寄存器這一位的值。
Question 36
當選用PFD功能時,PA3端口是否仍可以用作輸入口?
Answer
可以。如果PAC.3位被設置為"1",即使掩膜選項選擇該引腳為PFD輸出,PA3還是作為輸入端口使用。
Question 37
在HALT狀態下,LVR有沒有作用?
Answer
在Option選項中設置LVR使能,在HALT狀態下LVR不起作用。
Question 38
請問與A/D複用的I/O Port設為A/D輸入後,是否還支援普通I/O功能?
Answer
如果某個I/O一旦設為AD input時, 因省電因素,其不支援輸入/輸出功能,並且上拉電阻會自動失效。
Question 39
模擬器在模擬HT46R72D-1時LCD無法輸出波形?
Answer
查看HT46R72D-1的datasheet,發現LCD的時鐘來自IRC,而IRC和暫存器WDTC有關,WDTC中如果將WDT OSC設為disable,IRC將被關閉,此時LCD輸出波形消失。
Option中對WDT的選擇會影響到WDTC的初始值。所以不同的WDT選項會造成WDTC的初值不一樣,同時影響LCD的輸出。客戶如需使用LCD,請將WDTC的2,
3bit設置為10,即enable WDT osc。
Question 40
定義在不同RAM Bank中的變數,是否可以通過變數名來直接進行讀寫操作?
Answer
對於有多個RAM Bank的MCU來說,定義在Bank0中的變數,可以通過變數名直接進行讀寫操作,而對於定義在其他Bank中的變數則無法實現。
因為在RAM中不論變數定義在哪一個Bank,變數名都是一個位址標號,當使用變數名直接進行讀寫操作時相當於進行了一次直接尋址操作,Holtek MCU規定任何直接尋址只會在Bank0存取資料,所以定義在Bank0之外的變數無法直接通過變數名進行操作,而必須使用間接尋址指針MP1和間接尋址暫存器IAR1進行間接存取。
Question 41
請問HT46RU66的LVD功能如何使用?HALT下LVD是否工作?
Answer
若要使用HT46RU66之LVD(低電壓檢測)功能,首先要在光罩當中設定LVD選項Enable,其次要注意配合RTCC暫存器中的第3位元(LVDC)和第5位元(LVDO)。
其中LVDC是致能/禁能控制位元,設定為邏輯高時LVD為有效狀態;LVDO是LVD檢測器的輸出位元,並且是只讀位元。當正確設置LVD功能後,當系統電源電壓高於
規格書DC特性中的VLVD(典型值約為3.3V)時,VLDO位元將保持0;一旦系統電源電壓低於VLVD值,則LVDO位元會置1,應用程序就可以判斷出是否出現低電壓狀態。
在HALT狀態下,LVD功能將不起作用,也不會增加MCU額外的功耗。
Question 42
HT46RU66/HT46CU66中ROM分為兩個Bank,程式跳轉到不同的Bank時需如何處理?
Answer
HT46RU66/HT46CU66中ROM分為Bank0和Bank1,每個Bank的空間容量為8192X16位元,可通過Bank指針BP.5選擇。當BP.5=0時,選擇Bank0;當BP.5=1時,選擇Bank1。而指令JMP和CALL只包含13位元地址,其跳轉範圍為一個Bank(即8k),當執行JMP指令跳轉到不同Bank的地址,或者執行CALL指令呼叫位元於不同Bank的子程式時,必須先正確設置Bank指針BP.5來確定目標Bank,以確保程式正確執行。當執行這個子程式的RET指令時,程式會自動返回到原先主程式所在的Bank,然而BP的值不會改變,仍保持子程式所在Bank的值,因此還需要將BP值重新設置為原先主程式所在Bank的值,以確保程式正確執行。舉例說明如下所示。
include HT46RU66.inc
︰
rombank 0 codesec0 ;define rombank0
rombank 1 codesec1 ;define rombank1
︰
codesec0 .section at 'code'
org 00h
clr bp
jmp mainstart
︰
mainstart:
︰
mov a,BANK routb1 ;routine'routb1'is located in bank1
mov bp,a ;load bank number for routb1 into BP register
call routb1 ;call subroutine located in bank 1
clr bp ;program will return to this location after RET in
︰ ;bank 1,but BP will retain bank 1 value
︰ ;so clear the BP
codesec1 .section at 'code'
︰
routb1:
︰
nop
nop
ret ;return program to bank0 but BP will retain
;bank 1 value
Question 43
HT46RU66中的UART如何設置喚醒功能?
Answer
當MCU接收數據時進入HALT狀態,UART將停止工作,並且UART相關寄存器不會受到影響。如果進入HALT模式前,先將UCR2寄存器中的第2位(RIE)和第3位(WAKE)置位,那么UART將具有喚醒功能,在RX引腳下降沿會喚醒MCU。若要喚醒並產生中斷,UARTEN(UART使能位)、RXEN(接收使能位)、EURI(UART中斷使能位)和EMI(總中斷使能位)必須同時置位;若EURI或EMI為0,則MCU可以被喚醒但不會產生UART中斷。
Question 44
在HT46RU66中,對於定義在Bank1中的表格,使用TBHP和TBLP進行查表,請問應使用相對地址還是絕對地址進行操作?
Answer
當表格定義在Bank1中,例如在Bank1程序存儲器中使用ORG偽指令將表格數據存放在005H的地址,這是相對於Bank1起始地址000H而言,而它的絕對地址則是2005H。此時,根據表格的絕對地址,設置TBHP(高字節表格指針)的值為20H,設置TBLP(低字節表格指針)的值為05H,再使用“TABRDC [m]”指令,即可讀取該表格數據,其中低字節的表格數據會送往用戶定義的數據寄存器[m]中,而高字節表格數據會送到TBLH特殊寄存器,並且高字節中未使用的位將被讀取為零。
注意事項
- Question 1
已經進入HALT Mode為何還有耗電?
- Question 2
|