紹介 投稿者:
yas 投稿日:2007/12/06(Thu) 00:46
No.713
知り合いの人をここに招いても良いですか?
私よりかは遙かにマイコンを知っている方です。
ただ Z80の時代の人ですが・・・・
Re: 紹介 -
yamasan 2007/12/06(Thu) 01:25
No.715
千客万来ですね。当然OKです。
Re: 紹介 -
yas 2007/12/07(Fri) 21:53
No.716
yamasanありがとうございます
早々にメールを書き送りました ^^
千客万来の字が違うような・・・ ^^;
Re: 紹介 -
yamasan 2007/12/08(Sat) 03:29
No.718
漢字まちがい、こっそり修正!。
すみません 投稿者:
yas 投稿日:2007/12/04(Tue) 00:20
No.706
なんか初心者のマイコンQ&Aみたいになっていますね〜
やっとTIMR0の割り込みソフト見つけました ^^;
いろんな人が説明してくれているのですがどれも解らなくて
今日、わりと初心者に解りやすく書かれているサイトをみつけました
近日中にタイマーを使ったLED点滅が出来そうです^^
Re: すみません -
yamasan 2007/12/05(Wed) 02:55
No.707
ソフトの作成環境が違うので直接は答えられませんが、内容が判ればいつでもOKです。
なんとか出来ました -
yas 2007/12/05(Wed) 10:09
No.708
何とか出来たのですが例のごとく切り貼りなので
内容がすべて理解したわけではありません
周期的な割り込みはどうすればいいのかな?
添付ファイルって テキストも添付できます?
やはり テキストは無理ですね
テキストファイルの添付 -
yamasan 2007/12/05(Wed) 13:47
No.709
ファイルの拡張子を ".txt"に変更してから添付するとOKでした。[添付]: 204 bytes
ほんとだ! -
yas 2007/12/05(Wed) 16:23
No.710
ちゃんと添付できますね ^^
今現状のソフト添付します
オシロで見ると250μsごとに割り込みが入っているのが見えます
[添付]: 3599 bytes
Re: すみません -
yamasan 2007/12/05(Wed) 19:40
No.711
OPTION レジスタの設定で TMR0 の前に 1/2 のプリスケーが入っているので
このくらいの定数になるのですね。
なお、割込みの中で TMR0に加算する部分は少しいい方法があるので添付しておきます。[添付]: 800 bytes
Re: すみません -
yas 2007/12/06(Thu) 00:41
No.712
ホントだ! 2命令でいけますね。
もう少し勉強すると基本的な部分でも色々改善できそうですね。
今度割り込み内でパルス幅を計測したいのですが、カウンターを使って計るしかないですよね〜
Re: すみません -
yamasan 2007/12/06(Thu) 01:22
No.714
測定するパルス幅の分解能が割込み周期間隔でOKなら
入力ポートがオンの期間のみメモリをインクリメント(+1)
していけばOK。
この場合、8ビットの演算で済ませる場合で割込み周期を
100[uS] に設定したとすると
・測定最大パルス幅: 100[uS] * 255 = 25.5[mS]
・測定分解能 : 100[uS]
となります。16ビット演算をするなら
・測定最大パルス幅: 100[uS] * 65535 = 6.5535[S]
・測定分解能 : 100[uS]
16ビットのインクリメントはそんなに面倒ではないですが、
後で実際に使用する場合、16ビットの比較ルーチンなども
必要になると思われます。
寒くなりました 投稿者:
yas 投稿日:2007/12/02(Sun) 01:12
No.700
yamasanお元気ですか?
先日はpicの件で色々教えていただきありがとうございました
掲示板の借りて初歩的な質問ですみませんが教えてください
以前にテーブルの話が出ましたが
どうしても理解できません
何がどうなるのだか?
例えば・・・
movlw B'00010010' ;
movwf GPIO ; 点灯
movfw ADRESH ; 結果を読み込む(上位バイト)
call convert ; 結果の変換
call delayns ; ADRESH×2[ms]待ち
このconvertの部分でテーブルを参照しています
これが変わることで何が変わるんでしょうか?
すみません適切な質問かどうかも理解していません
よろしくです〜〜
Re: 寒くなりました -
yas 2007/12/02(Sun) 01:15
No.701
すみません テーブルの先頭です
;; y=256−32*log_2(256−x) の変換を行うサブルーチン
convert:
clrf PCLATH
bcf PCLATH, 0
bsf PCLATH, 1
movwf PCL
org 0x200
retlw D'0' ; ADRES=0
retlw D'0' ; ADRES=1
これを書かないと何かわかんないですね ^^;
Re: 寒くなりました -
yamasan 2007/12/02(Sun) 02:47
No.702
先の最終行の
call delayns ; ADRESH×2[ms]待ち
の delaynsというサブルーチンは、呼ばれたときの wレジスタの値
によって決まる長さのウェイト・ルーチン(時間待ちをしてから帰る)
だと思われます。
------------------------------------------------------------------
なので ADRESH(A/D 変換値の上位 8ビット?)より 256個の表を引いて
その表に書かれている時間待ちをする動作と思われます。
------------------------------------------------------------------
で、以下はその表を引くサブルーチン。PICなので超トリッキー。
;; y=256−32*log_2(256−x) の変換を行うサブルーチン
convert:
clrf PCLATH ; PCLATH b0-b7 = 0 以下の 3行で W を壊さずに PCLATHに 0x02 を入れる
bcf PCLATH, 0 ; PCLATH b0 = 0 不要 ?
bsf PCLATH, 1 ; PCLATH b1 = 1 これで PCLATH = 0x02 (以下の org 0x200 の 上位の0x2xx)
movwf PCL ; これで PCH = 0x02, PCL = w (呼ばれたときの wレジスタの値)の以下へジャンプ
org 0x200 ; 以下は プログラムメモリの 0x0200 から配置される
retlw D'0' ; ADRES = 0 ; w = 0x00 の場合に movwf PCL でここへ ┐
retlw D'0' ; ADRES = 1 ; w = 0x01 の場合に movwf PCL でここへ │256個の表
retlw ??? ; ADRES=255 ; w = 0xff の場合に movwf PCL でここへ ┘
ありがとうございます -
yas 2007/12/02(Sun) 11:02
No.703
MPLABのシミュレーターでステップ実行してみました
yamasanの言われるようにちゃんと表を引いてWレジスタに返していました。
もう一つ質問なんですが、テーブルは必ず255個作らないといけないのでしょうか?
それとも1,2,4,8,16,の単位で作れるのでしょうか?
多分 10,20,30と言う単位は無理なんですよね〜
Re: 寒くなりました -
yamasan 2007/12/02(Sun) 11:59
No.704
表を引くサブルーチンを呼ぶ側で wの値を制限すれば
1,2,4,8,16,〜 の単位なら簡単に作れます。
たとえば呼ぶ側で
andlw B'00001111' ; w を下位 4ビットに制限
call convert ; 結果の変換
とすればテーブルは 16個でOKです。
先の ADRESHの場合でも以下のようにすれば ADRESHの上位 4ビットによる
16個の表引きで済ませることもできます。
swapf ADRESH, 0 ; ADRESH の上位 4ビットと下位 4ビットを入れ替えて wへ
andlw B'00001111' ; w を下位 4ビットに制限
call convert ; 結果の変換
10,20,30と言う単位はできないことはないのですが、
合理的に wの範囲を制限するのに掛算、割算が必要となると思われます。
あぁ なるほど -
yas 2007/12/04(Tue) 00:16
No.705
マスクしたの見たことがあります
そういう意味だったんですね〜 へぇ〜〜
少しずつですが見えてきています
相変わらず基本命令は完全に覚えてないですが・・・
周波数カウンタ 投稿者:
葛原 投稿日:2007/09/08(Sat) 15:12
No.693
yasさん、こんにちはです。
>***の葛原さん?
***は、ひらがな 3文字ですか?
御菓子屋です。
EEPROMは、文化の森にいい本があったので、
理解できた気がします。
周波数カウンタに挑戦中です。
マイコンボードに、水晶発振子 32.768kHzを追加しました。
タイマAを時計ベースにして 1secをつくり、その間の
入力割込みを数える案にトライしています。
yamasanの (1)ゲート時間案と同じと思います。
1 Hz 〜 6kHz までは見事に発振器とあっているのですが、
6kHz越えた時、値がゼロになってしまう現象の原因を追究しています。変数もlong型にしているし、
入力部の波形の状態を見なきゃと思っているところです。
とりあえず 目標は 100kHz かな。
ようやく、暑さも控えめになってきましたね。
Re: 周波数カウンタ -
yas 2007/10/03(Wed) 13:27
No.694
葛原さん おひさしぶり〜
先日yamasanに電話して確認しました
その後カウンターは動作しました?
良い物が出来たらまた公開して下さいね〜
近日私もyamasanの所に遊びに行きます♪
暑中御見舞い 投稿者:
葛原 投稿日:2007/08/16(Thu) 19:21
No.690
暑中御見舞い申し上げます。
猛暑ですね。
H8/3694 マイコンを教わってから、
コツコツと勉強しています。
この間、I2CのEEPROMが使えました。
参考にルネサスのドキュメントを見ました。
さすがに、きっちり書いていますね。
勉強になりました。
現在は、周波数カウンタに挑戦しています。
クロックは20MHzを利用しているのですが、
1secピッタリに分周できないか、思案中です。
タイマA、V、W って奥が深いですね。。。
Re: 暑中御見舞い -
yas 2007/08/19(Sun) 00:05
No.691
間違ってたらごめんなさい
葛原さんって***の葛原さん?
もしそうだったらお久しぶりなんですが・・・・・・
Re: 暑中御見舞い -
yamasan 2007/08/20(Mon) 02:52
No.692
EEPROM はけっこう大変だったのでは?。確かにルネサスのドキュメントは
しっかりしてますね。ひとつづつ自分で動かしていくと実力がついてきます。
周波数カウンタには2つの方式があります。
(1) ゲート時間(レンジによって 10[Sec], 1[Sec], 100[mS], 10[mS]...
の間に入力パルスが何発通過したかを計測する基本的な方式。
高い周波数で高精度。
(2) 入力パルスの1周期(エッジから次のエッジまで)の間に基準クロックが
何発通過したかを計測し、逆算で周波数を求める周期逆算型。
低い周波数でも多桁表示可能。
市販の周波数カウンタではレンジによってこの2つを自動的に切り替えている
ものが多いです。
(1) の方式では正確なゲート時間用のカウンタと入力パルスをカウントする
2つのカウンタが必要ですね。Tinyでは16bitカウンタならWしかないので
外付け回路を追加しないと無理かも。
(2) の方式ならWカウンタをインプットキャプチャ・モードで使用すると
出来そうな気がします(あんまり深く考えていませんが...)。
涼しくなったらまた来てくださいね。