• ベストアンサー

PICで温度計をつくりたいのですが。アセンブラを教えてください。

初歩的な質問でもうしわけないのですが、 PIC16F819のPICを買いまして、CMOS温度センサーにオペアンプをかけ PA1につなぎ、A/D変換 PB0~7まで7セグを並列に3つつなぎ。 PA4,6,7から各ポートにトランジスタのBにいれ、Cに+5、Eに7セグのCOMをいれ 3桁の数字を表示させたいのです。 たしか、ダイナミックスキャンというものだと思います。 とりあえず、センサーから入ってきた数値をそのまま表示させたいのですが。 ダイナミックスキャンのアセンブラのプログラムがうまくいきません。 簡単に教えていただきたいのですが。 わかる方お願いします。 ハードは問題はないと思います。

noname#58992
noname#58992

質問者が選んだベストアンサー

  • ベストアンサー
  • umota
  • ベストアンサー率46% (150/324)
回答No.1

ここが参考になると思います。 http://www.picfun.com/prog3frame.html 9.ダイナミック表示制御法 私も 16F88 2チャンネル温度計を作ったことがありますが 5 ミリ秒程度の TMR0 割込みを使いました。

参考URL:
http://www.picfun.com/
noname#58992
質問者

お礼

お礼が遅れました。 参考になりました。ありがとうございました。

その他の回答 (1)

  • bob_n
  • ベストアンサー率35% (610/1732)
回答No.2

アノードコモンの7セグを使っていると思います。 http://www.herbie.co.jp/html/7seg/s056.html のような、 PA4からPA7までのどれか1つをHiにした時して、PB0からPB7をLoにしたビットがつくと思います。 PICを外して、各所をHiとLoにしてみて、どうつくか見てみると理解しやすいかもしれません。

noname#58992
質問者

お礼

ありがとうございました。

