上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
キャプチャ部のアセンブラ高速化に取りかかる前に、PIC32MX用インラインアセンブルを練習してみました。

アセンブラはZ80(歳が分かる(^^;)以来ですし、今のMIPS32は初めてですので。

まずはC言語との変数やり取りとPICレジスタ直接制御をやってみました。
変数やり取りは先日開通したシリアルポートからアセンブラ前後の値を出力しての確認です。
PICレジスタは一番簡単なPORTA読み取り、LATB書き込みにしました。
今の回路はichigojamが繋がっていますので、PORTAのビット0,1にビデオ同期とデータが入っています。
うまくいくとそのままPORTBにでてくるはずです。

動作結果はこの通り。数値引き継ぎはどうやらうまくいきました。
シリアルポートが繋がってコンソールデバッグができるようになると俄然やりやすくなります。



「スポンサードリンク」

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



オシロでPORTBの波形を見たところでは、PORTAリード、LATB書き込みもうまくいっているようです。

ということで、今回のテストプログラムを残しておきます。
次に時間ができたらいよいよカラーアダプタのアセンブラ化を始めます。


/*
* File: main.c
*
* MIPS32 ASSEMBLER TEST
* Created on 2015/06/30
*/

#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

#define PROC_ONE_PIXEL4 LATB = (PORTAbits.RA1*FC)|0x08;asm volatile("NOP");asm volatile("NOP");asm volatile("NOP");asm volatile("NOP");


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

int WORK;


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

int main() {

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("***** PIC32MX ASSEMBLER TEST *****************\n");

// ****** グローバル変数をアセンブラで読み書きするテスト

uart_puttext("BEFORE.\n");
uart_putnum(WORK);
asm volatile("la $t0,%0"::"i"(&WORK)); // WORKのアドレスをt0に
asm volatile("lw $t1,0($t0)"); // アドレスt0の値をt1に
asm volatile("addi $t1,$t1,123"); // t1に123を加算
asm volatile("sw $t1,0($t0)"); // t1をアドレスt0に戻す
uart_puttext("AFTER.\n");
uart_putnum(WORK);


// ****** ポートAの状態を読み取ってポートBに出力するテスト

while (1) {
asm volatile("la $t0,%0"::"i"(&PORTA)); // PORTAアドレスをt0に
asm volatile("la $t1,%0"::"i"(&LATB)); // LATAアドレスをt1に
asm volatile("lw $t2,0($t0)"); // アドレスt0の値をt2に
asm volatile("sw $t2,0($t1)"); // t2をアドレスt1に
}

}

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;
}
uart_putc(0x0a);
uart_putc(0x0d);
}

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);
}
}



スポンサーサイト
2015.06.30 Tue l ICHIGOJAM l コメント (0) l top
FACEBOOKで、Ichigojamのファームに手を加えられないか?という書き込みをみましてHEXファイル操作の実験をしてみました。

◆実験内容:
  ①IchigojamのHEXファイルをエディタで開き、496368の文字列を探します。
   これは最初の表示の”Ich ”にあたります。




  ②引っかかったところの文字列がアスキーコード見て"Ichigojam BASIC 1.0.0 by jig.jp"
   なので、そこを書き換えます。行の頭と末尾は文字列以外なのでいじりません。
  ③FLASHMAGICでHEXファイルを書き込みます。



  データにはハッシュチェックが入っているはずで、改変したらここで引っかかると思っていましたが、
  普通に書きこめてしまいました。どうやらFLASHMAGICは見ていないらしいです。



「スポンサードリンク」

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




◆結果:
  オープニングメッセージがHACKEDに変わりました。すんなりできて驚きました。



◆展開
  フォントデータパターンを同じように検索し、その領域を書き換えてしまえば多分
  フォントパターンも変えることができると思います。

  ※無理やり手法ですので、どんな悪影響が有るか分かりません。
       おためしは自己責任でお願いします。

