AT28C256 免編程 EEPROM

最近設計一些數字顯示工具,又可以因應情況改變數字內容
但使用 Arduino 或 Raspberry Pi Pico 等微控制器,在應用上又有點浪費
因此在下想使用一些操作較直觀、簡單的微控制器
AT28C256 具有 15位元地址,即是共有 32768個地址組合
每個地址能夠保存 8位元資料 ,總共可以保存 262144位元資料
其型號的 256 就是指能夠保存 256K 位元資料

AT28C256 外觀

見下文
AT28C256的正面

見下文
AT28C256的背面

AT28C256 引腳

編號引腳方向用途
1A14輸入第14位元地址
2A12輸入第12位元地址
3A7輸入第7位元地址
4A6輸入第6位元地址
5A5輸入第5位元地址
6A4輸入第4位元地址
7A3輸入第3位元地址
8A2輸入第2位元地址
9A1輸入第1位元地址
10A0輸入第0位元地址
11IO0輸入輸出第0位元輸入輸出
12IO1輸入輸出第1位元輸入輸出
13IO2輸入輸出第2位元輸入輸出
14GND接地
15IO3輸入輸出第3位元輸入輸出
16IO4輸入輸出第4位元輸入輸出
17IO5輸入輸出第5位元輸入輸出
18IO6輸入輸出第6位元輸入輸出
19IO7輸入輸出第7位元輸入輸出
20CE輸入低電壓時使用晶片
21A10輸入第10位元地址
22OE輸入低電壓為輸出狀態;高電壓為輸入狀態
23A11輸入第11位元地址
24A9輸入第9位元地址
25A8輸入第8位元地址
26A13輸入第13位元地址
27WE輸入當電壓由高到低時,將資料寫入到地址
28VCC接受 4.5V 至 5.5V 電源

線路原型

見下文
原型設計的線路已經很複雜

接駁線路

見下文
實際的線路更加複雜

見下文
主角一如以往,被線路包圍

見下文
雙列開閉掣,用來控制 地址位置 及 寫入或讀取模式

見下文
使用電阻器連接到 接地 及 A0, A1, A2, A3, OE ,當開啟開關掣前,讓訊號保持 低電壓
當開啟開閉掣後,接通電源,由於 100KΩ電阻器令訊號迴避電阻值較高的線路
因此當開啟開關掣令電源接通後,會接通駁到 A0, A1, A2, A3, OE 保持 高電壓

見下文
另一個雙列開關掣,用來控制 地址的資料

見下文
使用電阻器連接到 電源 及 IO引腳 ,當開啟開關掣前,讓訊號保持 高電壓
當開啟開閉掣後,接通接地,令線路接通,電源便不會到達 IO引腳 ,令 IO引腳保持 低電壓

寫入資料

見下文
接駁電源後,通常未寫入資料前,有些地址偶然會有些測試資料

見下文
見下文
將 OE引腳 接駁到高電壓,設定為寫左模式,所有 IO引腳 會改變為 輸入狀態

見下文
設定寫入資料的內容

見下文
按下按壓按鈕,將 WE引腳 從 高電壓 改變為 低電壓,便可以將資料寫入到地址

見下文
重置寫入資料的內容,並將 OE引腳 接駁回 低電壓
設定的內容便可以從選取的地址中讀取

讀取資料

見下文
將 AT28C256 設計成 七段顯示器解碼器

補充資料

原理圖示範
以前因為不懂接駁 按壓按鈕,差點將 Arduino UNO 燒毀
(可能之前 維修 Arduino Nano 燒毀的 S4二極體 就是這樣損壞)
這種接駁方法,當未按下 按壓按鈕 時,訊號線會保持 低電壓
但當按下 按壓按鈕 後,電源 及 接地 接通,在接近沒有 電阻 的情況下,便會短路

在下發現很多教學都會使用 10KΩ電阻器 連接,使用 按壓按鈕 或 開關按鈕 都不會發生問題

下拉電阻
原理圖示範
當要讓訊號引腳 保持低電壓時 使用 下拉電阻 (Pull-Down Resistor)
按下 按壓按鈕 後,由於 下拉電阻 的 電阻值較大,令電流向 訊號引腳

上拉電阻
原理圖示範
當要讓訊號引腳 保持高電壓時 使用 上拉電阻 (Pull-Up Resistor)
按下 按壓按鈕 後,由於 訊號引腳 的 電阻值較大,令電流向 接地
(通常微控制器的引腳在設定為輸入時,都會提供 10KΩ 的上拉電阻,避免電流過大導致引腳以至整粒晶片損壞)
由於 上拉電阻 已經將電流值降低 ,因此不會短路

雙列開關掣
見下文
由於原本的雙列開關掣引腳太短,無法穩定地在麵包板上
因此購買其他類型的雙列關開掣

見下文
見下文
最常見的雙列開關掣,大約港幣2元

見下文
見下文
晶片設計的雙列開關掣,大約港幣7元

見下文
見下文
同樣是晶片設計的雙列開關掣,開關掣凹陷到切換糟中,大約港幣4元(以8位計算)

見下文
雖然晶片設計的雙列開關掣最昂貴,但開關掣最穩固
在麵包板測試時,不容易因為用力推按開關掣導致雙列開關掣而郁動
但購買時要清楚確認雙列開關掣是通孔設計還是表面黏著設計
其實表面黏著設計的雙列開關掣只是將通孔設計的引腳剪短

總結

最初接駁線路時,由於在下想方便接駁,因此拿在手上接駁線路
可能某些線路接駁錯誤產生短路,接通電源後 AT28C256 的麵包板背面異常高溫,在下立即將電源線拔除
然後再觸摸 AT28C256 的表面,溫度比麵包板背面更熱,幸好麵包板未熔化
由於溫度太熱,唯有等待降溫再重新接駁線路才正常運作
雖然可能有機會燙傷,但如果想避免晶片因為接駁錯誤而損壞
通電前,先用手指放在晶片上;通電後,如果晶片表面溫度異常熱,便可以立即拔除電源

最初測試寫入資料時,錯誤地將 WE引腳 電壓變化由低至高 為 寫入,發現會清除原本的資料,新資料卻沒有寫入
最後重新閱讀資料表才發現是將 電壓變化由高至低 才是執行

使用 AT28C256 前,在下想使用 ATmega328P 製作 七段顯示器解碼器
但感覺有點殺雞用牛刀, ATmega328P 可以編寫更複雜的程式內容,而且還要配置 石英晶體振盪器,比較麻煩
雖然有 4511 及 4543 兩種 七段顯示器解碼器,但 4511 只對應 共陰七段顯示器 ,而 4543 只對應 共陽七段顯示器
而且兩者都只支援 BCD格式 ,不支援 十六進制,因此在下使用 AT28C256 自行製作七段顯示器解碼器
最後在下使用 AT28C256 便可以製作出支援 共陽及共陽的七段顯示器解碼器

參考資料