« D40冷却改造奮闘記 その7 | トップページ | D40冷却改造奮闘記 その9 »

2008年3月 4日 (火)

D40冷却改造奮闘記 その8

コントローラのプログラムを公開します。

「CoolSystem.zip」をダウンロード

解凍したフォルダを適当なフォルダに保存してください。デスクトップはだめです。

プログラムの組み込み方

まずは、イエローソフトのホームページからYellowIDEの体験版をダウンロードして、インストールします。

CPUボード(YHN64-1)にインターフェースボード(YHN64-2)を接続し、インターフェースボードとパソコンのCOMポートをRS232Cケーブルで接続します。インターフェースボードのトグルスイッチをLEDが点灯する方向に倒します。LEDが光っていれば書き込みできる状態です。(COMポートのないパソコンの場合はUSB-RS232C変換器を使います。)

YellowIDEを起動したら、メニューの(ファイル)→(プロジェクトを開く)で、ダウンロードしたフォルダの中にあるCoolsystem.yipファイルを開きます。

スピードボタンの青い三角のボタンをクリックすればプログラムがコンパイルされ、フラッシュROMライタが起動しますので、次のように設定して、書き込みボタンをクリックします。

Fwrite

書き込みが終わったら、トグルスイッチを反対側に倒し、リセットボタンを押せば、プログラムが実行します。

今回、プログラムサイズが体験版の制限である16Kバイトをオーバーしてしまったので、湿度センサーの入力部分をコメントアウトしています。このプログラムではsprintf関数を使っていますが、この関数が大きいので、これを使わなければ、もっともっとプログラムを追加できます。

プログラムの解説

 C言語はちょっと知っているけど、マイコンプログラムは初めてという方向けにちょっと解説します。というより、ほとんど桃太さん向けの解説なのですが。。。

 マイコンプログラミングは、通常のC言語プログラムと変わりありませんが、マイコンはCPUコアのプログラム以外に内蔵周辺機能の操作をしなければならないところが独特です。内臓周辺機能の操作で基本的なのはポートと呼ばれるものです。ポートはマイコンの端子のことで、このポートをON/OFFすることによってポートに5Vまたは0Vを出力することができます。回路図でP81とか書いてあるのがポートです。P81はポート8のビット1ということです。ポートはプログラム側から見れば、番地をもったメモリとまったく同じで、ポート8の番地のビット1をセットすれば、P81から5Vを出力できます。

 ポートは番地を持ったメモリと同等ですから、ポインタを使ってアクセスできます。しかし、ヘッダファイルH83664.Hの中にポインタ定数としシンボル定義されていますから、通常はシンボルを使ってアクセスします。ポート8のシンボルはP8DRです。

たとえば、ポートのP81をセットするには

P8DR |= 2;

となります。ポートのP81をリセットするには

P8DR &= ~2;

となります。

 ポートは、入力方向と出力方向が切り替えられます。初期状態では入力方向なので、出力方向にしたい場合は最初に次のように命令を記述します。これはP81を出力にします。

P8DDR = 2;

P81、P82、P83をいっぺんに出力方向にしたい場合は、次のようにかけます。

P8DDR = 0xE0;

ほんとは、シンボルP8DRとP8DDRはヘッダファイルH83664.Hの中で、PCR8、PDR8と定義されているのですが、私が使いやすいように次のように再定義してあります。ここは注意してください。

#define P8DDR PCR8
#define P8DR PDR8

あと、このプログラムではタイマー割り込みを使って、周期的に起動する関数を定義しています。timerという関数がそれです。この関数は40msごとに起動されます。起動される周期は、main関数の初期化の部分で

GRA = 12500*4;   //0.04秒

 この値を変えれば、変えられます。GRA=12500とすれば、10msごとに起動できます。ただし、GRAの値が65535を超えてはいけません。また起動周期があまりにも早いと、処理が追いつかない場合もあります。このプログラムでは液晶の表示とかけっこう時間がかかって、40msの周期でないと正常に動作しませんでした。

 以上で簡単な解説は終わりです。分からないことがあったら質問してください。