関連するQ&A

  • PICアセンブラで10進数を2進数に変換するプログラムを教えて欲しい

    10進数のデータを7セグLEDで表示させたいのですが、まずは2進数にしないと表示出来ないみたいなので色々インターネットで調べているのですが、残念ながらPICアセンブラ言語ではどこにもそれに関わるものが掲載されていません。 どなたか教えてもらえないでしょうか。

  • PICについて

    PICについて 7セグ8桁の時間:分:秒:1/100秒を表示できる(例 02:01:30:95) せわしない物がほしいのですが、こんな変なものは売ってないみたいで いくら検索をかけてもヒットしませんでした。 まったくの初心者なのですが、一から作れるのであれば作って見たいと思い 参考にできる本、サイトを紹介してほしいです。

  • PICのPCL

    PICの機能でPCLの使い方で7セグの表示などに使われる (アセンブラ) ADDWF PCL,F RETLW B'1111000' RETLW B'0110101' RETLW B'1010010' ..... ... というのがありますがこれを ADDWF PCL,F GOTO AAA GOTO BBB GOTO CCC ....... .... という風な使い方はできるのでしょうか?またできても使わないほうがいいのでしょうか?   

  • PIC16F819とLM60を使った温度計

    PIC16F819と温度センサーLM60を使って7segに温度を表示させようとしています。 しかしA/D変換のやり方で困っています。 同じような温度センサーであるLM35DZなどで有れば温度係数が解りやすいので良いのですが。 今回は100℃以上を計測したいので、あえてLM60を選定しました。 しかし温度係数が6.25mV/℃でしかも氷点下までの計測を可能にするために 出力がオフセットしています。 これを直接PICのA/D変換回路へ入力してプログラムで対応するのか、 入力の段階でオペアンプ等で、増幅した方が簡単なのかが判りません。 どうしたら簡単にできるでしょうか? 宜しくお願いします。 参考 LM60データーシート http://akizukidenshi.com/pdf/ns/LM60.pdf

  • この回路は実現可能?2

    PICやマイコンを使用せずに7セグの温度計を作ることはできますか? できるならできれば回路を教えて下さい。 (1)3本足の温度センサー (2)2本足の温度抵抗(サーミスタ) (3)2本足の温度抵抗で単位が華氏°F(7セグ3桁) そこまで正確な精度は求めていませんが±1℃ぐらいは欲しいです。また、単位C、Fの7セグ表示はいりません。

  • 7セグの明るさを今より増やしたいのですが

    こんにちは。 現在、PICを使用して6ケタの7セグ(全て赤色)を表示させております。 電子回路の事がほとんど無知な為、一度こちらでアドバイスを頂き、ようやく点灯させる事までは出来ました。 しかし、どうも7セグの明るさが暗い感じがして、使用している部品の抵抗値を4.7Kから3.3Kや1Kに変えてみましたがかわらず、また、PICからトランジスタを経由せずに直接7セグに接続したら明るく点灯はするのですがセグが全て点灯して数字として表示出来ません。 すでにこの回路(かなり省略していますがこんな感じです)でプリント基板を製作済みな為、何とか基板の改造をせずに7セグの明るさの改善をしたいのですが、どなたかまたアドバイスを頂けないでしょうか。 分かりにくい内容でしたら申し訳ないですが宜しくお願い致します。

  • PICマイコン pa.exeでのコンパイル後の画面

    PICマイコン用アセンブラ PAを使おうとしておりますが、説明書通りに同じフォルダ内にPA.exeとasmファイル、ヘッダーファイルを入れてコンパイルさせるとコマンドプロンプト画面には何も表示されません。その時にHEXファイルが作成されるときもありますが作成しない時もあります。 現在の環境はwindows-xpです。コンパイルしているasmファイルは自分で作ったものも、秋月電子のPICライターに付属していたsampleファイルでも同じ現象です。 パソコンを再起動させるとコんパイル画面で正常に***pass 1***とか出てくるときもありますが、ほとんどが何も表示されず、改行されるだけです。 どなたかお分かりの方、いらっしゃいますか?

  • PIC アセンブラ TMR0の使い方がいまいちわかりません。

    *文字数制限の為コメントや繰り返し処理プログラムの一部を省きました。解りにくくてすみません。ココに載せてくれとかあったらそっちに全部載せます。 目標としてはPICでデジタル時計を作りたいのですが、手始めに正確な1秒を作って7セグを0から9まで表示しそれを繰り返す。と言うものをやってみようと思いプログラムしましたがウンともスンとも言いません。 流れとしては 初期処理 ↓ TMR0割り込みが発生するまで無限ループ ↓ 割り込みが発生したら割り込み回数をカウントし(12,8MHzクロック、プリスケーラを256設定で1250回フラグをカウントすると1秒)1秒間分カウントが終わったら7セグの表示を切り替え無限ループに戻る どの数字まで表示したかは任意のレジスタに1を立てて判断する。PICはPIC16F628AなのでTMR1とかもあるんですが気分的にTMR0だけで時間を作ってみたかったのでTMR1とかは使ってません。で、3回くらいやり直してプログラムを作ったんですが全然動きません。 1、何処が悪いんでしょうか? 2、また、PIC16F628Aでは16番ピンがクロックの入力として使えますが その設定方法があってるかわかりません。 コンフィグ設定で OSCをHSにしてポートの設定でRA7を入力にしておけば良いんでしょうか?プログラム中の記述で合ってますでしょうか? 3,7セグをカウントアップするだけのプログラムなのに こんなに長くなる物なんですか? (プログラムが下手だから?アセンブラだから?) 4、1秒のカウント方法ですがプログラム中の記述で正確に1秒をカウントしてますか?(計算間違ってますでしょうか?) 以下、プログラムになります。 list p=pic16f628a include "p16f628a.inc" __CONFIG _LVP_OFF &_MCLRE_ON &_BODEN_OFF &_PWRTE_ON &_WDT_OFF &_HS_OSC time0 equ d'30' ;time4まで作る tcount equ d'43' count0 equ d'35' ;count7まで作る koko0 equ d'43' koko1 equ d'44' org 0 goto start org 4 goto wari start bcf intcon,gie movlw b'00000111' movwf cmcon bsf status,rp0 movlw b'00000111' movwf option_reg movlw b'10100000' movwf trisa clrf trisb bcf status,rp0 bcf status,z bcf intcon,t0if movlw b'00001000' movwf count0 ;この間に1から6の同じ処理が入ります。 movlw b'00000000' movwf count7 time movlw .30 movwf time0 bsf intcon,gie bsf intcon,t0ie clrf tmr0 roop btfsc tcount,0 call segout swapf count0,0 movwf portb swapf portb,0 movwf count0 ;この間に1から5が入ります swapf count6,0 movwf portb swapf portb,0 movwf count6 goto roop wari bcf intcon,t0ie bcf intcon,t0if incf time0,1 btfss status,z goto modori bcf status,z movlw .255 movwf time0 incf time1,1 bcf status,z goto modori bcf status,z movlw .255 movwf time0 movlw .255 movwf time1 incf time2,1 bcf status,z goto modori bcf status,z movlw .255 movwf time0 movlw .255 movwf time1 movlw .255 movwf time2 incf time3,1 bcf status,z goto modori bcf status,z movlw .255 movwf time0 movlw .255 movwf time1 movlw .255 movwf time2 movlw .255 movwf time3 incf time4,1 bcf status,z goto modori bcf status,z movlw .30 movwf time0 movlw b'00000001' movwf tcount modori bsf intcon,t0ie retfie segout clrf tcount btfss koko0,0 goto seg1 ;この中間にseg2からseg6が入ります。 btfss koko0,7 goto seg8 btfss koko1,0 goto seg9 nop goto seg0 seg1 bsfkoko0,0 movlw b'00000010' movwf count0 movlw b'00000100' movwf count1 movlw b'00000000' movwf count2 movlw b'00000000' movwf count3 movlw b'00000000' movwf count4 movlw b'00000000' movwf count5 movlw b'00000000' movwf count6 movlw b'00000000' movwf count7 nop return ;この中間にseg2からseg9が入ります seg0 clrf koko1 clf koko0 movlw b'00001000' movwf count0 movlw b'00000100' movwf count1 movlw b'00000010' movwf count2 movlw b'00000001' movwf count3 movlw b'10000000' movwf count4 movlw b'01000000' movwf count5 movlw b'00000000' movwf count6 movlw b'00000000' movwf count7 return end

  • PICで小数点の演算

    PIC16F877Aを使ってプログラムを作っています。その内容がセンサー(例えば温度センサー等)から取り入れた電圧をPICのA/D変換(10bit)を行って、その値を使ってpicで計算し、その結果を液晶に表示するといった内容なのですが、その計算過程で小数を扱わなければならないのですが、その計算がうまくいきません。A/D変換後の値をxとし具体的に式で書くと、 v = x * 5 / 1023  ・・・(1) ここでvはセンサーから取り込んだ電圧値(値の範囲は0.935~1.748)です。 y = 218.5 - v / 0.008  ・・・(2) 又は y = 218.5 - 125 * v  ・・・(3) 上記の式はA/D変換後の値xを一度アナログ電圧値vに変換し(1)、そこから(2)又は(3)へ代入して得たい情報yを算出するといった少々面倒なものなのですが、これをアセンブラで書きたいのですが、このPICには乗除命令がないことや小数点の演算方法、16bitの乗除等の部分が引っかかってどうもうまくかけません。小数部分は固定小数点形式で考えて最終的にyは少数第二位を四捨五入したいと思っています。 どのようにプログラムを作ればよいのでしょうか。実際にソースを書いていただけると大変理解しやすいです。

  • スカイクオリティメータのようなものの自作

    PICをつかって夜空の明るさを測定する装置を作ろうと思っています そこで、太陽電池をセンサーに使って、オペアンプで増幅して電圧を測ろうと思っていますが、LCDに表示するのは天体と同じ等級にしなければなりません 電圧から等級に変換するのは、データをたくさん取れば近似式が作れるはずですが、普通のPICだけで、近似式で計算して等級を表示するというようなことはできますか?それともPICだけではデータ容量や処理能力が足りなかったりしますか? PICのプログラミングの経験はありませんが、時間はあるので何とかなると思います

専門家に質問してみよう