上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
週末に繋いでみたAitendoの3.5インチLCDですが、

どうも左右にある張り出しがLCDからはみ出す感じで邪魔です。折取ってくれと言わんばかりのカットが入っていますし。
しかし写真右は何もないので良いとして左側は何やらスイッチがあり、パターンも走っています。気になりつつも、折ってみました。

恐る恐るichigojamを繋いで電源を供給したところ。

ちゃんと表示できますね。これで基板がLCDの裏側に隠れるようになりました。


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



そこで、次の工作ネタ。

3.5インチLCD用のタッチパネル(@350円)です。

次はこれでichigojam用タッチパネルアダプタを作ってみようと思います。

簡単な仕様としては、キー入力代替え(できればOSD=OnScreenDisplayとセット)、一部エリアでXYペン入力ができたらよいな、と考えています。中々時間が取れないのでちょっと気長になりそうですが。




スポンサーサイト
2015.07.13 Mon l ICHIGOJAM l コメント (0) l top
欲しい物が有って昨日夕方AITENDOに行ってきました。
そこでレジ横で見つけた「2入力3.5インチ液晶モニターキット [K-2AV035]」が気に入って、買ってしまいました。

こんな感じの小さいダンボール箱に入っています。



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



開けてみたところ。


ichigojam出力を繋いでみました。カラーアダプタを使っているのでカラーです。


ichigojamとの組み合わせが中々良い感じですので、次の工作に使おうと思います。

それではまたです。


2015.07.11 Sat l ICHIGOJAM l コメント (2) l top
前回アップしたIchigojsmからカラーアダプタの操作方法について解説します。

■基本仕様
  ・Ichigojamのシリアルポート出力を受けて動作します。
  ・IchigojamのPrint命令で以下のコマンド形式を出力することで操作できます。
  ・通信速度は115.2Kです。
  ・座標系はX=0~63、Y=0~50です。
Ichigojamの32文字x25行を縦横各2分割した座標系です。
  ・使用できる色とカラーコードは以下の通りです。
   黒(0)、青(1)、緑(2)、シアン(3)、赤(4)、マゼンタ(5)、黄(6)、白(7)

