2016/04/11

Arduino ✖ LCD1602 ✖ I2C

在淘寶上買了 LCD1602 及搭配的 IIC 模組 (拆開購買比較便宜),廠家也附了參考資料及Arduino 的函式庫的測試程式,但接上Arduino 後無奈LCD一直無法正常顯示,搞了半天參考國內外的部落格或討論區都沒有提到有什麼奇怪問題,頂多是使用不同的函式庫或是不同 IIC模組,只要線有接對且IC相同影響應該不大。但,不顯示就是不顯示!
最後終於還是找到原因了,在這裡記錄一下

先來看一下我買到的商品,IIC chip 是 NXP Semiconductors (Philips) 的 PCF8574AT
組合..

<接線>






<函式庫及程式>

函式庫下載請到參考資料[1],[2] 下載,兩個都可以用,這裡我先以參考資料[3],使用 New LiquidCrystal 的 LiquidCrystal_V1.3.4
而程式也延用如下


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 Backpack Interface labelled "A0 A1 A2" at lower right.
 ..and
 Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
 MOST use address 0x27, a FEW use 0x3F
 terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here: 
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// Move any other LCD libraries to another folder or delete them
// See Library "Docs" folder for possible commands etc.
#include <LiquidCrystal_I2C.h>

/*-----( Declare Constants )-----*/
/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 16 chars 2 line display
// A FEW use address 0x3F
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

/*-----( Declare Variables )-----*/
//NONE

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);  // Used to type in characters

  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

// ------- Quick 3 blinks of backlight  -------------
  for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on  

//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0  
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("HI! I'am KMode");
  delay(8000);  

// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
  lcd.clear();
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print("Use Serial Mon");
  lcd.setCursor(0,1);
  lcd.print("Type to display");  


}/*--(end setup )---*/


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  {
    // when characters arrive over the serial port...
    if (Serial.available()) {
      // wait a bit for the entire message to arrive
      delay(100);
      // clear the screen
      lcd.clear();
      // read all the available characters
      while (Serial.available() > 0) {
        // display each character to the LCD
        lcd.write(Serial.read());
      }
    }
  }

}/* --(end main loop )-- */


/* ( THE END ) */


<I2C Device Address>
當程式下載到 Arduino 後會發現完全沒有畫面!
一開始我想到的有兩件事
1. 線有沒有接對? →才兩條線,檢查了十次,把他們交換了,還是完全沒有畫面
2. I2C Address 有沒有正確? →用電錶檢查了 A0, A1, A2 電壓都在高準位,應該沒問題

但看了程式註解中有一段 "A FEW use address 0x3F" 所以試試看,果然一試就有畫面了

這一切都是阿共仔的陰謀啦!在淘寶上購買時附的"使用說明"內是這樣說的...




對照內附的 TI  PCF8574 datasheet 也沒錯,表是複製過來的
But,人生最厲害的就是這個 But,模組上用的 IC 是 Philips Semiconductors (也就是現在的 NXP) 出的 PCF8574A,下載 NXP 版的 datasheet 就發現,第一頁開宗明義的說
"Address by 3 hardware address pins for use of up to 8 devices (up to 16 with PCF8574A)"
"The PCF8574 and PCF8574A versions differ only in their slave address as shown in Fig.10."


一看到 Fig.10 就明暸 "A FEW use address 0x3F" 其實是看你拿到的IC 型號啦,像我拿到的是 PCF8574AT,A0, A1, A2 電壓都是高準位,當然 address = 0x3F 

這樣一切就都真象大白了,退堂!



參考資料
1. (函式庫) New LiquidCrystal
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

2. (函式庫) LiquidCrystal_I2C1602V1
https://github.com/openenergymonitor/LiquidCrystal_I2C1602V1

3. LCD Displays (Blue and Yellow) with I2C/TWI Interface
https://arduino-info.wikispaces.com/LCD-Blue-I2C

