raspberrypi/MARMEX_OBの液晶モジュールと接続
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[FrontPage]]
#contents
2012/11/17からのアクセス回数 &counter;
** MARMEX_OBの液晶モジュール [#c85b666c]
Raspberry PiのSPI接続とSPIクラスが正常に動くことを確認で...
[[MARY-OB基板(OLED Board)>http://www.marutsu.co.jp/imag...
です。
今回も、mbedのサイトから
[[MARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)>http://mbe...
を使わせてもらいました。
*** Raspberry Piへの移植 [#qb0e7222]
mbedのライブラリからRaspberry Piの互換ライブラリに移植す...
- クラスヘッダの修正
BaseやStreamといった親クラスは互換ライブラリには存在し...
#pre{{
class NokiaLCD : public Stream {
}}
を以下のように修正します
#pre{{
class NokiaLCD /*: public Stream*/ {
}}
また、virtualメソッドからvirtualをコメントします。
#pre{{
/*virtual*/ void _window(int x, int y, int width, int hei...
}}
*** MARY-OB基板(OLED Board)との接続 [#i510cf42]
MARY-OB基板(OLED Board)のコネクターとピンの定義は以下の...
&ref(oled_connector.png);
RaspberryPiとの接続は、以下のようにします。
- GNDをCN1の1番に接続
- 5VをCN1の2番に接続
- 3.3VをCN1の3番に接続
- p10(MOSI)をCN4の4番(OLED_SDIN)に接続
- p12(SCKL)をCN4の2番(OLED_SCLK)に接続
- p18をCN3の2番(OLED_CSN)に接続
- p19をCN3の1番(OLED_RESN)に接続
- p21をCN2の1番(OLED_VCC_ON)に接続
Raspberry Piのピン情報は、以下の通りです。
&ref(My-Pin-Layout.jpeg);
** テストプログラム(OledTest.cpp) [#mdba84c8]
MARMEX_OB_oled.hに従ってテストメイン(OledTest.cpp)を以下...
#pre{{
#include "mbed.h"
#include "MARMEX_OB_oled.h"
#include <math.h>
#define SIZEX (160)
#define SIZEY (120)
int main() {
MARMEX_OB_oled oled1( p10, p12, p18, p19, p21 ); // m...
oled1.background( 0x000000 );
oled1.cls();
int colorbar_width = MARMEX_OB_oled::WIDTH / 8;
for ( int i = 0; i < 8; i++ )
oled1.fill( colorbar_width * i, 0, colorbar_width...
((i & 0x4) ? 0xFF0000 : 0x000000) | ((i & 0x2) ? 0x00FF00...
oled1.fill( 50, 50, 64, 64, 0xCCCCCC );;
oled1.locate( 0, 3 );
oled1.printf( "Hello World!" );
oled1.locate( 0, 4 );
oled1.printf( "SPI = %s", MERMEX_OB_SPI_MODE_STR );
for (int i = 0; i < MARMEX_OB_oled::WIDTH; i++ ) {
oled1.pixel( i, 80 + sin( (float)i / 5.0 ) * 10, ...
}
}
}}
** 動作確認 [#l2ea4b7c]
液晶モジュールと接続を確認して、いざテストと以下のコマン...
#pre{{
$ sudo ./OledTest
}}
*** RaspberryPiのSPIドライバーは9bitモードでは動かないら...
ネットで検索してみるとSPIドライバーの9bitモードでのトラブ...
ほとんど諦めかけていたら、MARMEX_OB_oled.hにMARMEX_OB_SPI...
調べてみると9bitのデータを8bit, 8bitの2回に分けて送るこ...
MARMEX_OB_oled.hに以下の修正をしました。
- 8bitモードのdefine文の定義
- printfの追加
- _putcの再定義(NokiaLCDの_putcは8bit対応していないので)
- フォントデータをMARMEX_OB_oled.cppに追加しました。
MARMEX_OB_oled.hへの変更を以下に示します。
#pre{{
// インクルードファイルと関数型定義の追加
#include <cstdarg>
#ifdef __cplusplus
extern "C" {
#endif
extern int vasprintf(char **strp, const char *fmt, va_lis...
extern void free(void *ptr);
#ifdef __cplusplus
}
#endif
// 8bit対応
//#define MARMEX_OB_SPI_8BIT_MODE
#define MARMEX_OB_SPI_8BIT_MODE
// 追加関数
int printf(const char* format, ...) {
va_list ap;
va_start(ap, format);
char* allocatedBuffer;
int size = vasprintf(&allocatedBuffer, format, ap);
va_end(ap);
char* p = allocatedBuffer;
while(*p) {
_putc(*p++);
}
free(allocatedBuffer);
}
int _putc(int value) {
int x = _column * 8; // FIXME: Char sizes
int y = _row * 8;
bitblit(x + 1, y + 1, 8, 8, (char*)&(MARMEX_OB_oled::...
_column++;
if (_column >= COLS) {
_row++;
_column = 0;
}
if (_row >= ROWS) {
_row = 0;
}
return value;
}
enum {
fontlength = 97,
fontsize = 8
};
static const unsigned char FONT8x8[fontlength][fontsize];
}}
MARMEX_OB_oled.cppには、FONT8x8の定義を追加しました。
#pre{{
#include "MARMEX_OB_oled.h"
const unsigned char MARMEX_OB_oled::FONT8x8[fontlength][f...
{0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns...
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0...
途中省略
{0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
{0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
{0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}
}; // DEL
}}
*** 再実行 [#l6c4a782]
以下のコマンドを実行して再テストしてみました。
#pre{{
$ sudo ./OledTest
}}
とすると以下のように無事液晶モジュールにテスト画面が表示...
&ref(MARMEX_oled.png);
** 最新のソース [#b67e3b40]
mbed互換ライブラリに上記のソースを追加したバージョンを以...
- &ref(Raspberry-Pi.tgz);
** コメント [#tef58c96]
#vote(おもしろかった[16],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
- 説明でMOSIとSCKLのピン番号が間違っていました。訂正して...
#comment_kcaptcha
終了行:
[[FrontPage]]
#contents
2012/11/17からのアクセス回数 &counter;
** MARMEX_OBの液晶モジュール [#c85b666c]
Raspberry PiのSPI接続とSPIクラスが正常に動くことを確認で...
[[MARY-OB基板(OLED Board)>http://www.marutsu.co.jp/imag...
です。
今回も、mbedのサイトから
[[MARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)>http://mbe...
を使わせてもらいました。
*** Raspberry Piへの移植 [#qb0e7222]
mbedのライブラリからRaspberry Piの互換ライブラリに移植す...
- クラスヘッダの修正
BaseやStreamといった親クラスは互換ライブラリには存在し...
#pre{{
class NokiaLCD : public Stream {
}}
を以下のように修正します
#pre{{
class NokiaLCD /*: public Stream*/ {
}}
また、virtualメソッドからvirtualをコメントします。
#pre{{
/*virtual*/ void _window(int x, int y, int width, int hei...
}}
*** MARY-OB基板(OLED Board)との接続 [#i510cf42]
MARY-OB基板(OLED Board)のコネクターとピンの定義は以下の...
&ref(oled_connector.png);
RaspberryPiとの接続は、以下のようにします。
- GNDをCN1の1番に接続
- 5VをCN1の2番に接続
- 3.3VをCN1の3番に接続
- p10(MOSI)をCN4の4番(OLED_SDIN)に接続
- p12(SCKL)をCN4の2番(OLED_SCLK)に接続
- p18をCN3の2番(OLED_CSN)に接続
- p19をCN3の1番(OLED_RESN)に接続
- p21をCN2の1番(OLED_VCC_ON)に接続
Raspberry Piのピン情報は、以下の通りです。
&ref(My-Pin-Layout.jpeg);
** テストプログラム(OledTest.cpp) [#mdba84c8]
MARMEX_OB_oled.hに従ってテストメイン(OledTest.cpp)を以下...
#pre{{
#include "mbed.h"
#include "MARMEX_OB_oled.h"
#include <math.h>
#define SIZEX (160)
#define SIZEY (120)
int main() {
MARMEX_OB_oled oled1( p10, p12, p18, p19, p21 ); // m...
oled1.background( 0x000000 );
oled1.cls();
int colorbar_width = MARMEX_OB_oled::WIDTH / 8;
for ( int i = 0; i < 8; i++ )
oled1.fill( colorbar_width * i, 0, colorbar_width...
((i & 0x4) ? 0xFF0000 : 0x000000) | ((i & 0x2) ? 0x00FF00...
oled1.fill( 50, 50, 64, 64, 0xCCCCCC );;
oled1.locate( 0, 3 );
oled1.printf( "Hello World!" );
oled1.locate( 0, 4 );
oled1.printf( "SPI = %s", MERMEX_OB_SPI_MODE_STR );
for (int i = 0; i < MARMEX_OB_oled::WIDTH; i++ ) {
oled1.pixel( i, 80 + sin( (float)i / 5.0 ) * 10, ...
}
}
}}
** 動作確認 [#l2ea4b7c]
液晶モジュールと接続を確認して、いざテストと以下のコマン...
#pre{{
$ sudo ./OledTest
}}
*** RaspberryPiのSPIドライバーは9bitモードでは動かないら...
ネットで検索してみるとSPIドライバーの9bitモードでのトラブ...
ほとんど諦めかけていたら、MARMEX_OB_oled.hにMARMEX_OB_SPI...
調べてみると9bitのデータを8bit, 8bitの2回に分けて送るこ...
MARMEX_OB_oled.hに以下の修正をしました。
- 8bitモードのdefine文の定義
- printfの追加
- _putcの再定義(NokiaLCDの_putcは8bit対応していないので)
- フォントデータをMARMEX_OB_oled.cppに追加しました。
MARMEX_OB_oled.hへの変更を以下に示します。
#pre{{
// インクルードファイルと関数型定義の追加
#include <cstdarg>
#ifdef __cplusplus
extern "C" {
#endif
extern int vasprintf(char **strp, const char *fmt, va_lis...
extern void free(void *ptr);
#ifdef __cplusplus
}
#endif
// 8bit対応
//#define MARMEX_OB_SPI_8BIT_MODE
#define MARMEX_OB_SPI_8BIT_MODE
// 追加関数
int printf(const char* format, ...) {
va_list ap;
va_start(ap, format);
char* allocatedBuffer;
int size = vasprintf(&allocatedBuffer, format, ap);
va_end(ap);
char* p = allocatedBuffer;
while(*p) {
_putc(*p++);
}
free(allocatedBuffer);
}
int _putc(int value) {
int x = _column * 8; // FIXME: Char sizes
int y = _row * 8;
bitblit(x + 1, y + 1, 8, 8, (char*)&(MARMEX_OB_oled::...
_column++;
if (_column >= COLS) {
_row++;
_column = 0;
}
if (_row >= ROWS) {
_row = 0;
}
return value;
}
enum {
fontlength = 97,
fontsize = 8
};
static const unsigned char FONT8x8[fontlength][fontsize];
}}
MARMEX_OB_oled.cppには、FONT8x8の定義を追加しました。
#pre{{
#include "MARMEX_OB_oled.h"
const unsigned char MARMEX_OB_oled::FONT8x8[fontlength][f...
{0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns...
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0...
途中省略
{0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
{0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
{0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}
}; // DEL
}}
*** 再実行 [#l6c4a782]
以下のコマンドを実行して再テストしてみました。
#pre{{
$ sudo ./OledTest
}}
とすると以下のように無事液晶モジュールにテスト画面が表示...
&ref(MARMEX_oled.png);
** 最新のソース [#b67e3b40]
mbed互換ライブラリに上記のソースを追加したバージョンを以...
- &ref(Raspberry-Pi.tgz);
** コメント [#tef58c96]
#vote(おもしろかった[16],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
- 説明でMOSIとSCKLのピン番号が間違っていました。訂正して...
#comment_kcaptcha
ページ名:
SmartDoc