[戻る]
新着表示

Re^3: カウントダウンタイマー 投稿者:陰性 投稿日:2016/12/20(Tue) 11:43:18 No.777

横から失礼します。
貴方がやろうとしていることは、教科書のかなり前半部分で実現できます。
いきなり目的を達成しようとする前に、教科書或はネットでPICあるいはarduinoの基礎を学びましょう。
学んでみれば、実現するのにそれほど難しい内容ではありません。
それができないならば、キットでも購入して下さい。

> 返信ありがとうございます。
> しかし 素人すぎて、プログラムをみてもよくわかりません。
> c言語の本を読みあさりましたがイマイチ基本もできていないので
> 理解に苦しんでいます。
>
> すみませんが、
> 下記 プログラムを16F84Aに書き込んでも動作しないのは
> なぜなのかがいまいちわからないところです。
> LEDが付きぱなしで、うまく作動しません。
> 16F84Aなので5Vで問題ないような気がしますが、やはり
> ハードの接続等がおかしいのでしょうか?
>
> /************************************
> 16F84A HI-TECH C v.9.83
> 2桁7セグメントLEDのダイナミック点灯
> ************************************/
> #define _LEGACY_HEADERS
> #include "PIC.h"
> #define _XTAL_FREQ 20000000 //20MHz
>
> __CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);
>
> unsigned char i;
> unsigned char d0, d1;
> unsigned char p[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
>
> void interrupt warikomi(void)
> {
> T0IF = 0; //TMR0割り込み禁止
> i++;
> if (i == 2)
> {
> i = 0;
> }
>
> if (i == 0)
> {
> PORTA = 0x1E; // 1桁目
> PORTB = p[d0];
> }
> else
> {
> PORTA = 0x1D; // 2桁目
> PORTB = p[d1];
> }
> }
>
> main(void)
> {
> TRISA = 0x00; //RA0〜RA4は出力
> PORTA = 0x03; //RA0とRA1をHighレベルにする
> TRISB = 0x00; //RB0〜RB7は出力
> PORTB = 0x00;
> OPTION = 0x86; //プリスケーラ64
> TMR0 = 0x00; //TMR0は0からスタート
> T0IE = 1; //TMR0割り込み許可
> GIE = 1; //すべての割り込み許可
> i = 0;
>
> while (1)
> {
> for (d1 = 0; d1 < 10; d1++)
> {
> for (d0 = 0; d0 < 10; d0++)
> {
> __delay_ms(500);
> }
> }
> }
> }
> > タイマの割り込みを使うと下記のような感じで時間の制御ができます。
> > 下記は赤LEDを1秒間隔でオンオフを継続し、スイッチが押された
> > 時から青LEDを2秒間隔でオンオフするというものです。
> >
> > /**********************************************
> > * LEDチカチカ タイマ1,3使用
> > * PIC16F18325
> > **********************************************/
> > #include <xc.h>
> > // コンフィギュレーション
> > #pragma config FEXTOSC = OFF, RSTOSC = HFINT1, WDTE=OFF, LVP=OFF
> >
> > /***** メイン関数 ***********/
> > void main(void) {
> > OSCCON1 = 0x60; // PLL Off 1/1
> > OSCFRQbits.HFFRQ = 3; // 4MHz
> > LATC = 0x05; // ブリッジオフ
> > TRISA = 0x30;
> > TRISC = 0;
> > ANSELA = 0; // すべてデジタル
> > ANSELC = 0;
> > /** タイマ1初期設定 1sec **/
> > T1CON = 0xC1; // LFINTOSC 1/1 開始
> > TMR1H = 0x86; // 31kHz/31000=1Hz
> > TMR1L = 0xE8;
> > PIE1bits.TMR1IE = 1; // 割込み許可
> > /** タイマ3初期設定 2sec **/
> > T3CON = 0xC0; // LFINTOSC 1/1
> > TMR3H = 0x0D; // 31kHz/62000=0.5Hz
> > TMR3L = 0xD0;
> > PIE3bits.TMR3IE = 1; // 割込み許可
> > /* グローバル割り込み許可 */
> > INTCONbits.PEIE = 1;
> > INTCONbits.GIE = 1;
> > /******** メインループ ***********/
> > while(1){
> > if(PORTAbits.RA5 == 0){ // S1オンの場合
> > LATCbits.LATC3 = 1; // 青点灯
> > TMR3H = 0x0D; // 31kHz/62000=0.5Hz
> > TMR3L = 0xD0;
> > T3CONbits.TMR3ON = 1;// タイマ3動作開始
> > while(PORTAbits.RA5 == 0);// オンの間待つ
> > }
> > }
> > }
> > /******************************************
> > * タイマ1,3割り込み処理関数
> > *****************************************/
> > void interrupt isr(void){
> > if(PIR1bits.TMR1IF){ // タイマ1割り込みの場合
> > TMR1H = 0x86; // 31kHz/31000=1Hz
> > TMR1L = 0xE8;
> > LATCbits.LATC5 ^= 1;// 赤反転
> > PIR1bits.TMR1IF = 0;// 割り込みフラグクリア
> > }
> > if(PIR3bits.TMR3IF){ // タイマ3割り込みの場合
> > TMR3H = 0x0D; // 31kHz/62000=0.5Hz
> > TMR3L = 0xD0;
> > LATCbits.LATC3 ^= 1;// 青反転
> > PIR3bits.TMR3IF = 0;// 割込みフラグクリア
> > }
> > }
> >
> >          以上
> >
> >
> > > PIC初心者ですが見よう見まねで下記のHPのキッチンタイマーを
> > > 製作したのですがアセンブラはいまいち理解しにくいためC言語でカスタムしようと奮闘中です。
> > > 今回私がバスケをやっており、そのための大型タイマーを作成して現在使用していますが、今度 24秒と14秒を切り替えしながらできる
> > > ものを作りたいのですがいかんせん初心者でよくわかりません。
> > >
> > > 今回の参考先のHPのプログラムをいじって作成しようと思うのですがオリジナルを作成して、動かしてみたのですがうまく動きません
> > > メールもしたのですが、古すぎて見ていないのか面倒なのかで返事がありませんのでどうかお助け下さい。
> > >
> > >
> > > キッチンタイマ参考HP
> > > http://www.asahi-net.or.jp/~rn8t-nkmr/family/pic/kt/index.html
> > >
> > > 24秒と14秒切り替えタイマーの参考HP
> > > http://physics.cocolog-nifty.com/weblog/2012/06/led-bffe.html

Re^2: カウントダウンタイマー 投稿者:ベッカー 投稿日:2016/12/20(Tue) 10:55:51 No.776

返信ありがとうございます。
しかし 素人すぎて、プログラムをみてもよくわかりません。
c言語の本を読みあさりましたがイマイチ基本もできていないので
理解に苦しんでいます。

すみませんが、
下記 プログラムを16F84Aに書き込んでも動作しないのは
なぜなのかがいまいちわからないところです。
LEDが付きぱなしで、うまく作動しません。
16F84Aなので5Vで問題ないような気がしますが、やはり
ハードの接続等がおかしいのでしょうか?

/************************************
16F84A HI-TECH C v.9.83
2桁7セグメントLEDのダイナミック点灯
************************************/
#define _LEGACY_HEADERS
#include "PIC.h"
#define _XTAL_FREQ 20000000 //20MHz

__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);