|

« D40冷却改造奮闘記 その7 | トップページ | D40冷却改造奮闘記 その9 »

コメント

ほんまかさん、こんにちわ。

ついに完成ですね!あとは試写して問題なければといったところでしょうか。
しかも、回路図、ソフト解説ともに詳しく掲載して頂きありがとう御座います。マイコンの方はイメージ沸いてきました。今までは、イメージが沸かなかったので中々踏み込めなかったんですけどね。
回路図も大変参考になります。
カメラのシャッター、電源、温度制御を搭載した、ほんまかスペシャルの簡易版となる予定です。

今月中には、試写出来るレベルにしたいです。

投稿: 桃太 | 2008年3月 5日 (水) 16時42分

桃太さん。ご訪問ありがとうございます。
フィールドテストが楽しみです。でもまだ寒いからあんまりテストにはならないかも。もっと暖かくなるといいのですが。

分からないことがあったらどんどん聞いてくださいね。

投稿: ほんまか | 2008年3月 5日 (水) 19時47分

ほんまかさん 初めまして
こんな古いものにコメントして気づいていただけるかどうか不安でありますが・・・
D40を以前より使用しており、気になっていたほんまかさんの改造を真似て、最近になって一念発起し、ようやく作成し始めました。
カメラ改造は過去にカットフィルター除去を行ったので
ある程度自信はあるのですが、マイコン部分に関して全く無知であるため、ほんまかさんのお力を拝借いたしたく恥ずかしながらコメントさせていただいた次第であります。症状といたしましては、YellowIDE7体験版でDLさせていただいたプロジェクトを開いて、スピードボタンを押すと、main.cとlcd.cの2つに対し「ファイルが開けませんH83664.h」とファイル(main.obj)(lcd.obj)(main.obj)が見つかりません」と5つのエラーが出てROMライター起動までたどり着けません。(エラー表示通り該当ファイルはありません)申し訳ありませんがご指導のほど何卒よろしくお願い申し上げます。

投稿: ゆた | 2010年8月29日 (日) 01時21分

ゆたさん、はじめまして。

すみません、YellowIDEがVer7になって、足りないファイルが出てきてしまったみたいです。

yellowIDE7対応に修正しましたので、もう一度、プロジェクトをダウンロードしてください。

前にダウンロードしたファイルはフォルダごと削除して大丈夫です。

それでは、がんばってみてください。
分からないことがあれば、聞いてください。
プログラムの修正とかでも大丈夫ですよ。

投稿: ほんまか | 2010年8月29日 (日) 09時35分

早速のご対応誠にありがとうございます
プロジェクトをDLさせて頂き、スピードボタンを押しましたところ、今後はファイルがあるのに「c:¥Yellwide7¥LIB¥H8TINY¥LH8N.LIBが見つかりません」と表示され、エラー1となります。
実際その表示されたルート上にはファイルは存在しております。次から次へと質問ばかりで申し訳ありません。
お暇なときで結構ですのでご指導お願いいたします

投稿: ゆた | 2010年8月29日 (日) 14時19分

すいません。自己解決できました。
以降の作業がんばってみます。

投稿: ゆた | 2010年8月29日 (日) 16時54分

一難去ってまた一難・・・
書き込みをUSB-RS232Cケーブルにて行おうとしたところ、コネクタ形状全く違うことに気づき、強引に工作用のケーブルをコネクタピンにTXD,RXD,GNDの3カ所を半田付けし、VCCは乾電池2本から供給し書き込みチャレンジしましたが、通信できません、リセットしてくださいの表示がでてだめでした・・・COMポートはあわせたので原因は上記のケーブルでしょうか?
又、マイコンのリセットの方法もよくわからず、リセットボタンを押しただけなのですが、これでよいのでしょうか?なにとぞご指導のほどお願い申し上げます。

投稿: ゆた | 2010年8月29日 (日) 18時33分

