fc2ブログ
 カレンダー

05月 │2023年06月│ 07月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

 プロフィール

はしもと

Author:はしもと
ユーザインタフェース系のお仕事をしてます.関心領域は画像処理,拡張現実感,ヒューマンコンピュータインタラクション,エンタテインメントコンピューティングあたり.モノ書きもやってます.

 工学ナビ

工学ナビは工学系の技術のチュートリアルを扱うサイトです.

 作ったもの

 Twitter

 

 天気予報


 ブログ内検索

 カテゴリー

最新コメント

 RSSフィード

 リンク

このブログをリンクに追加する




工学ナビの中の人 はしもとのブログです. いろんなコトを研究的,工学的な視点で見つめます.
GBAでI/O制御
GBAいじりをはじめて2週間.IO制御ができたのでご報告です.
GBAがシリアル通信というのは知っていたけど,よもや単純なRS-232Cプロトコルだったとは….

PCと繋ぐにはレベルコンバータが必要だったので,とりあえず手元にあったPICと直結してみました.どのみちセンサ入力だとかモータ制御をやろうとしたときにシリアル⇔パラレル変換が必要ですしね.一応やりかたを書いておきますが,GBAが壊れるかもしれないので自己責任でやってください.


こちらのサイトを参考にしています.
足りない情報(ヘッダファイルなど)はこちらから補ってください.

GBAソフト開発の第一歩
  開発環境の用意とプログラミングの仕方についてはここが一番わかりやすい.
Ir Hack 
  配布しているソースの中にシリアル通信用のヘッダやフォントデータがある(超便利)
C言語によるシリアル通信
  PICの神様こと後閑さんのページ.PICでのシリアル通信の方法はここを参考にした.
ゲームボーイアドバンス用シリアル通信ケーブルの製作
  ここの回路図を見てケーブルのピンアサインを調べた.


<回路>
 ケーブルにはゲームボーイカラー/ゲームボーイポケット用の対戦ケーブルを使用しました.中古で800円で入手(あまり安くない).GBA専用ケーブルではないけど,一応GBASPには挿せます.PICにはポピュラーな16F84Aを使用しました.GBAとPICの結線関係を以下に示します.

16F84AのRA1 - GBA側3番ピン(GBAへのシリアル入力)
16F84AのRA0 - GBA側2番ピン(GBAからのシリアル出力)
回路のGND  - GBA側6番ピン(GND)
GBA側4番ピン - GBA側5番ピン(いずれも制御信号)

あとは電源とか発振子などPICの駆動に最低限必要なパーツをつけてください.

<ゲームボーイ側プログラム>
#include "include/types.h"
#include "include/BG.h"
#include "include/BGText.h"
#include "include/SIO.h"
#include "include/key.h"

int __gba_multiboot = 0;

int main(void)
{
   u8 input;
   InitFontData();
   Print(1, 1, "Serial Test", 0);

   init_uart(BAUD_RATE_9600 | PARITY_NONE);
   while (1) {
     input = recv_data();
     PrintValue(1,2,"%02x",input,0);
   }
}

<PIC側プログラム>
#include <16f84a.h>
#fuses HS, NOWDT, NOPROTECT
#use delay(clock=10000000)
#use RS232(BAUD=9600, XMIT=PIN_A1 ,RCV=PIN_A0, parity=N, bits=8)

main() {
  char i;
  while (1) {
     for (i=0x00; i<=0xff; i++) {
       printf("%c",i);
       delay_ms(100);
     }
  }
}


上のプログラムの例では,PICからGBAに0x00~0xFFの値を送信し,GBA上でそれを表示します.

ブレッドボードで適当に実験.
060708_gba_01.jpg


うまくいったので調子に乗ってIOボードを作ってみました.
こんな感じ.

060708_gba_02.jpg

060708_gba_03.jpg

060708_gba_04.jpg


 なんか久しぶりに回路をいじりましたよ.マイコン同士の接続って,うまくいかないときにどっちに原因があるのかよくわかんなくなるので苦労しました.PICも抜いたり挿したりしてたら足が一本取れてしまいましたw ゼロプレッシャーのゲタが欲しい…

さて,次は何をしませうか.


