前言:
在數學上,關於帶符號整數的除法,大家一定不知道,其實有兩種的。第一種叫做 Symmetric Division,中文稱作「對稱除法」。第二種叫做 Floored Division,中文稱作「向下取整數除法」。
這兩種除法,當它們在正整數時沒什們分別。但用在負整數時,兩個就有一些差異囉。對稱除法常用在處理器上,而向下取整數除法則被廣泛的使用在各種不同的程式語言中。所以當接觸一個新的程式語言時,通常必須先搞清楚它們用的是對稱除法,還是向下取整數除法。否則會得到錯誤的結果。
然後是我們的Arduino的Flash FORTH,對於一些混合算術的計算指令,居然只提供了不帶符號的雙整數運算。一些 ANSI FORTH 標準所規定的指令都付之闕如。有一些筆者認為是還蠻常用且十分重要的,沒有了還蠻不方便的。所以來補上這塊空缺吧,讓我們把這些缺少的指令一一補上。同時也搞清楚何謂「對稱除法」(Symmetric Division) 跟「向下取整數除法」(Floored Division)。兩者的性質跟差異在哪裡,跟它們的邏輯到底是什麼。
ohiyooo2 發表在 痞客邦 留言(0) 人氣()
前言,和 DataQ 的初相遇
大概在20年前左右,筆者其實在一家生產離子佈值機的廠商中任職。記得有一次,被客戶緊急呼叫,跟客戶的製程整合部門開會。他們發現,他們的生產出來的產品中,最後會有嚴重的失效狀況。但是頻率不是非常高的,而是數千片晶圓中偶而出現一片。經過電性分析後,懷疑到離子佈值這一站製程中,有一道被稱之為叫 LDD (Lightly-Doped Drain) 離子佈值來囉。
所謂的 LDD 離子佈值,大家應該都知道,邏輯IC主要的製程是在做 MOSFET。 MOSFET結構是個 Gate-Oxide 所組成的電容器,隨著 Gate-Oxide 越來越小,Gate-Oxde 的兩端,在操作的時候電場會因為邊際效應越來越強。那個年代的解法就是在 gate-oxide 的側邊,輕微的參雜三價或五價的 Dopant,來降低 gate-oxide 兩旁的電場效應,所以被稱之為 LDD (Lightly-Doped Drain)製程。
製程參雜的方法,如果用一般的方式先做 spacer 的話又太複雜囉。所幸,中電流離子佈值機的晶圓製程承載盤(Platen)是設計成可以有任意傾斜角(Tilt Angle),及可以轉動的。所以只要以高傾斜角,就可以從 gate-oxide 的側邊植入(參雜)一定劑量的離子,造成 Lightly-Doped。然後再轉動90度,從另外一個側邊再植入(參雜)一定劑量的離子,... 連轉四次,就可以輕易地完成四個側邊的 LDD 參雜的製程。
ohiyooo2 發表在 痞客邦 留言(0) 人氣()
前言:
這篇主要是來記錄用 Arduino 跟用它的 IDE 用C寫程式,來控制 DS1307 的即時時鐘。一般來說,我喜歡用 FORTH 在 Arduino 來寫這些控制程式。但是因爲 Arduino IDE 的普及,大家已經幫它開發了很多方便的函式庫囉。所以主流還是不能忽視的,所以兩邊還是得兼顧。某些狀況下,使用 Arduino IDE 確實快很多!
DS1307 已經有很多現成的函式庫,但是翻閱了它的規格書,其實它的控制算是非常簡單的,所以還是自己來寫一個吧。除了當練習外,自己的程式碼日後的任何應用也比較好維護跟修改。所以這裡也來個很簡單的紀錄。
ohiyooo2 發表在 痞客邦 留言(0) 人氣()
前言
來替 Arduino Uno上面的 Flash Forth 打通 I2C 的任督二脈吧。這個 I2C Bus 真的很重要,一但打通後就會很方便用 Flash FORTH 來做跟任何 I2C 裝置的溝通跟控制的應用囉。所以把這些經驗跟程式碼完整放在這個部落文囉。
然後 I2C 裝置裡面,最容易操作的就是 DS1307 這個 RTC 即時時鐘模組囉。所以我們用它來測試我們的 I2C 程式碼,順便來實作一下 ANSI FORTH 裡面的一個用來取得系統日期跟時間的 FORTH 指令 time&date。
ohiyooo2 發表在 痞客邦 留言(0) 人氣()
前言
接觸過各式各樣的溫度感測器,從純類比 LM35 之類的,還是數位的 DHT 系列的,真的是百家爭萌,也讓人看得眼花撩亂的。而關於數位的溫度感測器中,其中有一款 DS18B20 ,因為價格非常便宜,使用非常簡易,溫度適用範圍大,溫度解析度跟準確度也不差,又支援多個溫度感測器透過 1-wire 匯流排所組合在一起的溫度陣列,所以是非常受歡迎的。
來利用 Arduino 來做個可以控制很多個 DS18B20 溫度感測器的控制器吧。目標是電腦掛上這個控制器後,可以透過序列埠來跟控制器溝通,讀取任一已經掛上控制器的 DS18B20 的溫度感測所傳進來的溫度。透過序列埠,也很容易進一步跟電腦上的 LabView 或 Python 之類的控制程式進行整合,提供更強大的功能喲。
ohiyooo2 發表在 痞客邦 留言(0) 人氣()
前言
最近整理電腦時,發現了一年前在 Arduino 上所寫的關於地震儀偵測的程式。當時有個很棒的想法,大家都知道台灣是個多地震的島嶼,每當地震的時候,大家都會在臉書,或是推特上狂推地震推。那時候想說是不是可以用個三軸加速度計,來用個 Arduino 做個地震儀啊。然後地震的時候可以自動感測到地震,當大到某個程度的時候就可以自動幫忙我們發地震推囉。
於是興致勃勃找起可以用的加速度計, 找到一個還不錯的 ADXL 345 三軸加速度計,已經做了一個簡單的原型出來了說。然後因為忙,沒空再繼續下去了。而且我原來的期待是很高的,總覺得沒有一定的完成度不應該把這些東西放到部落格裡面。所以最後這整個小勞作跟一些測試結果就束之高閣囉。
不過一年後再次看到這些之前寫的程式碼,突然覺得雖然只是很粗糙的半成品,但是裡面包含了很多用 Arduino 來做 i2c 溝通的程式碼。覺得假如以 i2c,跟如何控制ADXL345三軸加速度計的這個角度來看,這些經驗還是很值得參考的。
ohiyooo2 發表在 痞客邦 留言(0) 人氣()
前言
上一篇是flash FORTH在Digital I/O 的應用,這一篇,來開始攻克 SPI 介面吧。一但搞定 SPI 介面,flash FORTH 就可以有很多豐富的應用惹!
說起 SPI 介面,大家最常拿 Max 7219這顆用 SPI 來溝通的 8x8 LED 矩陣控制器來測試囉。所以順便來用它做個迷你跑馬燈來做測試吧,放在書房裡面看到那字跑啊跑的,其實蠻療癒的呢!(之前有用過 Arduino IDE, 也有用過 Raspberry Pi 做過同樣的東西囉,有興趣也請參考)
ohiyooo2 發表在 痞客邦 留言(0) 人氣()
前言
前一篇已經順利成功在 Arduino Uno 上安裝了 Flash FORTH 語言,這一篇可以開始來應用囉。所以我們先來搞定用 Flash FORTH 自由控制 Arduino Uno 上的 Digital I/O 埠吧!
大家對 Arduino Uno 的喜愛是因為它的開發環境 Ardunio IDE 的簡潔,好用。也因為如此, Arduino Uno 的 IDE 也隱藏了太多底層對硬體 Atmega328 微處理器控制的細節。透過利用 Flash FORTH 來一步步建構出所有的控制,可以讓我們在不用組合語言的情況下,利用 FORTH 語言的即時交談性的特性,讓我們更能掌握 AVR 系列微處理跟內部硬體的特性。同時完全100% 解放出 Arduino IDE 為了簡單易用所犧牲掉的硬體控制。
所以來開始好好玩一下吧,計畫來發一系列的文章。先是 Digital I/O,然後 SPI,I2C,最後是內建的 ADC,PWM ... 等等。
ohiyooo2 發表在 痞客邦 留言(0) 人氣()
前言
其實一直有個心願,很想自己寫個迷你的 FORTH 系統在目前最通用的微處理器平台,採用 Atmel 的 AVR 系列微處理的 Arduino上。不過真的太忙了,AVR組合語言也只學了一點點,實在是沒有時間啊!我們還是乖乖地使用現有的平台好囉。
然後最重要的是最近無意中發現這個 Arduino FORTH 的網站,真是驚為天人啊。已經有一點社群的架勢囉,所以來加入他們吧!😬
Arduino 上面可以用的 FORTH 系統大概有三種,第一個是丁陳漢蓀老師的 eFORTH,再來是很老牌的 amFORTH,最後是後起之秀,專門為嵌入式系統所開發的 Flash FORTH。
ohiyooo2 發表在 痞客邦 留言(1) 人氣()
前言:
最近因為工作的關係,需要熟悉 RS485 的通訊協定。這個協定基本上是硬體層 RS232 的差動電壓版本,叫做 RS422,再加上一個傳輸層的協定叫做 Modbus 的 protocol,並不難。
但假如要實作的話,就需要搞懂所謂 CRC (Cyclic redundancy check) 循環冗餘校驗的計算演算法,所有資料在送出前需要透過這個CRC計算後附加上去。主從的雙方收到資料後都依賴這個 CRC 的計算來彼此查驗是否資料的傳輸的過程中發生任何資料丟包的情況,最後來進行後續的處置。
特別是像 RS485 的這種號稱可以傳送長達一公里距離的 bus, 這種訊號因為長距離的傳輸而扭曲丟包的情況是非常容易發生的,所以採用 CRC 的技術來進行檢查變得非常的必要。
ohiyooo2 發表在 痞客邦 留言(0) 人氣()