unsigned char i;
unsigned char d0, d1;
unsigned char p[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void interrupt warikomi(void)
{
T0IF = 0; //TMR0割り込み禁止
i++;
if (i == 2)
{
i = 0;
}

if (i == 0)
{
PORTA = 0x1E; // 1桁目
PORTB = p[d0];
}
else
{
PORTA = 0x1D; // 2桁目
PORTB = p[d1];
}
}

main(void)
{
TRISA = 0x00; //RA0〜RA4は出力
PORTA = 0x03; //RA0とRA1をHighレベルにする
TRISB = 0x00; //RB0〜RB7は出力
PORTB = 0x00;
OPTION = 0x86; //プリスケーラ64
TMR0 = 0x00; //TMR0は0からスタート
T0IE = 1; //TMR0割り込み許可
GIE = 1; //すべての割り込み許可
i = 0;

while (1)
{
for (d1 = 0; d1 < 10; d1++)
{
for (d0 = 0; d0 < 10; d0++)
{
__delay_ms(500);
}
}
}
}
> タイマの割り込みを使うと下記のような感じで時間の制御ができます。
> 下記は赤LEDを1秒間隔でオンオフを継続し、スイッチが押された
> 時から青LEDを2秒間隔でオンオフするというものです。
>
> /**********************************************
> * LEDチカチカ タイマ1,3使用
> * PIC16F18325
> **********************************************/
> #include <xc.h>
> // コンフィギュレーション
> #pragma config FEXTOSC = OFF, RSTOSC = HFINT1, WDTE=OFF, LVP=OFF
>
> /***** メイン関数 ***********/
> void main(void) {
> OSCCON1 = 0x60; // PLL Off 1/1
> OSCFRQbits.HFFRQ = 3; // 4MHz
> LATC = 0x05; // ブリッジオフ
> TRISA = 0x30;
> TRISC = 0;
> ANSELA = 0; // すべてデジタル
> ANSELC = 0;
> /** タイマ1初期設定 1sec **/
> T1CON = 0xC1; // LFINTOSC 1/1 開始
> TMR1H = 0x86; // 31kHz/31000=1Hz
> TMR1L = 0xE8;
> PIE1bits.TMR1IE = 1; // 割込み許可
> /** タイマ3初期設定 2sec **/
> T3CON = 0xC0; // LFINTOSC 1/1
> TMR3H = 0x0D; // 31kHz/62000=0.5Hz
> TMR3L = 0xD0;
> PIE3bits.TMR3IE = 1; // 割込み許可
> /* グローバル割り込み許可 */
> INTCONbits.PEIE = 1;
> INTCONbits.GIE = 1;
> /******** メインループ ***********/
> while(1){
> if(PORTAbits.RA5 == 0){ // S1オンの場合
> LATCbits.LATC3 = 1; // 青点灯
> TMR3H = 0x0D; // 31kHz/62000=0.5Hz
> TMR3L = 0xD0;
> T3CONbits.TMR3ON = 1;// タイマ3動作開始
> while(PORTAbits.RA5 == 0);// オンの間待つ
> }
> }
> }
> /******************************************
> * タイマ1,3割り込み処理関数
> *****************************************/
> void interrupt isr(void){
> if(PIR1bits.TMR1IF){ // タイマ1割り込みの場合
> TMR1H = 0x86; // 31kHz/31000=1Hz
> TMR1L = 0xE8;
> LATCbits.LATC5 ^= 1;// 赤反転
> PIR1bits.TMR1IF = 0;// 割り込みフラグクリア
> }
> if(PIR3bits.TMR3IF){ // タイマ3割り込みの場合
> TMR3H = 0x0D; // 31kHz/62000=0.5Hz
> TMR3L = 0xD0;
> LATCbits.LATC3 ^= 1;// 青反転
> PIR3bits.TMR3IF = 0;// 割込みフラグクリア
> }
> }
>
>          以上
>
>
> > PIC初心者ですが見よう見まねで下記のHPのキッチンタイマーを
> > 製作したのですがアセンブラはいまいち理解しにくいためC言語でカスタムしようと奮闘中です。
> > 今回私がバスケをやっており、そのための大型タイマーを作成して現在使用していますが、今度 24秒と14秒を切り替えしながらできる
> > ものを作りたいのですがいかんせん初心者でよくわかりません。
> >
> > 今回の参考先のHPのプログラムをいじって作成しようと思うのですがオリジナルを作成して、動かしてみたのですがうまく動きません
> > メールもしたのですが、古すぎて見ていないのか面倒なのかで返事がありませんのでどうかお助け下さい。
> >
> >
> > キッチンタイマ参考HP
> > http://www.asahi-net.or.jp/~rn8t-nkmr/family/pic/kt/index.html
> >
> > 24秒と14秒切り替えタイマーの参考HP
> > http://physics.cocolog-nifty.com/weblog/2012/06/led-bffe.html

Re: カウントダウンタイマー 投稿者:Gokan 投稿日:2016/12/19(Mon) 22:41:53 No.775

タイマの割り込みを使うと下記のような感じで時間の制御ができます。
下記は赤LEDを1秒間隔でオンオフを継続し、スイッチが押された
時から青LEDを2秒間隔でオンオフするというものです。

/**********************************************
* LEDチカチカ タイマ1,3使用
* PIC16F18325
**********************************************/
#include <xc.h>
// コンフィギュレーション
#pragma config FEXTOSC = OFF, RSTOSC = HFINT1, WDTE=OFF, LVP=OFF

/***** メイン関数 ***********/
void main(void) {
OSCCON1 = 0x60; // PLL Off 1/1
OSCFRQbits.HFFRQ = 3; // 4MHz
LATC = 0x05; // ブリッジオフ
TRISA = 0x30;
TRISC = 0;
ANSELA = 0; // すべてデジタル
ANSELC = 0;
/** タイマ1初期設定 1sec **/
T1CON = 0xC1; // LFINTOSC 1/1 開始
TMR1H = 0x86; // 31kHz/31000=1Hz
TMR1L = 0xE8;
PIE1bits.TMR1IE = 1; // 割込み許可
/** タイマ3初期設定 2sec **/
T3CON = 0xC0; // LFINTOSC 1/1
TMR3H = 0x0D; // 31kHz/62000=0.5Hz
TMR3L = 0xD0;
PIE3bits.TMR3IE = 1; // 割込み許可
/* グローバル割り込み許可 */
INTCONbits.PEIE = 1;
INTCONbits.GIE = 1;
/******** メインループ ***********/
while(1){
if(PORTAbits.RA5 == 0){ // S1オンの場合
LATCbits.LATC3 = 1; // 青点灯
TMR3H = 0x0D; // 31kHz/62000=0.5Hz
TMR3L = 0xD0;
T3CONbits.TMR3ON = 1;// タイマ3動作開始
while(PORTAbits.RA5 == 0);// オンの間待つ
}
}
}
/******************************************
* タイマ1,3割り込み処理関数
*****************************************/
void interrupt isr(void){
if(PIR1bits.TMR1IF){ // タイマ1割り込みの場合
TMR1H = 0x86; // 31kHz/31000=1Hz
TMR1L = 0xE8;
LATCbits.LATC5 ^= 1;// 赤反転
PIR1bits.TMR1IF = 0;// 割り込みフラグクリア
}
if(PIR3bits.TMR3IF){ // タイマ3割り込みの場合
TMR3H = 0x0D; // 31kHz/62000=0.5Hz
TMR3L = 0xD0;
LATCbits.LATC3 ^= 1;// 青反転
PIR3bits.TMR3IF = 0;// 割込みフラグクリア
}
}

         以上


> PIC初心者ですが見よう見まねで下記のHPのキッチンタイマーを
> 製作したのですがアセンブラはいまいち理解しにくいためC言語でカスタムしようと奮闘中です。
> 今回私がバスケをやっており、そのための大型タイマーを作成して現在使用していますが、今度 24秒と14秒を切り替えしながらできる
> ものを作りたいのですがいかんせん初心者でよくわかりません。
>
> 今回の参考先のHPのプログラムをいじって作成しようと思うのですがオリジナルを作成して、動かしてみたのですがうまく動きません
> メールもしたのですが、古すぎて見ていないのか面倒なのかで返事がありませんのでどうかお助け下さい。
>
>
> キッチンタイマ参考HP
> http://www.asahi-net.or.jp/~rn8t-nkmr/family/pic/kt/index.html
>
> 24秒と14秒切り替えタイマーの参考HP
> http://physics.cocolog-nifty.com/weblog/2012/06/led-bffe.html

カウントダウンタイマー 投稿者:ベッカー 投稿日:2016/12/19(Mon) 09:33:41 No.774

PIC初心者ですが見よう見まねで下記のHPのキッチンタイマーを
製作したのですがアセンブラはいまいち理解しにくいためC言語でカスタムしようと奮闘中です。
今回私がバスケをやっており、そのための大型タイマーを作成して現在使用していますが、今度 24秒と14秒を切り替えしながらできる
ものを作りたいのですがいかんせん初心者でよくわかりません。

今回の参考先のHPのプログラムをいじって作成しようと思うのですがオリジナルを作成して、動かしてみたのですがうまく動きません
メールもしたのですが、古すぎて見ていないのか面倒なのかで返事がありませんのでどうかお助け下さい。


キッチンタイマ参考HP
http://www.asahi-net.or.jp/~rn8t-nkmr/family/pic/kt/index.html

24秒と14秒切り替えタイマーの参考HP
http://physics.cocolog-nifty.com/weblog/2012/06/led-bffe.html

Re^2: 18f452で電圧を表示 投稿者:negishi 投稿日:2016/12/14(Wed) 17:11:51 No.773

マニュアルを読んで#include<stdlib.h>が必要だということで
プログラムに書いてやったのですが、itoa関数自体が入っていないので使い方はわかるのですが、使えません。どうしたらitoa関数を使えるようになるのでしょうか?
itoa関数を記述したものをどっかから持ってくるとかしないといけないのでしょうか?


> CCSのマニュアルにitoa関数の使い方が書いてありますよ。
>
> > LCD SC2004Cに18f452でAD変換した値を表示したいのですが
> > itoa(Integer to Ascii)という関数を使うとすぐ分解能の値をすぐに文字列にして送れるらしいのですが、18f452にはitoa関数が無い様で使えません。変わりにatoiという関数が使えるのですがうまく使いこなせません。
> > 誰かそこらへんの詳しい方がいらしたら教えていただきたいです。
> >
> > CCS-Cでプログラムは書いてます

Re: 18f452で電圧を表示 投稿者:Gokan 投稿日:2016/12/13(Tue) 23:11:40 No.772

CCSのマニュアルにitoa関数の使い方が書いてありますよ。

> LCD SC2004Cに18f452でAD変換した値を表示したいのですが
> itoa(Integer to Ascii)という関数を使うとすぐ分解能の値をすぐに文字列にして送れるらしいのですが、18f452にはitoa関数が無い様で使えません。変わりにatoiという関数が使えるのですがうまく使いこなせません。
> 誰かそこらへんの詳しい方がいらしたら教えていただきたいです。
>
> CCS-Cでプログラムは書いてます

18f452で電圧を表示 投稿者:negishi 投稿日:2016/12/12(Mon) 22:17:58 No.771

LCD SC2004Cに18f452でAD変換した値を表示したいのですが
itoa(Integer to Ascii)という関数を使うとすぐ分解能の値をすぐに文字列にして送れるらしいのですが、18f452にはitoa関数が無い様で使えません。変わりにatoiという関数が使えるのですがうまく使いこなせません。
誰かそこらへんの詳しい方がいらしたら教えていただきたいです。

CCS-Cでプログラムは書いてます

Re^2: 開発環境とモデル 投稿者:sugaular 投稿日:2016/12/08(Thu) 13:23:07 No.769

さっそくの回答ありがとうございます。
pickit3を買います。

RS232C以外で、今だと何がお勧めでしょうか。

単純に、FTDIのドライバが手に入りやすい。
既にRS232C通信の制御ソフトがあって
それで制御するためなのですが。

ただ、今後RS232Cの次に来るものに
興味があります。

Re: 開発環境とモデル 投稿者:ダークマター 投稿日:2016/12/08(Thu) 12:08:54 No.768

こんにちわ。
pickit3を購入して下さい。
microchipのオフィシャルサイトから購入の方が、むしろ良いと思います。
他サードパーティ物でよければ、ネットに幾らでも転がっていますが、安かろう悪かろうなので、止めましょう。

そして、今更RS232Cなんて止めましょう。

> お世話になっております。
> PICマイコンの開発環境を整えようと考えているのですが
> おそらくPIC16辺りを使うことが多いと思います。
> pickit2/3だと2を買っておけばよいでしょうか?
>
> そしてpickitを探してるのですが売ってる場所が見つからなくて
> もしご存知でしたら教えて頂けたらありがたいです。
>
> あと、まず今考えているのが
> FTDIのUSB-UART変換デバイスとPICを乗せて
> RS232C通信で
> ある機器をIO制御するモノを考えています。
> この用途だと、先日の
> PIC16F18325辺り使っておけば大丈夫でしょうか。
>
> よろしくお願いします。

開発環境とモデル 投稿者:sugaular 投稿日:2016/12/08(Thu) 01:03:05 No.767

お世話になっております。
PICマイコンの開発環境を整えようと考えているのですが
おそらくPIC16辺りを使うことが多いと思います。
pickit2/3だと2を買っておけばよいでしょうか?

そしてpickitを探してるのですが売ってる場所が見つからなくて
もしご存知でしたら教えて頂けたらありがたいです。

あと、まず今考えているのが
FTDIのUSB-UART変換デバイスとPICを乗せて
RS232C通信で
ある機器をIO制御するモノを考えています。
この用途だと、先日の
PIC16F18325辺り使っておけば大丈夫でしょうか。

よろしくお願いします。

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |

- WebForum -