サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。
-
from: Simbaさん
2009年04月20日 17時35分06秒
icon
ストップウォッチ
あの勝手にスレッド立てました^^;
なんかチャタリングからはなれてきたので・・・
でもないかな・・・
一応、状態遷図みたいなものを作ったのですが・・・
いつものところにおいてますけども。
もっとバラバラにしないといけないのかなと思ったりして・・・-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 39
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
-
コメント: 全39件
from: Simbaさん
2009年04月23日 19時42分02秒
icon
「Re:Re:鍋は明日だそうえ;;」
> でも、まだまだ改造しないとストップウォッチには手が届かないです。
> 時計・ストップウォッチ系はマイコン制御の基本の処理が寄り集ってますからね実は奥が深いんです。
そうなんですか〜。
わ〜面白そう〜〜♪
でも、ちょっとしんどいですけど・・・
> そうだ、一度頭の整理のためにフローを書いてみませんか?細かく書き過ぎないようにチャタリングのときより出来るだけ大雑把に。メインは;** タイマの初期設定 **からで、割り込みは割り込みで別フローに。
はい、そうします。
出来上がりは明日かな〜・・・
コーヒー飲んだのに、眠気がwww
寝てから考えます。
今、頭パンクしてますから^^;
とゆーことで、おやすみなさい
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月23日 19時34分04秒
icon
「Re:鍋は明日だそうえ;;」
ソース見ました。
SUJI: .DATA.L H'3030 ;H'30='0'
と
NUM1: .RES.B 1 ;一桁目の時間の初期値
NUM10: .RES.B 1 ;二桁目の時間の初期値
は同じ意味の変数なのでSUJIは不要です。
>なんか段々僕の手に負えなくなってきてますよ・・・
たしかに大改造しましたからね〜。
でも、まだまだ改造しないとストップウォッチには手が届かないです。
時計・ストップウォッチ系はマイコン制御の基本の処理が寄り集ってますからね実は奥が深いんです。
私も困ってますね〜。SWのチャタリング処理とLCD表示を同時にこなすのは実はかなり高度な制御が必要だったりして(^_^;) ほんとは割り込み処理を3つぐらい平行(カウントとSW処理とLCD表示)で使いたい気分ですが、ここはぐっと抑えて方法を考え中です。
そうだ、一度頭の整理のためにフローを書いてみませんか?細かく書き過ぎないようにチャタリングのときより出来るだけ大雑把に。メインは;** タイマの初期設定 **からで、割り込みは割り込みで別フローに。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月23日 18時58分52秒
icon
「鍋は明日だそうえ;;」
もどりました〜
鍋は明日。
只今コーヒーブレイクです。
なんか段々僕の手に負えなくなってきてますよ・・・
sw2おしたらカウンター表示一時停止なんていうことも
考えてたのですがwww
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月23日 16時47分21秒
icon
「Re:Re:ソースを見て2」
> あっ、メインと割り込みで表示してもうた(^_^;)
> STARTとSTOPの表示の件は今回保留にしたって下さい。
> また考えます。JSR STATE1とJSR STATE2はコメント化しといてください。
はい、わかりました。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月23日 16時44分52秒
icon
「Re:ソースを見て2」
あっ、メインと割り込みで表示してもうた(^_^;)
STARTとSTOPの表示の件は今回保留にしたって下さい。
また考えます。JSR STATE1とJSR STATE2はコメント化しといてください。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月23日 16時41分15秒
icon
「ソースを見て2」
割り込み処理。
;----------------------------
;***** 割り込みルーチン *****
;----------------------------
ITU_IMIA0:
PUSH.L ER3
PUSH.L ER1
PUSH.L ER0
;タイマ停止
BCLR #0,@TSR0
;-------------------------
;ここでステート分岐
;-------------------------
;状態1の場合。
MOV.B @STATE,R1L ;
CMP.B #1,R1L
BNE ITU0_SJE ;不一致ならITU0_SJEへ。
;---------------------------
; STATE1の処理
;---------------------------
;(1)ここでカウント処理を行う。(省略)。
;JSR STATE1をするのはここではしない。
;99で停止する件は、今回保留のこと。
BRA ITU0_SJE ;無駄に条件判断したくないので終わりまで飛びます。
; STATE2は何もしない。
ITU0_SJE:
;この下ではタイマ値の表示だけを行います。(省略)
; カウント関係は(1)に移動してください。
MOV.B #B'10000010,R0L ;カーソル位置セット
JSR @LCD_CONTROL
;******** 1の位 *********
MOV.B R3L,R0L ;R3Lではなくメモリから。
JSR @LCD_TIME
;******** 10の位 *********
MOV.B R3H,R0L ;R3Hではなくメモリから。
JSR @LCD_TIME
ITU0_EXIT:
POP.L ER0
POP.L ER1
POP.L ER3
RTE
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月23日 16時41分05秒
icon
「Re:ソースを見て」
う、いろいろとおかしな所があるのですね;;
なんとかやってみます。
こんな長いプログラム初めて・・・という言い訳をしつつ
おもしろい♪
zwiさんは大変ですがorz
途中経過みてくださいね〜
勘違い野郎ですから→僕
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月23日 16時31分50秒
icon
「ソースを見て」
1.まず、
;** タイマの初期設定 **
MOV.B #39,R1L; ;1secまでの繰り返しカウント数をタイマに渡す
MOV.B #H'30,R3L ;一桁目の時間の初期値
MOV.B R3L,R3H ;二桁目の時間の初期値
BSR ITU_INI ;ITU0を初期化
LDC.B #0,CCR ;割り込みマスクを外す
これでR1L,R3H,R3Lの値を何処にも格納してないのが問題です。メモリ領域に格納しましょう。
2.タイマのスタートはSWを押した後ではなくメインループ前が良いでしょう。理由は後述します。
3.ITU_INIの
MOV.B #H'23,R0L ;内部クロックφ/8、GRAのコンペアマッチで MOV.B R0L,@TCR0 ;TCNTをクリア
は、
MOV.B R0L,@TCR0 ;TCNTをクリア
がコメント化してます。
4.サブルーチンヘッダにパラメータレジスタを追加。
(例)
;-------------------------
;***** 文字列を表示 *****
; ER1 文字列アドレス
; R2L 文字列長
;-------------------------
LCD_STRING:
5.TIME10はコメント無し?
6.大問題の割り込み。その1。
割り込みで毎回文字列を表示すると割り込み中の時間が長くなりすぎるので、STATE1とSTART2の文字列表示はメインに移動します。この問題は私も不注意でした。
INC R1L ;SW1が押されたので状態変数を+1にする
MOV.B R1L,@STATE
の直後に入れてください。
;-------------------------
;MAIN側ステート分岐
;-------------------------
;状態1の場合。
CMP.B #1,R1L
BNE MAIN_SJ1 ;不一致ならITU0_SJ1へ。
; BEQでジャンプしてはいけませんJSRです。
JSR STATE1 ;STATE1
BRA MAIN_SJE ;無駄に条件判断したくないので終わりまで飛びます。
MAIN_SJ1:
;状態2の場合。
CMP.B #2,R1L
BNE MAIN_SJE
; BEQでジャンプしてはいけませんJSRです。
JSR STATE2 ;STATE2
;BRA MAIN_SJE ;不要なので省略
MAIN_SJE:
とりあえず、ここまで。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月23日 14時04分10秒
icon
「Re:Re:Re:Re:Re:Re:Re:関数整理1」
> ルネサスのHPからハードウェアマニュアルをダウンロードして見た方が良いかなと思いますよ。細かすぎて逆に読むのが大変ですが読み慣れたほうが良いと思いますし。
> 「H8/3048グループ、H8/3048F-ZTATTM ハードウェアマニュアル」
> http://japan.renesas.com/fmwk.jsp?cnt=Documentation.jsp&fp=/products/mpumcu/h8_family/h8300h_series/&title=%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88&lid=144
はい、そうします・・・
ルネサスのマイコン講座で使っていた教科書で、今までやってたので^^;
やっぱりマニュアル見ないといけませんよね・・・
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月23日 14時00分49秒
icon
「Re:Re:Re:Re:Re:Re:関数整理1」
> > ;タイマーの割り込みトリガになる値をセット。
> > ;タイマー値がGRA0と一致したら割り込み発生。
> > MOV.W #49999,R0 ;
> > MOV.W R0,@GRA0 ;25msecのインターバル
> > ;これでタイマーがスタート。
> > BSET #0,@TSTR ;カウント開始
> > です。
>
> ほーなるほど〜。
> 何故教科書にはかいてないのかしら・・・
> 見落としてるのかも。
ルネサスのHPからハードウェアマニュアルをダウンロードして見た方が良いかなと思いますよ。細かすぎて逆に読むのが大変ですが読み慣れたほうが良いと思いますし。
「H8/3048グループ、H8/3048F-ZTATTM ハードウェアマニュアル」
http://japan.renesas.com/fmwk.jsp?cnt=Documentation.jsp&fp=/products/mpumcu/h8_family/h8300h_series/&title=%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88&lid=144
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月23日 13時24分27秒
icon
「Re:Re:Re:Re:Re:関数整理1」
> すいません、午前中は定額給付金の手続きに行ってました(^_^;)
あら、うちんとこは、2週間前には振り込まれてました。
自治体のやる気が見え隠れしますねwww
> ;タイマーの割り込みトリガになる値をセット。
> ;タイマー値がGRA0と一致したら割り込み発生。
> MOV.W #49999,R0 ;
> MOV.W R0,@GRA0 ;25msecのインターバル
> ;これでタイマーがスタート。
> BSET #0,@TSTR ;カウント開始
> です。
ほーなるほど〜。
何故教科書にはかいてないのかしら・・・
見落としてるのかも。
> プログラムの細かい点は、昼食後チェックします。
いつもいつもありがとうございます。
助かりますし、面白いです。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月23日 13時13分06秒
icon
「Re:Re:Re:Re:関数整理1」
すいません、午前中は定額給付金の手続きに行ってました(^_^;)
> 割り込みの発生要件がわかってないので、
> 困りものです。
> BCLR #0,@TSR0 割り込み要求発生
> この命令を実行したら、タイマが動くのかとおもってるのですが、どうも違うみたいで(泣)
BCLR #0,@TSR0
は、タイマを停止させますね。
割り込みの発生には2つ処理が必要です。
LDC.B #0,CCR ;割り込みマスクを外す
は割り込みを許可します。
許可するだけなので、割り込み自体は別のトリガが必要になります。
タイマー自身はリセット後とカウント終了後は停止していますので、タイマーの割り込みトリガ値を入れた後タイマーをスタートさせる必要があります。
;タイマーの割り込みトリガになる値をセット。
;タイマー値がGRA0と一致したら割り込み発生。
MOV.W #49999,R0 ;
MOV.W R0,@GRA0 ;25msecのインターバル
;これでタイマーがスタート。
BSET #0,@TSTR ;カウント開始
です。
プログラムの細かい点は、昼食後チェックします。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月23日 03時43分03秒
icon
「Re:Re:Re:関数整理1」
僕にできる限りシンプルにしたつもりですが、
どうでしょうか・・・
割り込みの発生要件がわかってないので、
困りものです。
BCLR #0,@TSR0 割り込み要求発生
この命令を実行したら、タイマが動くのかとおもってるのですが、どうも違うみたいで(泣)
状態変数をどう使うのかも、
なんとなくは分かりますが、
やっぱり分かりません・・・・
それでは、今から、ちょっとジョギングをwww
頭がパンク状態ですから^^;
で、社労士の方をやって、昼からまた、ストップウォッチの予定。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月23日 00時16分06秒
icon
「Re:Re:Re:関数整理1」
> > これは液晶のインストラクションの概要を見てもらえればよろしいかと。
> > 「#B'00000001」は「全画面クリア」ときまってまして、「#B'00101000」は「ファンクションセット」と呼ばれる機能の設定で、液晶を4bitで使うか8bitで使うかを決めるものです。その他は、デューティー比や文字フォントも設定してます。今の設定では、
> > ・4bitで使う
> > ・1/8または1/11デューティにセット
> > ・文字フォントを5×10ドットマトリックスにセット
> > となるように、セットされています。
>
> インストラクションは使ったことがあるのでおぼろげには覚えてます。
> で、問題なのは殆ど同じ様な処理(LCDにデータを送っている)なのに別の書き方があるのはソースが複雑に見える要因なのでどんどん統一化してシンプルにって話です。統一できませんか?
わかりました。もっとよく見てみます。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月23日 00時08分07秒
icon
「Re:続きの前に割り込みの処理」
> ITU_IMIA0やITU_INIにもコメント付けてくださいね。
はい、わかりました。
> で、問題はITU_IMIA0中で使用しているレジスタを全て退避していない事です。それとCOUNTにブランチしたときにレジスタを回復せずRTEするのも問題ですね。
> これをいろんな位置で考えてみてください。レジスタを保存しないと、どんな害があるか分ると思います。
なるほど・・・
ちゃんとします。
割り込みなんですけ、
いつ割り込みが開始されるかが
よく分かってなくって。
本読んでも、その辺りは書いてなく(; ;)ホロホロ
割り込みをビット操作で許可したときに、
割り込みが始まるのですよね??
違うのかな・・・
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月22日 23時38分03秒
icon
「Re:Re:関数整理1」
> これは液晶のインストラクションの概要を見てもらえればよろしいかと。
> 「#B'00000001」は「全画面クリア」ときまってまして、「#B'00101000」は「ファンクションセット」と呼ばれる機能の設定で、液晶を4bitで使うか8bitで使うかを決めるものです。その他は、デューティー比や文字フォントも設定してます。今の設定では、
> ・4bitで使う
> ・1/8または1/11デューティにセット
> ・文字フォントを5×10ドットマトリックスにセット
> となるように、セットされています。
インストラクションは使ったことがあるのでおぼろげには覚えてます。
で、問題なのは殆ど同じ様な処理(LCDにデータを送っている)なのに別の書き方があるのはソースが複雑に見える要因なのでどんどん統一化してシンプルにって話です。統一できませんか?
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月22日 23時34分13秒
icon
「Re:関数整理1」
> とりあえず関数の整理から始めたいと思います。
> 読んでて良くわからないので、DSP0/DSP1/DSP2について。
おなじくです;;
> ・まずDSP0サブルーチン。
> MOV.B #B'10000010,R0L ;カーソル位置セット
> MOV.B R0L,@CURSOL
> JSR @DSP0
> これを、パラメータはレジスタ渡しに統一しましょう。コードが減ってソースが見やすくなります。
> MOV.B #B'10000010,R0L ;カーソル位置セット
> JSR @DSP0
> で良いとおもいます。カーソル専用かと思えばほかの事もしているので名前をDSP0じゃなくてLCD_CONTROLと明確に名前を付けましょう。
> MOV.B #B'10000010,R0L ;カーソル位置セット
> JSR @LCD_CONTROL
> ですね。
はい、了解です。
> MOV.B #B'00101000,R0L ;ファンクションセット
> MOV.B R0L,@LCD_D
> BCLR RS
> JSR @LCD_OUT4
> は、
> MOV.B #B'00000001,R0L
> MOV.B R0L,@CURSOL
> JSR @DSP0 ;全画面クリア
> と何が違うのでしょうか?
> 同じに見えるのですが、同じに出来るなら統一してください。
これは液晶のインストラクションの概要を見てもらえればよろしいかと。
「#B'00000001」は「全画面クリア」ときまってまして、「#B'00101000」は「ファンクションセット」と呼ばれる機能の設定で、液晶を4bitで使うか8bitで使うかを決めるものです。その他は、デューティー比や文字フォントも設定してます。今の設定では、
・4bitで使う
・1/8または1/11デューティにセット
・文字フォントを5×10ドットマトリックスにセット
となるように、セットされています。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: zwiさん
2009年04月22日 23時29分35秒
icon
「関数整理2」
・続いてDSP1
多分間違いでしょうが、
JSR @DSP1 ;[0sec]表示サブルーチン
だったり、
MOV.L #MOJI1,ER5
JSR @DSP1 ;[START]表示サブルーチン
ともなっているDSP1ですが、DSP1はLCD_TIMEと言う事で2桁の数字表示専用にしましょう。SUJI変数から表示に統一です。
あれ?今のSUJIだと1桁だけですね。2ケタ保存できませんね。H'3030と保存できるように改造お願いします。割り込み中でレジスタ保持しているR3Hは止めてください。
割り込み中もLCD_TIMEを呼び出してください。
SECの表示は下記のLCD_STRを使います。
その3.DSP3編
文字列表示専用としてLCD_STRとします。
レジスタで渡すパラメータは、カーソルの初期位置と文字列のアドレスと文字列長です。
あと文字列ですが、
MOJI1: .DATA.B H'53,H'54,H'41,H'52,H'54
は書き方変えれません?
H8のアセンブラに詳しくないのですが文字列か文字を書く書き方があるはずです。
以上です。
-
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 -
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。 - 0
icon拍手者リスト
from: Simbaさん
2009年04月24日 00時10分24秒
icon
「不眠症がひどくて;;;」
今さっき、
フローをアップしました。
また見てください。
よろしくお願いします。
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。
閉じる
サークルで活動するには参加が必要です。
「サークルに参加する」ボタンをクリックしてください。
※参加を制限しているサークルもあります。
閉じる
icon拍手者リスト