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番目に何だか見覚えのあるページがでてくるかと。
というか昨日はそこにリンク張ってあったような気がしたけど気のせいだったか?
皆さん、情報ありがとうございます!
早速、挑戦したいと思います!少しやる気が出ました。
今、通販の在庫ありますので、是非!
お陰様でフルカラータッチパネルシールドが出来ました!
あとは、ソフト書き書きは別途ということで!
しかしGR-SAKURA、GR-KURUMIは若松さんの独占販売かと思っていたけど、違うのか。
若松さんも負けずに何か面白基板を開発しないと!。
独占ていうか、元から若松通商の製品ですね。
若松通商 aitendo と奇跡のコラボ、とかなんかで若松の 2F(だったか?) にaitendo 製品置いてたし、相互にやりあってんじゃないでしょうか。
# 面白基板もそうだけど、SAKURA 用純正バニラシールドが先ではないかなあ。
え!aitendoと若松さんで融通利くのかな?。
それなら前に基板作ったSPI接続のこれとか、
www.aitendo.com/.../2950
これなんかも、
www.aitendo.com/.../5419
ネタとしては有るんだけどなぁ。
GR-SAKURA用のバニラシールド相当もaitendoさんから出ていますよ。
値段も200円
www.aitendo.com/.../7211
こちらも、購入しました。
200円は魅力的だけど、やっぱSAKURA色でないと。
LCDの対応早すぎです!しかもタッチパネル付き。シールド基板200円も安すぎですね。
aitendoからリンク許可願いのメールが来たので許可しまして,商品ページから私のページへリンクされました.
製品の企画には関わっていませんが,回路は私の設計と同じのようです.
無許可だったんですね。
今見たらトップの画像にもお名前が入ってましたね。
公開しているので別に無許可でも良かったのですが(^^).
私が製品に関係していると思われるのも困るので「聞いてない」とツイートしたのを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(); }
以上の簡単な手順でお手軽に動作させられる筈。