ゆたさん、こんばんは。

プログラムの書き込みですが、
CPUボードにインターフェースボードを接続し、インターフェースボードとパソコンを専用のRS232Cケーブルで接続します。専用ケーブルは別売りになっています。
結線に間違えがなければ、USB-RS232Cケーブルを加工して直結でも問題ないですが、書けないということは間違っているかも知れません。

書き込みですが、インターフェースボードトグルスイッチがLEDが点灯する方向に倒し、リセットボタンを押します。これで、書き込みできる状態になります。

あと、電源も心配ですね。
電源は電池直結では無理です。安定化電源が必要です。
電池なら、9Vまたは12V電池またはバッテリーから、三端子レギュレータなどで5Vの安定化電源を作る必要があります。

投稿: ほんまか | 2010年8月29日 (日) 21時13分

こんばんは
ケーブル購入にて書き込みできました
(結果はCOMポート一括にチェックが入っていなかっただけでした・・・)
とりあえず5Vにて動くものと思い、液晶周辺の部品を取り付け、起動テストしましたが、表示しませんでした。
すべての部品を取り付けないと動かないものなのでしょうか?
師匠教えてくださいお願いします。

投稿: ゆた | 2010年8月31日 (火) 20時02分

ゆたさん、こんばんは。

少なくとも回路図1の部分は作った方がいいです。
(スイッチの部分も)
書き込みが終わったら、トグルスイッチを逆に倒し、(LED消燈)リセットボタンを押します。
液晶は、コントラストのボリュームを回してみてください。コントラストが一番低い状態ですと何も表示されないからです。

投稿: ほんまか | 2010年8月31日 (火) 22時29分

いつも素早くお返事を頂きありがとうございます
その他パーツをつなぐとちゃんと動き始めました!!
とりあえずこのまま組めるところまで組み立てます
質問等でご迷惑をお掛けするかもしれませんが
よろしくお願いいたします。

投稿: ゆた | 2010年9月 1日 (水) 00時49分

す、すいません・・・
結露センサーキットが届いたのですが、一見して大きすぎるので、これをまんま組み込むのかどうか悩んで色々考えましたが、
電子部品の知識が皆無の私には、やはりわからなかったです。
センサー部分だけを使用するのでしょうか?
わからずに勢いで組み立てている状態が続いております(笑)
お忙しいところ申し訳ありませんが教えて下さいお願いします

投稿: ゆた | 2010年9月 3日 (金) 11時12分

ゆたさん、こんにちは。

結露センサーはセンサーの部分だけ利用して、電子基板の部分は利用しません。

また、本文にも書いてあるのですが、YellowIDEの体験版はプログラムサイズ制限があるので、湿度コントロールの部分を削除しています。結露センサーを付けても現状では役立ちません。

湿度コントロールはあきらめるか、YellowIDEの正式版(YCH8\29,400)を購入する必要があります。

湿度コントロールがなくても温度コントロールはあるので、あまり低い温度に設定しなければ、結露はないと思います。たぶん。夏場なら-10度、冬なら-15度くらいが目安です。

投稿: ほんまか | 2010年9月 3日 (金) 17時27分

毎度お世話になっております・・・
記事のコメントアウトしてますを見落としていました。
今後の方針としまして、いずれ正式版を購入し湿度コントロールまでいきたいと思います!
貧乏人ですので今回は資金の都合上見送(泣)と基板の防水コーティングで対応とします。
ついでといっては何ですが、気になる点、教えて頂きたい点がありますので、お伺いさせて頂きます。
先ほどのコメントアウトは#if 0の箇所を書き換えれば良いのでしょうか?
制作時の写真を拝見させて頂きますと、アルミ冷却板とカメラの隙間を黒いテープ状のものでの迷光処理されているようでありますが、どのような材料で処理されましたでしょうか?
厚かましく幾度も質問しまして申し訳ありません。

投稿: ゆた | 2010年9月 3日 (金) 18時23分