それではまたです。

2015.06.29 Mon l 未分類 l コメント (0) l top
この週末にカラーアダプタソフトを完成させたかったのですが、今日明日と急な仕事が入りましたのでちょっと無理そうです。
とりあえず出来ている機能を動かして動画にしてみました。

ラインごと固定の色が付きますので、以前作ったインベーダゲームをカラーで動かしてみました。




「スポンサードリンク」

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




回路図とソフトについては昨日の記事をご覧ください。

まだ途中で以下のような改善が必要です。

  ①キャラクタ単位での色制御(現在は行単位)
    → 現在C言語で書いているための限界です。
       RGB出力部をアセンブラにする必要が有ります。

  ②シリアル通信によるコマンド受付と実行

  ③表示ジッタ改善(動画を見るとわかりますがちりちりと揺れています。
        ichigojamとアダプタの同期が完全ではないためと思われます。)

来週できそうかどうか。。。





2015.06.27 Sat l ICHIGOJAM l コメント (0) l top
シリアル通信機能を動かしました。

TeraTERMで受信したところ。分かりにくいですが上2行はアダプタ自身のメッセージ、それ以後はichigojamからの出力がスルーで出ています。(この画面実はLISTを出したところで処理が間に合っていなくて止まっています。処理性能は全体にこれから改善なので今は目をつぶっています。)


回路も修正しました。

主な変更点:
  ・RxD,TxDの配線見直し。デバッグのためUSB-シリアルにichigojamのTxDを出すかアダプタのTxDを出すかの
   スイッチを付けました。デバッグ中はアダプタの方を出力します。
  ・RGB分圧抵抗を小さくしました。CXA1645のデータシートに「ここのインピーダンスはできるだけ小さく」
   とあったためです。これで色ずれがすこし改善されたと思います。
  ・ichigojamに5Vを供給しました。3.3Vだけで良いと思っていましたが、キーボードに5Vが必要だったためです。


「スポンサードリンク」

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





表示ジッタがまだ残っていて、波形を見たところではどうもichigojam信号の取りこみタイミングで微妙な同期ずれが有るためのようです。ずれといってもほんの数10nsで、LCD表示のためキャプチャしていた時は問題なかったのですが、やっぱりカラーコンポジットは厳しいみたいですね。ichigojamとアダプタをハード的に同期してしまうしかないかと考えているところです。ソフトが有る程度できたらやってみます。

現状はこんな感じです。またごちゃつき具合が増しています。


まだ機能限定ですがソフトもアップします。


/*
* File: main.c
*
* ichigojam color adopter test version
* Created on 2015/06/26
*/

#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 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

#define PROC_ONE_PIXEL4 LATB = (PORTAbits.RA1*FC)|0x08;asm volatile("NOP");asm volatile("NOP");asm volatile("NOP");asm volatile("NOP");


void uart_putc (unsigned char);
unsigned int uart_getc(void);
void uart_puttext(unsigned char *);

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

int main() {

int lines = 0;
int BC,FC;
int x,t;
unsigned int rcv_data;

SYSTEMConfigPerformance(120000000);
ANSELB = 0;
ANSELA = 0;
TRISB = 0x0002000; // RB3-0 VIDEO OUTPUT , RB13= RXD1
TRISA = 0x0000007; // RA1-0 VISEO INPUT
ODCA = 0;
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");

while(1) {

while(PORTAbits.RA0 == 1) {} // Wait for BLANKING
LATBbits.LATB3= 0;t=0;
while(PORTAbits.RA0 == 0) {t++;}
LATBbits.LATB3= 1;
if (t<100) { // If HBLANK
if ((lines < 0)||(lines >=192)) {
LATB=0x08;
while(PORTAbits.RA0 == 1) {
if (U1STAbits.URXDA) {
uart_putc(U1RXREG);
}
} // while displaying
lines++;
}else{
asm("NOP");asm("NOP");asm("NOP");asm("NOP");
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;

PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;

PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;

PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;

PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;PROC_ONE_PIXEL4;
LATB=0x08;
lines++;
FC = (((lines/8)%7)+1) | 0x08;
if (U1STAbits.URXDA) {
uart_putc(U1RXREG);
}
}
}else{
lines = -21; // if VBLANK
BC = 0x08 ; FC = 0x0f;
}
}
}


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);
}
}


