2006年11月17日
PIC16F88でアナログ入力 @ 電子工作
今後のために、PIC16F88でアナログ入力をしたくて試しているのですが、上手く行きません。while(GO_DONE == 1){}のループから抜け出せないようです。設定に関して分かってない部分があるので、何処か設定が抜けているのだと思うのですが、分かりません。色々なパターンを試したり、他の所で見付けた仕組みを試したりしているのですが、ダメ。
以下、sdcc用のソースです。
#include <pic16f88.h>
int at 0x2007 __config = _INTRC_IO & _LVP_OFF & _WDT_OFF & _PWRTE_OFF & _CP_OFF & _BODEN_OFF &_MCLR_OFF & _CCP1_RB3;
int result;
void main( void) {
OSCCON |= 0x70; //8MHz internal clk
ANSEL = 0x01; //AN0使用
TRISA = 0x0F; //アナログ入力
ADCON0 |= 0x81;
ADCON1 |= 0xc0;
ADRESH = 0; ADRESL = 0;
TRISB = 0x00;
PORTB = 0x00;
result = 0;
while(1){
GO_DONE = 1;
while(GO_DONE == 1){
PORTB=0x02;
}
// result = (ADRESH << 8) + ADRESL;
PORTB= ADRESL;
}
}
何故動かないのか分からないのでお手上げです。(T_T) やはりアセンブラを勉強した方がよいのかな。
・・・
えぇ〜っ、マジかよ。二時間近く悩んだのに、Linuxでコンパイルしてみたら、普通に動きました。(T_T) この二時間は何だったんだ。どうやらMacのsdccは上手く動かないみたいです。基本的なポートの出力するプログラムは問題ないのですが、その他はダメっぽい。通信関係もダメなので、アナログで入力したデータをRS-232Cに出力するなんて事は二重にアウトですね。まぁ、でもLinuxマシンでコンパイルすれば動くようなので、コンパイルはLinuxマシンで行います。Macでログインして、PICへのプログラム書き込みはWindowsって・・・。物凄く面倒なことをしている感じがします。(^_^;)
部品の選別とか作ったモノの挙動を計測する手段が欲しかったので、上記のプログラムに通信機能を付けて、RS-232Cでデータを出力する形を作ります。
上記のソースとは若干違うのですが、一応HEXファイルの内容も下に書いておきます。AN0のアナログ入力データ値をBポートに接続したLEDに出力します。但し下位の8ビットのみ(ADRESL)です。
可変抵抗のセンターをAN0に繋ぎ、両サイドはそれぞれ、+5VとGNDに繋ぎました。Bポートには300Ωの抵抗+LEDを8組です。アナログ入力が出来ていると言うことの確認だけなので、問題なし。今回は内蔵クロックを使っているので、セラロックは外しました。
起動すると先ずはLEDの点灯チェックとして何回か点滅し、その後、アナログデータの取得状態に入ります。デバッグ状態確認用のコードが入っていたりするのですが、余りにも高速に切り替わっているので肉眼では分からないですね。(^_^;)
:020000040000FA
:0600000000008A118828AF
:06000A00703083160313A1
:100010008F0401309B000F308500813083129F04D4
:10002000C03083169F0483129E0183169E018601B1
:100030008312860183120313A001A1015C201F1506
:1000400083120313A6011F19A60A2608013A031DED
:100050002E280230831203138600202883120313F4
:100060001E0883120313A900A600A701A801831686
:1000700003131E0883120313A6002807A0002908F3
:10008000A100A7010318270FA107831603131E0859
:10009000831286007920831203132108803E7E3E5E
:1000A000031D542801302002031C1F280430831232
:1000B000031386001F28080083120313A401A5015F
:1000C0002508803E803E031D672804302402031863
:1000D0007828FF30831203138600792083120313DC
:1000E0008601792083120313A40A0319A50A602844
:1000F0000800103083120313A2002730A300FF3042
:10010000A207031CA30322082304031D7F28080061
:040110008A11052823
:02400E00182F69
:00000001FF
こんなプログラムを試す人も居ないと思いますが、一応注意書きをしてきます。このプログラムを利用される場合は、十分に内容を理解してご利用下さい。これらのプログラムを使用していかなる損害が生じたとしても、当方では責任が取れません。ご了承下さい。
関連日記
- 2007年01月09日 秋月も結構早い (13811)@ 電子工作
- 2006年11月16日 PIC16F88用テストプログラム (9892)@ 電子工作
- 2006年11月26日 PIC16F88でシリアル通信 (9833)@ 電子工作
- 2006年11月22日 ドットマトリックスLED (9382)@ 電子工作
- 2008年08月03日 トランジスタ技術付録基板でAVRライター (8432)@ 電子工作
- 2007年02月09日 PIC16F877Aが不安定 (8141)@ 電子工作
- 2006年11月04日 SDCC - Small Device C Compiler (7294)@ 電子工作
- 2007年01月09日 SPIでDAC (7175)@ 電子工作
- 2006年10月18日 midicckで自作MIDI楽器 (6725)@ 音楽
- 2007年01月04日 HOSIDEN HLM3205のピン配置 (6616)@ 電子工作
- 2006年12月30日 自己点滅LED (6568)@ 電子工作
- 2007年02月09日 PIC18F2450へのプログラム書き込み (6550)@ 電子工作
- 2006年11月19日 PIC16F88でLEDアクティブ点灯 (6148)@ 電子工作
- 2006年11月22日 共立エレショップからパーツ到着 (6000)@ 電子工作
- 2008年08月29日 PICkit2 (5958)@ 電子工作
- 2006年11月05日 PIC16F88 (5309)@ 電子工作
- 2007年08月30日 PIC16F88とSDCC (5296)@ 電子工作
- 2007年01月17日 PIC16F88では入出力が足りないかも (5179)@ 電子工作
- 2007年01月05日 PIC16F88でLCD (5131)@ 電子工作
- 2007年01月21日 シリアル通信とDAC (5099)@ 電子工作
- 2007年02月03日 音階が変 (4780)@ 電子工作
- 2007年01月23日 SPIのピン配置とシリアル通信のデータ処理 (4772)@ 電子工作
- 2007年04月17日 EasyPIC4でサンプルプログラム (4289)@ 電子工作
- 2009年12月12日 MIDI to Sync24 + Clock chip (4114)@ 電子工作
- 2008年03月29日 久々にパーツ注文 (4024)@ 電子工作
- 2006年11月10日 PIC16F88でMIDI (3958)@ 電子工作
- 2007年04月04日 DIN SYNCのクロック変換器(2) (3868)@ 電子工作
- 2006年11月09日 やはり変だSDCC (3704)@ 電子工作
- 2006年12月02日 振り出しに戻ったかも(T_T) (3617)@ 電子工作
- 2007年01月23日 シリアル通信 (3370)@ 電子工作
アマゾン広告
この日記ページは閲覧数などの条件に応じて、閲覧制限を行っています。他からリンクしていただいても、そのリンクから辿った閲覧者が当ページの内容をご覧頂けない場合があります。ご了承下さい。