發表文章

目前顯示的是 2018的文章

NXP LPC111x I2C EEPROM存取程式

以前在學習Cortex-M0的時候, 曾找了NXP的入門晶片LPC1114來玩, 當時就覺得學習的資源不多, 是有一些不錯的書或文件, 只是距離實用仍有些遠! 例如, 我在NXP的網站上, 就看到有人在問如何寫I2C存取的程式, 他說弄到火很大還搞不定! 其實我也有相同的困擾, 只是多了一些耐心, 慢慢的找資料, 看文件 有了一些心得後, 寫了文章投稿: "動手玩 LPC11xx I2C", 電子情報雜誌, 2017/2  這篇文章裡, 我說明如何寫出在NXP LPC111x 平台上存取I2C EEPROM的程式 當時是採用ARM-MDK Keil這個開發環境來寫的. 源碼可以在此download. LPC111x_I2C_EEPROM sample code (Keil) 最近在嘗試其他peripheral的存取程式時, 又要用到i2c, 就把這個程式又拿出來用, 想到之前玩過GNU GCC ARM Embedded這個工具, 我們其實不一定需要使用Keil. 畢竟這是個需要付費的工具! 所以就花了一點時間, 把Keil上的程式, 移植到GNU GCC的環境去, 放在: lpc1114_duignan_i2c_eeprom(GNU GCC) 用起來, GNU GCC其實也不錯啦! 當然, Keil是方便許多, 只是用GCC會需要自己多做一些事, 但也會因此多學到一些東西! 對了, 這兩個專案, 都是在Windows平台上開發!

Arduino 4位數7段LED數字顯示器

最近做了幾個專案都使用Arduino, 有位同仁也對Arduino產生了學習的興趣, 他自己嘗試用74HC595移位器可以驅動一位數7段LED, 但在4位數的就是動不了, 要我幫忙看一下。 所以整理這幾日看的資料: 1. 7段LED的原理: 以下這個連結的文章, 寫得不錯! 介紹1位數7段LED原理   (1) 原來是用7個LED燈, 加上小數點就是8個LED燈來組成數字   (2) 有分共陽(common anode), 共陰(common cathode)兩種作法   (3) 所以會用掉Arduino的8個數位輸出 2. 4位數7段的LED: 這篇介紹4位數的部份,  4位數7段LED(common anode)   (1) 說明4位數的作法是多工的方式, 和原本一位數的作法一樣, 也是要8個數位輸出   (2) 但是只再多使用D1, D2, D3, D4(4位數7段LED的腳位)共四個腳位, 用來指示要將8個segment的輸出送到那一個位數。   (3) 使用電晶體(NPN)來加大輸出的電流能力, up side switch (sourcing current)   (4) 會用掉Arduino的所有數位輸出腳位 這篇的作法有點不一樣, (common cathode) http://www.electroschematics.com/10512/arduino-4-digit-7-segment-led-display/   (1) 一樣加入4個電晶體(NPN), 但是做成down side switch(sinking current)   (2) 程式寫法幾乎和前一篇的相同, showDigit()裡的作法改成common cathode 3. 減少使用Arduino數位輸出的方法, 使用74HC595 這篇文章有詳細的說明:  Arduino_74HC595   (1) 595可以讓Arduino只使用3支腳就可以控制8個LED燈   (2) 還可以用串2個595的方式, 增加到可以控制16個LED燈 4. Arduino內建支援595的使用函數 這篇文章有介紹:  https://www.arduino.cc/reference/en/language/functions/advanced

Macbook NVRAM Reset 解決問題經驗

最近我的Mac Book碰到幾個狀況,後來都是用NVRAM Reset 解決的: 1 公司的Macbook Pro 2013,收到Apple的軟體更新通知,做了更新後,開機開不起來,或者開機開超級久。 2 家裡的MacBook 2008, 系統和看網頁變慢, 看系統活動, 發現system cpu usage佔了50%, 再細查發現這是kernel_task在使用, 但看不出是那一支特定的程式在用。網路上有人說, 是過熱或者硬體有問題等, 也有人說NVRAM Reset可能有幫助。用電扇吹了很久, 電腦都冷冰冰了, 還是一樣, 結果NVRAM Reset後就正常。以前開機開很久的問題也解決了。 NVRAM Reset 方法: https://support.apple.com/zh-tw/HT204063

用Atmega 328p 自組Arduino上傳草稿碼時, 如何自動Reset?

圖片
Arduino開發板玩了一陣子之後, 會想要自己組一個開發板。 參考做法:  https://www.arduino.cc/en/Main/Standalone 這樣的好處是: 1. 省錢   開發板比較貴, ATMega328P晶片比較便宜 2. 省電   要做低粍電專案, 開發板粍電量太高 3. 好玩 但是寫完草稿碼後, 要上傳時; 以前看葉大的書, 叫我們自己找正確的時點去Reset晶片。 手動Reset的日子, 我也過了不少, 但有時太常改程式, 又不太抓得到時點, 會一直上傳失敗。 所以就想人家開發板為什麼不用手動Reset, 可以自動Reset? 發現其實只是將Serial-to-USB的RTS接腳, 接一個100nF的電容, 再接到328p晶片的Reset腳位就好。 參考來源:  電路圖 直接用來看看, 是真的可以運作的! 只是加個電容就好了, 真是神奇! 可是我用來有時也會失敗! 又Google了一下, 發現別人也有類似情形, 有人就加上拉電阻及下接電阻。 我後來查了一下Arduino官方電路圖: https://www.arduino.cc/en/uploads/Main/Arduino_Nano-Rev3.2-SCH.pdf 也是一樣做法! 就不管了, 那就這樣接吧, 後來把breadboard的元件用洞洞板焊接後, 發現上傳的成功率居然變得很高! 所以我的想法是: breakboard可能有些接觸不良的情形, 用焊接的就消除這個問題, 只是我的Serial-to-USB板子接到洞洞板做的成品時, 仍是用插接的, 加上電容也是臨時用杜邦線接的, 也會有接觸不良問題, 才造成部份的失敗率!

MacOs High Sierra CH340

今天我的Mac當機好幾次了! 原本好好的程式,今天一直出問題,移到Windows用,又好好的沒事。 才想到是不是Mac出問題,問了google 原本真的是Mac有問題! http://www.stm32duino.com/viewtopic.php?t=1684 後來發現不全然是Mac的問題, 主要還是我接的Arduino板子, 其實還有其他外加元件和電路; 而這些電路本身的設計有些問題。主要的問題是電流或電壓在某些狀況下不太正常。會造成Arduion板子自己reset或行為異常, 這個現象在Mac上的結果會是當機重開! 有趣的是在Windows 10上卻不會有問題出現。 修改電路接法, 再重試後, 就不會當機了。