ラベル XC8 の投稿を表示しています。 すべての投稿を表示
ラベル XC8 の投稿を表示しています。 すべての投稿を表示

2014年9月25日木曜日

電光掲示板製作「点灯成功」


お久しぶりです~^^
基板と最低限のプログラムが完成いたしました。


基板を組み立て、電源を入れた状態では全く正常に動作いたしませんでした。
写真を見ての通り、大量の空中配線があります。

原因は単純で、今回使用した部品データに多くのミスがありました。
しばらく前に公開してしまったライブラリデータも修正した後投稿しなおします。


スターバックスで作業をしたりなんかもして、なんとかここまで来た次第です


今も大学で作業をしてます。
スクロール表示とリモコン操作プログラムの作成です。
まずスクロール表示から挑戦していますが、文字を流す(ずらす)速さは当然基準となる時間をカウントしたいので、タイマ割り込みに初挑戦しています。

今日中にでも成功させて、明日にでもスクロール表示は達成させたいですね。



さて、これにて失礼します。

いつも閲覧ありがとうございます(^^)

2014年6月26日木曜日

赤外線通信成功

赤外線通信をついに成功しました。

これまで悩んできた方法は、38kHzの信号をディレイ関数を用いてソフトで作り出す手法でした。
原因かは分かりませんがデューティー比が綺麗に50%になっていなかったうえ、受信プログラムもスタートビットを受け付けたら600us待機して次のビットを受け付けるという処理をすべて不安定なディレイ関数を用いて行っていました。

そのため取りこぼしが結構あったのだと思います。

そこで、38kHzの搬送波をPWMでつくり、送信データはシリアル通信機能を用いてTXから出力しました。
PWMの搬送波とシリアル信号のANDをとることで、シリアル出力を38kHzに変調する事に成功しました。

この変調した波形を赤外線LEDの点滅に使い、赤外線受信モジュールで受信しました。

これまで撮影してきた動画を紹介します。

・PWM機能のテスト


・シリアル通信のテスト(赤外線未使用)

・赤外線を用いたシリアル通信


成功へのヒントを下さった方々に感謝いたします。

2014年5月21日水曜日

16F886とXC8でLEDチカチカ成功

さて、やっと動作しました。

ずっと動かなかった原因はコンフィギュレーションの設定漏れでした。

細かく試していませんが、存在する設定は何らかの設定にしてあげないと動かないようです。

こちらが動画です。 4秒ほど笑


400msで点滅を繰り返しています。キリの悪い数で気持ち悪いのでこのあと乗せるプログラムは500msにしています。

/*
 * File:   L_tika.c
 * Author: windows
 *
 * Created on 2014/05/16, 21:12
 */
#pragma config CPD = OFF,\
               BOREN = OFF,\
               IESO = OFF,\
               DEBUG = OFF,\
               FOSC = INTRC_NOCLKOUT,\
               FCMEN = OFF\
               WDTE = OFF,\
               MCLRE = OFF,\
               LVP = OFF,\
               PWRTE = OFF,\
               WRT = OFF
/*
 *CPD -> Data Code Protection bit
 *BOREN -> Brown Out Reset Selection bits
 *IESO -> Internal External Switchover bit
 *DEBUG -> In-Circuit Debugger Mode bit
 * FOSC -> Oscillator Selection bits
 * FCMEN -> Fail-Safe Clock Monitor Enabled bit
 * MCLRE -> RE3/MCLR pin function select bit
 * WDTE -> Watchdog Timer Enable bit
 * LVP -> Low Voltage Programming Enable bit
 * PWRTE -> Power-up Timer Enable bit
 */
#include <stdio.h>
#include <xc.h>
#include <pic.h>
#define _XTAL_FREQ 5000000

static void set_port();

void main(void) {
    set_port();

    while(1){
        PORTA = 0xff;
        __delay_ms(500);
        PORTA = 0x00;
        __delay_ms(500);
    }
    return;
}
static void set_port(){
 TRISA = 0x00;  //output mode
 PORTA = 0x00;  //cleaning

 return;
}
さて・・・ ここまで苦労しましたがここから赤外線の制御にやっと入れます。
16F886は内部クロックがあるのでそれで動作させていますが、赤外線の実験は 16F84A というものを使います。
初めて外部クロック(セラコン)を使うので動作してくれるか不安ですが何とかするしかないですね~^^