146424

UP掲示板


[トップに戻る] [スレッド表示] [トピック表示] [アルバム] [留意事項] [ワード検索] [管理用]
おなまえ
Eメール
タイトル
コメント
参照URL
添付File
暗証キー (英数字で8文字以内)
画像認証 (右画像の数字を入力) 投稿キー
文字色
< 12345678910>
C言語もなかなか 投稿者:yas 投稿日:2008/01/08(Tue) 00:00 No.735

やっぱ ソフトは組む人で大きく変わるんですね〜
私が目指している10F200用の受信プログラムです
同じインドアをされている方が組んだのですが・・・
10F200の少ないメモリーの中で75%以内にソフトが収まっています
C言語でも物と組み方によっては十分使えるのですね〜〜
アセンブラがそこそこ触れるようになったらC言語も勉強しなきゃ・・

[添付]: 3660 bytes

Re: C言語もなかなか - yamasan   2008/01/08(Tue) 01:56 No.736
 8ビットPICの場合、先にC(ライク)コンパイラを購入してから、そのコンパイラの
書き方を勉強したほうがいいですね。このソースを拝見して、ますますそう感じます。
標準のC言語でのルールは勉強してもあまり役立たないような気がします。

 でも私が思うに、小さなPICの場合、アセンブラ、C(ライク)コンパイラに関わらず
赤外線のパルス等の仕様を勉強し、さらにそれを使用するPICの持っているハードで出来る
範囲に他の必要となる仕様(PWMなどの)と妥協してどう実現するかということを考えるのに
90%以上の時間がかかると思います。
難しい - yas   2008/01/08(Tue) 02:34 No.737
ですね〜 LEDチカチカからA/D変換まで理解するのに時間かかりすぎですね ^^;
PWMも単体では動作しましたが動くのと理解したのは違うから ^^;;

でもアセンブラで書くとPWMなんか結構書かないといけないのに
このCで書いた物は数行で2チャンネル別のPWM出しています
まだまだ勉強が必要ですね
Re: C言語もなかなか - yamasan   2008/01/08(Tue) 03:20 No.738
 "時間かかりすぎ”ということはないと思います。むしろ先走りすぎかも。
もう一度元に戻って、データブックと命令表のみを見て、LEDちかちかを
10パターンくらい作ってみてはいかがでしょう。
 ソフトは組む人で大きく変わるだけではなく、同じ人が昨日作ったものと
今日作ったものでさえ変わります。一から考えると、全く同じソフトになる
ことは二度とありません。
点けてみました 投稿者:yas 投稿日:2008/01/06(Sun) 20:08 No.731

877のDIPは有ったのですが配線するのが面倒だったので
876の基板で試してみました

結果!! 点灯しませんでした
とりあえず書き換えて点灯するようになったのでアップします
リンクをクリックすると動画が見えます

Re: 点けてみました - yas   2008/01/06(Sun) 20:12 No.732
そうそう プログラムです
だいぶ変わっています ^^;

[添付]: 3983 bytes

設定抜け - yas   2008/01/06(Sun) 20:39 No.733
オプションレジスタの設定が抜けていました
ついでに割り込み禁止も付けました

以前のソフトから大分変わってすみません
ソフトは十人十色と言いますから参考程度にされてください

[添付]: 4107 bytes

Re: 点けてみました - yamasan   2008/01/07(Mon) 08:53 No.734
 PIC16F877-20P の手持ちがあったので私も試してみました。
