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: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
//===================================================

TOP

本帖最後由 fred2088 於 2015-8-22 17:37 編輯

回覆 2# KSC

你的機是 Tinyboy 定 Kossel mini ?

    http://reprap.org/wiki/MKS_12864OLED

   TB 的OLED  已上Reprap  ...

TOP

本帖最後由 KSC 於 2015-8-23 01:22 編輯
回覆  KSC

你的機是 Tinyboy 定 Kossel mini ?

   

   TB 的OLED  已上Reprap  ...
fred2088 發表於 2015-8-22 17:26

kossel mini,手頭上果個OLED行I2C....

另,它的改法有D強來....

TOP

回覆 4# KSC


    http://forums.reprap.org/read.php?13,499572,page=1

try try this ...

TOP

回覆 5# fred2088

thx,在看

TOP

回覆 4# KSC


   為何它的改法有D強來 呢 ?!  ....

TOP

回覆  KSC


   為何它的改法有D強來 呢 ?!  ....
fred2088 發表於 2015-8-24 11:00


因為他唔係重新定義一個新板,只係將原有LCD的一部份腳用原有定義完、再取消、再重新定義。
我唔可以話它唔work但後人要跟的話會跟死人。放的位置也必須要正確。

SPI用Software模擬又係唔係咁好,有hardware的唔用...雖然我未看清楚點解要咁做....可能避免同SD卡炒埋一碟?但其實用SPI的話加多隻CS腳就得,全個system又可以用少D線....

TOP

本帖最後由 KSC 於 2015-8-30 23:10 編輯
回覆  KSC


    ,499572,page=1

try try this ...
fred2088 發表於 2015-8-23 20:01


.patch唔識用

用notepad ++開,估它點解,估中了
螢幕擷取畫面 (70).png
2015-8-30 23:10

TOP

11947464_10153336772591704_3023317519651504654_n.jpg
2015-8-30 23:04

調通硬件I2C port I2C
但到底用唔用到hardware SPI port去省線?

TOP