4. I2C 16x2 LCD 介紹
http://coopermaa2nd.blogspot.tw/2012/09/i2c-16x2-lcd.html


2016/04/08

Eclipse Android Application Package 改名

目前開發APP 都是拿一個範列來修改,即使已在匯入專案時修改 Project Name,但是在把改寫的APP安裝到手機上時 Android 會認為是同一個,如果想保有原先的範例但又需要測試改過的APP,需要做下面這件事:

  • 在 Eclipse中, Project Explorer 內→右鍵點選 Project → Android Tools →Rename Application Package 更改名稱


如果還想要修改 Project Name,方法是:

  • 右鍵點選 Project → Refactor → Rename 更改在 Eclipse 裡 Project 名稱




參考資料
1. Eclipse 徹底更改 Android Project 名稱
http://mrslowblog.blogspot.tw/2013/01/eclipse-android-project.html




2016/03/24

Ras-Pi基礎:作業系統安裝

對我來說使用Raspberry Pi (以後都用”R-Pi”表示) 第一個問題不是怎麼接電,不是知道有那些IO port,而是怎麼把作業系統安裝到SD卡裡。因此做為玩 R-Pi的第一步,我們就來看怎麼在Windows上安裝R-Pi的作業系統,使用MAC的朋友請自行服用<參考資料3> 

事前準備–工具材料及軟體
1. 購買SD
小小Micro SD卡,可不是隨便買買就可以,第一要注意是否跟你的R-Pi硬體版本相容,各廠家出的各種規格,其相容性可以至  http://elinux.org/RPi_SD_cards 查詢。相容性之外我個人覺得讀寫速度是越快越好,容量則視您個人應用而定,這部分還要考慮口袋深度。但R-Pi官網建議至少要 8GB Class4,我用過以下幾款都沒有問題


  • SanDisk Ultra microSD UHS-I, 64GB, 533X(80MB/s)
  • SanDisk Ultra microSD UHS-I, 32GB, 320X(48MB/s)
  • SanDisk Ultra microSD UHS-I, 16GB, 533X(80MB/s)
  • ADATA Micro SDHC Premier UHS-1 U1, 16GB CL10

2. 準備SD卡讀卡機,市面上隨便一種都行,跟你的電腦合的來就好,沒什麼注意事項
3. 下載R-Pi作業系統鏡像檔
R-Pi
作業系統有很多讓你選,都是各提供者為R-Pi最佳化調校過的。不過我個人推薦RASPBIAN,因為網上教學大都是以這個版本為主,初學者就先選它吧。
目前(March 2016) RASPBIAN 又分JESSIE JESSIE LITE兩種,這兩個版本主要分別是 Jessie Lite 沒有預設安裝 X-server 相關的套件,無法用 startx 指令啟動視窗管理員,當然也無法執行視窗程式。請斟酌自己的需求下載。
作業系統鏡像檔下載下來後需要解壓縮,安裝時會用到
https://www.raspberrypi.org/downloads/
4. 下載並安裝SD卡格式化軟體 SDFormatter
https://www.sdcard.org/cht/downloads/formatter_4/
5. 下載並安裝鏡像檔燒寫/讀取軟體 Win32DiskImager
https://sourceforge.net/projects/win32diskimager/

正式開始–安裝步驟
1. 開啟SDFormatter,將SD卡格式化
i、確定Drive欄顯示的是SD卡所在位置
ii、選擇 選項設定
iii、在格式化選項設定中 邏輯大小調整選擇開啟
iv、按下 格式化按鍵開始格式化



2. 開啟Win32DiskImager,準備安裝” R-Pi 作業系統
i、同樣先確認Drive欄顯示的是SD卡所在位置
ii、按下資料夾圖示按扭
iii、選擇想要安裝的鏡像檔(這裡我先選擇2016-02-26-raspbian-jessie版本)
iv、按下”Write”按鍵開始燒錄