太郎さんのプログラムで、PORTB への出力を ADHK_H に変更
するだけで想像どうりの動きをしました。
 また 20[uS]の時間待ちは 0x21が正解でした(20[MHzで)。
これは A/D入力を切り替えていないこともありPORTB の8ビットの
LED程度では差は分かりませんでした。でもデータシートに書かれて
いるので正式には 20[us] は確保したほうが良いと思います。
 参考までに私の試したソースも添付しておきますが、MPASMでは
ありません。でも出来た HEXファイルは多分同じと思われます。
解凍した PIC3\T877\T877.ASM がソース。T877.hex が書き込んだ HEXファイル。

[添付]: 379347 bytes

無題 投稿者:太郎 投稿日:2008/01/02(Wed) 12:27 No.728

はじめまして。
年始そうそう質問させていただきます。

アセンブラでPICを動かしているのですが最近はAD変換に挑戦しています。
16f877というマイコンを使用します。

自分で書いたプログラムは

;16F877のAD変換

;AN0 = A
;AN1 = D
;AN2 = D
;AN3 = D
;AN4 = D

;*********************************************
;AD変換の説明
;*********************************************

;1.ADモジュールの構成を設定 (初期化処理)
; どのピンでAD変換するか決める。→ADCON1
; AD変換のスイッチをオンにする。→ADCON0

;2.AD変換の準備のため待つ。
; 入力取得時間経過を待つ 20μ秒

;3.変換をはじめる。
; ADCON0のGOを1にするとAD変換が始まる。

;4.変換が終わったか調べる。
; AD変換が終わるとADCON0のGOが0になるので比較演算等の処理をするのはそれからにする。

;5.変換結果を読み込む。
; 変換結果がADRESHとADRESLに入っているので、どこか他の場所に移す。

;*********************************************
LIST P=PIC16F877
INCLUDE "P16f877.inc"
__CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF & _LVP_OFF
;*********************************************

CBLOCK 024h
TIMCNT ;タイマ用カウンタ
TIM2CNT
TIM5CNT
TIM1CNT

ADHK_H ;AD変換の値(上の8ビット)
ADHK_L ;AD変換の値(下の8ビット)

PORTB_OUT
ENDC

;*********************************************************
ORG 0
;*********************************************************
;<ここで1番>
SET_IO ;初期処理
BSF STATUS,RP0 ;これからピンの設定をする。
BCF INTCON,GIE ;(割り込み禁止)
MOVLW 0EH
MOVWF ADCON1 ;RA0のみアナログ、(ADFM=0(結果左詰))
MOVLW 07H
MOVWF OPTION_REG ;(内部クロック、プリスケーラ1:256)

MOVLW 01H
MOVWF TRISA ;ポートAのRA0は入力、他は出力
CLRF TRISB ;ポートBを出力モードに設定
CLRF TRISC ;ポートCを出力モードに設定
CLRF TRISD ;ポートDを出力モードに設定
CLRF TRISE ;ポートEを出力モードに設定
BCF STATUS,RP0 ;これでピンの設定は終わり。
MOVLW 080H ;A/Dコンバータをオフにする。
MOVWF ADCON0 ;ADCON0に080hを書き込むとオフになる。

ADSTART ;A/D変換をはじめる。

MOVLW 081H ;(Fosc/32,ch0,A/D on)
MOVWF ADCON0 ;ADCON0に081hを書き込むとオンになる。

;<ここで2番>
CALL TIM20 ;20μsec待ち = AD変換には時間が必要。

;<ここで3番>
BSF ADCON0,GO ;AD変換スタート

WAITE ;AD変換結果待ち

;<ここで4番>
BTFSC ADCON0,GO ;AD変換が終わるとADCON0のGOが0になるので調べている。
GOTO WAITE ;終わっていないなら前に戻る。

;<ここで5番>
;AD変換された値を読み込む。
MOVF ADRESH,W ;(AD上位ビット(左詰め))
MOVWF ADHK_H
BSF STATUS,RP0 ;(バンク1へ切替)
MOVF ADRESL,W
BCF STATUS,RP0 ;(バンク0に戻す)
MOVWF ADHK_L

;************************************************************
;AD変換の結果はADHK_HとADHK_Lに入ってる。
;ここからメインの処理を書く。

MOVF ADHK_L,W
MOVWF PORTB

GOTO ADSTART

;************************************************************

TIM20 ;約20μSECタイマ
MOVLW 012H
MOVWF TIMCNT
TIMLP
DECFSZ TIMCNT,F
GOTO TIMLP
RETURN
TIM02 ;約0.2mSECタイマ
MOVLW 0FFH
MOVWF TIM2CNT
TIM2LP NOP
DECFSZ TIM2CNT,F
GOTO TIM2LP
RETURN

;*********************************************************
END

なのですが、まともに動いてくれません。
もしかしたら回路的にも間違っているのかもしれません。
プログラム的にはどうでしょうか?
判定よろしくお願いします。

Re: 無題 - yas   2008/01/03(Thu) 13:13 No.729
あけましておめでとうございます
初めまして太郎さん
私もPIC初心者です 気になってシミュレーションしてみましたが
正常に動作しました
手持ちで877が無ので実機では確認していません
一応 コンパイルの通ったプログラムアップしておきます
まぁ 上のプログラムですが ^^;

877のDIPタイプを入手したら試してみます

[添付]: 3211 bytes

Re: 無題 - yamasan   2008/01/05(Sat) 11:14 No.730
 太郎さん、はじめまして。yasさんと同じく私も 16f877は使ったことがないので
正確ではないですが、全体としてはプログラムは特に問題となる箇所はわかりませんでした。
 ただ、TIM20の 20[uS]は、定数の設定が違っていると思われます。次の TIM02の定数から
察すると 20[MHz]の水晶orセラロックで動いていると思われます。
現在の 012Hでは 11[uS]程度となるはずです。0x21H で 20[uS]程度になるはず。
でも、A/Dのチャネルを切り替えていないので、これがうまく動かない原因とは思えませんが。
 結果の確認は PORTBに LED8個つけてされているのでしょうか?。
そこらへんも書いていただけると参考になるかも。
 また PORTBに出力するのは ADHK_Hがわかりやすいのでは?。
 タイマのところにコメントをつけたソースを添付します(ちょっといい加減ですが)。

[添付]: 608 bytes

お世話になりました 投稿者:yas 投稿日:2007/12/30(Sun) 18:40 No.726

yamasan! 今年もお世話になりました!
来年もよろしくお願いします♪

Re: お世話になりました - yamasan   2007/12/31(Mon) 02:08 No.727
 私は今年はほとんど趣味の工作が出来ませんでした。
来年は何か作りたいです。
 秋月に新しくグラフィックLCDが出てますね。
コントローラ内蔵で使いやすそうでチョット気になってます。
 PICで有名なあのHPではもうオシロの記事が!。

 yasさん、来年もよろしくお願いします。
とりあえず 投稿者:yas 投稿日:2007/12/09(Sun) 20:57 No.719

点滅の最終形 ^^; 
実際は自分で考えたわけではありません
実に解りやすく書いてくれているページがあったのでそこから拝借
12F629に移植してみました

yamasan 今度パルス入力なんですが・・・・
その前に16bitのタイマー処理は難しいのかな?
それとも パルスごとにレジスターをあてがって処理する方が良いのかな?
悩むところです・・・

[添付]: 5020 bytes

Re: とりあえず - yamasan   2007/12/10(Mon) 12:06 No.720
 割込み周期はプリスケーラ無しなので 100[uS] 程度ですね。
 メイン処理の LOOP内のプログラムがどんな仕様かよくわかりません。LED チカチカなら動かないような?。
 パルス入力は、目的によって何を使うかを吟味する必要がありそうですね。
Re: とりあえず - yas   2007/12/10(Mon) 17:39 No.721
リンク張ってみました
こんな感じで点滅します ^^
Re: とりあえず - yamasan   2007/12/10(Mon) 18:27 No.722
LOOP のラベルの次の
   MOVF t_width,F

   MOVF t_width,W
ですよね。でないと動かないと思うのですが?。
動画を見てやっと動作がわかりました。
PICのアセンブラのソースから動作を想像するのは難しい!。
最初の1行 - yas   2007/12/12(Wed) 10:34 No.723
MPLABでシミュレーションすると最初は何も変化していません
割り込みから帰ってくるとこの値が入れ替わっています
後な同じように変化してる?
ムムム・・・ 完全に読み切ってないですね ^^;
Re: とりあえず - yamasan   2007/12/12(Wed) 14:31 No.724
 LOOPの次の3行にコメントを入れてみました。
現状では、この3行以降で wに入る値で動作していると思われます。

[添付]: 719 bytes

割り込み内の処理 - yas   2007/12/15(Sat) 23:41 No.725
yamasan出来ました。
ここのところ少し忙しくてバタバタしています
お金には成らないですが仕方なく・・・・・

先日の電話の件です
ようやく動きました ^^;
たった数行ですが数時間もかかった
何やってんだか・・・・・

[添付]: 5258 bytes

< 12345678910>
処理 記事No 暗証キー

- Joyful Note -