發表文章

NUC1263 LLSIClock開發筆記:電路設計篇、億光ARGB七段顯示器

圖片
閱讀過上篇文章 開箱實作NUC1263 MCU!探索新唐獨家LLSI ARGB LED控制介面! 的讀者們,有沒有猜到我要做什麼了嗎? 是的,又要做時鐘啦! 先來公布畫好的電路圖和電路板 會陸續把相關的檔案更新到GitHub中: https://github.com/danchouzhou/LLSIClock NUC1263核心電路 這次訂購的晶片是封裝為LQFP48的NUC1263LD4CE,電路板空間不多就沒有把所有IO通通拉出來了,不過有把一些重要的IO集中在14-pin的SMT雙排排針J1上面,其中包含PA.0~PA.3,能同時支援I3C、I2C、SPI、UART、PWM,且能從VDDIO1電源接腳輸入IO電壓;以及主要能拿來當ADC、DAC輸入輸出的PB.12~PB.15,讓電路能有更彈性的擴充能力,未來要拿去接Wi-Fi模組、GPS、各式各樣的感測器就都不是問題! NUC1263LD4CE有內建48 MHz的RC震盪器,而且±1%的精確度已能滿足USB 2.0 Full-Speed (12Mbps)的需求,意思就是最小系統只要晶片接上電源就能運作! 不過為求單機計時精準,還是先把和003Clock同一顆的有源震盪器給畫上去了,畢竟±1%的話積少成多,一天86400秒最多可以落差到864秒 (約14分鐘)。當然,誤差也可以用GPS時間、Wi-Fi NTP或USB電腦連線來校正時間。 當初下訂時還在更小QFN33、QFN48掙扎著,不過看到QFN都沒有USB才作罷。不過雖然QFN封裝的NUC1263沒有USB,取而代之的是DDR5 SPD Hub (SPD5),應用在DRAM模組可以直接將SPD接到NUC1263,就不用額外一顆SPD晶片,內建I3C和ARGB LED介面LLSI,簡直就是電競記憶體的完美方案。 已經可以理解NUC1263是為電腦周邊推出的MCU,QFP封裝用在需要USB介面的鍵盤、滑鼠、耳麥等;QFN封裝適合用在DDR5記憶體模組。 題外話,這兩天還發現新唐M2A23同樣也有LLSI,同樣也是5V Cortex-M23,且支援3組CAN FD,工作溫度可以耐到125°C,看來是針對車用市場所推出的MCU。 ARGB七段顯示器 好了不瞞了,同學塞給我的神奇產品是他們新開發的ARGB七段顯示器,億光ELSS-4X6RGBWA/T2/S290-C...

開箱實作NUC1263 MCU!探索新唐獨家LLSI ARGB LED控制介面!

圖片
連假前看到新唐在論壇介紹NUC1263這顆MCU,除了CPU是ARMv8的Cortex-M23之外,還有一個新唐專利硬體周邊LLSI,加上億光同學塞了他們新開發的神奇產品給我,腦袋裡面馬上冒出漂亮的應用, 於是就上新唐線上商店下單一片NuMaker-NUC1263SD開發板和5顆晶片 ,沒想到隔天就到了~  新唐NUC1263系列產品帶給您炫彩的ARGB燈效控制 -LLSI介面簡易設計,方便好用- 不過作品還在設計當中,敬請期待。先來用現成的Adafruit NeoPixel Ring試玩一下NUC1263這顆MCU和它的LLSI吧!一樣會在GitHub和留言區提供完整測試程式碼喔!(看到專案名稱,知道我又要做什麼了吧XD) https://github.com/danchouzhou/LLSIClock/blob/main/firmware/LLSI_RGBW/main.c 先幫讀者整理一下這顆NUC1263重點特色 Arm Cortex-M23 72 MHz,ARMv8-M架構的CPU 內建64 KB Flash和20 KB SRAM 工作電壓2.5 V ~ 5.5 V 除了常見的UART、SPI、I2C、ADC、PWM之外,NUC1263還有I3C、USB和4個DAC,其中I3C還可以從獨立VDDIO電源接腳,輸入I3C匯流排上的電壓,讓I3C不用外接level shifter,最低就能支援0.95 V的電壓準位。不過最大的特色還是全新推出的 專利獨家功能LLSI。 第一次聽到LLSI? LLSI全稱是LED Light Strip Interface,其實就是專門為可定址LED (ARGB LED, addressable RGB LED) 設計的控制介面,常見的型號例如WS2812B、SK6812,或者是Adafruit推出的NeoPixel系列,這種介面的好處就是只要一條信號線從第一顆LED的DIN輸入,第一顆的DOUT串到第二顆的DIN,以此類推就可以控制整串的全彩LED。 由於只有一條信號線,ARGB LED的控制介面是利用信號high low時長不同,來代表資料的0和1。新唐將這種控制時序設計成硬體,取了酷酷的名字LLSI並整合進MCU裡面,成為首度推出有硬體控制ARGB LED能力的MCU公司,這也是新唐MCU才有的獨家功能。下圖節錄自N...

