としぶぅ~の「工作部屋」...毎日少しのお勉強

趣味・関心事を書いていこうと思います。

iPhone4・4S対応の1segチューナー その1

2012-09-28 23:38:34 | iPhone

こんばんわ

としぶぅ~です。

 

今日は自宅まで移動してきました。

疲れた・・・

 

で、自宅についたら先日注文しておいたiPhone4Sに使用できるという1segチューナーが

届いていましたのでちょっと紹介します。

ものは、

こんな感じのものです。

正面は

裏面から見ると

で、単独でアンテナを伸ばしたところ。。。

それで、さっそく装着しましたが、認識しない(笑)

なな・・・と思いながらとりあえずアプリをダウンロード・インストール!

「らくデジ_i」というやつです。

バッテリー状態も見えるつわもの??

 

でもiPhoneが「受信機がみつかりません」と言ってくる!なぜに・・・

なんか横にちっちゃいボタンがある。。。スライドさせると、ピコっ・・・

認識した~!

それで、この地域の設定して、アンテナ伸ばして番組を検出!

おぉぉ映りました!

なんかそれらしく映っています(笑)

 

でもすぐ電波が切れる・・・

自宅の周辺は田舎ですから^^;

電波状態わるいんです(;_;)

 

ま、今はちょっとバッテリーを充電中です。

また普通に使えるようになったら移りとかレポートします。

 

今日はとりあえずこんな感じだよ~っていうことで・・・^^

 

後、気づいたのは、バッテリーの充電するとすごく発熱する。。。大丈夫なんか???

最後に、どこで買ったのか・・・

ここです → http://www.dennobaio.jp/shopdetail/003005000040/060/015/order/

少し値段上がってるし(笑)・・・私が購入した時は1490円(送料別)

 

では今日はこの辺で

おやすみなさい~(^^)/

 

 追記:黒ならamazonのが断然安い・・・・送料込か・・・失敗;_;

            ↓       http://www.amazon.co.jp/%E3%83%AD%E3%82%B8%E3%83%86%E3%83%83%E3%82%AF-LDT-1SI41-Logitec-iPhone4%E5%B0%82%E7%94%A8%E3%83%AF%E3%83%B3%E3%82%BB%E3%82%B0%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8A%E3%83%BC-%E3%83%90%E3%83%83%E3%83%86%E3%83%AA%E3%83%BC%E5%86%85%E8%94%B5/dp/B005PJCT1O/ref=sr_1_3?ie=UTF8&qid=1348848094&sr=8-3

 


Pickit3でデバッグ! 

2012-09-27 23:18:25 | Pickit3

こんばんわ

としぶぅ~です。

 

今週は疲れた。。。。あと明日一日!がんばろう!

 

先々週、自宅に帰ったとき、Pickit2を忘れて何もできないのでPickit3を購入!

しかし、動かなかった^^;

 

先日は時間がなくてじっくり見れなかったので、本日はなんとか動くところまでやってみました。

とりあえず、マニュアルに書いてある通り、回路に抵抗を追加。

ま、動かなかった直接の原因ではないようだけど、とりあえずつけろと書いてあるのでつけました。

それではボードとPickit3を接続して、MPLABを立ち上げ、プロジェクトを起動

接続でエラーが出ています。

多分ターゲットに電源が行っていないために接続できないようです。

ターゲットに電源を供給します。

チェックを入れて適用を押すと。。。

5V~3.3Vですよ。。。的な?注意がでます。。。結構このワーニング表示うるさい。。。

”OK”押すと、

デバイスIDが取得できました。

これで、電源の供給が完了+IDを取得!

つながったので、デバッグモードからターゲットにデータ転送。

ターゲットのリセット。

RUN。

とりあえずプログラムを転送して、デバッグモードで動作しています。

 

そしてブレイクポイントを設定して”RUN”すると

ちゃんとブレイクポイントでとまり、レジスタの内容も変化しています。

おぉ~これでPickit3も使えるようになりました。

 

赤い・・・・シャア専用ですか・・・・(笑)

これでデバッグがスピードアップかな・・・・・ほんとに~^^;

 

ということでPickit3も動きましたのでめでたしめでたし・・・・これからもがんがん使っていきますよ!

動作状況は

 

では・・・今日は遅くなっちゃったな。。。。

