Google Play にデベロッパー・ページを作成した


20140529_page

Google Play に デベロッパー・ページ が作成できるようになったので、
さっそく作成してみました。

512 x 512 のデベロッパーのアイコン画像と、
4096 x 2304 のヘッダーの画像 が必要です。
後者のような大きな画像がなかったので、すこし小さい画像を拡大しました。
また、画像容量は8MB以下にする必要がありますが。
PNG形式だとその大きさに収まらず、JPEG形式だと収まりました。

作成したデベロッパー・ページ
https://play.google.com/store/apps/dev?id=5733435257761081685

参考
デベロッパー ページの作成または更新
Android:Google Play デベロッパー紹介ページの作成


Google Play のレーティング


Google Play のレーティングに関する規則が変わりました。
従来は、ユーザー成熟度に応じて、4段階から選択する方法でしたが。
今回から、アルコール、暴力、位置情報の扱いなどの関するアンケートに回答する方法に変わりました。
アンケート結果に応じて IARC (International Age Rating Coalition) などのレーティング機関が定めたレーティングが適用されます。
5月15日から適用されます。

こんなアンケートに回答します。
20150528_questionnaires

IARC から証明書が送付されます。
20150528_rateing

参考
アプリやゲームのコンテンツのレーティング
IARC (International Age Rating Coalition)


PIC16F84A スロットゲーム


前回作成した スロットゲーム基板 を使って、プログラムを作成しました。
数字の「777」を揃えるスロットゲームです。

操作はタクトスイッチを押すだけです。
タクトスイッチは2つありますが、ゲームに使用するのは左側で、右側はリセットボタンです。
7セグには0から9の数字が1/3秒間隔で順番に表示され、ビープ音が鳴ります。
スイッチを押すごとに、3桁の7セグの右側から停止し、選んだ数字が表示されます。
**3 -> *23 -> 123
3回押すと、選んだ数字が点滅して、ゲームが終了します。
777が揃ったときは、77Lのように数字が回転する、特別な動作をします。

LEDは1秒間隔で点滅しますが、ゲームの進行とは関係ありません。

プログラム領域の使用量は、99.6%で、限界まで使っています。
7セグの表示、LEDの点滅、ビープ音、ボタンの監視などを行っています。

ソースコードは Github に公開しました。


PIC16F84A 7セグLED


PIC16F84A で7セグLED SND2537 を点灯します。
Arduino で作ったプログラム をベースに、PIC向けに変更しました。

Arduino では、000 から 999 まで 0.1秒刻みでカウントアップする 10秒タイマーでした。
今回は、各セグメントを1つづつ順番に点灯するモードと、012, 123, 234 のように数字がスクロールするモードを、交互に表示するようにしました。

ソースコードは Github に公開しました。


PIC16F84A スロットゲームの基板を作る


20150506_pic_front

概要
Eagle と Sevenmini を使って、PIC16F84A で制御するスロットゲームの基板を作ります。
7セグLEDやタクトスイッチや電磁ブザーなどを搭載します。
元ネタは PICと7セグLEDでスロットマシン です。

基板作成の手順は Eagle と Sevenmini を使って電子基板を作る を参照してください。
データは GitHub で公開しています。

Eagle 側の作業
(1) 回路図 (sch) とボード図 (brd) を作成します。
20150506_pic_sch 20150506_pic_brd

(2) Mirrorにして、ガーバーデータを出力します。
20150506_pic_gerber

FLASH 側の作業
(1) ガーバーデータを読み込みます。
ハンダ面データ (sol) を「フォト表」に、
ドリルデータ (drd) を「穴」に、
外形データ (out) を「外形表」にします。
20150506_pic_flash

(2) 輪郭線抽出を行います。

Sevenmini 側の作業
(1) 配線の加工
基板を両面テープで固定します。
ミリング用のエンドミルを取り付けます。
CAM-Circuit2 アプリから加工を指示します。
(2) 穴の加工
ドリル用のエンドミル 0.6mm に交換します。
CAM-Circuit2 アプリから加工を指示します。
(3) 外形の加工
今回は基板をそのまま使い、加工せず。
20150506_pic_milling