解決微軟注音輸入法讓KiCad用一半卡住無法操作的問題

圖片
說來從KiCad也用了快十年,從5開始用起,去年升級到6,最近才跳過7直接升級到8。 KiCad 6和8都有遇到一個共同問題,就是常常用一半卡住無法操作,就連想要按右上角的叉叉重開都按不下去,得要在工作管理員中按兩次「結束工作」才能關掉再重新開啟。很奇怪,KiCad沒有當掉,就真的單純無法操作而已。這個情形通常是操作鍵盤按一些KiCad快捷鍵時會發生,原本還以為是我裝了什麼軟體,導致了相容性的問題,不過好幾台電腦無論新舊都有相同情形,感覺又不太像。 後來查了一下,發現有人回報相同情形的bug,且說是和輸入法有關。聯想到要操作鍵盤才發生,基本上已經鎖定就是輸入法的相容性問題。再問了一下朋友,他們也是有一樣的情形,看來不是我自己的問題了。 https://gitlab.com/kicad/code/kicad/-/issues/9882 https://forum.kicad.info/t/kicad-7-and-8-windows-10-freezing-and-window-becomes-un-selectable/50279 https://forum.kicad.info/t/kicad-freezing-and-ime-bug-workaround/56583 有人說在Windows 11微軟已經修正好了,但實測結果仍然是會卡住不動。 微軟注音舊版模式 首先測過微軟注音的相容模式「使用舊版的微軟注音」雖然可以解決,但是那個選字實在太差勁了用不下去,不推薦使用。 純英文輸入法 在KiCad中將輸入法切換成純英文 [英文 (美國)],就沒有微軟注音相容性的問題,不過去瀏覽器、LINE打中文以後,回到KiCad常常會忘記切回英文,然後就又卡住了。 讓我針對每個應用程式視窗使用不同的輸入法 所以除了要新增一個[英文 (美國)]之外,還要勾選 「讓我針對每個應用程式視窗使用不同的輸入法」 ,這樣去別的軟體切成注音輸入法,回到KiCad就會自動跳回英文輸入法。我自己是將預設輸入法設成[英文 (美國)],要用中文時才切換成微軟注音。 Windows 10 設定 > 時間與語言 > 語言 > 鍵盤 Windows 11 設定 > 時間與語言 > 輸入 > 進階鍵盤設定

回到那個還是PMOS製程、IC的電源通8V~29V直接用的年代,這個VFD時鐘竟然用了十幾年才完美!