3. 燒寫完成後,安裝作業系統已經完成,
如果有螢幕,接上螢幕後請參考 ” Ras-Pi基礎:RASPBIAN初始設定與Linux基礎指令
如果沒有螢幕可用,請參考 ” Ras-Pi基礎:不接螢幕也可以操作R-Pi的方法part1–使用
Serial Port”


參考資料
2. Raspberry Pi 安裝Raspbian系統的詳細步驟 (Windows版本)
http://www.botsheet.com/cht/raspberry-pi-tutorial-install-raspbian-windows/
3. Raspberry Pi 安裝Raspbian系統的詳細步驟 (Mac OS版本)
http://www.botsheet.com/cht/raspberry-pi-tutorial-install-raspbian-mac-osx/
4. Raspberry Pi 購買指南(5/10):購買零配件 -- 記憶卡(SD 卡)
http://life-of-raspberrypi.blogspot.tw/2013/01/raspberry-pi-510-sd.html


Ras-Pi基礎:推薦的網站

Raspberry Pi 2012年推出後受到自造者(Maker) 喜愛,又目前網路是如此的發達,因此想要學習Raspberry Pi 的基礎操作,或想知道大家拿它來做什麼應用,網路上搜尋一下就非常的多。以下列出目前為止我在網路上看到不錯的網頁,大家可以參考看看。如果覺得網路資料太多太雜,想要有系統的學習也可以自行找書看,不過書籍我就不介紹了,大家自行到書店挑吧!

1. Raspberry Pi 官網
https://www.raspberrypi.org/


2. 台灣樹莓派
https://www.raspberrypi.com.tw/


4. 學習樹莓派--Raspberry Pi
https://sites.google.com/site/raspberypishare0918/home

6. ㄆㄜ ㄊㄧㄡ ㄙˋ
http://ruten-proteus.blogspot.tw/

8. IT 技術家 (光看名稱就知道很專業,個人覺得內容有點進階)
http://blog.itist.tw/search/label/RaspberryPi


10. 鳥哥的 Linux 私房菜 (Raspberry Pi作用系統大部分是 Linux, 所以多少用得到)
http://linux.vbird.org/

Arduino:改變IDE主題配色

網路上很多程式設計工程師都告誡寫程式的 IDE 背景最好是深色,如此可以使我們的眼睛舒適些,長時間盯著螢幕也比較不會傷眼,但  Arduino 官方的 IDE 底色確是白色的,也沒有提供偏好設定讓我們可以自由調整,因此在網路上找一下,發現還是有方法可以修改底色的!
以下我示範Arduino 1.6.7 版如何修改,Arduino1.6.8 版因為新增支援  UHD 螢幕,特性有一點點改變,以致 1.6.7 版的方法無法完全適用,但我也有暫時的解決辦法,有需要的朋友請在下載完DarkArduinoTheme 的檔案後直接快轉參考下方 <Arduino1.6.8版>

<Arduino 1.6.7>
Step1. 下載主題設定檔
請到https://github.com/jeffThompson/DarkArduinoTheme 下載

Step2. 置換主題資料夾
到  Arduino 安裝的路徑下的  lib 資料夾,例如我的是
C:\Program Files (x86)\Arduino\lib
  此資料夾下有一個”theme”子資料夾,將他改名,例如:Original_theme,以後想改回原來的樣子只要把名子改回來就好了。
  將下載來的檔案解壓縮後裡面的  theme 資料夾複製貼到此處
 

接下來只要開啟Arduino IDE 就可以看到整個配色變了,看起來相當不錯呢!


<Arduino 1.6.8>
Arduino1.6.8 因為新增支援  UHD 螢幕,按鍵圖示需要不同的解析度,所以之前  DarkArduinoTheme 版本的按鍵圖無法直接拿來用,既然這樣,我們就保留原版的圖,只修改背景跟文字顏色吧,方法如下

