2024年7月28日 星期日

Arduino 筆記(下)

<<:左移運算子,將數字 1 向左移 x 個位元。

| :"或 / or"運算子。將兩個運算元的對應位元進行或運算,只要有一個位元為 1,結果的對應位元就為 1。任一為1 為1,否則為 0 一。

& :"和 / and"運算子。將兩個運算元的對應位元進行或運算,只要有兩個位元為 1,結果的對應位元就為 1。倆著為1 為1,否則為 0 一。

頻率(f):在每單位時間內(即每秒)重複發生的次數(週期數,即循環次數)

週期(T):定義為重複事件發生的最小時間間隔。


同底數(冪)相乘,底數不變,指數相加:

a^m*a^n=a^(m+n)

同底數(冪)相除,底數不變,指數相減:

a^m/a^n=a^(m-n)

同指數(冪)相除,指數不變,底數相除(b不為0)

a^n/b^n=(a/b)^n

Atmega328P 的默認時鐘頻為8MHz。

-------------------------------------------------

"CLKPR" 是 Clock Prescaler Register 的縮寫,中文翻譯為「時鐘預分頻器寄存器」

"CLKPCE" 通常是指 "Clock Prescaler Change Enable" 的縮寫,中文翻譯為「時鐘預分頻器更改啟用」, 它是一個控制位。

"TCCR0A" 是指 Timer/Counter 0 的控制(C)寄存器 A。(0210/584) 控制 TCNT0 的計數模式 , 時鐘源波形模式比較器

"TCCR0B" 是指 Timer/Counter 0 的控制(C)寄存器 B。(0211/589)

"OCRnB"  Output Compare Register nB 的縮寫。(0253/937)

"OCFnB  Output Compare Flag nB 的縮寫,中文翻譯為「輸出比較旗標 nB」。(256/960)

"TCNT0" 是指 Timer/Counter 0 的計數器寄存器。(0208/576)

"TIFR0" 是 Timer/Counter 0 Interrupt Flag Register 的縮寫,中文翻譯為"計時器/計數器中斷標誌寄存器 0"

"TOV0”是 Timer/Counter Overflow Flag 0 的縮寫,中文翻譯為「計數器溢出旗標 0」

"OCFnA Output Compare Flag nA 的縮寫,中文翻譯為「輸出比較旗標 nA」。(0255/952)


"OCRnA"  Output Compare Register nA 的縮寫。

"OCRnA"  "OCRnB" 都是輸出比對寄存器,

"OCFnX "是微控制器 (MCU) 中輸出比較模組 (Output Compare Module) 的一個旗標 (flag)。

"CTC模式”通常被翻譯為“單週期計數模式” CTC模式)。CTC 模式是一種定時器操作模式,定時器從 0 計數到比較值(OCRx),然後重設為



2024年7月21日 星期日

二進制中,一般寫法 0xF2 其中字母大小寫有分嗎?另外 0x01 與 0x1 及 0x00 與 0x0 相同嗎?

在十六進位表示法(一種使用基數 16 表示數字的方法)中,字母不區分大小寫。這意味著十六進位數 0xF2 相當於 0xf2、0XF2和0xHf2。十六進制數字可以是大寫或小寫,並且表示的值保持不變。

這種不區分大小寫的情況是由於十六進制數字的編碼方式所造成的。每個十六進位數字對應於 16 進位數字系統中的一個特定值:

0到9:以對應的數字表示(0、1、2、3 、... 、9 )

A到F:用字母A到F表示,對應16進位的值10到15

由於底層值表示不受字母大小寫的影響,因此十六進制數字被認為不區分大小寫。


關於第二個問題:

0x01和0x1代表相同的值,即十進制的1。

0x00和0x0代表同一個值,都是十進制的0。

這是因為十六進位表示法中的前導零不會影響所表示的值。十六進制數的值由其數字的組合決定,從最高有效數字開始,向最低有效數字移動。在 0x01 和 0x00 的情況下,單一數字 1 或 0 是唯一有效的數字,前導零對整體值沒有貢獻。

2024年7月19日 星期五

此($2^8-1$) 中$代表何意?

 01. 此($2^8-1$) 中$代表何意?

在數學中,符號 $ 表示一個數學表達式的開始或結束,這在許多數學文獻中是常見的用法。在這個上下文中,$2^8-1$ 是一個數學表達式,表示計算 

28 的值然後減去 1。

這個表示法在數學和程式設計中都很常見,特別是在討論位元運算和計數器時。

2. 為什麼8位元數值的最大值是255而不是256 ?

8 位元數值的最大值是 255 而不是 256,是因為在二進位計算中,8 個位元可以表示的最大數值是 11111111,換算成十進位就是 255。以下是更詳細的解釋:

二進位計算

在二進位計算中,每個位元可以是 0 或 1。從右到左,每個位元的權重是 $2^0, 2^1, 2^2, ..., 2^7$。一個 8 位元的二進位數字可以表示的範圍是:00000000(2) to 11111111(2)

十進位換算

將這些二進位數字換算成十進位,可以得到:
00000000_{(2)}&=0\times 2^7+0\times 2^6+0\times 2^5+0\times 2^4+0\times 2^3+0\times 2^2+0\times 2^1+0\times 2^0=0_{(10)}\\11111111_{(2)}&=1\times 2^7+1\times 2^6+1\times 2^5+1\times 2^4+1\times 2^3+1\times 2^2+1\times 2^1+1\times 2^0\\&=128+64+32+16+8+4+2+1=255_{(10)}\end{align*}$$所以8位元的二進位數字的最大值是11111111,換算成十進位就是255。##總結8位元可以表示的數值範圍是從0到255,共計256個數值。但是最大值是255而不是256,是因為0也算作一個數值,所以實際上只有256個數值,從0到255。

2024年7月17日 星期三

C++ 中 TCNT0

 

 01.TCNT0 Timer-0 的計數器值。它是一個 8 位的計數器,範圍從 0 2550x00 0xFF)。

02.總個數(10進位) 255+1=256