圖片
十幾年前功力不怎麼好,不知道怎麼逆向拆機的台灣製時鐘模組來用,於是單獨把VFD拆下來,用AT89S51計時來做成時鐘。 由於這支日本製造的NEC FIP5E15 VFD設計是靜態驅動,每個位數每一段都要一條線,不像之前介紹過的多工掃描只要幾條線就能控制。除了要用MC34063升壓到15V,還要24顆PNP電晶體、48顆電阻,才能將8051的輸出信號轉換成高電壓驅動VFD。 不過這幾年來的冬天,只要溫度低一點,時不時就停擺不走了;到了今年冬天,當機的頻率甚至是一天一次,實在受不了,才決定該卯起來動工。 其實多年前就趁著下班空檔把時鐘模組的接線、使用方式研究出來,就一直想做一個「原汁原味」的VFD時鐘,只是忙碌加上外殼的部分沒靈感,就一直被我閒置在角落。 模組使用的時鐘IC是國半MM5316N,需要AC12V與AC3V兩組電源,分別供應IC電源與燈絲電源,MM5316N不用石英震盪器,而是依靠市電的60 Hz當成時基,一定要交流電。我稍微設計了一下,讓它只要用一組現在的電料行就能買得的「6V-0V-6V中心抽頭變壓器」就可以運作。(有沒有人發現我畫的電路有什麼亮點呢?) 趁著假期把買來的萬用盒孔鑽一鑽,特別挑了這個面板可以抽起來更換的萬用盒,把淘汰的手機殼透明背板裁切以後換上去(垃圾留著終於用上了XD),當成鏡片來用。從晚上11點,搞到天亮7點,一氣呵成! MM5316N調時間的方式,有兩條線分別是慢調和快調的功能,與電源相接分別會以2 Hz和60 Hz的速度把分針往上加,於是挑了一個放開會自動回彈的3P3段搖頭開關,兩個方向分別控制慢調和快調。 VFD那種歷久彌新、清晰明亮的實用性,家人一直很依賴它來看時間,加上那個矛盾的復古科技感,實在不會想把它換掉。 8051版本到底壞在哪? 原本就打算新的先上,舊拿下來再慢慢檢測,最後發現8051版本的時鐘根本沒壞,壞的是電源adapter裡面輸出的電容掛了,尤其冬天化學物質活性下降,電容量變更低,漣波變大才導致8051當機XD

Timer auto-reload產生中斷來精確計時,以函式指標(function pointer)切換中斷服務程式的功能

圖片
我們上個月在兩篇文章中提過,使用高階語言開發MCU韌體,若要精確計時就要靠MCU內的Timer(計時器)來達成,因為編譯器能保證程式邏輯正確,但不能保證執行時間、效率。 回顧一下這兩篇文章: 消除開關彈跳現象(de-bounce)、Timer delay、功能選單,以N76S003為例 製作隔空感應的引擎轉速表 - N76S003計時器輸入捕捉的應用(Timer input capture) 這是003Clock系列的文章,前幾篇沒跟上的記得回追一下喔! (一) 製作新唐N76E003/N76S003白光LED電子時鐘套件 (二) 輕鬆上手:以VS Code, SDCC, Git建立新唐8051編譯環境 (三)新唐N76E003/N76S003白光LED電子時鐘套件韌體技巧說明 Part 1: 消除開關彈跳現象(de-bounce)、Timer delay、功能選單 Part 2: Timer auto-reload產生中斷來精確計時,以函式指標(function pointer)切換中斷服務程式的功能 Part 3:以N76S003的SPI控制PT6961白光LED七段顯示器 (四)實戰技巧分享:新唐ISP,不用燒錄器也能更新韌體 今天的主題是要介紹003Clock是怎麼計時的。一樣,完整程式碼請見留言區或GitHub source code。 https://github.com/danchouzhou/003Clock/blob/4cb1b697c0290f18e6e634b82753c02781767a5e/firmware/003Clock/main.c 8051是怎麼執行程式的? 幾乎所有的CPU都會由程式計數器(下稱PC, Program Counter)來控制程式的進程,這個PC可以把它視為一個「指針」指著程式記憶體(Code Memory),告訴CPU現在程式執行到哪裡。而程式記憶體,就是記載著我們燒編好燒進去的機器碼。 同樣地8051的CPU開機時PC會從0x0000開始往上加,逐一讀取出程式記憶體中的內容出來執行。(但是也有一些變種型號因為特殊需要,預設有offset不從0開始) 中斷有什麼好處? MCU擁有相當多的硬體周邊功能,程式執行的過程也時常是接收某些硬體周邊的資訊,運算過後再經由周邊傳出,而這些硬體周邊的運作速度會比CPU的執行速度慢...