土日ソフト更新予定でしたが、予定外のお仕事が入ったためできなそうです。。。。

<



2015.06.27 Sat l 未分類 l コメント (0) l top
なんとかカラー表示ができるようになりました。

ソフトはまだC言語です。RGBエンコーダーICのおかげで何とかCでもカラー表示ができるようになりました。
テストのためPICのソフトで色を行ごとに固定で規定しています。

写真だとわかりませんが、どうも色ずれがあって表示がちりちりしています。ソフトのタイミング調整が不十分なのか、ハードの問題かまだわからず要調査です。

「スポンサードリンク」

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





基板はこんな感じです。

思った通り抵抗、コンデンサ部品の配置に苦労しまして、結局RGBの分圧抵抗+0.1uFコンデンサ回路はチップ抵抗を使ってしまいました。基板の裏側はお見せしたくないです(^^;

表示を安定させた後はシリアル通信機能を組み込んでichigojamのBASICからアトリビュートを制御できるようにすれば慣性となります。ソフトは完成後にアップします。

今日もう少しやってみますが、完成は次の週末になりそうです。





2015.06.21 Sun l ICHIGOJAM l コメント (0) l top
やり直し回路図を入力しました。


CXA1645を使うので部品がかなり増えています。電源5Vが必要なのでUSBから取り、生成した3.3Vをichigojamに供給するようにします。このためichigojamからは3.3Vレギュレータを削除します。ichigojamからのコマンド受信はシリアルとしました。

基板面積も足りないのでちょっと大きめのTNF39-59とします。




「スポンサードリンク」

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




まずは主要部品を取り付けてみたところ。





なんとか乗りましたが、余地が少ないですね。CR部品の取り付けが大変そう。。。。




2015.06.20 Sat l ICHIGOJAM l コメント (0) l top
その後いろいろ検討してみたのですが、どうもPIC32MXといえどもソフトだけではichigojam出力をキャプチャしながらカラーNTSCは出せそうもない感じです。オーバクロックで動かしたとしても1PIXELあたりアセンブラ10数命令程度しかとれず、ある程度コードも考えてみたのですがその中でichigojamの出力をGPIOでサンプルし、0,1を判別し、座標に対応したカラーデータをテーブルから取り出して、PORTBをそのデータ値で振る。。。。やっぱり入りそうにないです。。。
 
そこでカラーに関して専用ICを使うことにしました。物はコンポジットエンコーダ CXA1645Pです。これならカラ―バーストとカラー出力をお任せできるのでソフトは一気に楽になります。1000円価格アップで基板も大きくなりますがいたしかたありません。物はネット購入したので週末にはんだ付けしたいと思います。
「スポンサードリンク」

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




 
平行してichigojamの同期信号でPIC32MXの割込みをかける実験をしてみました。LCDタイプではキャプチャ、表示、他の処理を順番にできたので割込みを使わずポーリングだけでやっていましたが、今回の物はキャプチャ+表示に割込みを使わないと「他の処理」ができなくなるはずです。なお他の処理とは通信と通信内容の解釈実行です。
 
PIC32MXの外部割込みを使うのですが、これが中々うまくいかず、いろんなフォーラムサイトのQ&Aを調べてようやく動くようになりました。フォアグラウンドでPB0を、割込みでPB1をトグル動作させるだけのものですが、苦労したので備忘録としてソースをコピーします。

/*
* File: main.c
*
* PIC32MX250F128B EXT4 test
* Created on 2015/06/18
*/

#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 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

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

int main() {

ANSELB = 0;
ANSELA = 0;
TRISB = 0x0000000; // RB3-0 VIDEO OUTPUT
TRISA = 0x0000003; // RA1-0 VISEO INPUT
ODCA = 0;

DDPCONbits.JTAGEN=0;
INTEnableSystemMultiVectoredInt();
mINT4SetIntPriority(6);
mINT4SetEdgeMode(0);
mINT4IntEnable(1);
IFS0SET=_IFS0_INT4IF_MASK;

while(1) {
LATBbits.LATB0=~LATBbits.LATB0;
}
}

//************ EXT4 Interrupt handler ******************

void __ISR(_EXTERNAL_4_VECTOR,IPL6SOFT) External_Interrupt_4(void)
{
LATBbits.LATB1=~LATBbits.LATB1;
mINT4ClearIntFlag();
}


次は土曜日の予定ですが、時間が取れるかな?

それではまたです。


2015.06.18 Thu l ICHIGOJAM l コメント (0) l top
今日は時間が取れたのでカラーアダプタのソフトの方をやっているのですが、難航中です。

最初にハードの問題。とりあえずのLチカの後、4ビットDACのテストをしようと思って、0~15の繰り返しを行ったところ、有る程度動いてリセットの繰り返しになりました。3.3V電源をみたところ、PIC32MXが有る程度動くと2Vまで低下しているのが分かりました。

今回のボードはichigojamにアドオンなので、3.3VをichigojamのVCCから取っています。ichigojamの部品表を見ると乗っているのは150mA品でした。これで2CPUはつらいだろうと手持ちの500mA品に変えたところ安定しました。
「スポンサードリンク」

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






次にクロックの問題。今回3.5845MHzのXtalを付けていますので、PIC32MXのクロックをこれの倍数モードで動かそうと思っているのですが、Configを以下の設定にして外部クリスタルソースPLLモードにしているのですが動作しません。
   #pragma config FNOSC = PRIPLL
   #pragma config POSCMOD = XT

Xtalの端子見ていると発振しているし、試しにFNOSC = PRI 設定にしてPLLを外すと動きます。(当然かなり遅いです。)
どうもPLLが動いていないみたいに見えます。PIC32MXのデータシートを良く見るとPLLの入力範囲が4~5MHzとなっていたりして、3.5845MHzはその範囲外だからもしかしたらそのせいかもしれないですが、他の方のBLOGでその周波数で動かしてる例もありますので実力で動くのではないかな、とも考えています。

試しに内部FRCモードで動作させてカラ―バーを出そうとしましたが、乱れたモノクロ階調表示になってしまいました。やっぱり基準周波数は3.5845MHzにしないといけないのでしょう。ここはもうちょっと頑張ってみます。




2015.06.13 Sat l ICHIGOJAM l コメント (0) l top
PIC32MXを使ったichigojamカラーアダプタ、作ってみることにしました。

基本構想はこんな感じです。
  ・前回作ったLCDタイプと同様なカラー、ブリンク、アンダーラインアトリビュート機能を付加するアダプタを作る
  ・ichigojam基板にアドオンする小型基板にする
  ・I2Cによってichigojamからアトリビュート設定できるようにする
  ・可能ならグラフィック合成機能も追加する

まずは回路図。

CPUは前回と同じPIC32MX250B128、NTSC出力に対応するため源発振XTALを3.574595MHzとします。
4ビットDAC回路はPANCAKEを参考にさせていただきました。

「スポンサードリンク」

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




基板はタカチのTNF29-44です。


それほど規模がない回路なので今日作ってみました。

 


これでPIC書き込みまではできています。ハードは良いのですが、問題はソフトです。
ネットを見るとPICによるカラーNTSC出力は既にやられている方が多いので可能なのは確かですが、私は作ったことがないので勉強しながらになります。ちょっと気長になるかと思います。


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