Step1. 置換 ”syntax” 資料夾
在 C:\Program Files (x86)\Arduino\lib\theme 目錄下,將原來的”syntax”資料夾改名。再將 DarkArduinoTheme\theme\syntax 資料夾複製貼到這裡

Step2. 置換 ” theme.txt” 文件
 C:\Program Files (x86)\Arduino\lib\theme\theme.txt 文件改名。再將 DarkArduinoTheme\theme\theme.txt 文件複製貼到這裡

再開啟  Arduino IDE




~收工!


參考資料
1.    Arduino:為IDE換套顏色配置吧
http://yehnan.blogspot.tw/2014/10/arduinoide.html




2015/08/29

Octave ✖ 下載 ✖ 安裝

GNU Octave 4.0.0 在今年 (2015)  5/29 發佈 4.0.0 版,最主的改變是終於提供 GUI (Graphical User Interface,圖型使用者介面),有了官方的 GUI 再也不用先安裝Octave 再安裝其它圖型介面如 Woctave 或 GUI Octave 這樣麻煩了。至於其它的新增功能有興趣的朋友請參考這裡
先說明,我現在用的作業系統是 Windows 7 所以如果作業系統不是 Windows 7 的朋友可選擇自己的符合自己用的系統試試,GNU Octave 也支援 Linux ,使用 OS X 的朋友好像會比較麻煩,這個我就沒有仔細看了
現在我們就來下載&安裝吧,首先我們先到 GNU Octave 網頁
點選右邊的 Download 連結或下方直接提供了Windows 安裝檔的下載連結
ftp://ftp.gnu.org/gnu/octave/windows/octave-4.0.0_0-installer.exe

安裝步驟基本上就是下 Next 按到底就對了,不過中間你也可以選擇一下安裝路徑

安裝完成後要執行程式可以有兩種選擇CLI (command-line interface, 命令列介面) 和GUI。執行Octave-4.0.0(GUI) 後基本上長這樣

迫不及待想要試用看看了,我在網路上下載張智星教授 Matlab 書籍範例來跑。可以直接 File→Open (Ctrl+O) →範列.m 檔,完成後如下圖按下 Save File and Run 然後跟 Matlab 一樣會詢問你要不要加入這個資料夾的路徑或改到這個資料夾的路徑,依自己需要選一個,不要選Cancel 就好,然後計算結果就出來了!
依我的經驗第一次畫圖都會需要一小段時間,還給有沒有回應,不過不要急等一下(2~5分鐘)就好了。這個現象的詳細原因我也不知道,不知有沒有高人可以給個理由?

peaks 3D plot-surf 結果

PS. 目前版本似乎不支援繁中,所以如果原程式的註解有繁中的話會出現亂碼,之後再研究看看是否有解決之道


參考資料

朱式幸福
http://chu246.blogspot.tw/search/label/octave

MATLAB程式設計《入門篇》
http://mirlab.org/jang/books/matlabProgramming4beginner/slide/

Octave‧開張

Octave 是一個與 Matlab 指令語言相容的科學計算與數值分析工具;它是個開放原始碼,跨平台的軟體。根據 wiki GNU Octave 網頁指出,此工具是1988年開始發展,目的是提供化學反應設計課程的輔助工具。

Octave 發展初期即是模仿 Matlab 而設計的,所以很自然的他們有許多相容的功能,不過雖然相容,但是從網路上看到的介紹他們不是100%相容,有些語法還是不同。即使如此不是與 Matlab 100% 相容,它還是 Matlab 很好的替代工具,如果我們沒有錢買Matlab 但又想用它來做一點什麼事的話,Octave 是一個很好的選擇。

會有這個分類只是個興趣,我想用 Octave 跑一些與碩班時研究的程式還有與普物有關的一些計算。也許也會寫寫基礎語法文,試看看有那些語法與 Matlab 有異。 

網路上 Matlab 替代工具似乎不只有一個,如果那天心血來潮也會試試其它的工具。