不用燒錄器也能更新韌體 - In-System Programming (ISP)、NuMicro ISP Programming Tool

圖片
上週將003Clock做成 隔空感應的引擎轉速表 ,引起不少討論,陸續接到一些讀者詢問:在GitHub上看見 轉速表的原始碼 ,看了 之前的文章也學會了編譯程式 ,但是沒有燒錄器要怎麼將韌體燒進003Clock? 這是003Clock系列的第三篇文章,前兩篇沒跟上的記得回追一下喔! (一) 製作新唐N76E003/N76S003白光LED電子時鐘套件 (二) 以VS Code, SDCC, Git建立新唐8051編譯環境 (三)新唐N76E003/N76S003白光LED電子時鐘套件韌體技巧說明 Part 1: 消除開關彈跳現象(de-bounce)、Timer delay、功能選單,以新唐N76S003為例 Part 2:Timer auto-reload產生中斷來精確計時,以函式指標(unction pointer)切換中斷服務程式的功能 Part 3:以N76S003的SPI控制PT6961白光LED七段顯示器 (四) 不用燒錄器也能更新韌體 - In-System Programming (ISP)、NuMicro ISP Programming Tool 燒錄韌體的方式 買一個Nu-Link-PRO,建議有在用新唐MCU做專案的讀者可以備一支,真的很好用。在 新唐的線上商店Nuvoton Direct 購買,原廠直營,貨源有保障。(現在註冊 NuForum 論壇帳號還有9折的折扣) 將新唐開發板內建的Nu-Link-Me拿來用,手邊如果已經有新唐開發板,請參考看看這篇文章:用 新唐開發板燒錄其它晶片 。 以上兩個都沒有,難道真的要花錢買嗎?別擔心,早就為你們想到了!筆者在包裝時已經在N76S003 / N76E003的LDROM中為大家燒錄好ISP程式了,只需隨手可得的USB to UART(USB to Serial或俗稱的USB to TTL、FTDI、PL2303之類的),搭配新唐原廠工具NuMicro ISP Programming Tool,就可以燒錄其它韌體。 什麼是ISP? ISP的全名叫做” In-System Programming”,直接翻的話就是「在系統燒錄」。這邊的系統不外乎是指嵌入式系統,構成嵌入式系統的元素,包含硬體、周邊電路、韌體、通訊界面、軟體等。ISP可以在不將晶片從系統中移除的情況下,來執行韌體燒錄、更新。 ISP的好處...

製作隔空感應的引擎轉速表 - 新唐N76S003計時器輸入捕捉的應用(Timer input capture)

