トピック関連記事
48時間以内の記事は で表示されます
無題
初めてのプログラム
皆さんこんばんは。
初めてプログラムを作ってみました。
タイマー0割り込みをつかって、
RB3を常時点燈、RA6に信号が入ったら、RB3を消灯
しかし、RB3がSW ONでいきなりつきません。
どこが悪いのかご指摘願います。
宜しくお願いします。
RA6はプルアップ、RB3はプルダウンです。
/*タッチプローブ*/
// PIC16F1827 Configuration Bit Settings
//RA6 マッハからの信号
// 'C' source line config statements
#include <xc.h>
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 8000000
#define On 1
#define Off 0
//プロトタイプ宣言
void InitInterTimer0 (void);
void interrupt isr ( void )
{//TMR0の割り込み処理
if(RA6==Off )
{
RB3=Off;
INTCONbits.TMR0IF=0;//タイマ0割り込みが入った際、TMR0IFが1になるので、0で初期化
INTCONbits.TMR0IE=1;//タイマー0を有効化
}
}
// メイン関数
void main (void){
OSCCON = 0b01101001;//内蔵発振器 8MHz使用に設定
PORTA = 0x00;// 電圧レベルの初期設定
PORTB = 0x00;
// 入出力設定
TRISA = 0b00110000;//RA5は入力専用・RA6は入力,他は出力
TRISB = 0b00000000;//RB3はLED用出力
//初期設定
RB3=On;
RA6=On;
InitInterTimer0 ();
INTCONbits.GIE=1;
while(1){
RB3=On;
}
}
//タイマ0割込み設定関数
void InitInterTimer0 (void)
{//割り込み設定
OPTION_REG=0b100000000;//プリスケラ000 5ビット=0内部クロック使用 WDTは使わない
TMR0=0x00;
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
皆さんこんばんは。
初めてプログラムを作ってみました。
タイマー0割り込みをつかって、
RB3を常時点燈、RA6に信号が入ったら、RB3を消灯
しかし、RB3がSW ONでいきなりつきません。
どこが悪いのかご指摘願います。
宜しくお願いします。
RA6はプルアップ、RB3はプルダウンです。
/*タッチプローブ*/
// PIC16F1827 Configuration Bit Settings
//RA6 マッハからの信号
// 'C' source line config statements
#include <xc.h>
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 8000000
#define On 1
#define Off 0
//プロトタイプ宣言
void InitInterTimer0 (void);
void interrupt isr ( void )
{//TMR0の割り込み処理
if(RA6==Off )
{
RB3=Off;
INTCONbits.TMR0IF=0;//タイマ0割り込みが入った際、TMR0IFが1になるので、0で初期化
INTCONbits.TMR0IE=1;//タイマー0を有効化
}
}
// メイン関数
void main (void){
OSCCON = 0b01101001;//内蔵発振器 8MHz使用に設定
PORTA = 0x00;// 電圧レベルの初期設定
PORTB = 0x00;
// 入出力設定
TRISA = 0b00110000;//RA5は入力専用・RA6は入力,他は出力
TRISB = 0b00000000;//RB3はLED用出力
//初期設定
RB3=On;
RA6=On;
InitInterTimer0 ();
INTCONbits.GIE=1;
while(1){
RB3=On;
}
}
//タイマ0割込み設定関数
void InitInterTimer0 (void)
{//割り込み設定
OPTION_REG=0b100000000;//プリスケラ000 5ビット=0内部クロック使用 WDTは使わない
TMR0=0x00;
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
Re: 無題
プログラムの方はまだちゃんと見ていませんけど、回路図をみると、RB3は
・LOW出力で点灯
・HIGH出力で消灯
・入力時(プルアップ無)で弱点灯
という回路になっています。
※LEDを光らせるのにプルする必要はありません。
・LOW出力で点灯
・HIGH出力で消灯
・入力時(プルアップ無)で弱点灯
という回路になっています。
※LEDを光らせるのにプルする必要はありません。
猛牛ロック 2018/11/29(Thu) 22:30 No.1262
Re: 無題
TRさん,猛牛ロックさん,こんばんは。
TRさん,頑張ってますね。
私の環境でも通りますので,シンタックスエラーはないようです。
これが一番やっかいなんです。
ここからは,自分のやりたいことが表現?されているか,
一つ一つつぶす作業だと思います。
回路については,ちょと私は,分からないところがあるのですが,正しいものとしてプログラムだけ見ました。
忘れてしまっている部分も多いので,なんともいえないのですが,
TRさんのプログラムだと,
RA6=On
の時の処理が割り込み処理に書かれてないように思います。次のようにしてはどうでしょうか。
void interrupt isr ( void ){//TMR0の割り込み処理
if(RA6==Off ){
RB3=Off;
}
if(RA6==On ){
RB3=On;
}
INTCONbits.TMR0IF=0;//タイマ0割り込みが入った際、 TMR0IFが1になるので、0で初期化
INTCONbits.TMR0IE=1;//タイマー0を有効化
}
こうした上で,main の
while(1){
RB3=On;
}
を
while(1){
}
のようにしてみてはどうでしょうか。実際にやってみないので,動くかはは分かりません。
それと,このままだとLEDがちらつくかも。
スイッチが押された時に,一度だけLEDをONにする,
それと,LEDをOffにするのは,LEDがOnの時だけにする,
等の判断をいれないと,同じ処理を何度も繰り返すことに
なると思います。
TRさん,頑張ってますね。
私の環境でも通りますので,シンタックスエラーはないようです。
これが一番やっかいなんです。
ここからは,自分のやりたいことが表現?されているか,
一つ一つつぶす作業だと思います。
回路については,ちょと私は,分からないところがあるのですが,正しいものとしてプログラムだけ見ました。
忘れてしまっている部分も多いので,なんともいえないのですが,
TRさんのプログラムだと,
RA6=On
の時の処理が割り込み処理に書かれてないように思います。次のようにしてはどうでしょうか。
void interrupt isr ( void ){//TMR0の割り込み処理
if(RA6==Off ){
RB3=Off;
}
if(RA6==On ){
RB3=On;
}
INTCONbits.TMR0IF=0;//タイマ0割り込みが入った際、 TMR0IFが1になるので、0で初期化
INTCONbits.TMR0IE=1;//タイマー0を有効化
}
こうした上で,main の
while(1){
RB3=On;
}
を
while(1){
}
のようにしてみてはどうでしょうか。実際にやってみないので,動くかはは分かりません。
それと,このままだとLEDがちらつくかも。
スイッチが押された時に,一度だけLEDをONにする,
それと,LEDをOffにするのは,LEDがOnの時だけにする,
等の判断をいれないと,同じ処理を何度も繰り返すことに
なると思います。
mabo 2018/11/29(Thu) 22:31 No.1263
Re: 無題
猛牛ロックさんへ
>・LOW出力で点灯 → これは分かります。
・HIGH出力で消灯 → これも分かります。
・入力時(プルアップ無)で弱点灯 これがわかりませんので、教えてください。
という回路になっています。
※LEDを光らせるのにプルする必要はありません。 ここも教えてください。
追記
PICのI/Oってよくわからないのですが、
ひょっとして、RB3のプルダウン抵抗は、RB3に何もつながっていない場合は、10kオームの抵抗は必要だけど、
LEDをつける場合は、逆に、電圧が、180kオームとLEDと10キロΩによって分圧されるということですか?
>・LOW出力で点灯 → これは分かります。
・HIGH出力で消灯 → これも分かります。
・入力時(プルアップ無)で弱点灯 これがわかりませんので、教えてください。
という回路になっています。
※LEDを光らせるのにプルする必要はありません。 ここも教えてください。
追記
PICのI/Oってよくわからないのですが、
ひょっとして、RB3のプルダウン抵抗は、RB3に何もつながっていない場合は、10kオームの抵抗は必要だけど、
LEDをつける場合は、逆に、電圧が、180kオームとLEDと10キロΩによって分圧されるということですか?
Re: 無題
プログラムを一通り見ました。
> #define On 1
> #define Off 0
回路的にはSWもLEDもアクティブローです。
あと、通常のPICは
PORTレジスタは読み取り用、
LATレジスタは出力用
となります。使い分けた方が良いです。
> while(1){
>
> RB3=On;
> }
これだと、仮にタイマー割り込みで消灯したとしても気が付きません。
すぐに点灯します。
タイマー割り込みをするなら、割り込みがかかる周期を把握した方が良いです。
普通は、キッチリとした時間が欲しいからタイマー割り込みを使うのです。
> PORTA = 0x00;// 電圧レベルの初期設定
> PORTB = 0x00;
> //初期設定
> RB3=On;
> RA6=On;
2回初期設定しても意味がありません。
また、RA6=Onと入力ピンに代入しても意味がありません。
> 入力時(プルアップ無)で弱点灯
入力時(プルアップ無)はハイインピーダンスです。
つまり、PICとは繋がっていないのと同じ状態です。
5V---150Ω---LED---10kΩ---GND
という回路ですから、0.3mA程度流れる筈です。
部屋を暗くすれば十分に光っているのが判る筈ですけど。
> ※LEDを光らせるのにプルする必要はありません。
入力時にプルをするのは、未接続時には、いろんな電圧値を示す為です。
例えば、SW-5Vと繋ぐなら、SWオンのときはHIGHレベルになります。でも
未接続だと、SWオフの時はHIGHの時もあればLOWになる時もあります。
なので、押していない時の識別の為に、押した時と逆側にプルします。
出力時は、HIGH/LOWいずれにしても、どちらかをを出力します。
LEDの場合は直接的に駆動させるだけです。プル抵抗は無駄な電気を使うだけです。
ただし、トランジスタを使う場合はPICが駆動されない(電源が入っていない)時や入力の場合に
つまり、上記で言う未接続相当の時に、トランジスタのゲート或いはベースがトランジスタをオンにしてしまう電圧に
なる場合があります。そういった誤動作を防ぐためにプルします。
追記します。
MABOさんのが正しい処理です。LEDがちらつくこともありません。
ただし、main関数で
while(1){
}
として、タイマー割り込みで
if(RA6==Off ){
RB3=Off;
}
if(RA6==On ){
RB3=On;
}
とするなら、最初からmain関数で
while(1){
if(RA6==On ) RB3=On;
else RB3=Off;
}
とすれば良いです。タイマー割り込みを使う意義がありません。
更に追記します。
押す度にオンとオフを繰り返すようなプログラムなら、フラグ処理が必要です。
また、チャタリング現象の考慮も必要になります。
あと、
if(RA6==Off ){
RB3=Off;
}
if(RA6==On ){
RB3=On;
}
は、短くすると
RB3=RA6;
でも良いはずです。
> #define On 1
> #define Off 0
回路的にはSWもLEDもアクティブローです。
あと、通常のPICは
PORTレジスタは読み取り用、
LATレジスタは出力用
となります。使い分けた方が良いです。
> while(1){
>
> RB3=On;
> }
これだと、仮にタイマー割り込みで消灯したとしても気が付きません。
すぐに点灯します。
タイマー割り込みをするなら、割り込みがかかる周期を把握した方が良いです。
普通は、キッチリとした時間が欲しいからタイマー割り込みを使うのです。
> PORTA = 0x00;// 電圧レベルの初期設定
> PORTB = 0x00;
> //初期設定
> RB3=On;
> RA6=On;
2回初期設定しても意味がありません。
また、RA6=Onと入力ピンに代入しても意味がありません。
> 入力時(プルアップ無)で弱点灯
入力時(プルアップ無)はハイインピーダンスです。
つまり、PICとは繋がっていないのと同じ状態です。
5V---150Ω---LED---10kΩ---GND
という回路ですから、0.3mA程度流れる筈です。
部屋を暗くすれば十分に光っているのが判る筈ですけど。
> ※LEDを光らせるのにプルする必要はありません。
入力時にプルをするのは、未接続時には、いろんな電圧値を示す為です。
例えば、SW-5Vと繋ぐなら、SWオンのときはHIGHレベルになります。でも
未接続だと、SWオフの時はHIGHの時もあればLOWになる時もあります。
なので、押していない時の識別の為に、押した時と逆側にプルします。
出力時は、HIGH/LOWいずれにしても、どちらかをを出力します。
LEDの場合は直接的に駆動させるだけです。プル抵抗は無駄な電気を使うだけです。
ただし、トランジスタを使う場合はPICが駆動されない(電源が入っていない)時や入力の場合に
つまり、上記で言う未接続相当の時に、トランジスタのゲート或いはベースがトランジスタをオンにしてしまう電圧に
なる場合があります。そういった誤動作を防ぐためにプルします。
追記します。
MABOさんのが正しい処理です。LEDがちらつくこともありません。
ただし、main関数で
while(1){
}
として、タイマー割り込みで
if(RA6==Off ){
RB3=Off;
}
if(RA6==On ){
RB3=On;
}
とするなら、最初からmain関数で
while(1){
if(RA6==On ) RB3=On;
else RB3=Off;
}
とすれば良いです。タイマー割り込みを使う意義がありません。
更に追記します。
押す度にオンとオフを繰り返すようなプログラムなら、フラグ処理が必要です。
また、チャタリング現象の考慮も必要になります。
あと、
if(RA6==Off ){
RB3=Off;
}
if(RA6==On ){
RB3=On;
}
は、短くすると
RB3=RA6;
でも良いはずです。
猛牛ロック 2018/11/29(Thu) 23:38 No.1266
Re: 無題
猛牛ロックさん,TRさん,こんにちは。
猛牛ロックさん,適切なアドバイス,ありがとうございます。
いつものことながら見識の深さにおどろかされます。
TRさん,書き込みいただいたプログラム,うまく動いたでしょうか。
私も,割り込み処理等の動作確認で,TRさんの書かれたようなLEDチカのプログラムよくつかいました。
X IDEには,シュミレーターもついていて,それを動かせば,各値等の確認できるようですが,実際にLED等で,確かめた方が私にはてっとりばやいです。
タイマーフラグのクリアーやらレジスターの再設定等,TRさんが書かれたプログラムのように書いて,
思った動作をしないで,悩んだことも多々あります。
この辺は,きっと,場数なんでしょうかね。
猛牛ロックさん,適切なアドバイス,ありがとうございます。
いつものことながら見識の深さにおどろかされます。
TRさん,書き込みいただいたプログラム,うまく動いたでしょうか。
私も,割り込み処理等の動作確認で,TRさんの書かれたようなLEDチカのプログラムよくつかいました。
X IDEには,シュミレーターもついていて,それを動かせば,各値等の確認できるようですが,実際にLED等で,確かめた方が私にはてっとりばやいです。
タイマーフラグのクリアーやらレジスターの再設定等,TRさんが書かれたプログラムのように書いて,
思った動作をしないで,悩んだことも多々あります。
この辺は,きっと,場数なんでしょうかね。
mabo 2018/11/30(Fri) 12:19 No.1267
Re: 無題
みなさんこんばんは。
猛牛ロックさんいつもありがとうございます。
maboさんも、いろいろとご指導に感謝します。
タイマー0割込みですが、キットで遊ぼうの域からは脱していません。
今のところ、以下のプログラムです。
最初は、入力SWから、出力端子の操作ができるかと思ったのですが、ダメでした。
外部割込みなら行けそうですが、
外部割込みをやってみます。
それと、入力端子を使っての出力端子の操作は、1827で出来るのでしょうか、
というのも、ツールラボさんの記事を見ていたら、IOCAN3 = 1;
IOCANレジスタなんですね、これは、PORTA3番ピンに機能があって、この機能を使えば
簡単に入力端子のHiでプログラムを組めるようです。
ツールラボさんは、1823でしたっけ、、、。
それとハイインピーダンスの件、ありがとうございます。
I/Oピンの仕組みはまだよくわかっていないです。
でも想像した通り、180オーム-LED-10kオームで分圧されてしまうようですね。
常時RB3を点灯させ、
タイマー0割込みで、RB4を点滅させています。
// PIC16F1827 Configuration Bit Settings
// 'C' source line config statements
#include <xc.h>
// CONFIG1
省略
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 1000000
#define On 1
#define Off 0
// プロトタイプ宣言
void InitInterTimer0 (void);
// メイン関数
void main (void)
{
OSCCON = 0b01011010; // 内部クロック周波数を1MHzに設定
// 電圧レベルの初期設定
PORTA = 0xFF;
PORTB = 0xFF;
// 入出力設定
TRISA = 0x20;
TRISB = 0x00;
// タイマ0割込み設定関数の呼び出し
InitInterTimer0();
// 割込み全体の許可
GIE = 1;
// 永久ループ
while(1)
{
RB3 =1;
}
}
// 割込みサービスルーチン
static void interrupt isr()
{
RB4 =1;
__delay_ms(3000);
RB4=0;
__delay_ms(3000);
// タイマ0割込みフラグをクリア
T0IF = 0;
}
// タイマ0割込み設定関数
void InitInterTimer0 (void)
{
OPTION_REG=0b000000000;//プリスケラ000 5ビット=0内部クロック使用 WDTは使わない
TMR0=0x00;
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
猛牛ロックさんいつもありがとうございます。
maboさんも、いろいろとご指導に感謝します。
タイマー0割込みですが、キットで遊ぼうの域からは脱していません。
今のところ、以下のプログラムです。
最初は、入力SWから、出力端子の操作ができるかと思ったのですが、ダメでした。
外部割込みなら行けそうですが、
外部割込みをやってみます。
それと、入力端子を使っての出力端子の操作は、1827で出来るのでしょうか、
というのも、ツールラボさんの記事を見ていたら、IOCAN3 = 1;
IOCANレジスタなんですね、これは、PORTA3番ピンに機能があって、この機能を使えば
簡単に入力端子のHiでプログラムを組めるようです。
ツールラボさんは、1823でしたっけ、、、。
それとハイインピーダンスの件、ありがとうございます。
I/Oピンの仕組みはまだよくわかっていないです。
でも想像した通り、180オーム-LED-10kオームで分圧されてしまうようですね。
常時RB3を点灯させ、
タイマー0割込みで、RB4を点滅させています。
// PIC16F1827 Configuration Bit Settings
// 'C' source line config statements
#include <xc.h>
// CONFIG1
省略
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 1000000
#define On 1
#define Off 0
// プロトタイプ宣言
void InitInterTimer0 (void);
// メイン関数
void main (void)
{
OSCCON = 0b01011010; // 内部クロック周波数を1MHzに設定
// 電圧レベルの初期設定
PORTA = 0xFF;
PORTB = 0xFF;
// 入出力設定
TRISA = 0x20;
TRISB = 0x00;
// タイマ0割込み設定関数の呼び出し
InitInterTimer0();
// 割込み全体の許可
GIE = 1;
// 永久ループ
while(1)
{
RB3 =1;
}
}
// 割込みサービスルーチン
static void interrupt isr()
{
RB4 =1;
__delay_ms(3000);
RB4=0;
__delay_ms(3000);
// タイマ0割込みフラグをクリア
T0IF = 0;
}
// タイマ0割込み設定関数
void InitInterTimer0 (void)
{
OPTION_REG=0b000000000;//プリスケラ000 5ビット=0内部クロック使用 WDTは使わない
TMR0=0x00;
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
Re: 無題
> でも想像した通り、180オーム-LEDる-10kオームで分圧されてしまうようですね。
いいえ、単なる直列回路です。入力時は、
5V-10180オーム-LED-GND
と同じと言う事です。
HIGH出力時は、LEDは5Vと5V(HIGH)に挟まれているので、LEDには電気が流れませんけど、10kΩには電気が流れます。
つまり、無駄です。
LOW出力時には5V-LED-LOWと流れるのでLEDは光ります。10kΩの方には電気は流れません。
いずれにしても、10kΩは付ける意味がありません。
> 入力SWから、出力端子の操作ができるかと思ったのですが
言っている意味が解りません。
プログラムのどこからでも出力端子は操作できます。
RB3をLOWにしたいと言う事でしょうか?
それなら
RB3=0;
と書けばLOWになります。
> IOCANレジスタなんですね、
F1827の基本的な構成として、入力がポートB、出力がポートAに割り当てられています。
まぁ、絶対的なものではありませんけど。
で、同じもの(INT/IOC)は1827にもありますけど、ポートBです。
で、今回のプログラムですけど、悪い例です。
タイマー割り込みは正確な時間を作り出します。
しかし、このプログラムでは__delay_ms(3000);で、正確な時間の取得を壊しています。
なぜなら、タイマー割り込みの間隔を超えているからです。
また、タイマー割り込みを使う意味も全くありません。
タイマー割り込みを使うもう一つの利点はdelay関数を使わないプログラムにする、という点です。
まずは、タイマー割り込みの時間(間隔)を把握しましょう。
1msや10msにしても良いですし、中途半端な値でも駄目ではありません。
駆動周波数とプリスケーラ、タイマー値から、算出(設定)してください。
それがタイマー0の単位時間です。単位時間内に収まる処理にする必要があります。
※基本的には、周辺機能(タイマーや外部割り込み等)は使わずにGPIO操作を覚えた方が良いです。
まずはGPIO操作で、壁にぶつかるまで押し通した方が良いです。
今は分散してしまっていて、見通し悪いプログラムになっていて、自分で原因を見つけるのが困難になっています。
CONFIGやクロック設定などは、どっかからのコピーで良いですけど、ピン操作(初期設定)からは、
どう制御しているのか、100%自信をもって書いてください。
理解せずに動いても意味がありません。
逆に、理解していないものを書いてはいけません。
自分の理解と共に、出来る範囲を増やす事です。
特に動かないのを、何故そうなったか理解しようとせずに、他の機能に移るのは止めるべきです。
動かないのは、目の前に覚えるべきことがあるからです。
そこを乗り越えてはじめて、1つスキルが上がるのです。
いいえ、単なる直列回路です。入力時は、
5V-10180オーム-LED-GND
と同じと言う事です。
HIGH出力時は、LEDは5Vと5V(HIGH)に挟まれているので、LEDには電気が流れませんけど、10kΩには電気が流れます。
つまり、無駄です。
LOW出力時には5V-LED-LOWと流れるのでLEDは光ります。10kΩの方には電気は流れません。
いずれにしても、10kΩは付ける意味がありません。
> 入力SWから、出力端子の操作ができるかと思ったのですが
言っている意味が解りません。
プログラムのどこからでも出力端子は操作できます。
RB3をLOWにしたいと言う事でしょうか?
それなら
RB3=0;
と書けばLOWになります。
> IOCANレジスタなんですね、
F1827の基本的な構成として、入力がポートB、出力がポートAに割り当てられています。
まぁ、絶対的なものではありませんけど。
で、同じもの(INT/IOC)は1827にもありますけど、ポートBです。
で、今回のプログラムですけど、悪い例です。
タイマー割り込みは正確な時間を作り出します。
しかし、このプログラムでは__delay_ms(3000);で、正確な時間の取得を壊しています。
なぜなら、タイマー割り込みの間隔を超えているからです。
また、タイマー割り込みを使う意味も全くありません。
タイマー割り込みを使うもう一つの利点はdelay関数を使わないプログラムにする、という点です。
まずは、タイマー割り込みの時間(間隔)を把握しましょう。
1msや10msにしても良いですし、中途半端な値でも駄目ではありません。
駆動周波数とプリスケーラ、タイマー値から、算出(設定)してください。
それがタイマー0の単位時間です。単位時間内に収まる処理にする必要があります。
※基本的には、周辺機能(タイマーや外部割り込み等)は使わずにGPIO操作を覚えた方が良いです。
まずはGPIO操作で、壁にぶつかるまで押し通した方が良いです。
今は分散してしまっていて、見通し悪いプログラムになっていて、自分で原因を見つけるのが困難になっています。
CONFIGやクロック設定などは、どっかからのコピーで良いですけど、ピン操作(初期設定)からは、
どう制御しているのか、100%自信をもって書いてください。
理解せずに動いても意味がありません。
逆に、理解していないものを書いてはいけません。
自分の理解と共に、出来る範囲を増やす事です。
特に動かないのを、何故そうなったか理解しようとせずに、他の機能に移るのは止めるべきです。
動かないのは、目の前に覚えるべきことがあるからです。
そこを乗り越えてはじめて、1つスキルが上がるのです。
猛牛ロック 2018/12/01(Sat) 00:30 No.1269
Re: 無題
猛牛ロックさん,TRさん,こんばんは。
猛牛ロックさん,今日もありがとうございます。
TRさん,新しいプログラムですね。
割り込みの中で,
__delay_ms(3000);
をお使いのようですが,好みからいったら,割り込みに入った回数をカウントして,LEDのOnとOffを交互にすればいいように思いますが,どうでしょうか。
static void interrupt isr(){
if(Count<一定数){Count++;}
Else{ Count=0;RB4=RB4~;}
T0IF = 0;
}
間違ってるかもしれませんが,上記のようにすれば,いいかもですね。
それから,
RB3
ですけど,1回だけOnにすれば,いいので,
RB3 =1;
while(1)
{
}
みたいにWhileの外にだした方いいと思います。
Whileの中にあると,RB3を1にする動作を繰り返すことになります。
今日は,ちょっと,下記を参考にシュミレートをいろいろやってみました
http://www.geocities.jp/zattouka/GarageHouse/micon/MPLABX/Simulator1.htm
猛牛ロックさん,今日もありがとうございます。
TRさん,新しいプログラムですね。
割り込みの中で,
__delay_ms(3000);
をお使いのようですが,好みからいったら,割り込みに入った回数をカウントして,LEDのOnとOffを交互にすればいいように思いますが,どうでしょうか。
static void interrupt isr(){
if(Count<一定数){Count++;}
Else{ Count=0;RB4=RB4~;}
T0IF = 0;
}
間違ってるかもしれませんが,上記のようにすれば,いいかもですね。
それから,
RB3
ですけど,1回だけOnにすれば,いいので,
RB3 =1;
while(1)
{
}
みたいにWhileの外にだした方いいと思います。
Whileの中にあると,RB3を1にする動作を繰り返すことになります。
今日は,ちょっと,下記を参考にシュミレートをいろいろやってみました
http://www.geocities.jp/zattouka/GarageHouse/micon/MPLABX/Simulator1.htm
mabo 2018/12/01(Sat) 01:09 No.1270
Re: 無題
>F1827の基本的な構成として、入力がポートB、出力がポートAに割り当てられています。
・・・・・・
で、同じもの(INT/IOC)は1827にもありますけど、ポートBです。
そうか!
データシートを見るとありました。
写真の赤枠!
1827の場合、ピンに入った信号を読み取る場合、読み取れる選択肢は、
bit0〜bit7までの全てですね! オー、沢山ある。
RB6に割り込み有効化
IOCIE = 1;
IOCBN3 = 1;
GIE = 1;
常時動作
RB6 割り込み無効化
GIE = 0;
IOCIE = 0;
IOCBN3 = 0;
割り込み処理プログラム
void interrupt isr(void)
{
略
}
これで、常時動作の最中にRB3にLo信号が入れば、割込みができると思いますが。
>単位時間内に収まる処理にする必要があります。
サブルーチンの作業時間は、タイマー割り込みの時間(間隔)内にするということですか?
今は、
サブルーチンは、割込みが始まって、RB4 =点灯〜3秒据え置き〜RB4消灯〜3秒据え置き
そして、メイン関数内のRB3点灯させています。
サブルーチン内の割込み開始から割込み作業終了の間の時間(点灯3秒+消灯3秒)をタイマー割込み時間(間隔)内にするのですか?
タイマー割込み時間(間隔)内にする作業の種類にするということですか?
例
タイマー割込み時間(間隔)内にRA6がハイかローかの確認作業など
>※基本的には、周辺機能(タイマーや外部割り込み等)は使わずにGPIO操作を覚えた方が良いです。
まずはGPIO操作で、壁にぶつかるまで押し通した方が良いです。
自分は、進みます。
これからも宜しくご指導願います
Re: 無題
maboさん,こんにちは。
>割り込みの中で,
__delay_ms(3000);
をお使いのようですが,好みからいったら,割り込みに入った回数をカウントして,LEDのOnとOffを交互にすればいいように思いますが,どうでしょうか。
static void interrupt isr(){
if(Count<一定数){Count++;}
Else{ Count=0;RB4=RB4~;}
T0IF = 0;
}
プログラム全体を見させていただけませんか?
>それから,
RB3
ですけど,1回だけOnにすれば,いいので,
RB3 =1;
while(1)
{
}
みたいにWhileの外にだした方いいと思います。
Whileの中にあると,RB3を1にする動作を繰り返すことになります。
分かりました。
>今日は,ちょっと,下記を参考にシュミレートをいろいろやってみました
http://www.geocities.jp/zattouka/GarageHouse/micon/MPLABX/Simulator1.htm
シュミレーターの使い方なんですね。
機会があったら、見ようかと思います。ありがとうございました。
>割り込みの中で,
__delay_ms(3000);
をお使いのようですが,好みからいったら,割り込みに入った回数をカウントして,LEDのOnとOffを交互にすればいいように思いますが,どうでしょうか。
static void interrupt isr(){
if(Count<一定数){Count++;}
Else{ Count=0;RB4=RB4~;}
T0IF = 0;
}
プログラム全体を見させていただけませんか?
>それから,
RB3
ですけど,1回だけOnにすれば,いいので,
RB3 =1;
while(1)
{
}
みたいにWhileの外にだした方いいと思います。
Whileの中にあると,RB3を1にする動作を繰り返すことになります。
分かりました。
>今日は,ちょっと,下記を参考にシュミレートをいろいろやってみました
http://www.geocities.jp/zattouka/GarageHouse/micon/MPLABX/Simulator1.htm
シュミレーターの使い方なんですね。
機会があったら、見ようかと思います。ありがとうございました。
Re: 無題
TRさん,猛牛ロックさんおはようございます。
TRさん,プログラムの全体ですが,
1268のTRさんのプログラムで,割り込みの部分だけを
入れ替えて,main の方で,RB3を外にだせばいいと思います。
割り込みのなかで,
T0IF = 0;
を使ってますが,もしかして,コンパイル通らないかもですね。
T0IF = 0→INTCONbits.TMR0IF=0
でしょうか。
カウントの定数は,オーバーフローしない範囲で,
好みでいいと思います。
定数を多くすれば,点滅の間隔が長くなります。
この間隔は,割り込みの時間等を考えれば,割り出せるのでしょうが,私は,適当なことが多かったです。
ただ,タイマーのプログラムで使った時は,だいたい正確な時間になるように,トライアンドエラーで調整しました。
TRさん,プログラムの全体ですが,
1268のTRさんのプログラムで,割り込みの部分だけを
入れ替えて,main の方で,RB3を外にだせばいいと思います。
割り込みのなかで,
T0IF = 0;
を使ってますが,もしかして,コンパイル通らないかもですね。
T0IF = 0→INTCONbits.TMR0IF=0
でしょうか。
カウントの定数は,オーバーフローしない範囲で,
好みでいいと思います。
定数を多くすれば,点滅の間隔が長くなります。
この間隔は,割り込みの時間等を考えれば,割り出せるのでしょうが,私は,適当なことが多かったです。
ただ,タイマーのプログラムで使った時は,だいたい正確な時間になるように,トライアンドエラーで調整しました。
mabo 2018/12/01(Sat) 09:29 No.1273
Re: 無題
皆さん方のご指摘を踏まえて、下記の通りプログラムを変えました。
常時は、フラグによりRB3をハイにしたりローにしたりの動作です。
割込み時には、エベントフラグが0なら、強制的に
イベントフラグを1にさせます。
しかし、XIDEのバージョンの関係かどうかわかりませんが
@にエラーが出ています。
以前のNo1268ではそんなことがなかったのに( 一一)
プログラムが悪いのでしょうか?
// PIC16F1827 Configuration Bit Settings
//RA6 マッハからの信号
// 'C' source line config statements
#include <xc.h>
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 1000000
#define On 1
#define Off 0
int event;
// プロトタイプ宣言
void InitInterTimer0 (void);
// メイン関数
void main (void)
{
OSCCON = 0b01011010; // 内部クロック周波数を1MHzに設定
// 電圧レベルの初期設定
PORTA = 0x00;
PORTB = 0x00;
// 入出力設定
TRISA = 0x00;
TRISB = 0x00;
// タイマ0割込み設定関数の呼び出し
InitInterTimer0();
// 割込み全体の許可
GIE = 1;
event=0;//初期値イベント無しRB3ロー
// 永久ループ
while(1)
{
if(event==1)
{
RB3=0;
}
if(event=1){
RB3=1;
}
// 割込みサービスルーチン
@static void interrupt isr()
{
if(RA6==0 && event==0){//もしRA6が押されていて、イベントが起きていなかったら
event=1;
}
// タイマ0割込みフラグをクリア
T0IF = 0;
}
// タイマ0割込み設定関数
void InitInterTimer0 (void)
{
OPTION_REG=0b000000000;//プリスケラ000 5ビット=0内部クロック使用 WDTは使わない
TMR0=0x00;
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
常時は、フラグによりRB3をハイにしたりローにしたりの動作です。
割込み時には、エベントフラグが0なら、強制的に
イベントフラグを1にさせます。
しかし、XIDEのバージョンの関係かどうかわかりませんが
@にエラーが出ています。
以前のNo1268ではそんなことがなかったのに( 一一)
プログラムが悪いのでしょうか?
// PIC16F1827 Configuration Bit Settings
//RA6 マッハからの信号
// 'C' source line config statements
#include <xc.h>
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// __delay_ms(), __delay_us()関数が使用する
#define _XTAL_FREQ 1000000
#define On 1
#define Off 0
int event;
// プロトタイプ宣言
void InitInterTimer0 (void);
// メイン関数
void main (void)
{
OSCCON = 0b01011010; // 内部クロック周波数を1MHzに設定
// 電圧レベルの初期設定
PORTA = 0x00;
PORTB = 0x00;
// 入出力設定
TRISA = 0x00;
TRISB = 0x00;
// タイマ0割込み設定関数の呼び出し
InitInterTimer0();
// 割込み全体の許可
GIE = 1;
event=0;//初期値イベント無しRB3ロー
// 永久ループ
while(1)
{
if(event==1)
{
RB3=0;
}
if(event=1){
RB3=1;
}
// 割込みサービスルーチン
@static void interrupt isr()
{
if(RA6==0 && event==0){//もしRA6が押されていて、イベントが起きていなかったら
event=1;
}
// タイマ0割込みフラグをクリア
T0IF = 0;
}
// タイマ0割込み設定関数
void InitInterTimer0 (void)
{
OPTION_REG=0b000000000;//プリスケラ000 5ビット=0内部クロック使用 WDTは使わない
TMR0=0x00;
INTCONbits.TMR0IF=0; //TMR0フラグクリアー
INTCONbits.TMR0IE=1;//TMR0割り込み許可
INTCONbits.GIE=1;//全体割り込み許可
}
Re: 無題
maboさんへ
>1268のTRさんのプログラムで,割り込みの部分だけを
入れ替えて,main の方で,RB3を外にだせばいいと思います。
それでも、良いと思います。
>割り込みのなかで,
T0IF = 0;
を使ってますが,もしかして,コンパイル通らないかもですね。
T0IF = 0→INTCONbits.TMR0IF=0
でしょうか。
それは、XIDEのバージョンの関係でコンパイルできなくなります。
今自分は、コンパイルできなくなるのでV3.65を使っています。
V3.65なら、T0IF = 0 でとおります。
猛牛ロックさんが、割込み時間を気にしているのは、
SWによってLEDの操作を考えていると思います。
本来のタイマー0割込みの使い方をしろと言っていると思います。
自分はそう、解釈し新しいプログラムをNo1274に掲載しました。
>1268のTRさんのプログラムで,割り込みの部分だけを
入れ替えて,main の方で,RB3を外にだせばいいと思います。
それでも、良いと思います。
>割り込みのなかで,
T0IF = 0;
を使ってますが,もしかして,コンパイル通らないかもですね。
T0IF = 0→INTCONbits.TMR0IF=0
でしょうか。
それは、XIDEのバージョンの関係でコンパイルできなくなります。
今自分は、コンパイルできなくなるのでV3.65を使っています。
V3.65なら、T0IF = 0 でとおります。
猛牛ロックさんが、割込み時間を気にしているのは、
SWによってLEDの操作を考えていると思います。
本来のタイマー0割込みの使い方をしろと言っていると思います。
自分はそう、解釈し新しいプログラムをNo1274に掲載しました。
Re: 無題
TRさん,猛牛ロックさん,こんにちは
TRさん,新しいプログラムですね。
今回は,スイッチ(RA6経由)でLED(RB3)をつける
というプログラムで,スイッチの判断を割り込みで検出するということでしょうか。
これを発展させば,チャタリングの除去等もできますね。
一カ所だけあきらかな間違いがあります。
while(1)
{
if(event==1)
{
RB3=0;
}
if(event=1){
RB3=1;
}
の if(event=1) の部分で,
if(event==0)
でしょうかね。
@のエラーはちょっと不明です。
TRさん,新しいプログラムですね。
今回は,スイッチ(RA6経由)でLED(RB3)をつける
というプログラムで,スイッチの判断を割り込みで検出するということでしょうか。
これを発展させば,チャタリングの除去等もできますね。
一カ所だけあきらかな間違いがあります。
while(1)
{
if(event==1)
{
RB3=0;
}
if(event=1){
RB3=1;
}
の if(event=1) の部分で,
if(event==0)
でしょうかね。
@のエラーはちょっと不明です。
mabo 2018/12/01(Sat) 12:44 No.1276
Re: 無題
maboさんこんにちは。
ご指摘ありがとうございます。
早速直しました(笑い
エラー表示をグーグル翻訳すると ↓
main.c:62:警告:(2025)ローカル変数 "isr"の修飾子 "interrupt"は許可されておらず無視されています
しかし、No1268ではそんなことがなかったのに(参った
ご指摘ありがとうございます。
早速直しました(笑い
エラー表示をグーグル翻訳すると ↓
main.c:62:警告:(2025)ローカル変数 "isr"の修飾子 "interrupt"は許可されておらず無視されています
しかし、No1268ではそんなことがなかったのに(参った
Re: 無題
TRさん,もしかして空白の問題かも。
isr()→isr ()
X IDEのディターでは,()と関数名の間に空白があるようです。
isr()→isr ()
X IDEのディターでは,()と関数名の間に空白があるようです。
mabo 2018/12/01(Sat) 14:56 No.1278
Re: 無題
ちょっと成形すれば、buildは出来ますよ。
「}」は付けましたか?
SOURCE→FORMATで成形してみた方が良いです。すぐに判ります。
ただし、実行しても何も変化はしない気がします。
<追記します。>
プログラム的には
> PORTA = 0x00;
> PORTB = 0x00;
> // 入出力設定
> TRISA = 0x00;
> TRISB = 0x00;
で、RA3はLOW出力です。※RA6もまたLOW出力です。
タイマー割り込みがかかると
> if (RA6 == 0 && event == 0) {//もしRA6が押されていて、イベントが起きていなかったら
> event = 1;
> }
で、eventが1になります。
※初期化はint event;ではなく、volatile int event;にした方が良いです。
そして、メイン関数の永久ループで、
if (event == 1) {
RB3 = 0;
}
と、元々LOW出力のピンをLOW出力にします。
ちょっと、どうしたいのか、プログラム以前に、目的とする動作が判りません。
どういったプログラムが書きたかったのでしょうか?
元々HIGH出力のRB3を、一度スイッチが押されたらLOW出力に固定したい、という事ですか?
それとも、毎回押す度にトグル動作、とかでしょうか?
「}」は付けましたか?
SOURCE→FORMATで成形してみた方が良いです。すぐに判ります。
ただし、実行しても何も変化はしない気がします。
<追記します。>
プログラム的には
> PORTA = 0x00;
> PORTB = 0x00;
> // 入出力設定
> TRISA = 0x00;
> TRISB = 0x00;
で、RA3はLOW出力です。※RA6もまたLOW出力です。
タイマー割り込みがかかると
> if (RA6 == 0 && event == 0) {//もしRA6が押されていて、イベントが起きていなかったら
> event = 1;
> }
で、eventが1になります。
※初期化はint event;ではなく、volatile int event;にした方が良いです。
そして、メイン関数の永久ループで、
if (event == 1) {
RB3 = 0;
}
と、元々LOW出力のピンをLOW出力にします。
ちょっと、どうしたいのか、プログラム以前に、目的とする動作が判りません。
どういったプログラムが書きたかったのでしょうか?
元々HIGH出力のRB3を、一度スイッチが押されたらLOW出力に固定したい、という事ですか?
それとも、毎回押す度にトグル動作、とかでしょうか?
猛牛ロック 2018/12/01(Sat) 17:01 No.1280
Re: 無題
猛牛ロックさんこんばんは。
>「}」は付けましたか?
つけ忘れていました。
つけたら、エラー表示がなくなりビルトもできました。
これなら、動作しますかね?
動作
SW On(プルアップRA6がLo)→ RB3がハイ
RB3は、プルアップもプルダウンもなしで、RB3からLED〜180Ω〜GND
SWは、押している時間だけSWが入るタイプです。
でなんですが、、、、
実は、PICの差し込みを間違えて自作の書き込み機が壊れたようです。
>SOURCE→FORMATで成形してみた方が良いです。すぐに判ります。
この方法を教えてください。
色々とすみません。宜しくお願いします。
>「}」は付けましたか?
つけ忘れていました。
つけたら、エラー表示がなくなりビルトもできました。
これなら、動作しますかね?
動作
SW On(プルアップRA6がLo)→ RB3がハイ
RB3は、プルアップもプルダウンもなしで、RB3からLED〜180Ω〜GND
SWは、押している時間だけSWが入るタイプです。
でなんですが、、、、
実は、PICの差し込みを間違えて自作の書き込み機が壊れたようです。
>SOURCE→FORMATで成形してみた方が良いです。すぐに判ります。
この方法を教えてください。
色々とすみません。宜しくお願いします。