Upload
gogoprivateryan
View
73
Download
0
Embed Size (px)
Citation preview
數字管時鐘
大綱
• 介紹兩種數字管-‐VFD&Nixie tube • Project Zero – IN-‐14 Arduino Clock • Project One – IV-‐18 Clock • Project Two – IN-‐17 Arduino Clock • Alpha Project One – IN-‐9 Temperature display
What is Nixie tube?
• 比LED還早的時代
• 大多顯示數字符號
• 另外還有米字
hLp://www.oldcalculatormuseum.com/w-‐anita1011.html
原理
Nixie種類-蘇聯管
• 市場量最大 • 相對便宜 • 種類多 • 有軍用版本可以選
• 正視: • IN-‐17 • IN-‐12A/B • IN-‐15/A(符號)
• 側視: • IN-‐8 (IN-‐8-‐2) • IN-‐14 • IN-‐16 • IN-‐18 • IN-‐19(符號)
• 條狀: • IN-‐9 • IN-‐13
Nixie 怎麼用?
• 其實和LED差不多,只是電壓可能高達上百伏特 • 大致上分成兩種 1.直接驅動 a.撒一堆高壓電晶體 b.買有點貴的專用IC c.買沒有那麼貴的IC
• 2.掃描式 陽極: 1.高壓電晶體 2.高壓光耦合 陰極 a.一些些高壓電晶體 b.買有點貴的專用IC c.買沒有那麼貴的專用IC
高壓電晶體-陰極
• MPSA42
高壓電晶體-陽極 MPSA42&92
有點貴的專用IC
• 74741-‐Nixie Driver IC BCD to DEC è只需要4個Pin就能控制 • Ti製:sn74141 • è掏寶有看過有賣 (~30元) • 蘇聯製:K155ID1 or KM155ID1 è電壓較高(100V V.S 60V) è市場量大(Ebay) (~30~60元)價錢其實有點亂..
有點貴非常貴的專用IC
• HV5522 • 貴(~上百元) • Shi_ Register • PLCC-‐44, PQFP-‐44 • 最高可達300V • 難買
http://www.webalice.it/giussdp/nixie2/n2disp2_g.jpg
沒那麼貴的IC
• Nixie tube需要高壓電晶體的原因: • 關閉的時候會出現高壓 • 但是如果已經點亮了一個è電壓會降下來 è現在許多~50V左右的IC就足以使用 舉例: • ULN2003 ~50V
https://web.jfet.org/nixie-1/
最好再接個大電阻到高壓
限流電阻
• 需要查看真空管的 電流以及激發電壓
https://threeneurons.files.wordpress.com/2011/08/nixie-basics.gif
VFD
5V
HV
HV 0V
0V HV HV
0V
VFD怎麼用?
由於封裝的方式 使用上大都是掃描式的方式 控制閘: 1.高壓電晶體 2.專用IC 燈絲: 1.直流電 2.交流電
https://web.jfet.org/inGrid/
燈絲 • 交流電:
• 直流電:
Project Zero – IN-14 Clock
架構:
Arduino UNO
RTC
Port Expender
I2C
74141 X 4
16條Output
IN-‐14 X 4
12V
180V step-‐up
5V Step-‐down
軟體
抓RTC的時間
顯示時間
檢查Serial
Main Program
升壓模組 ⾼高壓⼩小⼼心ㄟ • NE555電路-‐效果不錯,但是記得散熱 • MC34063-‐效率比較高一些
http://talkingelectronics.com/projects/50%20-%20555%20Circuits/images/170vSupply.gif
https://threeneurons.files.wordpress.com/2011/08/mc34063_mk15cm1.gif
• MAX1771 • Arduino PWM Step-‐up
From PIC APP note
• hLps://learn.adafruit.com/ice-‐tube-‐clock-‐kit/design
• hLp://gmewitharduino.blogspot.tw/2013/10/high-‐voltage-‐power-‐sources-‐for-‐tubes.html
現成模組
• NE555我的建議是自己做一個 • 但是如果有體積/電流的需求,去買個升壓模組就
好
• 台灣: hLp://nixietubeclock.blogspot.tw/2014/07/np10-‐dc-‐dc-‐nixie-‐tube-‐part4.html
• hLp://nixietubeclock.blogspot.tw/2013/12/dc-‐dc-‐nixie-‐tube-‐part1.html
• 掏寶 hLp://tw.taobao.com/item/22046131143.htm?fromSite=main&spm=a1z09.2.9.78.4Bok9u&_u=e1f5oh4m7ee1
問題
• 外殼悲劇 • PCB沒有派上非常大的用場 • 真空管難固定 • 沒必要使用I2C port expender • 各種悲劇的走線 • 連個電源接頭都沒固定…..
• DS3231真的粉棒 1.一年下來完全沒有校時只誤差不到5s 2.內建溫控震盪器超棒的
Project 2 – IN-17 Arduino
Display架構:
Amny24
NPN-‐PNP Switch
IN-‐17 X 4
180V
74141 X 1
I2C
5V
Main board架構: Ver 1
Arduino 5V
溫溼度感應器
RTC
藍芽模組
3.3V
FM+AMP
電平轉換
電平轉換
I2C 5V
UART
鋰電池 180V升壓
5V升壓
3.3V LDO
Amny
5V
遇到的問題-電源
• 為了讀取電池電壓,把ADC接上電池 è關閉電池之後,電流從ADC倒灌到Arduino
• 為了避免USB電源和5V升壓撞在一起 è加了開關選擇5V的來源è操作上複雜 • 必須要接上鋰電池才能運作
遇到的問題-Layout
• 180V升壓模組與5V升壓模組是從背後接上的 è增加非常多厚度 • 鋰電池的插座基本上沒辦法用 • Micro USB插座使用SMD版 è一扯就掉 • nRF24l01的大小Lay錯了 • 耳機孔好難看.. • 藍芽模組造成PCB板突出一塊 • 因為電流倒灌,鋰電池關不掉
遇到的問題-電源
• 為了讀取電池電壓,把ADC接上電池 è取消這功能
• 為了避免USB電源和5V升壓撞在一起 è增加自動控制的電路
遇到的問題-Layout
• 180V升壓模組與5V升壓模組是從背後接上的 • è切一塊PCB空間出來用 • 鋰電池的插座基本上沒辦法用è改到邊邊去 • Micro USB插座使用SMD版è換掉 • nRF24l01的大小Lay錯了è沒空間了,拿掉 • 耳機孔好難看è沒空間了,拿掉 • 藍芽模組造成PCB板突出一塊è沒空間了,拿掉 • 因為電流倒灌,鋰電池關不掉è以解決
改良
• 增加USB to UART IC • 把5V升壓電路做上去 • Charge pump • Step-‐up • 加震動馬達控制器 • 加另一個溫濕度計 • DS3231換成SSOP16
Main board架構: Ver 2
Arduino 3.3V
溫溼度感應器
RTC
3.3V
FM+AMP
I2C
Amny
電平轉換
5V
Power
鋰電池
180V升壓
3.3V LDO
5V升壓
USB
Power Path
Control
5V
Power Path
Control
FM出問題惹
• AMP大小太大,塞不太下 è自己做個小的版本 • 天線也太大,而且線全部擠在殼內容易出狀況 èSMD天線(First Try) • SMD天線接收度不佳 è加個LNA做放大
FM出問題惹
• 結果耗電量爆增60mA • 鋰電池:200mA • 其他裝置加起來:20mA
è移除FM功能
遇到的問題
• 鋰電池接頭以及震動馬達在一排1.27”的排插 • è靠的超近…..è熱熔膠固定,外加鋰電池保護板 • ISP很佔空間 • 溫度感應器被加熱惹 • 開關的塑膠一直被我弄斷 • 有些地方離螺絲孔太近,會擋到螺絲 • 2.54”排插高度和大小都太大了 • CR1220 有點占空間 • 沒有無線裝置…(è外掛模組)
遇到的問題
• 要不是74141,整個板子用3.3V就好..
充電座
• 無線充電的問題:市面上的模組線圈大小太大(Qi的模組),塞不下外殼
• 用接觸充電的方式,利用第一次Layout的PCB當作彈簧針的底座
軟體:Simple loop
• Interupt route: • RTC觸發Interrupt打開Flag
• Main Loop: • 檢查按鈕+Flag è進入不同的模式
• 1.計時 • 2.特效
• A.0~9 • B.波浪 • C.亂數
• 3.倒數計時 • 4.溫溼度計
Scanning Nixie Tube
• Nixie Tube 必須先關掉陽極è切換陰極è再開陽極
• Nixie Tube 的電容特性會讓他持續發亮一段時間 如果這時候切換陰極,會點亮另外一個數字 • 而且陽極關閉等Nixie Tube沒電,通常需要50us以
上,不然會出現Ghosgng
Ghosting
http://www.markbowers.org/nixie-clock-2012/
Attiny:
• 專職掃描Nixie Tube • 讀I2C進來的訊號,四位數字+亮度
Nixie Tube Cathode Poisoning
http://www.tube-tester.com/sites/nixie/different/cathode%20poisoning/cathode-poisoning.htm
• 原因:長期沒使用導致陰極有沉澱物 • 解決辦法:拿大電流通電一段時間(兩到十倍最高
電流,數分鐘到小時)
Nixie Clock因為用不到的數字有點多,長期使用下來會造成沒再使用的數字形成Cathode Poisoning • 預防:定時把每個數字都跑過一輪 • Project Zero的做法是è30分跑亂數,整點跑循序.
Time Sync – Python
• 電腦端把時間組成CSV格式的字串用Serial送出
• Arduino端用ParseInt從秒數讀到年 • 另外再將資料回傳確認
Project 3 – IV-18 Clock Ver 1 買到的套件 為Lunchpad設計的Shield
架構:
MSP430
MAX6921 IO
IV-‐18
20條Output
5V
40V step-‐up
缺點
• 因為用的是MSP430外掛32.768kHz震盪器計時 è沒有斷電計時 • Lunchpad沒有5V輸出,需要另外從板子上焊接出
來 • 按鈕好難用
Ver 2 移動到Arduino
架構:
Arduino
RTC
IO
IV-‐18
20條Output
5V
40V step-‐up
MAX6921
I2C
軟體
抓RTC的時間
顯示時間
檢查Serial
Main Program
遇到的問題
• 其實沒啥問題,就是板子Lay出來的有點難看 (回頭看的感覺) • CR2032占的空間太大 • 功能有點少 • 太亮
遇到的問題-軟體
• 真空管必須要用掃描式的方式顯示 è只要Code當中有任何一個Delay或時間較長的程序,都會造成亮度的下降(因為掃描速度變慢)
• 舉例: • 校正時間 • DS18B20讀取 • Serial.print
改裝:
• 添加一個光敏電阻,去控制時鐘的開關 • 把DS1307的震盪器換成DS32KHZ的TXCO
Ver 3
• 原本想Layout一個新的Shield • 但是,Arduino Shield大小會超過5cm*5cm • PCB廠商會收另外一個級距的費用 • 而且Shield的零件通通換成SMD之後覺得有點空
虛
è乾脆全部都自己來,控制在5x5以內
原本改良的Shield
Ver 3
Main Board 架構:
Arduino Leonardo
RTC
I2C
Buzzer
USB 3.3V LDO
To Display board
Linkit Connect module
UART
光敏電阻
SD卡/Flash
SPI
軟體會遇到的問題
• Arduino如果正在處裡Wifi,會沒有辦法去刷新時間和控制亮度
èInterrupt
軟體
• RTC Interrupt èUpdate Time & Check Alarm • Timer Interrupt èUpdate Lux • Pinchange Interrupt èClose Buzzer
• Main Loop èSync with Internet
軟體 啟動Interrupt
連網路
抓RTC的時間(轉Unix gme)
網路校時
抓時區
Mediatek Cloud Sandbox Sync
讀光敏電阻
調整PWM
Unix gme ++
計算年月日,時分秒
把資料傳到Display Board
顯示年月日,時分秒,與動畫
Main Program
Timer Interrupt (10Hz)
RTC Interrupt (1Hz)
關Buzzer
Pinchange Interrupt
Wifi: Linkit Connect module
AT cmd firmeware
• hLps://github.com/will127534/7681-‐ATcmd
Software: Arduino Library
• LC7681Wifi wifi(&Serial1); • Serial1.begin(115200); • wifi.connectAP(ssid, key); • IPAddress serverIp = wifi.nslookup(server); • wifi.connect(serverIp, port); • wifi.print(buf,sizeof(buf));
• wifi.process(callback);
Callback
• 會回傳發生的事件,以及收到的資料+長度
• void callback(int event, const uint8_t* data, int dataLen)
EVENT_NONE EVENT_DATA_RECEIVED EVENT_SOCKET_DISCONNECT EVENT_MAX
Hardware: UART & 3.3V
NTP time sync
• 準備好一個48byte的矩陣,開頭是0x1b,其他都是0 • 用UDP連線到Time Server之後丟出去 • 收到的資料也是48byte,其中第41~44是Timestamp 的4byte 資料
• 0x1b=0001 1011
• LI = 00 èno warning • VN=011 èVersion 3 • Mode = 011 èClient
• Timestamp :從1900年1月1日0點開始計算的秒數 • Unix gme:從1970年1月1日0點開始計算的秒數
• From Unix gme to Dategme
計算方式:用扣除的 From Adafruit è
Mediatek Cloud Sandbox
Cloud
• 畢竟都加了Wifi 模組了,還用按鈕有點累 • 利用MCS顯示環境亮度 • 利用MCS去控制時鐘的各個設定
• 亮度 • 鬧鐘 • 顯示Style
MCS Code
• wifi.print("GET /mcs/v2/devices/{deviceID}/datachannels/"); • wifi.print({channelID}); • wifi.println("/datapoints.csv HTTP/1.1"); • wifi.println("Host: api.mediatek.com"); • wifi.println("deviceKey: {deviceKey}"); • wifi.println("Connecgon: close\n");
MCS Code
• wifi.println("POST /mcs/v2/devices/{deviceID}/datapoints.csv HTTP/1.1");
• wifi.println("Host: api.mediatek.com"); • wifi.println("deviceKey: {deviceKey}"); • wifi.print("Content-‐Length: "); • wifi.println({data Length}); • wifi.println("Content-‐Type: text/csv"); • wifi.println("Connecgon: close\n"); • int _status = wifi.println(data); • return _status;
Time zone
• ip-‐api.com • 使用方式:Get hLp://ip-‐api.com/csv/ • success,Taiwan,TW,,Taipei,Taipei,,25.0392,121.525,Asia/Taipei,"Chunghwa Telecom Co.","Chunghwa Telecom","AS17421 Long Distance & Mobile Business Group",223.136.78.146
• 經度/15 = 時區
遇到的問題-軟體(1) • Arduino 內建的I2C library有兩件事情會發生 • 1.會當掉 • 2.不能在Interrupt內跑
解決方法:換Library
• hLp://www.dsscircuits.com/argcles/arduino-‐i2c-‐master-‐library
• Removed the use of interrupts from the library so all TWI state changes are polled
• 然後順便把原本的I2C lib 加了個Timeout
遇到的問題-軟體(2)
• RTC跑久了會卡死,用邏輯分析儀看的話,會發現Arduino端是正常的,但是RTC沒有回應Address
è時間的來源改成Arduino自己算,利用RTC Interrupt累加秒數 算是一種鋤草不除根的解決方式,目前這問題依然存在
遇到的問題-軟體(3)
• Code Size大爆炸
• SD卡/Flash的Code放不下è移除功能
IV-18 Display Board Ver1
Simple Breakout
IV-18 Display Board Ver2
• 增加兩種MAX6921 以及 Amny做控制 • 但是電源需要外接 • 另外嘗試MC34063以外的Step-‐up
• LMR64010 • UP to 40V
IV-18 Display Board Ver3
• TSSOP的MAX6921 以及 Amny做控制 • 升壓電路整併 • 增加了RTC的空位 • (Opgonal)使用MOS Dirver 做到偽AC燈絲
IV-18 Display Board Ver3
IV-18 Display Board Ver3
IV-18 Display Board Ver4
• TSSOP封裝的MAX6291又貴又難買 è換成HV5812,但是因為體積變大,移除RTC與Mos Dirver
IV-18 Display Board Ver4
IV-18 Display Board Ver4
IV-18 Display Board Ver5 - alpha • Charge pump! • 因為這可以順便供應AC給燈絲
• 還沒送洗
Alpha Project One
IN-9 Bargraph Nixie Tube
• 利用電流量控制長度 • 使用方式:OPA+NPN做恆流源
硬體:
• LM34 è1度C = 10mV • 放大十一倍之後送給恆流源控制
遇到的問題:
• LM34被恆流源的NPN給加熱了 è用線接出來
IN-9 音量顯示器
• 一樣是放大電壓後送 給恆流源控制