圖片
先前說過, 用新唐1T 8051 N76S003製作的003Clock套件 不只是時鐘而已,設計時將所有IO接腳都拉出來了,因此它還能夠做其它有趣的應用! 這次分享一個應用實例是「隔空感應的引擎轉速表」。老樣子,會在留言區和GitHub提供完整程式碼。 https://github.com/danchouzhou/003Clock/blob/f8fa5d909b5bdadf008ea9de9164a25ca33d9015/firmware/Tachometer/main.c 引擎轉速信號 轉速表的基本原理都是測量點火之間的週期或頻率,使用類比電路、數位電路或MCU中的程式換算出轉速。那麼點火和引擎轉速有什麼關聯呢?我們看一下 維基百科可以得知,當今主流的四行程引擎運作時,720度中分為 進氣、壓縮、爆炸、排氣 共四個行程 ,其中爆炸行程就是靠與高壓線圈相連接的火星塞產生的火花,點燃在燃燒室中的壓縮混合氣,讓氣體溫度上升,膨脹時讓引擎產生動力。而高壓線圈可以在收到點火信號時,輸出數十KV讓火星塞產生火花。所以可以得知,點火與引擎轉速呈現線性關係,經過換算後即可得知引擎轉速。取得轉速信號最直接的方式當然就是把高壓線圈的點火信號拉出來用。 高壓線圈產生的EMI可以當成是轉速信號? 一般來說,雜訊在電路裡是我們不樂見的干擾源,但我卻將高壓線圈產生的電磁波當成是轉速信號。下圖是發動之後,將示波器探棒靠近引擎量到的波形,信號可是非常清晰的,注意喔,在這裡探棒並未直接與車輛電路相連,是隔空就能測得到信號。經過實際測試,將微控制器的IO用20公分左右的線接出來,並設定成pull-up模式(這可以避免輕微的雜訊誤觸發),接條線出來當天線靠近引擎,IO準位也會隨之跳動,完全不用額外的電路或感測器。如此以來不用改裝原車線路,就能夠「隔空」得到轉速信號。 在這邊將示波器時基設為50 ms/DIV、探棒設為1:1、垂直設為10 V/DIV,trigger level設成-20 V,可以看見trigger頻率是13.8 Hz,大約就是摩托車引擎怠速1600 RPM點火的頻率(後面會再講解頻率如何換算成轉速)。 如何得到兩次點火的間隔? 還記得 之前介紹過的計時器吧 !要得到兩次點火的間隔,可以開一個Timer並將IO設定成邊緣觸發的外部中斷,每次中斷發生時把Timer計數值讀取出來,再把Tim...

消除開關彈跳現象(de-bounce)、Timer delay、功能選單,以新唐N76S003為例

圖片
新年快樂,這是003Clock系列的第三篇文章,前兩篇沒跟上的記得回追一下喔! (一) 製作新唐N76E003/N76S003白光LED電子時鐘套件 (二) 以VS Code, SDCC, Git建立新唐8051編譯環境 (三)新唐N76E003/N76S003白光LED電子時鐘套件韌體技巧說明 Part 1: 消除開關彈跳現象(de-bounce)、Timer delay、功能選單,以新唐N76S003為例 Part 2:Timer auto-reload產生中斷來精確計時,以函式指標(unction pointer)切換中斷服務程式的功能 Part 3:以N76S003的SPI控制PT6961白光LED七段顯示器 (四)免用燒錄器更新韌體:NuMicro ISP Programming Tool 接下來要介紹003Clock的韌體技巧,文章寫到一半發現內容實在太多了,還是將它分為三篇來說明。完整程式碼請見GitHub source code。 https://github.com/danchouzhou/003Clock/blob/4cb1b697c0290f18e6e634b82753c02781767a5e/firmware/003Clock/main.c 開關除彈跳(de-bounce) 彈跳現象 理想的觸摸開關(Tact switch)應該是按下去形成導通,放開恢復為斷路。但實際上因為由機械構造組成的開關,在切換過程中會有一段時間像是彈簧一樣,接點反覆地開開合合,產生短暫的不穩定的情形,稱之為「彈跳現象」。這段不穩定的時間一般都會在50 ms以內結束。 如下圖所示,雖然我們只按了一下開關,但是卻測量到數個脈波。以前實習課拿開關當成計數器時脈的讀者一定很有經驗, 這種信號送進計數器,按一下肯定不是乖乖加1而已。 在韌體中單純在一個迴圈不斷用if確認開關的邏輯電位,也會讀到數個脈波,誤認按了好幾次,一定會降低使用者體驗的,因此開關除彈跳在設計上是必要的。   硬體除彈跳 開關除彈跳有人會從硬體著手, 在開關兩端直接並聯上一顆電容 ,直接與上拉電阻形成一個RC低通濾波器,這個方法很適合用在一些純硬體的電路上。 軟體除彈跳 微控制器其中一個有趣的地方就是,很多電路上遇到的問題,原先要用硬體解決的事情,運用微控制器則可以用軟體去解決。像我自己就喜歡用軟體除...