GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
aitendoから、GR-SAKURA関連のモノが発売したということで、先物買いで早速、液晶with基板(2.4インチforさくら)を入手したものの、サンプルスケッチとかない模様。
データシートだけで作るのは大変そうだ!
人柱かもーん
さっき通販した時に買って置けばよかったかな。
一応初期化コードはありますね。
表示はWindowにピクセルデータを送り込むイメージかな?。
“CP2401T GR-SAKURA”でググれば1番目に何だか見覚えのあるページがでてくるかと。
というか昨日はそこにリンク張ってあったような気がしたけど気のせいだったか?
無許可だったんですね。
今見たらトップの画像にもお名前が入ってましたね。
公開しているので別に無許可でも良かったのですが(^^).
私が製品に関係していると思われるのも困るので「聞いてない」とツイートしたのをaitendoさんが見て消したのでしょうかね.
mituhiromatuura さんが HEW 環境に移植された RX62N用プログラムを web コンパイラに移植しました。 画像データを sketch.bin にリンクするのが面倒だったので、画像データは microSD メモリに格納したものを読み込んで使用するよう変更しています。以下、作業手順を説明します。
#include <iodefine_gcc63n.h>
void main(void);
display_block_copy(draw_point_x, draw_point_y - (FONT_WIDTH_Y - 1), FONT_WIDTH_X, FONT_WIDTH_Y, p_bmp + char_offset * 2 * FONT_WIDTH_X * FONT_WIDTH_Y);
display_block_copy(draw_point_x, draw_point_y - 63, 64, 64, p_bmp);
display_block_copy(draw_point_x, draw_point_y - (63-12) + 8, 64, 44, p_bmp);
display_area_set(319 - (sx + lx - 1), sy, 319 - sx, sy + ly - 1); LCD_CtrlWrite_ILI9325(0x0020, sy + ly - 1); // GRAM horizontal Address LCD_CtrlWrite_ILI9325(0x0021, 319 - sx); // GRAM Vertical Address LCD_IndexWrite_ILI9325(0x0022); int n; for(n = 0; n < lx * ly; n++) { LCD_DataWrite_ILI9325(*buf++); }
area_set(ys, xs, ye, xe, ys, xe);
display_block_copy_r(100, 100, 200, 136, __sectop("D_BIN_RX_RPB") + 54);
void MyExcep_CMT0_CMI0(void) __INTTERUPT_FUNC ;
void MyExcep_CMT1_CMI1(void) __INTTERUPT_FUNC ;
MyExcep_CMT0_CMI0, MyExcep_CMT1_CMI1,
/*GR-SAKURA Sketch Template Version: V1.08*/ #include <rxduino.h> #include <sdmmc.h> #include <iodefine_gcc63n.h> #include "gr_common/intvect63n.h" #include "src/define_const.h" extern "C" { void init_touch(void); void mole_main(void); void excep_cmtu0_cmt0(void); void Excep_CMTU0_CMT1(void); uint8_t* __sectop(const char* id); #include "src/cmt.h" }; static const char* imgDir = "/moleimg/"; static struct { const char* fname; const char* id; uint8_t* buffer; } imgTable[] = { {"rx_rpb.bin", "D_BIN_RX_RPB", NULL}, {"fonts.bmp", "D_BMP_FONT", NULL}, {"default.bmp", "D_BMP_DEFAULT", NULL}, {"hit.bmp", "D_BMP_HIT", NULL}, {"miss.bmp", "D_BMP_MISS", NULL}, {"state0.bmp", "D_BMP_STATE0", NULL}, {"state1.bmp", "D_BMP_STATE1", NULL}, {"state2.bmp", "D_BMP_STATE2", NULL}, {"state3.bmp", "D_BMP_STATE3", NULL}, }; static SDMMC SDCARD; void setup() { Serial.begin(115200, SCI_SCI1JTAG); Serial.setDefault(); setvbuf(stdout, NULL, _IONBF, 0); sci_convert_crlf_ex(Serial.get_handle(), CRLF_CRLF, CRLF_NONE); printf("\x1b[2J\x1b[H"); SDCARD.begin(); for (int i = 0; i < int(sizeof(imgTable) / sizeof(*imgTable)); i++) { char path[100]; strcpy(path, imgDir); strcat(path, imgTable[i].fname); File file = SDCARD.open(path, FILE_READ); if (!file) { printf("file not found: '%s'\n", path); for (;;); } else { if (strstr(file.name(), ".bin")) { if ((imgTable[i].buffer = (uint8_t*)malloc(file.size())) == NULL) { printf("no enough memory\n"); for (;;); } for (int j = 0; j < int(file.size()); j++) { imgTable[i].buffer[j] = file.read(); } } else if (strstr(file.name(), ".bmp")) { #pragma pack(push, 1) struct { uint16_t bfType; uint32_t bfSize; uint16_t bfReserved[2]; uint32_t bfOffBits; } bitmapFileHeader; struct { uint32_t biSize; int32_t biWidth; int32_t biHeight; uint16_t biPlanes; uint16_t biBitCount; uint32_t biCompression; uint32_t biSizeImage; int32_t biXPixPerMeter; int32_t biYPixPerMeter; uint32_t biClrUsed; uint32_t biClrImporant; } bitmapInfoHeader; #pragma pack(pop) for (int j = 0; j < int(sizeof(bitmapFileHeader)); j++) { ((uint8_t*)&bitmapFileHeader)[j] = file.read(); } for (int j = 0; j < int(sizeof(bitmapInfoHeader)); j++) { ((uint8_t*)&bitmapInfoHeader)[j] = file.read(); } if (bitmapFileHeader.bfType != 'MB' || bitmapInfoHeader.biBitCount != 24 || bitmapInfoHeader.biCompression != 0) { printf("unknown format: '%s'\n", path); for (;;); } int imgSize = 2 * bitmapInfoHeader.biWidth * bitmapInfoHeader.biHeight; if ((imgTable[i].buffer = (uint8_t*)malloc(imgSize)) == NULL) { printf("no enough memory\n"); for (;;); } for (int y = bitmapInfoHeader.biHeight - 1; y >= 0; y--) { for (int x = 0; x < bitmapInfoHeader.biWidth; x++) { int b = file.read(); int g = file.read(); int r = file.read(); if (strcmp(imgTable[i].fname, "state0.bmp") == 0 && r == 0xff && g == 0xf1 && b == 0x00) { g = 0xee; } uint16_t rgb = ((r & MASK_RED) << SHIFT_RED) | ((g & MASK_GREEN) << SHIFT_GREEN) | ((b & MASK_BLUE) >> SHIFT_BLUE); imgTable[i].buffer[2 * (bitmapInfoHeader.biWidth * y + x) + 0] = rgb & 0xff; imgTable[i].buffer[2 * (bitmapInfoHeader.biWidth * y + x) + 1] = rgb >> 8; } while ((file.position() - sizeof(bitmapFileHeader) - sizeof(bitmapInfoHeader)) & 3) { file.read(); } } } else { printf("unknown format: '%s'\n", path); for (;;); } file.close(); } } init_touch(); init_cmt0(); init_cmt1(); mole_main(); } void loop() { } uint8_t* __sectop(const char* id) { uint8_t* p = NULL; for (int i = 0; i < int(sizeof(imgTable) / sizeof(*imgTable)); i++) { if (strcmp(imgTable[i].id, id) == 0) { p = imgTable[i].buffer - 54; break; } } return p; } void MyExcep_CMT0_CMI0(void) { excep_cmtu0_cmt0(); } void MyExcep_CMT1_CMI1(void) { Excep_CMTU0_CMT1(); }
以上の簡単な手順でお手軽に動作させられる筈。
半田付けミスって基板がって感じです涙
また買った時に試そう
某基板は一度半田付けした部品を外そうとするとスルーホールが簡単に抜けてくるので要注意ですね。
ショートしてて直そうとしたらボロボロに・・・
フレキの半田付けなら、コテとフレキの間に半田吸い取り線を挟んで半田を“拭き取る”感じでやるといい感じでしたよ。
gr_sketch.cpp の 61 行目から、以下の内容を挿入すると尚善し。
if (strcmp(imgTable[i].fname, "rx_rpb.bin") == 0) { for (int j = 0; j < 200; j++) { imgTable[i].buffer[2 * 135 * 200 + 2 * j + 0] = 0xff; imgTable[i].buffer[2 * 135 * 200 + 2 * j + 1] = 0xff; } }
松浦さんが 「グラフィック描画ライブラリ & タッチパネルドライバ」 を公開されています。
homepage3.nifty.com/.../gr
いろいろなことができそうで 期待しています。
松浦さんのreadme.txt で参照されている以下のページなどをみると
github.com/.../Touch_Screen_Driver
www.seeedstudio.com/.../2.8%27%27_TFT_Touch_Shield_v2.0
ライブラリの使い方が掲載されているのですが、どなたか コマンドの説明や ライブラリの試し方を 初心者にもわかるように まとめていただけないでしょうか?
分からないところがありましたら具体的に書いていただければ対応します.
examples を移植して先ほどファイルをアップデートしました.
よろしくお願いします.
さっそくにありがとうございました。老眼に鞭打って半田付けしたものの そのあと途方にくれていたため、大変にたすかります。スケッチ例にて 私のやりたいことはすべて示されていました。
私もハンダ付けで ボロボロになりました
ベース基板側に予備ハンダして フレキの上から 手早くコテで押したけどダメですね
フレキ側にも予備ハンダしたほうがいいんでしょうか?
基本的に違いますか?
japan.renesasrulz.com/.../668.aspx
に半田付けの様子がでています。
私の経験は n=1 ですが、予備ハンダなしで ベース基板の半田付け部分をすこしのぞかせた位置にフレキをテープで固定し、先の細いハンダコテで両方にハンダがのるように 細いハンダをコテの脇から添えて作業しました。ルーペで検査して 隣とつながってしまったところは修理しました。
基板側はスズメッキされているので予備ハンダはせず、フレキのハンダ付け面をハンダで湿らせたハンダ吸い取り線で拭く感じで極力薄くハンダメッキした後、セロテープで基板とフレキの位置を合わせて固定し、再びハンダで湿らせたハンダ吸い取り線で拭く感じで基板とフレキのハンダ付けをしたところ上手く行ったみたいです。
フレキのハンダ付け部分には小さい穴が開いており(画像参照)、そこを通して毛細管現象かなんかでフレキと基板の間にハンダは染み通る仕組みになっているみたいなので、ひょっとするとハンダメッキの作業も不要だったかもしれません。
先の投稿の
画像データを sketch.bin にリンクするのが面倒だったので、画像データは microSD メモリに格納したものを読み込んで使用するよう変更しています。
に対し、特別な変換プログラムやビルドスクリプト等を用いることなく、簡単に、画像データ等のバイナリデータを sketch.bin にリンクするカッキ的(でもないな)方法を思いついたので作業手順を説明します。
display_block_copy_r(100, 100, 200, 136, __sectop("D_BIN_RX_RPB"));
/*GR-SAKURA Sketch Template Version: V1.08*/ #include <rxduino.h> #include <iodefine_gcc63n.h> #include "gr_common/intvect63n.h" #include "src/define_const.h" extern "C" { void init_touch(void); void mole_main(void); void excep_cmtu0_cmt0(void); void Excep_CMTU0_CMT1(void); const uint8_t* __sectop(const char* id); #include "src/cmt.h" }; #define IncBin(label, file) \ extern "C" const uint8_t label []; \ __asm __volatile( \ "\t.section .rodata." #label "\n" \ "\t.global\t_" #label "\n" \ "_" #label ":\n" \ "\t.incbin\t" #file "\n" \ ); IncBin(rx_rpb_bin, "src/rx_rpb.bin"); IncBin(fonts_bmp, "src/fonts.bmp"); IncBin(default_mole, "src/default_mole.bmp"); IncBin(hit_bmp, "src/hit.bmp"); IncBin(miss_bmp, "src/miss.bmp"); IncBin(state0_bmp, "src/state0.bmp"); IncBin(state1_bmp, "src/state1.bmp"); IncBin(state2_bmp, "src/state2.bmp"); IncBin(state3_bmp, "src/state3.bmp"); static struct { const char* id; const uint8_t* buffer; } imgTable[] = { {"D_BIN_RX_RPB", rx_rpb_bin}, {"D_BMP_FONT", fonts_bmp}, {"D_BMP_DEFAULT", default_mole}, {"D_BMP_HIT", hit_bmp}, {"D_BMP_MISS", miss_bmp}, {"D_BMP_STATE0", state0_bmp}, {"D_BMP_STATE1", state1_bmp}, {"D_BMP_STATE2", state2_bmp}, {"D_BMP_STATE3", state3_bmp}, }; void setup() { init_touch(); init_cmt0(); init_cmt1(); mole_main(); } void loop() { } const uint8_t* __sectop(const char* id) { const uint8_t* p = NULL; for (int i = 0; i < int(sizeof(imgTable) / sizeof(*imgTable)); i++) { if (strcmp(imgTable[i].id, id) == 0) { p = imgTable[i].buffer; break; } } return p; } void MyExcep_CMT0_CMI0(void) { excep_cmtu0_cmt0(); } void MyExcep_CMT1_CMI1(void) { Excep_CMTU0_CMT1(); }
以上の簡単な手順で更にお手軽に動作させられる筈。
そーいや aitendo 取り扱いの GR-SAKURA[GR-SAKURA-P]、なんかハンパにピンソケット余計に付いてんな てな感じで漠然と思っていたのだけど、この基板のためか! 今気付いた。びっくりだ。