ハンダ付け
(1) 表面の配線を行います。
(2) 部品をつけて、裏面をハンダ付けします。
20150506_pic_front 20150506_pic_rear

動作確認
PICに Lチカのプログラム を書き込みます。
ボタン電池を搭載します。
LEDが点滅すればOKです。

今回は、ゲーム基板を作るところまでです。
ゲームのプログラムは、後ほど作成します。

課題
(1) 表の配線と、抵抗が、同じ穴になってしまった。
意識して設計したつもりが、1ヶ所だけミスった。
(2) 電池のスイッチを付け忘れた。
電池を切るときは、ボックスから外す羽目に。
これが割と面倒。

(3) PIcKit3 が 電池ケースとぶつかってしまった。
ちょっと浮くけど、書き込みには支障なし。
20150506_pic_todo2

参考
PICと7セグLEDでスロットマシン
PIC16F84Aで電子工作 スロットマシーンを作ってみました


PIC16F84A ブザー音 鯉のぼり


YouTube Preview Image

前回 は、PIC16F84A に圧電ブザーをつけてドレミを鳴らしました。
今回は、楽譜を元に音楽を鳴らします。
スイッチサイエンスさんがゴールデンウィークの企画として Arduinoで童謡「鯉のぼり」を流してみよう を紹介しています。
それに便乗して「鯉のぼり」を演奏します。
楽譜は こいのぼりなど子供の日用の楽譜 を参照しました。

プログラムを Github に公開しました。

参考
Arduinoで童謡「鯉のぼり」を流してみよう
こいのぼりなど子供の日用の楽譜


PIC16F84A ブザー音 ドレミ


20150501_pic_buzzer

PIC16F84A のデジタル出力に 圧電ブザー をつけて、ブザー音を鳴らすことができます。
さらに、ブザー音の周波数を変えることで、疑似的な音楽を鳴らすことができます。
例えば、A(ラ)の音は 440Hz なので、1秒間に440回オンオフを繰り返すことで、Aの音になります。
正確に 440回を刻むために、タイマー割り込みを使用します。

割り込み周期は下記の 計算式 で求められます。
(Fosc / 4) * プレスケーラー分周 * タイマー分周

なお、440回オンオフを繰り返すには、倍の 880Hz の割り込み周期が必要となります。
880Hz にするには、Fosc が 16MHZ のときは、プレスケーラー分周 が 1/32 で、タイマー分周 が 1/142 となります。
同じように、他の音も周波数から分周比も計算して、ドレミの音階を作ります。
周波数は ドレミの音階(平均律)に対応した周波数の表 を参照しました。

音階 周波数 分周比 タイマー値
262 Hz 1/239 17
293 1/213 43
330 1/189 67
ファ 349 1/179 77
392 1/159 97
440 1/142 114
494 1/127 129
高いド 523 1/120 136

プログラムの例

#define DO4 17
#define RE 43
#define MI 67
#define FA 77
#define SO 97
#define RA 114
#define SI 129
#define DO5 136
void tone( int tmr, int t1, int t2 ) {
    tmr0_value = tmr;
    TMR0 = tmr0_value;
    is_tone_enable = true;
    for( ; t1>0; t1-- ) {
        __delay_ms(10);
    }
    noTone( t2 );
}
void noTone( int t ) {
    is_tone_enable = false;
    for( ; t>0; t-- ) {
        __delay_ms(10);
    }
}

プログラムを Github に公開しました。

補足
タイマー割り込みでブザー音を鳴らす方法は、Arudino でも採用されています。
Arudino では、tone関数に周波数を指定すると、関数の中で計算してプリスケーラーとタイマーの値を決めています。
今回のPICでは、予め計算しておいたプリスケーラーとタイマーの値を設定します。

参考
ドレミの音階(平均律)に対応した周波数の表


PIC16F84A タイマー割り込み


PIC16F84Aには、8ビットタイマーが内蔵されています。
これを用いて、タイマー割り込みが利用できます。

20140427_pic_timer0

タイマー割り込みを使用するには、下記の3つのレジスタを設定します。
INTCON
割り込み制御レジスタ
GIE (Global Interrupt Enable)
TMR0IE (TMR0 Overflow Interrupt Enable)