■ 06/08/17 追記 ■
中の人ブログ用ファイル置き場にGBA側プログラムのソース一式を置きました.
(※IrHackさんで配布されているヘッダに少々改変を加えています)


この記事に対するコメント
お久しぶりです
お久しぶりです.あいかわらず面白いことをやっておられますのぉ.

個人的にはキーボードなどの入力機器を接続できるインターフェースを作ってみたいかなと思いました.ソフトウェアキーボードもいいかも.あえてプレステのコントローラを付けるとか。。。
それから,SDカードとかにデータ保存できるようにするとか,自作OS動かすとか.

・・・めちゃくちゃ難しそうですね.

話はかわりますがPICの抜き差しが面倒ならICSPなどのオンボード書き込みに挑戦してみてはいかがでしょうか?ライターによっては抵抗一本増設するだけで可能になる場合も...84AはICSPに対応してたかな?

長文失礼しました.
【2006/07/10 22:46】 URL | だぅ #mQop/nM. [ 編集]

Re:お久しぶりです
>だぅさん
キーボードはいいですね.文字通り鍵盤のほうを繋いでも面白いかも.
SDとかに書き込むのは面白そうですね.大昔に500円で買ったスマートメディアのスロットのパーツがあるので利用法を模索してみます.

ICSPは知りませんでしたが,勝手に考えて似たようなことはやろうとしてましたw
標準の機能としてそういうのあるんですね.ちょっと調べてみます.
情報ありがとうございます.
【2006/07/10 23:39】 URL | naoki #F54KmX5Y [ 編集]

はじめまして
はじめまして。
最近GBAとPICを繋げて何か面白いものが作れないかなと思って、
インターネットで調べていたところ、このブログを発見しました。

あなたのされていることが、自分が考えていたことに近いと思ったのでとりあえず
真似してみようと考えたのですが、<ゲームボーイ側のプログラム>がうまく.outファイルが作成できません。
エラー文は、
「C:\DOCUME.../ccWecaaa.o(.text+0x10): undefined reference to 'InitFontData'」
等いう文が、InitFontData,Print,init_uart,recv_data,PrintValueについて表示されます。

GBAの開発に関しては今回が初めてで、「GBAソフト開発の第一歩」を参考にしながら環境は整えたつもりです。ヘッダファイルに関しても、ブログで紹介されているHPからさがしてきました。リンカーとかの問題かなと思って調べてはみたのですが知識が乏しくよくわかりません。
 対策がわかるようでしたら、教えていただけませんか?よろしくお願いします。
【2006/08/17 13:28】 URL | Westernfield #/CtogYt2 [ 編集]


>Westernfieldさん
はじめまして,こんにちは.
非常に丁寧な質問文ありがとうございます.

実を言うと僕も同じところで悩みました.
「多分ヘッダ(*.h)を呼んでもソース(*.C)が読まれてないんだろうな.でも設定の仕方わかんないや」という流れから,ソースとヘッダを統合するというズルをしました.

例えばBGText.hの終端にBGText.cの内容をコピー&ペースト,という感じですね.
(ヘッダの終端に#include "BGText.c" としても同じだと思います)
かなり邪道ですが,「とりあえず動けばいい」のならこれで良いと思います.
【2006/08/17 22:11】 URL | なおき #F54KmX5Y [ 編集]


>Westernfieldさん
ソース一式をこちらに用意いたしましたのでご利用ください.(説明を端折ったお詫びです)

中の人ブログ用ファイル置き場 (Yahooブリーフケース)
http://briefcase.yahoo.co.jp/blog_kougaku/

「GBAでIO制御」の中にある「ゲームボーイ側プログラム ソース一式.zip」を
ダウンロードしてください.
【2006/08/17 22:29】 URL | なおき #F54KmX5Y [ 編集]

ありがとうございます
おかげさまでbinファイルまで作成することができました。
【2006/08/18 12:54】 URL | Westernfield #/CtogYt2 [ 編集]

承認待ちコメント
このコメントは管理者の承認待ちです
【2020/01/05 20:53】 | # [ 編集]




この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://kougaku.blog28.fc2.com/tb.php/171-c743b7d9
この記事にトラックバックする(FC2ブログユーザー)