作者: KSC 時間: 2015-8-22 15:00 標題: I2C OLED版的marlin
本帖最後由 KSC 於 2015-8-31 01:33 編輯
Arduino 說明:
寫C的話應該有接觸過if else語法,唔知的話請google或看example==>05 Control==>IfStatementControl
咁呢如果係在程序以外初始化的定義(define)時,是不能用普通的 if else 的需使用#ifdef #else #endif,如果按if else來比喻的話
#ifdef 即if
#elif 即else if
#else 即 else
#endif 即最後的}
在#ifdef下無效的將會在程序下載時被無視,最終只留下有效的define
說明完
咁點改做I2C呢,首先要避免接口重複定義,要將舊的RepRapDiscount_Smart_Controller除去、定義新Mon、修正IO腳
同埋要將普通2004LCD用唔到的點陣mon library "U8GLIB"放到Arduino的libraries下
位置通常係C:\Program Files (x86)\Arduino\libraries
U8GLIB可以在呢度找
*u8glib by Oliver Kraus
*http://code.google.com/p/u8glib/
*License: http://opensource.org/licenses/BSD-3-Clause
我用的係 jcrocholl版,其它版本請自行摸索
改動如下
1)
Configuration.h
原本定義2004個mon接口的部份// (un-defined)左它
// The RepRapDiscount Smart Controller (white PCB)
// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
//#define REPRAP_DISCOUNT_SMART_CONTROLLER
加#define SSD1306_OLED_I2C_CONTROLLER令後續的定義有效(defined)
// Tiny SSD1306 OLED I2C 128x64 FULL GRAPHICS CONTROLLER
#define SSD1306_OLED_I2C_CONTROLLER
2)
Configuration.h
原本定義REPRAP_DISCOUNT_SMART_CONTROLLER有關的Panel Setting的部份將由於已un-defined故無效化
#if defined(ULTIMAKERCONTROLLER) || defined(REPRAP_DISCOUNT_SMART_CONTROLLER) || defined(G3D_PANEL)
#define ULTIPANEL
#define NEWPANEL
#endif
在呢個位的前邊加SSD1306_OLED_I2C_CONTROLLER定義下Panel Setting的部份,由於SSD1306_OLED_I2C_CONTROLLER已define,故此DOCLCD、U8GLIB_SSD1306、ULTIPANEL、NEWPANEL將被define
#if defined (SSD1306_OLED_I2C_CONTROLLER)
#define DOGLCD
#define U8GLIB_SSD1306
#define ULTIPANEL
#define NEWPANEL
#endif
3)
dogm_lcd_implementation.h
在// LCD selection的部份加入U8GLIB_SSD1306的判別,見紅字。呢度也可以見到有其它板用HW SPI出MON
// LCD selection
#ifdef U8GLIB_ST7920
//U8GLIB_ST7920_128X64_RRD u8g(0,0,0);
U8GLIB_ST7920_128X64_RRD u8g(0);
#elif defined(U8GLIB_SSD1306)
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);
#elif defined(MAKRPANEL)
// The MaKrPanel display, ST7565 controller as well
U8GLIB_NHD_C12864 u8g(DOGLCD_CS, DOGLCD_A0);
#else
// for regular DOGM128 display with HW-SPI
U8GLIB_DOGM128 u8g(DOGLCD_CS, DOGLCD_A0); // HW-SPI Com: CS, A0
#endif
4)
pins.h
由於係RMAPS 1.4板 轉出來,先找到呢句
#if MOTHERBOARD == 33 || MOTHERBOARD == 34 || MOTHERBOARD == 35 || MOTHERBOARD == 77 || MOTHERBOARD == 67 || MOTHERBOARD == 68
在有define ULTRA_LCD和NEWPANEL的前題下
#ifdef ULTRA_LCD
#ifdef NEWPANEL
有幾種LCD,在呢度加SSD1306_OLED_I2C_CONTROLLER的定義
#ifdef REPRAP_DISCOUNT_SMART_CONTROLLER
(REPRAP_DISCOUNT_SMART_CONTROLLER的定義)
#elif defined(SSD1306_OLED_I2C_CONTROLLER)
#define BTN_EN1 31
#define BTN_EN2 33
#define BTN_ENC 35
#define BEEPER 37
#define LCD_SDSS 53
#define SDCARDDETECT -1
#define KILL_PIN -1
#elif defined(LCD_I2C_PANELOLU2)
(LCD_I2C_PANELOLU2的定義)
#elif defined(LCD_I2C_VIKI)
(LCD_I2C_VIKI的定義)
等等其它之如此類的
改完之後就用得
作者: KSC 時間: 2015-8-22 15:05
本帖最後由 KSC 於 2015-8-22 15:43 編輯
筆記
現時用 2004 LCD,所以動過
Configuration.h
#define REPRAP_DISCOUNT_SMART_CONTROLLER //定義用果個L型接線頭
#if defined(ULTIMAKERCONTROLLER) || defined(REPRAP_DISCOUNT_SMART_CONTROLLER) || defined(G3D_PANEL) //唔知ULTIPANEL和NEWPANEL係乜要再看看
#define ULTIPANEL
#define NEWPANEL
#endif
用SD卡
#define SDSUPPORT // Enable SD Card Support in Hardware Console
好明顯要唔要 REPRAP_DISCOUNT_SMART_CONTROLLER
//#define REPRAP_DISCOUNT_SMART_CONTROLLER //定義用果個L型接線頭
試改Try 1 抄自網上makerbase的配置
http://www.makerbase.com.cn/product/detail.php/id-83.html
在//I2C PANELS後加,以防止REPRAP_DISCOUNT_SMART_CONTROLLER 果句開ULTIPANEL?
//====================================================
//I2C PANELS
// TEST OLED 128x64
#define TEST_OLED13_128x64
#if defined (TEST_OLED13_128x64)
#define DOGLCD //定義用點陣式LCD,影響file: pin.h
#define U8GLIB_SH1106 //OLED的LiB,但係是SPI的?
#define REPRAP_DISCOUNT_SMART_CONTROLLER //未知點解又要call返,要查邊度用過
#define NEWPANEL//未知係乜,影響file: pin.h
#endif
//===================================================
作者: fred2088 時間: 2015-8-22 17:26
本帖最後由 fred2088 於 2015-8-22 17:37 編輯
回覆 2# KSC
你的機是 Tinyboy 定 Kossel mini ?
http://reprap.org/wiki/MKS_12864OLED
TB 的OLED 已上Reprap ...
作者: KSC 時間: 2015-8-23 01:20
本帖最後由 KSC 於 2015-8-23 01:22 編輯
kossel mini,手頭上果個OLED行I2C....
另,它的改法有D強來....
作者: fred2088 時間: 2015-8-23 20:01
回覆 4# KSC
http://forums.reprap.org/read.php?13,499572,page=1
try try this ...
作者: KSC 時間: 2015-8-24 10:09
回覆 5# fred2088
thx,在看
作者: fred2088 時間: 2015-8-24 11:00
回覆 4# KSC
為何它的改法有D強來 呢 ?! ....
作者: KSC 時間: 2015-8-24 12:16
因為他唔係重新定義一個新板,只係將原有LCD的一部份腳用原有定義完、再取消、再重新定義。
我唔可以話它唔work但後人要跟的話會跟死人。放的位置也必須要正確。
SPI用Software模擬又係唔係咁好,有hardware的唔用...雖然我未看清楚點解要咁做....可能避免同SD卡炒埋一碟?但其實用SPI的話加多隻CS腳就得,全個system又可以用少D線....
作者: KSC 時間: 2015-8-30 22:00
本帖最後由 KSC 於 2015-8-30 23:10 編輯
.patch唔識用
用notepad ++開,估它點解,估中了
https://h2.hkepc.com/forum/attachment.php?aid=1822989&k=04cf7ac9b56210bdbe52cb62b748017c&t=1781959392&sid=6LZf7k47aoM