OPTION REG
オプション・レジスタ
T0CS (TMR0 Clock Source Select)
1 = Transition on RA4/T0CKI pin
0 = Internal instruction cycle clock (CLKOUT)
PSA (Prescaler Assignment)
1 = Prescaler is assigned to the WDT
0 = Prescaler is assigned to the Timer0 module
PS2-0 (Prescaler Rate Select)
 Prescaler Rate Select は、000 (1/2) から 111 (1/256) が設定できます。

TMR0
タイマー0 レジスタ
8ビットのアップカウンタです。
255を超えてオーバーフローしたときに割り込みを発生します。
0x00 (1/256) から 0xFF (1/2) が設定できます。
注意:分周比 は 256 – 設定値 です。

割り込み周期
割り込み周期は下記の計算式で求められます。
(Fosc / 4) * プレスケーラー分周 * タイマー分周

例えば、Fosc が 16MHZ で、プレスケーラー分周 が 1/256 で、タイマー分周 が 1/256 のときは、61 Hz (16.4 ms) です。
それより長い周期の割り込みが欲しいときは、プログラムでカウンタを作って、割り込みがN回起きたら、処理を実行するようにします。
例えば、1秒周期のときは、61進カウンタにします。
61 = 1 sec / 16.4 msec

プログラム例
1秒間隔でLEDを点滅させるプログラム

int main(void) {
    TRISA = 0x00;   // PortA all output
    TRISB = 0x00;   // PortB all output
    PORTA = 0x00;   // PortA all low
    PORTB = 0x00;   // PortB all low
    OPTION_REG = 0x07;  // 1/256
    TMR0 = 0;   // 1/256  
    INTCONbits.TMR0IE =1;   // TMR0 Overflow Interrupt Enable
    INTCONbits.GIE = 1; // Global Interrupt Enable
    while(1) {}     // endless loop
}
static void interrupt isr(void) {
    if (INTCONbits.TMR0IF == 1) {   // TMR0 Overflow
        INTCONbits.TMR0IF = 0;  // clear flag
        TMR0 = 0;
        if ( counter >= 61 ) {  // 1sec
            counter = 0; // reset counter
            PORTBbits.RB4 = is_led_on;  // set LED
            is_led_on = !is_led_on; // bit invert
        }
    }
}

プログラムは Github で公開してます。


PIC16F84A のベース基板を作る


20150503_pic_led

概要
Eagle と Sevenmini を使って、PIC16F84A のベース基板を作ります。
発振子、LED、IOピンとPICkit3用のヘッダピンなどを必要最低限なものを実装します。

基板作成の手順は、Eagle と Sevenmini を使って電子基板を作る を参照してください。
データは GitHub で公開しています。

Eagle 側の作業
(1) 回路図 (sch) とボード図 (brd) を作成します。
20150503_pic_sch 20150503_pic_brd

(2) Mirror にしてガーバーデータを出力します。
20150503_pic_gerber

FLASH 側の作業
(1) ガーバーデータを読み込みます。
ハンダ面データ (sol) を「フォト表」に、
ドリルデータ (drd) を「穴」に、
外形データ (out) を「外形表」にします。
20150503_pic_flash

(2) 輪郭線抽出を行います。

Sevenmini 側の作業
(1) 配線の加工
基板を両面テープで固定します。
ミリング用のエンドミルを取り付けます。
CAM-Circuit2 アプリから加工を指示します。
(2) 穴の加工
ドリル用のエンドミル 0.6mm に交換します。
CAM-Circuit2 アプリから加工を指示します。
(3) 外形の加工
フォーミングのエンドミルに交換します。
CAM-Circuit2 アプリから加工を指示します。
20150503_pic_milling

ハンダ付け
(1) 表面の配線を行います。
(2) 部品をつけて、裏面をハンダ付けします。
20150503_pcb_front 20150503_pcb_rear

動作確認
PIC16F84A で Lチカ を実行します。

失敗
RB6とRB7を PICkit を接続すべきが、1ピンずれてRB5とRB6を接続していた。
追加で穴をあけて、修正した。

課題
3端子レギュレータを、よく考えずに配置したため、基板から飛び出してしまった。
向きを変えて、基板に収まるようにしたほうがいいです。