おやすみなさ~い(^^/

 

 

 

 


PIC16F88を動かす。。。その20(ソースコード貼り付け~ad.c)

2012-09-26 22:09:18 | PIC16F88

こんばんわ

としぶぅ~です。

 

夜は涼しくなりましたね。。。。歩いて帰ってきても汗かかなくなりました^^;

今日は残りのAD部分のプログラムを貼り付けます。

ad.c

/*================================================================================
ADプログラム
File Name : AD.c
Target Compiler: HI-TECH C PRO(Lite MODE)
Verion : 1.0
================================================================================ */
#include
#include "ad.h"
#include "delay.h"

unsigned char ad_data; //(20120908追加)
unsigned char ad_disp; //(20120919追加)
unsigned char ad_data_old; //(20120919追加)

//AD機能とポートの設定
void adinit(unsigned char ansel)
{

/**************************************************
使用するADポートの設定を行う
ansel: bit0:ANS0(RA0)
bit1:ANS1(RA1)
bit2:ANS2(RA2)
bit3:ANS3(RA3)
bit4:ANS4(RA4)
bit5:ANS5(RB6)
bit6:ANS6(RB7)
bit7:
**************************************************/


TRISA=TRISA | 0x38; //ADポート(RA4)を入力設定にする
ANSEL=ansel; //ADコンバータの設定 ANS0-7

ADON=1; //ADコンバータ機能の許可
ADIE=0; //AD割り込み不許可

}

//ad Convert(8bit)
unsigned char ad4()
{
/*************************************************
channel:AN4
基準電圧:+VREF-VSSを使用
AD変換clock:8MHz/16
ADFM=0 Leftjustified
変換時間:
**************************************************/
unsigned char temp = 10;

//設定
ADCON1=0x60; //0110 0000 A/D結果は左詰め,FOSC/16,A/D基準電圧:+VREF-VSS
ADCON0=0x61; //01xx x001 FOSC/16,ANS4,A/D Status(INPUT),A/D-ON

DelayUs(100); /* Delay関数使用 : 安定待ち */

//AD変換開始
GO_DONE=1;

//変換終了待ち
while(GO_DONE==1){}

//変換結果処理
return(ADRESH);
}

void ad_4ms()
{
unsigned char i;
ad_data = ad4();
i = ad_data;
/* 前回のデータと今回のデータが違っていたら表示フラグをセットする */
if((ad_data_old != ad_data)){
ad_disp = 1; /* 表示フラグセット */
ad_data_old = ad_data; /* 新データを旧データにセット */
}
}

こんな感じです。

マーカー部分の説明をします。

ad4()でADの設定します。

ADの基準電圧を+VREF入力~VSS(0V)で行うように設定する。

8bit変換を行うので、左詰めでADのデータを保存するように設定。

(10bit変換の場合は右づめにする。)

  → ま、どちらでもいいけど8bitの場合は、左づめにすれば、ADRESHのデータを

     そのまま使えば、10bit中の下位2bitを無視して8bitデータとして扱える。

10bitでやるときは・・・・・今度やりますね^^

 

次は、ad_4ms()です。

ad4()を実行して前回のデータと比較して違っていたらad_disp変数に”1”を入れて、

LCD表示関数にて温度表示を更新する。

比較データが同じだったら”0”をいれる。 → ”0”なら表示は更新しない。

 

こんな感じの簡単なことしかしてません。

こんな感じでわかりますかね??

 

難しいことしてません^^;

 

とりあえずソースコードの貼り付けはこんな感じでいいかな。。。

 

明日はちょっと、動かなかったPickit3を動かしてみます。

 

とりあえず今日はこの辺で・・・・

おやすみなさい~(^^/

 


PIC16F88を動かす。。。その19(ソースコード貼り付け~lcd_f88.c)

2012-09-25 22:07:00 | PIC16F88

こんばんわ

としぶぅ~です。

 

今日は昨日のつづきで、温度表示用のソースコード”lcd_f88.c”を貼り付けて、

少しだけ解説入れます。

大したことやっていないので解説といっても・・・・って感じですが^^;

後、この”lcd_f88.c”ですが、SC1602を使用する場合、他のマイコンでもちょっと

した修正だけで使えると思います。(以前NXPのARM(32bit)で修正して使いました。)

 

とりあえずソースを添付します。

lcd_f88.c

//*
//* LCD(SC1602) interface file(pic16f88 board)
//*
//* 以下の機能を供給する
//* lcd_cmd(unsigned char) LCDにコマンドデータを出力する
//* lcd_data(unsigned char) LCDに表示データを出力する
//* lcd_clear(void) 画面をクリアする
//* lcd_puts("ABCD・・・HJ") 文字列を表示する
//* lcd_posyx(y,x) カーソル位置を、行 y、横位置 xにする
//* lcd_init(void) LCDの初期化をする
//*
//*
//* LCD_RS PORTA, 7 ;RS信号
//* LCD_E PORTA, 6 ;E信号
//* LCD_DB PORTA ;DB6-4:PORTA 2-0(上位4ビット)
//* LCD_DB PORTB ;DB7:PORTB 3
//*


#include
#include "delay.h"
#include "lcd_f88.h"
#include "ad.h"

#define LCD_RS RA7
#define LCD_EN RA6


// write a byte to the LCD in 4 bit mode
void lcd_cmd(unsigned char c)
{
unsigned char cdata;
unsigned char cdataA;

cdataA = (c >> 4) & 0x0f;
PORTB = (cdataA & 0x08) | (PORTB & 0xf7);
// Making MSB Command Data 4bit
cdata = (cdataA | (PORTA & 0x70 & 0xb0));
PORTA = cdata; // RS = "H"→”L"
PORTA = cdata | 0x40; // E = "H"→”L"
PORTA = cdata;

cdataA = (c & 0x0f);
PORTB = (cdataA & 0x08) | (PORTB & 0xf7);
// Making LSB Command Data 4bit
cdata = cdataA | (PORTA & 0x70 & 0xb0);
PORTA = cdata; // RS = "H"→”L"
PORTA = cdata | 0x40; // E = "H"→”L"
PORTA = cdata;
DelayMs(5);
}

// write one character to the LCD
void lcd_data(unsigned char c)
{
unsigned char cdata;
unsigned char cdataA;

cdataA = (c >> 4) & 0x0f;
PORTB = (cdataA & 0x08) | (PORTB & 0xf7);
// Making MSB Data 4bit
cdata = cdataA | (PORTA & 0xf0) | 0x80;
PORTA = cdata; // RS = "L"→”H"
PORTA = cdata | 0x40; // E = "H"→”L"
PORTA = cdata;

cdataA = (c & 0x0f);
PORTB = (cdataA & 0x08) | (PORTB & 0xf7);
// Making LSB Data 4bit
cdata = cdataA | (PORTA & 0xf0) | 0x80;
PORTA = cdata; // RS = "L"→”H"
PORTA = cdata | 0x40; // E = "H"→”L"
PORTA = cdata;
DelayMs(5);
}

// Clear and home the LCD
void lcd_clear(void)
{
lcd_cmd(0x1);
DelayMs(5);
}

// write a string of chars to the LCD
void lcd_puts(const char * s)
{
while(*s)
lcd_data(*s++);
}

// Go to the specified position
void lcd_posyx(unsigned char ypos,unsigned char xpos)
{
unsigned char pcode;

switch(ypos & 0x03){
case 0: pcode=0x80;
break;
case 1: pcode=0xC0;
break;
case 2: pcode=0x94;
break;
case 3: pcode=0xD4;
break;
}
lcd_cmd(pcode += xpos);
}

// initialise the LCD - put into 4 bit mode
void lcd_init(void)
{

// Initalize コマンドを2~3回書き込まないとうまく動かない(2Lineモードにならなかった))
lcd_cmd(0x2c); // 4 bit mode, 2-LineMode, 5x8 font
DelayUs(40);
lcd_cmd(0x2c); // 4 bit mode, 2-LineMode, 5x8 font
DelayUs(40);
lcd_cmd(0x0c); // display on, blink curson on
DelayUs(40);
lcd_clear(); // display off
DelayMs(2);
lcd_cmd(0x06); // entry mode
}

void disp_ad()
{
unsigned char ad_fugou;
unsigned char ad_10;
unsigned char ad_1;
unsigned char ad_temp;

if(ad_disp == 1){
ad_disp = 0; /* display flag clear */
// 温度表示の計算
if((ad_data_old >= 0x5c) & (ad_data_old
ad_fugou = 0x20;
ad_10 = 0x20;
ad_1 = 0x30;
}else {
if(ad_data_old > 0x5d){
ad_fugou = 0x2b;
ad_temp = (ad_data_old - 0x5d) >> 1;
ad_10 = ad_temp / 10;
ad_1 = ad_temp - ad_10 * 10;
}else{
ad_fugou = 0x2d;
ad_temp = 1-((ad_data_old - 0x5c) >> 1);
ad_10 = ad_temp / 10;
ad_1 = ad_temp - ad_10 * 10;
}
}
// アスキー変換
if(ad_10
ad_10 = ad_10 | 0x30;
}else ad_10 = (ad_10-0x09) | 0x40;
if(ad_1
ad_1 = ad_1 | 0x30;
}else ad_1 = (ad_1-0x09) | 0x40;
// LCDへの温度表示
lcd_posyx(1,0);
lcd_data(ad_fugou);
lcd_posyx(1,1);
lcd_data(ad_10);
lcd_posyx(1,2);
lcd_data(ad_1);

}
}

 以前貼り付けたソースコードに、disp_ad()関数を追加したものです。(マーカー部分)

追加部分の説明を少ししておきます。

まず、ADのデータが前回と違っていて表示書き換えが必要かを確認する。

   → ad_disp変数が”1”であれば書き換えが必要

     ”0”であれば、書き換えの必要がなく何もせずにこの関数から抜ける

次に、温度表示の計算を行います。

   → その16を参照ください。

      その16で検討した計算式をそのまま実行しています。

      私のプログラムはちょっとわかりにくいかもしれませんが・・・・すみません^^;

計算したデータを表示用の10ケタ目と1ケタ目のデータに分けます。

最後に、10ケタ目と1ケタ目のデータをアスキー変換しています。

10ケタ目に”0”があるときの処理は忘れていました^^;

でも、”+”と”-”の表示はちゃんと処理しました。

最後の数行は、LCDのどこに何を表示するのかを決めています。

 

こんな感じですね。。。わかりますかね?

私はアセンブラ言語からC言語に移ってきたので割と細かいことやってしまいます。

もう少し上手にプログラムが書ければいいのですが・・・・

ま、これからお勉強です(笑)

 

さて今日WEBを見ていたら、10bitのADやっている記事あったので見てみました。

Cで書くと8bitマイコンでも簡単にやれそうな気がしました。。。ちょっとチャレンジします。

 

とりあえず明日は、AD部分貼り付けます。(解説も・・・・)

そのあとに10bitでの温度計やってみますね(^^

 

それでは今日はこの辺で

お休みなさ~い(^^/

 

 


PIC16F88を動かす。。。その18(ソースコード貼り付け~main.c)

2012-09-24 22:13:11 | PIC16F88

こんばんわ

としぶぅ~です。

 

昨日は「さむっ」って感じだったのに。。。。今日は暑かった^^;

徐々に仕事も忙しくなりつつあります。

いつまでブログ書き続けられるのか(笑)

 

今日は昨日動作確認を行いましたので、とりあえず動いているソースコードを

添付します。(本日はつまらないですが、しばしお付き合いください。。。)

main.c

/*================================================================================
Templateプログラム
タイマー割り込みを使って時間をカウントして処理を時分割させる
File Name : main.c
Target Compiler: HI-TECH C PRO(Lite MODE)
Programer : としぶぅ~
Verion : 1.0
================================================================================ */
//PIC用の定義ファイルのインクルード
//HI-TECH Cでは、必ず指定する
#include
#include "ad.h" //AD用の関数(20120908追加)
#include "delay.h" //Delay用関数(20120908追加)
#include "lcd_f88.h" //LCD用関数(20120916追加)

//コンフィグレーションメモリの設定
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CPD_OFF & BOREN_OFF & LVP_OFF & CP_OFF & FCMEN_OFF & IESO_OFF);


//タイマの再設定値を定義
// 2000cycle@(8MHz / 4) == 1ms
// そこからTimer1再設定に要するサイクルを引いたもの
#define WAIT_CYCLE (2000-5)
#define TMR1H_INIT ((unsigned char)(((unsigned short)(65536-WAIT_CYCLE))>>8))
#define TMR1L_INIT ((unsigned char)(((unsigned short)(65536-WAIT_CYCLE))&0x00ff))

//ビット操作命令のマクロを定義
#define clear_bit( reg, bitNumb ) ((reg) &= ~(1 << (bitNumb))) //指定されたビットをクリア
#define set_bit( reg, bitNumb ) ((reg) |= (1 << (bitNumb))) //指定されたビットをセット
#define test_bit( reg, bitNumb ) ((reg) & (1 << (bitNumb))) //指定されたビットをテスト


unsigned char tmr_1ms;
unsigned char tmr_4ms;
unsigned char tmr_4ms_up;
unsigned char tmr_cnt_up;


//割り込み関数
//1/100秒の、タイマのオーバーフロー割り込みで、計測値のインクリメントと、スイッチの確認を行う
void interrupt f_int( void )
{
//タイマ割り込みかどうかをチェックして、タイマ割り込み以外の場合は、処理をしない
if(TMR1IF) {
//タイマの値を再設定し、次の割り込みが1/1000秒後に発生するように設定する
TMR1H = TMR1H_INIT;
TMR1L = TMR1L_INIT;
TMR1IF=0; //タイマ1の割り込みフラグをクリアする


tmr_4ms++; //10msごとのカウンタをインクリメント
if(tmr_4ms >= 4){
tmr_4ms = 0;
tmr_4ms_up = 1;
tmr_cnt_up++;
//PORTB 0bitをon/offして4msでtmr_cnt_upが4msになっていることを確認する。
/* if(test_bit(PORTB,0)){
clear_bit(PORTB,0);
}else{
set_bit(PORTB,0);
} */
}
}
}


//ハードウェアの初期化
//使用する回路に合わせて、I/Oポートの方向などを設定する
void IoInit(void)
{
OSCCON = 0x70; //CLK=8MHzに設定する

//ポートの設定
TRISA = 0b00010000; //ポートAは使用しないが、出力に設定 PORTA-bit3=SW入力
TRISB = 0b00000000; //ポートBは使用しないが、出力に設定
PORTA = 0; //ポートAの初期値を0にする
PORTB = 0; //ポートBの初期値を0にする
ANSEL = 0b00000000; //アナログモードは使用しないので、0を指定
}


//タイマ1の初期化
void Tmr1Init(void)
{
T1CON = 0x00; //プリスケーラを、内部クロック、1:1に設定
TMR1H = 0; //タイマ1の初期値を0にする
TMR1L = 0;
TMR1IF = 0; //割り込みフラグをクリアする
//タイマ1割込を有効にする
TMR1IE = 1;
PEIE = 1;
//グローバルの割り込み制御ビットを有効にする
GIE = 1;
}

//メインルーチン
void main( void )
{

unsigned char ansel;
int i;

IoInit(); // I/Oポートの初期化
Tmr1Init(); // タイマ1の初期化
ansel = 0x10; // AD4を指定(20120908追加)
adinit(ansel); // RA4をAD4ポートとして初期化する(20120908追加)

//タイマ周期が1/100秒になるように、初期化する
TMR1H = TMR1H_INIT;
TMR1L = TMR1L_INIT;
//時間のカウンタの初期化
tmr_1ms = 0;
tmr_4ms = 0;
tmr_4ms_up = 0;
tmr_cnt_up = 0;
//タイマ1を開始する
TMR1ON=1;
//液晶の初期化
lcd_init();
// オープニングメッセージ
/* DelayMs(50);*/
lcd_posyx(0,1);
lcd_puts("PIC16F88 PRG.");
lcd_posyx(1,0);
lcd_puts("Temp.SENSOR TEST");

i=0;
while(i<=50){
i++;
DelayMs(100);
}

lcd_posyx(0,0);
lcd_puts("Temperature ");
lcd_posyx(1,0);
lcd_puts(" ");
lcd_posyx(1,3);
lcd_data(0xdf);
lcd_posyx(1,4);
lcd_data(0x43);

ad_disp = 0;
ad_data_old = 0;
ad_data = 0;


//無限ループ
while(1){

if(tmr_4ms_up == 1){
tmr_4ms_up = 0;
switch(tmr_cnt_up){
case 0: ad_4ms(); //処理1 ADを実施(20120920追加)
break;
case 1: disp_ad(); //処理2 ADを実施(20120920追加)
break;
case 2: //処理3
break;
case 3: //処理4
break;
case 4: //処理5
break;
}
}
}
}

とりあえずこんな感じです。

なんか一気に貼り付けようと思いましたが、20000文字までしか貼り付けられないようです。

(結構不便!)

すみません。。。。毎日少しずつ貼り付けます^^;

後、私の使っている開発環境を書いておきます。

MPLAB:v8.60

C compiler:Hi-TECH-C V9.82

programing/DEBUG tool:PICkit2

です。

明日は、LCDの表示用のソースを貼り付けます。。。

 

それでは今日はこの辺で

 

おやすみなさ~い(^^/