■コマンド形式
  ・①ヘッダー1バイト(#80)、②コマンドバイト数、③コマンドコード、④パラメータ(1~5)
  ・Pancakeのバイナリコマンドを意識した構造ですが、以下が違います。
  ・②③④については、#40とのOrを取っています。
   例えばコマンドバイト数が7なら#47となります。その理由は下で述べます。
  ・コマンドバイト数は以下のコマンド説明より長くても大丈夫です。
   例えば初期化コマンドは4バイト命令ですが、長さに7となっていても
後半3バイトが無視されるだけです。
   Ichigojamから各コマンドを同じサブルーチンで呼び出せるようにし、
メモリを節約できます。

「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">





■コマンド
  ・初期化コマンド 
       コマンドコード#60 パラメータ数1(カラーコード)
       機能:全画面のアトリビュートをカラーコードでフィルします。
       例: PRINT chr$(#80);chr$(#44);chr$(#60);chr$(#47);
全エリアを白にします。
  ・PSETコマンド
       コマンドコード#61 パラメータ数3(X,Y,カラーコード)
       機能:指定したドット(4x4Pixel)の色指定します。
       例: PRINT chr$(#80);chr$(#46);chr$(#61);chr$(#45);
               chr$(#48);chr$(#41);
          座標5,8を青にします。
  ・BOXコマンド
       コマンドコード#62 パラメータ数5(X0,Y0,X1,Y1,カラーコード)
       機能:(X0,Y0)-(X1,Y1)の四角枠に色を指定します。
       例: PRINT chr$(#80);chr$(#48);chr$(#62);chr$(#40);chr$(#40);
               chr$(#45);chr$(#48);chr$(#41);
          (0,0)-(5,8)の四角枠を青にします。
  ・BOXFILLコマンド
       コマンドコード#63 パラメータ数5(X0,Y0,X1,Y1,カラーコード)
       機能:(X0,Y0)-(X1,Y1)の四角(内部塗りつぶし)に色を指定します。
       例: PRINT chr$(#80);chr$(#48);chr$(#63);chr$(#40);
               chr$(#40);chr$(#45);chr$(#48);chr$(#41);
          (0,0)-(5,8)の四角を青にします。
  ・LINEコマンド
       コマンドコード#64 パラメータ数5(X0,Y0,X1,Y1,カラーコード)
       機能:(X0,Y0)-(X1,Y1)の線分に沿って色を指定します。
       例: PRINT chr$(#80);chr$(#48);chr$(#64);chr$(#40);
                chr$(#40);chr$(#45);chr$(#48);chr$(#41);
          (0,0)-(5,8)の線分を青にします。

■「②③④については、#40とのOrを取っています。」の理由
   これをやらずともカラーアダプタとIchigojamの通信には問題ないのですが、
   Ichigojamはその通信をPrint文で行っているので、同じ内容を画面にも
   表示しようとします。
   #40とOrを取らないと、データがたまたま改行コード(#0D)のような
   制御コードだったりすると画面が上スクロールします。
   それを避けるためです。
   なお、その表示はされますので、動画のデモではコマンド発行の前に
   毎回LOCATEコマンドで右下にその表示がいくようにしています。
   写真の右下にある英文字がそれです。



動画でデモしているテストプログラムでは、以下の共通サブルーチンで
各コマンドを出すようにしています。

1000 lc22,22:?chr$(#80);chr$(#48);CHR$(u+#40);CHR$(v+#40);chr$(w+#40);chr$(x+#40);chr$(y+#40);chr$(z+#40);:return

   ところで、上の写真のLCDですが、AITENDOの新商品です。後で記事にいたします。

それではまたです。
   
2015.07.11 Sat l ICHIGOJAM l コメント (0) l top
ようやく動作できるようになりました。



最新回路図をアップします。

赤で囲んだところが変更になっています。これは揺れ・色ずれを抑えるためにichigojamとPIC32MXを同期してしまおうという考えでの変更です。PIC32MXのREFCLKO端子から12MHZクロックを出力し、それをichigojamのXTALINに入れています。
PICソフトもそれに対応し、ichigojamファームはXTAL対応用に変えました。効果は。。。。少しだけ改善しましたが完全ではないです。ソフトもアセンブラにしてだいぶタイミングも改善したんですがなんでだろう。。。
なお、この配線はしなくてもichigojamに通常(XTAL無し)ファームを書けば使えます。

「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



 
最新PICソフトは以下です。ラインキャプチャ&表示はアセンブラ化し、同期信号割込みで動くようになっています。
メインでシリアルポートのデータを受けて動作するごく簡単なインタプリタが動いています。
コマンド等は次に時間ができたときに記事にします。

カラーアダプタPICソースコード

動画で使っているテストプログラムは以下です。キャラクタにカラーアトリビュートを付けるアダプタですが、動画ではセミカラーグラフィックもどきが動いています。これは、アトリビュートがキャラクタ単位(8x8pixel)ではなく、4分割4x4pixel単位で付くようにしていることで可能となっています。

BASICテストプログラム

つまり■キャラクタ(CHR$(#01))を表示しておいて、その4分割で色を変えると、4x4ドットの個別カラードットに見える、というトリックです。

とりあえず動いていますが、まだ揺れはあるし、なんか全面に■キャラクタ(CHR$(#01))を描いて白画面にすると表示がひずむのが見えます。まだ完全とは言えないみたいです。





 
2015.07.10 Fri l ICHIGOJAM l コメント (0) l top
ようやくキャラクタ単位での色制御ができるようになってきました。

写真は取り合えず出してみたテスト画面です。


まだまだ途中ですが、苦労したインラインアセンブラバージョンですのでソースをあげておきます。
アセンブラ部は完成してみればたったの20行ちょっとですが、えらく手こずってしまいました。

「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">





変数の引き渡し部(ソース内でgOFFSETを渡している所)をマクロで組んでいたらなぜか分かりませんが
値がアセンブラに渡らず、そこで一番手間取ってしまいました。その前にあるgFCは普通に渡せたのですが。。。
マクロをやめてメイン内に普通に書いてみたら直りましたが、マクロの組み方に問題が有ったのか?


/*
* File: main.c
*
* ichigojam color adopter assembler version
* Created on 2015/07/06
*/

#include
#include
#include
#include

#pragma config PMDL1WAY = OFF
#pragma config IOL1WAY = OFF
#pragma config FUSBIDIO = OFF
#pragma config FVBUSONIO = OFF
#pragma config FPLLIDIV = DIV_1
#pragma config FPLLMUL = MUL_15
#pragma config FPLLODIV = DIV_1
#pragma config FNOSC = FRCPLL
#pragma config FSOSCEN = OFF
#pragma config POSCMOD = XT
#pragma config OSCIOFNC = OFF
#pragma config FPBDIV = DIV_1
#pragma config FCKSM = CSDCMD
#pragma config WDTPS = PS1
#pragma config WINDIS = OFF
#pragma config FWDTEN = OFF
#pragma config FWDTWINSZ = WINSZ_50
#pragma config DEBUG = OFF
#pragma config JTAGEN = OFF
#pragma config ICESEL = RESERVED
#pragma config PWP = OFF
#pragma config BWP = OFF
#pragma config CP = OFF

void proc_line(void);
void uart_putc (unsigned char);
unsigned int uart_getc(void);
void uart_puttext(unsigned char *);
void uart_putnum (unsigned int n);
void uart_puthex (unsigned int n);

int gOFFSET;
int gFC[32*2*25*2];
int gBC[32*2*25*2];
int lines = 0;

#define proc_bit { \
asm volatile("lw $t6,0($t2)");\
asm volatile("andi $t6,$t6,2");\
asm volatile("sra $t6,$t6,1");\
asm volatile("mul $t6,$t6,$t7");\
asm volatile("ori $t6,8");\
asm volatile("sw $t6,0($t3)");\
asm volatile("nop");\
asm volatile("nop");\
asm volatile("nop");\
}
#define proc_char0 {\
asm volatile("lw $t7,0($t0)");\
proc_bit;asm volatile("nop");\
proc_bit;asm volatile("nop");\
proc_bit;asm volatile("nop");asm volatile("nop");\
proc_bit;asm volatile("nop");\
proc_bit;asm volatile("nop");\
proc_bit;\
asm volatile("addi $t0,$t0,4");\
}

//************ MAIN ******************

int main() {

int t,i,j;

SYSTEMConfigPerformance(120000000);
ANSELB = 0;
ANSELA = 0;
TRISB = 0x0002000; // RB3-0 VIDEO OUTPUT , RB13= RXD1
TRISA = 0x0000007; // RA1-0 VISEO INPUT
ODCA = 0;

REFOCONbits.RODIV = 2;
REFOTRIMbits.ROTRIM = 256;
REFOCONbits.ON = 1; // Reference Oscillator Module enabled
REFOCONbits.OE = 1; // Reference clock is driven out on REFCLKO pin
RPA4Rbits.RPA4R = 0b0111;

RPB15R =0x0001; // RB15 = TXD1
U1RXR =0x0003; // RB13= RXD1

U1MODE = 0x0000;
U1STAbits.UTXEN = 1; // enable transmit pin
U1STAbits.URXEN = 1; // enable receive pin
U1BRG = 30000000 / 16 / 115200 - 1;
U1STAbits.OERR=0;
U1MODEbits.ON = 1; // enable UART

LATB = 0x08;

uart_puttext("***** ICHIGOJAM COLOR ADOPTER *****************\n");
uart_puttext("STRATED.\n");

for(i=0;i<64;i++) {
for (j=0;j<50;j++) {
if (i<100) {
gFC[j*64+i] = 0x08 | (i%7) +1;
}else{
gFC[j*64+i] = 0x0f;
}
gBC[j*64+i] = 0x08;
}
}

gOFFSET = 0;

while(1) {

while(PORTAbits.RA0 == 1) {asm volatile("nop");} // Wait for BLANKING
LATB=0x00; t=0;
while(PORTAbits.RA0 == 0) {t++;}
LATB=0x08;

if (t<100) { // If HBLANK
if ((lines < 0)||(lines >=200)) {
LATB=0x08;
while(PORTAbits.RA0 == 1) {
asm volatile("nop");
asm volatile("nop");
asm volatile("nop");
} // while displaying
lines++;
}else{
for (i=0;i<132;i++) {asm volatile("nop");}
// asm volatile("nop");asm volatile("nop");asm volatile("nop");

asm volatile("la $t0,%0"::"i"(&gFC[0]));
asm volatile("la $t2,%0"::"i"(&gOFFSET));
asm volatile("lw $t6,0($t2)");
asm volatile("add $t0,$t6,$t0");
asm volatile("la $t1,%0"::"i"(&gBC[0]));
asm volatile("la $t2,%0"::"i"(&gOFFSET));
asm volatile("lw $t6,0($t2)");
asm volatile("add $t1,$t6,$t1");
asm volatile("la $t2,%0"::"i"(&PORTA));
asm volatile("la $t3,%0"::"i"(&PORTB));

proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0;
proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0;
proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0;
proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0; proc_char0;

LATB=0x08;
lines++;
gOFFSET = (lines/4) * 64 * 4;
}
}else{
lines = -21; // if VBLANK
}
}
}

void uart_putc (unsigned char c)
{
while (U1STAbits.UTXBF); // wait for trasmit buffer enmpty
U1TXREG = c; // set data
}

void uart_puttext(unsigned char *c)
{
unsigned char *c0;
c0 = c;
while (*c0 != 0x00) {
while (U1STAbits.UTXBF); // wait for trasmit buffer enmpty
U1TXREG = *c0; // set data
c0++;
}
}
unsigned int uart_getc(void)
{
if (!U1STAbits.URXDA) {
return 0xffff;
}else{
return ((unsigned int)(U1RXREG)&0x00ff);
}
}
void uart_putnum (unsigned int n){
int n0,i,n1;
n0 = n % 100000; n1=10000;
for (i=0;i<5;i++) {
uart_putc(0x30 + (n0/n1));
n0 %= n1;
n1 /= 10;
}
}


後はシリアル通信でichigojamからのコマンドを受けるのと、あとはちらつきを抑えないと。
ちらつきは手ごわいかもしれません。

また本業が立て込んでいますので、今週末に続きができるかどうか。。。。。

2015.07.07 Tue l ICHIGOJAM l コメント (0) l top
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。