このブログは@knight@のロボット・電子工作方面の活動を書いてるサイトです。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
先日紹介したプログラムが何故か動作しない今日この頃
単純にPORTBとPORTAからLEDのアノードとカソード先に設置したNPNトランジスタのベース(仲介に10k)へ出力するプログラムなんですがそれが動かないというのも面妖な・・・
一応PORTAからの出力はできてるところを見ると機能してないのはPORTBだけみたいです
もしかしたら別の機能がI/O制御を阻害してるかもしれないので他の機能の設定をする必要がありそうですね
それと少し寄り道、
今日回路・プログラムを考える中秋月で売っている18F4550みたいな完成基盤を作ってみるのもありかなと思う
・ICSP(ピンソケット端子)
・丸ピン セラロック端子
・左右ピン足にVcc、Vss出力
・MCLREスイッチ
・5.5Vレギュレータ←電源用ピンヘッダ端子
・PIC用セラミックコンデンサあり
流石にプリント基板はコストとして難しいのでユニバーサル基盤で、あとICソケットの対応はユニバーサルでは無理かなとおもうので受け側を完全にピンソケットにしようかなと思う
幅のある24,28ピン端子とソケットを18に切断して使う手段もあるけど・・・ありかな
ICSPにピンソケットを使うのは出っ張りを減らすためで上手くいけばピン足を除いた基盤の高さも10mm以内に収められるかも
そんな回路の配線図はこちら
一応部品の明細も記入しましたが一部食い違いもありますのでご注意を
あと続きにアセンブラで書いた失敗したときの16F88のプログラムを入れておきます
それでは今日はこの辺で
単純にPORTBとPORTAからLEDのアノードとカソード先に設置したNPNトランジスタのベース(仲介に10k)へ出力するプログラムなんですがそれが動かないというのも面妖な・・・
一応PORTAからの出力はできてるところを見ると機能してないのはPORTBだけみたいです
もしかしたら別の機能がI/O制御を阻害してるかもしれないので他の機能の設定をする必要がありそうですね
それと少し寄り道、
今日回路・プログラムを考える中秋月で売っている18F4550みたいな完成基盤を作ってみるのもありかなと思う
・ICSP(ピンソケット端子)
・丸ピン セラロック端子
・左右ピン足にVcc、Vss出力
・MCLREスイッチ
・5.5Vレギュレータ←電源用ピンヘッダ端子
・PIC用セラミックコンデンサあり
流石にプリント基板はコストとして難しいのでユニバーサル基盤で、あとICソケットの対応はユニバーサルでは無理かなとおもうので受け側を完全にピンソケットにしようかなと思う
幅のある24,28ピン端子とソケットを18に切断して使う手段もあるけど・・・ありかな
ICSPにピンソケットを使うのは出っ張りを減らすためで上手くいけばピン足を除いた基盤の高さも10mm以内に収められるかも
そんな回路の配線図はこちら
一応部品の明細も記入しましたが一部食い違いもありますのでご注意を
あと続きにアセンブラで書いた失敗したときの16F88のプログラムを入れておきます
それでは今日はこの辺で
list P=16F88.INC
#include P16F88.INC
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
STAY1 EQU 20H;
STAY2 EQU 21H;
STAY3 EQU 22H;
ORG 0
CLRF STATUS;
MOVLW B'00100000';
MOVWF STATUS;
MOVLW B'00000000';
MOVWF TRISB;
MOVLW B'00000000';
MOVWF TRISA;
CLRF STATUS;
START:
MOVLW B'00000000';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'00000001';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'00000101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'00001101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'00101101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'01101101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'11101101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'11101101';
MOVWF PORTB;
MOVLW B'11111000';
MOVWF PORTA;
GOTO START;
STOP:
MOVLW D'100';10進数100カウント
MOVWF STAY1;
MOVWF STAY2;
MOVWF STAY3;
STOP2;
DECFSZ STAY1,1;f-1=0でループ脱出
GOTO STOP2;
MOVWF STAY1;100再装填(繰り返し用)
DECFSZ STAY2,1;
GOTO STOP2;
MOVWF STAY2;
DECFSZ STAY3,1;
GOTO STOP2;
RETURN ;
END
#include P16F88.INC
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
STAY1 EQU 20H;
STAY2 EQU 21H;
STAY3 EQU 22H;
ORG 0
CLRF STATUS;
MOVLW B'00100000';
MOVWF STATUS;
MOVLW B'00000000';
MOVWF TRISB;
MOVLW B'00000000';
MOVWF TRISA;
CLRF STATUS;
START:
MOVLW B'00000000';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'00000001';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'00000101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'00001101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'00101101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'01101101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'11101101';
MOVWF PORTB;
MOVLW B'11110000';
MOVWF PORTA;
CALL STOP;
MOVLW B'11101101';
MOVWF PORTB;
MOVLW B'11111000';
MOVWF PORTA;
GOTO START;
STOP:
MOVLW D'100';10進数100カウント
MOVWF STAY1;
MOVWF STAY2;
MOVWF STAY3;
STOP2;
DECFSZ STAY1,1;f-1=0でループ脱出
GOTO STOP2;
MOVWF STAY1;100再装填(繰り返し用)
DECFSZ STAY2,1;
GOTO STOP2;
MOVWF STAY2;
DECFSZ STAY3,1;
GOTO STOP2;
RETURN ;
END
PR
この記事にコメントする
無題
・セミコロンをコロンと2箇所間違えてる、というか必要ないかも。
・CLRF ANSEL をSTARTラベルの前に記述(ANSELレジスタはバンク1、理由は自分で調べて
・図だと20MHzの外部クロック使うことになってるけど、_INTRC_IOだと内部クロックになる、_HS_OSCにする。
※内部クロックを使う場合はOSCCONレジスタでクロックの設定が必要。
・STOPラベルの最後にRETURNがない。
・STOP2ラベルへのCALLがSTOPラベル内にない。
上記2つから、
STOP
MOVLW D'100'
MOVWF STAY1
MOVWF STAY2
MOVWF STAY3
CALL STOP2
RETURN
STOP2
以下略
と記述するべき。
あとは知らんです。
・CLRF ANSEL をSTARTラベルの前に記述(ANSELレジスタはバンク1、理由は自分で調べて
・図だと20MHzの外部クロック使うことになってるけど、_INTRC_IOだと内部クロックになる、_HS_OSCにする。
※内部クロックを使う場合はOSCCONレジスタでクロックの設定が必要。
・STOPラベルの最後にRETURNがない。
・STOP2ラベルへのCALLがSTOPラベル内にない。
上記2つから、
STOP
MOVLW D'100'
MOVWF STAY1
MOVWF STAY2
MOVWF STAY3
CALL STOP2
RETURN
STOP2
以下略
と記述するべき。
あとは知らんです。
無題
まいど
PORTBの代表的な兼用機能は、CCP、USART、SSP、ADCですね。
無効にしないとポートが使えないので設定しましょう。
PORTAにもコンパレータとADCがあるので無効にするべきですね。
>18F4550みたいな
以前は16F84、648A、88などPIC(表面実装とクリスタル、MAX232などが一体になって28ピンソケットに収まるキットが売ってました。
最近は16C771くらいしかないようですが。
PICマイコン PIC16C771モジュール・キット
http://akizukidenshi.com/catalog/g/gK-00186/
今は18F2550キットが高性能だから統合された感じかな。
ブレッドボード用にはあると便利なので、作ってみるのも面白いと思いますよ。
PORTBの代表的な兼用機能は、CCP、USART、SSP、ADCですね。
無効にしないとポートが使えないので設定しましょう。
PORTAにもコンパレータとADCがあるので無効にするべきですね。
>18F4550みたいな
以前は16F84、648A、88などPIC(表面実装とクリスタル、MAX232などが一体になって28ピンソケットに収まるキットが売ってました。
最近は16C771くらいしかないようですが。
PICマイコン PIC16C771モジュール・キット
http://akizukidenshi.com/catalog/g/gK-00186/
今は18F2550キットが高性能だから統合された感じかな。
ブレッドボード用にはあると便利なので、作ってみるのも面白いと思いますよ。