發表文章

目前顯示的是 2月, 2025的文章

不用燒錄器也能更新韌體 - 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低通濾波器,這個方法很適合用在一些純硬體的電路上。 軟體除彈跳 微控制器其中一個有趣的地方就是,很多電路上遇到的問題,原先要用硬體解決的事情,運用微控制器則可以用軟體去解決。像我自己就喜歡用軟體除...