基本資料 功能說明 應用說明 注意事項 其他

基本資料

 

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種:

  1. fSYS/4

  2. RTC OSC

  3. 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要執行以下動作設定:

  1. 先選定Timer/Counter的時鐘源

  2. 設定Timer/Counter為Timer Mode (TM1、TM0=10H)

  3. 設定計數初始值 (TMR)

  4. 開相對應中斷致能旗標 (ETI和EMI)

  5. 設定 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要執行以下動作:

  1. 設定Timer/Counter為Event Counter Mode (TM1、TM0=01H)

  2. 選擇TE; TE=1則Count Falling Edge,TE=0則Count Rising Edge

  3. 設定計數初始值 (TMR)

  4. 打開相對應中斷致能旗標 (ETI和EMI)

  5. 控制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要執行以下動作:

  1. 選定Timer/Counter時鐘源

  2. 設定Timer/Counter為Pulse Width Measurement Mode (TM1、TM0=11H)

  3. 選擇TE; TE=1量High Pulse,TE=0量Low Pulse

  4. 設定TMR計數初始值 (一般設定=0)

  5. 打開相對應中斷致能旗標

  6. 打開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

  1. Configuration Option時鐘源 (同RTC、WDT & Time Base時鐘源)。

  2. 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的系統頻率來源有三種,如下:

  1. 外部RC

  2. 外部 Crystal

  3. 外部 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映射資料記憶體如何使用?

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要執行以下動作:

  1. 首先定義Port B Configuration (PCR2、PCR1、PCR0) 選定有幾個類比輸入通道。

  2. 選定特定通道 (ACS2、ACS1、ACS0),此通道必需在前項選定通道內。

  3. 命令A/D開始轉換 (ADCR.7=0 --> 1 --> 0),此時A/D顯示忙碌 (EOCB=1)。

  4. 等待76個TAD時鐘,A/D顯示轉換完成 (EOCB=0);並產生中斷要求旗標(ADF=1)。

  5. 讀取資料 (ADRL和ADRH)。


Question 13

HT46 A/D with LCD Type MCU的RTC如何使用?

Answer

RTC類似Time Base設定,最大的差別為其頻率可以軟體設定。

  1. 首先Configuration Option選好時鐘源。

  2. 依需要,程式隨時設定RTC除頻。fRTC=fS/28~215 (其中 fS為前項之時鐘源)。

  3. 依據中斷需求設定中斷致能旗標(ERTI=1)。

以上設定完成,RTC會不停運作,每次RTC到時,RTC旗標會被設定(RTF=1),並產生相應中斷。


Question 14

HT46 A/D with LCD Type MCU的Buzzer如何使用?

Answer

使用Buzzer要先執行以下設定:

  1. Configuration Option設定PA0、PA1成CMOS Output。

  2. Configuration Option選擇Buzzer。

  3. Configuration Option選定時鐘源 (同RTC、WDT和Time Base時鐘源)。

  4. 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要執行以下設定:

  1. Configuration Option選擇PFD功能輸出。

  2. 當有2個以上PFD時;Configuration Option選擇由那一個PFD輸出。

  3. 設定PFD頻率;分8 Bit和16 Bit二種。
    8 Bit: fPFD=fINT/(2 x (256-N))
    16 Bit: fPFD=fINT/(2 x (65536-N))
    其中fINT為Timer之時鐘源

  4. 打開選定之Timer (TON)

以上設定完成;在程式控制PA3=0,則PFD輸出。


Question 16

HT46 A/D with LCD Type MCU的Time Base如何使用?

Answer

使用Time Base要執行以下設定:

  1. 首先Configuration Option選好時鐘源。

  2. 依需要;Configuration Option選擇Time Base除頻。
    fTIME BASE=fS/212~215 (其中fS為前項之時鐘源)。

  3. 依據中斷需求設定中斷致能旗標 (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特殊寄存器,並且高字節中未使用的位將被讀取為零。

 


注意事項