サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。
-
from: Simbaさん
2009年04月03日 07時56分44秒
icon
10秒後にLEDを光らせたいのですが・・・;;
あのー1秒タイマの続きで、10秒たったら別のLEDを点灯させようとしてるのですが、プログラム走らせた途端に点灯するのです。もう一個のLEDは1秒間隔で点滅してくれてるのですが。
お暇なときに、プログラムみてもらえませんか?
僕のホムペのinformationのところに置いてます。
http://akih8.yu-nagi.com/
です。
ストップウォッチできたら、
C言語でのプログラミングやってみるつもりです。
目標:GW前までwww-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 14
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
-
コメント: 全14件
from: zwiさん
2009年04月07日 11時57分18秒
icon
「Re:Re:Re:Re:Re:Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
見てみました、気になる点が少々。
[timer10.src]
プログラム的には合っていると思います。
ただし、
LA: MOV.B @P5DR,R2H ;ポート5の状態を取り出す
BTST #0,R2H ;ポート5の0bitを調べる
BEQ LA ;0ならLAに飛んでポート5の0bitの監視
BRA L1 ;0bitが0→1ならカウントダウン
と書いて下さい。同じチェックは2回もチェックしなくて良いですよ。他のループも同様な感じで。
[timer11.src]
MOV.W #359,R3 ;10秒までのカウント数
は
MOV.W #399,R3 ;10秒までのカウント数
じゃないでしょうか?
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月06日 16時39分58秒
icon
「Re:Re:Re:Re:Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
zwiさんもそうだったのですか・・・
色々やってみますわ^^
あとお願いが・・・
今僕のホムペのinformationに載せてるプログラム、
変なことしてないかみてもらえませんか???
お忙しいところすみませんがm(_ _)m
イケてたら、それを元にいろいろやってみようかと・・・
お願いばかりで申し訳ないです^^;
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月06日 16時34分23秒
icon
「Re:Re:Re:Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
私も昔は割り込みを難しく感じてましたので仕方ないかと。
今でも割り込み系は設計段階で失敗しやすいですね。デバッグしていてなぜこんな設計を!と自分に突っ込み(^_^;)
割り込みに関しては色々実験して自分なりに感触をつかんでもらうのが良いかと思います。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月06日 15時29分49秒
icon
「Re:Re:Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
んーやっぱり割り込みが・・・
1secタイマーのプログラムをホムペでまとめようとしたら、
やっぱりわからないです。
それに先日作った10secタイマもあってるのかどうかも・・・
ま、動いてるのをみたらあってるようですが。
徒然なるままに書いたので、
プロならどうするんやろぉとか。
P.S.今日もヒンヤリしてて気持ちいいですね♪
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月05日 08時50分12秒
icon
「Re:Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
割り込みのフローをもう一度読んだら、
なんとなく分かってきたかも lol
無限ループ中に割り込み判定してるんですか??
とりあえず、慣れですかね〜
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月05日 08時03分52秒
icon
「Re:Re:Re:Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
おはようございます。
ヒンヤリしてて気持ちのいい朝ですよ〜
朝から考えてというかアドバイス通り(?)やってみたところ、正解に近いものができたかもです。
今までのバージョンでは、やっぱりLEDのoff→onまで1秒、逆も1秒かかってました。
タイマーの計算なんですけど、
25msのタイマーが欲しいときは・・・
クロックが16MHzだから、逆数とって、周期:62.5ns。
よって、GRA0の値は
25ms/62.5ns=400000・・・これだとレジスタにはいりきれないので、
クロックを1/8にして
400000×1/8=50000
これなら入るので。
GRA0=49999
としてたのです。
あってますよね・・・
段々自信がなくなってきたのですがwww
この設定のタイマーは、実は50ms周期のタイマーになるのですよね・・・
こういう言い方しないのかもですが・・・
だから、
1秒毎にLEDをさせるには、19回タイマを回せばいいのですよね・・・
か、GRA0=25999とするか・・・
ですよね・・・
タイマの周期にこだわらずに1秒点灯LEDを目標とすれば・・・
でまーそのー、お暇なときに見ていただきたいのが、
いつもの所に置いてるソースなんですが。
走らせた結果は、所望通りにうごいてはいます・・・
割り込み開始の合図は、
ソース中の
LDC.B #0,CCR
ですよね。
ほいで、割り込みルーチンからでたら、
LDC.Bの次の命令にPCが移って、
処理がすすんでいくのですよね??
たぶん、これは違うんですよね?www
次の割り込みは、どうやって入るのかしらという疑問がでてくるから。
その辺が全く分かってないというか、
分かってないのです(ノ_<。)ビェェン
本では、外部スイッチで割り込みを要求してるので、なんとなく分かった気になってるんですが・・・
作って思い通りに動いたのは凄く嬉しいのですが・・・
タイマとLED点滅の関係と
タイマの時間の計算方法と
割り込みの入る条件というかどこで入るかと
RTEでどこに戻ってくるかと
次割り込みが入るのはどこからと
などなど
疑問だらけです。
割り込みとサブルーチンとごっちゃになってるのかもしれない気がします。割り込みは有無もいわせず強引に割り込みルーチンを走らせるものと思ってるのですが・・・
なんとなく分かってるところもあるし、
昨日の割り込みのフローも何となく分かるし、
僕の持ってる本には、割り込みについて、
あまり詳しく書いてないていうか2ページほどなんです。
つまり、2ページ分位の説明で分かるくらい簡単なんでしょうけど、僕には釈然としないものがあります。
という状況です。
ここからの展開なんですが、
LEDの点滅部分を工夫して液晶に表示させようとしてるのです。桁上がりをどうしよかと思って、LEDで代用したわけで^^;
こんな感じの今日この頃でした。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月04日 18時50分14秒
icon
「Re:Re:Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
こんばんわ〜
アドバイスありがとうございました。
いつもいつもすいません(._.)オジギ
タイマーの周期が間違ってるのを確認します。
ていうか、間違ってるのでしょう。
僕の体内時計でOKとしてるから^^;
ほいでは、
ゴールへとちょこちょこやってみますね。
でも、
今日は、なんだか眠いので、
今日は寝ます。
でわでわ
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月04日 16時49分43秒
icon
「Re:Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
プログラムを見てみました。
timer10.src
このプログラムの問題は、LEDのポート(#0,@P5DR)が1の間ずっとDEC.B R2Lを行い続ける事になります。なので、あっという間に10カウントしてしまいます。CPUは割り込み待ち中も停止していない事に注意してください。
解決方法としては、(#0,@P5DR)が0の間のループAと1の間のループBとループを別にすることで解決できます。0→1、1→0と変化したときに10秒のカウントをしてその後は今の(#0,@P5DR)値に応じたループに移動すれば良いです。
[フロー]
・ループA。
・(#0,@P5DR)が0ならループAを繰り返す。
・(#0,@P5DR)が1なら、10カウントへ
・ループB。
・(#0,@P5DR)が1ならループAを繰り返す。
・(#0,@P5DR)が0なら、10カウントへ
・10カウント
・10カウントのカウンタから1引く。
・カウントが0なら、LED1をONにしてループへ。
・(#0,@P5DR)が0ならループAへ
・(#0,@P5DR)が1ならループBへ
・ループ。
・ループへジャンプして無限ループ。
timer11.src
これは合っている気がします。
もし5.5秒と早く10カウントするのであれば、タイマーの設定が間違っていて25ms周期で回っていないのかも知れません。
LED#0の点滅周期を今一度確認してみてください。ON→OFFを2秒で繰り返してるはずですので、ON→OFFを5回(※修正)繰り返したら10秒のはずです。もしかした半分の周期なのかもです。
timer12.src
多分LED#0が点灯したら一瞬のうちにLED#1が点灯すると思います。
結論から言うとtimer11.srcが一番正解に近かったです。
timer12.srcもちゃんと動くようには出来ると思いますが、ちょっと処理がトリッキーですので、こういうプログラムを作るクセを付けるのはお勧めできません。
timer10.srcも動くプログラムに出来ますので挑戦してみてください。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月04日 16時09分49秒
icon
「Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
割り込みが分り辛いって事で、割り込みに絞ってCPUの動きをフローに書いてみました。
(1)リセット
(2)PC(プログラムカウンタ)をスタートベクタ値に書き換える。
(3)命令実行ループ。永久に繰り返す。
(4)割り込みが発生したか?(yes)
(5)割り込みの種類に応じた割り込みベクタアドレスを取り出す。
(6)スタックに現在のPCとステータスレジスタを保存する。
(7)PCに割り込みベクタアドレスをセットする。
(8)割り込み中だとスターテスレジスタに設定する。
(9)割り込みが発生したか?(no)
(10)PCの指すアドレスの命令を取り出す。PCは次の命令にカウントアップ。
(11)命令はRTEか?(yes)
(12)スタックからPCとステータスレジスタを復元する。
(13)命令はRTEか?(no)
(14)命令を解析実行する。
CPUのフローは、
(1)(2)(3)と来て、
割り込みの発生時点なら、(4)(5)(6)(7)(8)で(3)に戻ります。
割り込みが無い場合は、(9)(10)(13)(14)で(3)に戻ります。
RTE命令の場合は。(9)(10)(11)(12)で(3)に戻ります。
大雑把ですが、フローに書くと割り込みって結構単純なのが分ると思います。
とりあえず、ソースのほうはこれから見てみます。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月04日 14時34分21秒
icon
「Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
第3弾も僕のホムペに載せました。
どれかうまいこといきそうなのありますでしょうか??
P.S. 神戸はザザ降りの雨です。心が落ち着き増です^^
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月04日 05時03分35秒
icon
「Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
zwiさん。
うまいこといきません(ノ_<。)ビェェン
方法1:これでいいのかなと思いながらやって、駄目でした。LED2は速攻点灯しました。それであれこれやりながら、断念しました。すいません;;
方法2:これならいけると思ったんですけど、5.5秒くらいでLED2が点灯するのです。何故??
できれば方法1で作りたかったのですが・・・
(格好よさげだから)
もう一度割り込み勉強し直します。
というか、よくわかってないです。
本には、あまり詳しく載ってないので、ネットを漁ってみます。
で、一応、いつものホムペのinformationのところに置いてます。よかったらコメント下さい。
もう、限界で、眠りに入りますwww
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月03日 17時40分41秒
icon
「Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
> 方法1.1秒のLED(#0,@P5DR)を監視して値が反転したら1秒経過したとみなす。そのためには前の状態を覚えておく必要がある。
> 方法2.sleepは割り込み毎に解除されるので(今回だと25ms)それで10秒分カウントする(400回)。
> どちらでも良いので、考えてみてください。
なるほど〜〜。
今晩考えてみます。
いつもありがとうございます^^
P.S.ちょっと今日は鬱っぽかったので、しんどかったです(^_^)今は大丈夫ですけどね♪
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月03日 12時50分21秒
icon
「Re:10秒後にLEDを光らせたいのですが・・・;;」
> あのー1秒タイマの続きで、10秒たったら別のLEDを点灯させようとしてるのですが、プログラム走らせた途端に点灯するのです。もう一個のLEDは1秒間隔で点滅してくれてるのですが。
> お暇なときに、プログラムみてもらえませんか?
見てみました。まず、割り込みはメインと独立して動くと考えてください。
なので、今のプログラムだとメインだけは全速力でカウントダウンを終了します。たぶん、10nsも掛からないでしょう。
なので、メインで10秒待つなら別のタイマを使うか、1秒をカウントしている割り込み側からカウントダウンしているタイミングを教えてもらうかが必要です。
方法1.1秒のLED(#0,@P5DR)を監視して値が反転したら1秒経過したとみなす。そのためには前の状態を覚えておく必要がある。
方法2.sleepは割り込み毎に解除されるので(今回だと25ms)それで10秒分カウントする(400回)。
どちらでも良いので、考えてみてください。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月07日 14時38分26秒
icon
「Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:10秒後にLEDを光らせたいのですが・・・;;」
どうも見ていただいてありがとうございました。
言われてみればなるほどっておもいます。
しかし、
[timer11.src]の場合、
#399だと11秒でLED2が点灯するのです。
で、暫定的に1秒引いて、
#359としてるのです。
何故かわからないですけど、
これはなんとか自力解決したいと思います。
なんか根本的に何か分かってないような;;
1ヶ月経っても答えでなかったら、
質問したいです。
そのときはよろしくお願いしますm(_ _)m
本当にいつもいつもすいません。
> [timer11.src]
> MOV.W #359,R3 ;10秒までのカウント数
> は
> MOV.W #399,R3 ;10秒までのカウント数
> じゃないでしょうか?
>
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。
閉じる
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。
閉じる
icon拍手者リスト