ゆたさん、

>先ほどのコメントアウトは#if 0の箇所を書き換えれば良いのでしょうか?

そうです。#if 0を削除してください。
また、下の方にある#endifも削除してください。
この2行の削除で大丈夫です。

>制作時の写真を拝見させて頂きますと、アルミ冷却板とカメラの隙間を黒いテープ状のものでの迷光処理されているようでありますが、どのような材料で処理されましたでしょうか?

これは単に黒いビニールテープで巻いただけです。

投稿: ほんまか | 2010年9月 3日 (金) 19時26分

いつも版汚しで申し訳ありません。
温度センサーについてなのですが、
実はS8100Bがどこにも無く、代用としてLM61BIZを内容確認せず購入しました。
これの温度係数がS8100Bの負値と異なり、+10mV/℃となっており、回路図通り組むと初期温度268°Cとなり正常表示しませんでした。(昨晩までの状態であります)
プログラムの方で何とかなるかと思いましたがよくわからないので・・・
電圧を温度に変換箇所で
temp=2185-(((temp)*1000/1957)の1957を10mv*2.446の2446に変更しただけで良いのでしょうか?
そもそも負値ではないので「2185-」の項目も不要なのでしょうか?
それとも回路自体の変更まで必要なのでしょうか?
何卒よろしくお願い申し上げます。

投稿: ゆた | 2010年9月 9日 (木) 10時13分

ゆたさん、試行錯誤を繰り返して、人は賢くなるのです。頑張ってください。

このセンサーは温度計数が10mVで、0℃とき600mVですから、電圧をV[mV]、温度Tとすると、

V[mV] = 10T + 600

電圧はオペアンプで2.47倍しているので、実際は

V[mV] = 24.7T + 1482

です。

これを変形して

T = V/24.7 - 60

マイコンは小数計算できないので、次のように変形します。

T = (V*10)/247 - 60

このプログラムは温度を10倍して管理しています。たとえば、10℃なら100という値を使っています。
これは小数第一位まで表示させたいからです。
したがって、上記の右辺を10倍します。

T[×10℃] = (V*100)/247 - 600

(-25℃、0℃、25℃のときで、データシートの電圧の
値を使ってこの式が正しいか確かめて見ましょう。電圧は2.47倍することに注意)

プログラム的には

temp = -600-(((temp)*100)/247);

になります。

投稿: ほんまか | 2010年9月 9日 (木) 10時55分

ほんまか様へ
完成致しました!
先日の温度センサーですが、プログラムもそうだったのですが
センサー自体が故障してました。(交換後正常値表示しました)
冷却に関しましては、露出中に-10度が限界で、その代わりコントロールBOXが気持ちいいぐらい、よく冷えてました。
冷却板~BOX間の断熱処理が必要ですね。

完全に真似たものでありますが、作成中は非常に楽しめました。
(全国で何台目のほんまかSPコピーD40なのかなぁ)

作成する前にお断りも入れず、それどころか質問ばかりしてしまい誠に申し訳ありませんでした。
本当にありがとう御座いました。

今後の目標は「フォトコン入賞!」(何年後?)

投稿: ゆた | 2010年9月13日 (月) 11時18分

ゆたさん、完成おめでとうございます。
-10度も冷えれば十分と思いますよ。-10度くらいなら結露の心配もないですし。

運用面では、密閉をしっかりして、普段は防湿庫や乾燥材入りのタッパーなどに保管してください。

あと、露出が終了した後は、CCDが冷えますので、そこで結露する恐れがありますので、シャッターを閉じたら、冷却もOFFにするようにしてください。

趣味の世界ですからね、あれこれ楽しみながら、フォトコンを目指してください。

投稿: ほんまか | 2010年9月13日 (月) 21時21分

ほんまかさん、こんにちは。
私は去年から自作冷却カメラにはまっています。
ブログを拝見して一言。
2008年に既にこんな凄いものが完成していたなんて!迂闊でした。
現在、水冷のペルチェで冷却した冷風をボディー背面からダイレクトに送り込み、CCDを冷却しています。
私のペルチェは勤勉で、常に実力を100%発揮し、冬は-35℃ぐらいまで勝手に冷やしまくります。
これを、ほんまかさんのシステムでコントロールしたく
YellowIDE7体験版をDLしてやってみたのですがうまくいきません。
お知恵を拝借させていただきたく、コメントしました。
お時間のある時で結構ですので、よろしくお願いいたします。
症状は、スピードボタンを押すと以下のようなメッセージとエラーがでます。
YAH8/S ...¥STARTUP¥CS3664.ASM
Fatal error:F13 ファイルが開けせん..¥STARTUP
¥CS3664.ASM 
YCH8N main.c
YCH8N lcd.c
YLINK @C:¥CoolSystem¥collsystem.res
YLINK Ver.3.113 copyright 1996-2011yellowsoft.co.ltd.
Error : ファイル(.¥STARTUP¥CS3664.OBJ)が見つかりません
Error : ファイル(.¥STARTUP¥CS3664.OBJ)が見つかりません
YLINK 0 warning error(s)2 fatal error(s)

とっても長くなりましてすみません。
私はPICマイコンの入門書を2冊読んで、降参した人間です。

ご指導のほどよろしくお願いいたします。

                                              

投稿: まこと | 2012年2月11日 (土) 01時59分

まことさん、はじめまして。
自作は楽しいですよね、ぜひがんばってみてください。

さて、質問の件ですが、エラー内容を見ると、ファイルCS3664.ASMの場所が探せなかったようです。
これは、サンプルのフォルダをコピーした場所が悪かったようです。
ダウンロードしたサンプルのフォルダ(CoolSystem)をYellowIDE7のフォルダの中にコピーしてやってみてください。

それでは。

投稿: ほんまか | 2012年2月11日 (土) 05時51分

ほんまかさん、おはようございます。
早速のご回答ありがとうございます。
朝2時に質問して、5時の回答。
ビックリです。

やってみました。

おかげさまで上手くいきました!
うれしいですね。
快調に作動した時の清清しさと、もうダメかなと諦めかけたときの気持ちのギャップが自作の醍醐味でしょうか。
ニヤニヤしちゃいます。

と言っても、まだ何も作っていないので、
部品を一気に購入して製作にかかりたいと思います。
今回は、基板の作成も初挑戦です。

しばらくこもります。

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

投稿: まこと | 2012年2月11日 (土) 08時35分

まことさん、
うまくいってよかったです。
まだ、先は長いですが、頑張って下さい。

投稿: ほんまか | 2012年2月13日 (月) 10時26分

ほんまかさん
おっしゃるとおりです。先は長いようです。
早くも、イエローソフトでつまづきそうになりました。
ドキドキしたー。
インターフェースボード(YHN64-2)が見あたらず、
メールをで問い合わせたところ、YHN64-1が生産終了につき、在庫限りということで、それを承知の人にはセットで売ってくれるようです。
と言いますか、お願いして売ってもらったってことかな?
水曜日に届く予定です。
楽しみで眠れませ~ん。
苦しくて眠れな~い、なんてことにならないと良いのですが。

投稿: まこと | 2012年2月13日 (月) 23時16分

ほんまかさん、こんばんは。
お世話になります。
お忙しいところすみません。
質問させていただきます。
一応回路は完成し、作動させてみたのですが、温度がでたらめなので

オペアンプからの入力を切り離して試してみました。

症状は
①CN-2,3のADコンバータ入力に何も繋がずに動作させると温度の値が-60℃を示す

②CN-2,3のADコンバータ入力に1.5V~5.0Vの電圧を加えると-80℃~-200℃オーバーまで変化していく。

プログラムはtemp = -600-(((temp)*100)/247);の部分を書き換え済みです。

いかがでしょうか。
壊しちゃったのでしょうか。

よろしくお願いします。

投稿: まこと | 2012年2月23日 (木) 23時25分

まことさん、お返事遅れて大変すみません。

温度センサーは、ゆたさんと同じLM61BIZを購入
されたのですね。

>①CN-2,3のADコンバータ入力に何も繋がずに動作させると温度の値が-60℃を示す
>②CN-2,3のADコンバータ入力に1.5V~5.0Vの電圧を加えると-80℃~-200℃オーバーまで変化していく。

どちらも計算どおりで正常ですね。
マイコン自体は正常に動作しています。

temp = -600-(((temp)*100)/247);

これですが、ゆたさんへの回答は間違っていますね。
すみません。
正しくは
temp = -600+(((temp)*100)/247);
です。

また、検査方法としては
センサーの出力、
おやび、センサーのオペアンプを通した電圧を測ってください。

センサーの出力は、10度で700mA
オペランプの出力は、10度で1.7Vくらいが正常です。


投稿: ほんまか | 2012年2月25日 (土) 09時18分

有難うございます。
今、仕事が終わりました。
家に帰るのが楽しみです。

それから、ご回答、ぜんぜん遅くありません。
お時間のある時でお願いします。

あれこれ、自分でも考えてみる時間も楽しみ(勉強?)のうちだと思っています。

これからもよろしくお願いいたします。

投稿: まこと | 2012年2月25日 (土) 17時24分

ほんまかさん
おはようございます。
プログラムを直し、LM61CIZのハンダ不良を直したら、うまくいきました。
ありがとうございます。
見た感じでは半田は良好だったのですが、ちょっとしたことで駄目なんですね。

ここから話が長いのですが・・・

現在、使用しているカメラはSONY NEX5でレリーズのケーブル入力がありません。
ですので、純正のリモコンシャッターのボタンを操作してリモートシャッターを可能にしようと思っています。
SONYのリモコンでバルブを使うときには、ボタンを1回押すと開放、もう一回押すと閉じるようになっています。

そこで、シャッターの状態をModeで管理している?ように思えたので、割り込みプログラムの中のshutter_on();とshutter_off();の部分を

shutter_on();
shutter_off();

と書き換えてみました。

この状態で、プログラムは正常に走るのですが、通電時間があまりにも短く、テスターで感知できません。

そこで、さらに、
int i;
for (i = 0; i < 2000; i++) { ;   }
をプログラム内からコピペしてshutter_on();とshutter_off();の間に入れて通電時間を長くしようとしたのですが、ここでお手上げになりました。
文法的にエラーが出て変換できません。

また、
shutter_on();を複数行連続で入れて試そうと思ったのですが体験版の制限で駄目でした。

お忙しいところすみません。
よろしくお願いします。

投稿: まこと | 2012年2月26日 (日) 08時56分

まことさん、
コピペした部分ですが、
int iの行は
もっと上に書かないとダメですね。

void interrupt timer(void)
{
int i;
TSRW &= ~1; //割り込み要求フラグクリア

そして、カウント値はもっと大きく、20000くらいに
してください。
for (i = 0; i < 20000; i++) { ;   }

ただ、いずれにせよ、体験版の制限に引っかかります。
使用しない部分は削除するしかないですね。


投稿: ほんまか | 2012年2月27日 (月) 13時07分

ほんまかさん
ご回答いつもありがとうございます。
本当に感謝です。
46歳にして童心にかえり、毎日が楽しいです。
ほんまかさんのお陰です。

CPUボードを2つ使い、リモートシャッターと温度管理を分けて作れないかと考えています。

その方が、ビギナーには配線や半田のミスを見つけやすいですし。

あっ、それなら湿度センサーも組み込めますね。

出来るかどうかわかりませんが、回答を参考にして
やってみようと思います。

しばらくこもります。

投稿: まこと | 2012年2月27日 (月) 22時01分

コメントを書く



(ウェブ上には掲載しません)




« D40冷却改造奮闘記 その7 | トップページ | D40冷却改造奮闘記 その9 »