作者: KSC 時間: 2015-8-30 23:05
調通硬件I2C port I2C
但到底用唔用到hardware SPI port去省線?
https://h2.hkepc.com/forum/attachment.php?aid=1822985&k=bde617a7fa28c16b0810a45ac2c7fd21&t=1781959392&sid=6LZf7k47aoM

作者: fred2088 時間: 2015-8-30 23:13
回覆 10# KSC
HW SPI 用那些 PIN ? 及用同一個 OLED ?!
Thanks
作者: KSC 時間: 2015-8-31 00:51
首先,呢個OLED係支援SPI和I2C。但我買果塊只引出I2C接口,要Test的話需要買過塊。
HW SPI就係SD card用果3條Pin,另加隻CS腳就得,即係話其實用1個AUX3就足夠(*唔用SD detect的話)
#define SDSS pin 53
#define LCD_SDSS 49
#define SDCARDDETECT -1
但我無在手,要買
作者: fred2088 時間: 2015-8-31 11:13
回覆 12# KSC
唔要 SD Card Offline Printing ?!
作者: KSC 時間: 2015-8-31 11:39
必須要的,未試
作者: fred2088 時間: 2015-9-9 12:52
回復 14 #KSC
SPI 會用少D線?I2C只用四線
via HKEPC Reader for Android
作者: palpatrick 時間: 2015-9-9 13:32
本帖最後由 palpatrick 於 2015-9-9 13:37 編輯
回覆 15# fred2088
同意Ching睇法!仲有好多好處!
Look see look see
https://hk.answers.yahoo.com/question/index?qid=20071001000016KK07568
I2C BUS
http://electronics.stackexchange.com/questions/25278/how-to-connect-multiple-i2c-interface-devices-into-a-single-pin-a4-sda-and-a5


