趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
16F1827のADCにはバグがあって、回り道しないとハングすることは知っていたが、その回り道の方法が今まで間違っていた。
Errataには、ADCのクロックをFRCにするとGO/DONEを返さない(通常はハングに直結)のでFOSCを使え、と書いてある。なので、
ADCON1.ADCS0=1;
ADCON1.ADCS1=0;
ADCON1.ADCS2=0;
ADC_Read(0);
みたいな感じで使っていた。が、よ~くMikroCのマニュアルを読むと、ADC_Read(char channel)はFRC固定と書いてあった。つまり、いくらFOSCに指定しても、結局ADC_Readの中でFRCに変更されてしまうのだった。これでかな?ハングしまくっていたのは?
ということで、16F1827ではADC_Readは使用禁止。代わりに、ADC_Init、ADC_GetSampleを使用するべきである。まあ、下記のような関数を定義して、ADC_Readの代わりに使えばいいのかな?
unsigned int ADC_Read2(char channel)
{
unsigned int adc;
OSCCON=0b01110000; // 8MHz
ADC_Init();
ADCON1.ADCS0=1;
ADCON1.ADCS1=0;
ADCON1.ADCS2=0;
adc=ADC_Get_Sample(channel);
OSCCON=0b11110000; // 8MHz x 4
return adc;
}
いまのところハングしていないが、まだ様子見、といったところ。本当にこれでいいのかわからん。
もしもこれでいいなら、16F1938の場合にも有効かもしれない。
Errataには、ADCのクロックをFRCにするとGO/DONEを返さない(通常はハングに直結)のでFOSCを使え、と書いてある。なので、
ADCON1.ADCS0=1;
ADCON1.ADCS1=0;
ADCON1.ADCS2=0;
ADC_Read(0);
みたいな感じで使っていた。が、よ~くMikroCのマニュアルを読むと、ADC_Read(char channel)はFRC固定と書いてあった。つまり、いくらFOSCに指定しても、結局ADC_Readの中でFRCに変更されてしまうのだった。これでかな?ハングしまくっていたのは?
ということで、16F1827ではADC_Readは使用禁止。代わりに、ADC_Init、ADC_GetSampleを使用するべきである。まあ、下記のような関数を定義して、ADC_Readの代わりに使えばいいのかな?
unsigned int ADC_Read2(char channel)
{
unsigned int adc;
OSCCON=0b01110000; // 8MHz
ADC_Init();
ADCON1.ADCS0=1;
ADCON1.ADCS1=0;
ADCON1.ADCS2=0;
adc=ADC_Get_Sample(channel);
OSCCON=0b11110000; // 8MHz x 4
return adc;
}
いまのところハングしていないが、まだ様子見、といったところ。本当にこれでいいのかわからん。
もしもこれでいいなら、16F1938の場合にも有効かもしれない。
PR
このブログが先日使えなくなった。なにも見えない。
音を立てずに消える。。。さすが忍者というべきか。
しかし、2日くらいして復活した。
「『忍者ツールズ』全サービスが表示不可となる障害復旧のお知らせ」
なるアナウンスが出ていて、こんなことが書いてあった。
1.ドメインが初期化された
2.DNSキャッシュの影響で最大72時間使えない
でも、何年か前にも、同じようなこと、してなかったかな???
ドメイン登録が切れる前に、レジストラから請求書を送ってきてくれたらいいんだが、普通はクレジットカード決済しかだめだったりする。で、切れる前にメールくらいは送ってくるのだが、決済を忘れるとドメインが消滅してしまうのだ。さらに都合の悪いことに、たいていのレジストラーは、ドメインが消滅したあと、偽の情報を長~い有効期限(2日くらい?)で登録しちゃうんで、急いでクレジットカード決済してドメイン復旧しても、インターネット全体ではなかなか回復しない。
ということを、今の担当者は知らなかったのだろう。不幸な時代だ。。。
ということはどうでもよくて、PIC16F1827+MikroCでADCを使う方法を今まで誤っていたので、メモを残そうと思ったが、書くの疲れたのでまた後日。
音を立てずに消える。。。さすが忍者というべきか。
しかし、2日くらいして復活した。
「『忍者ツールズ』全サービスが表示不可となる障害復旧のお知らせ」
なるアナウンスが出ていて、こんなことが書いてあった。
1.ドメインが初期化された
2.DNSキャッシュの影響で最大72時間使えない
でも、何年か前にも、同じようなこと、してなかったかな???
ドメイン登録が切れる前に、レジストラから請求書を送ってきてくれたらいいんだが、普通はクレジットカード決済しかだめだったりする。で、切れる前にメールくらいは送ってくるのだが、決済を忘れるとドメインが消滅してしまうのだ。さらに都合の悪いことに、たいていのレジストラーは、ドメインが消滅したあと、偽の情報を長~い有効期限(2日くらい?)で登録しちゃうんで、急いでクレジットカード決済してドメイン復旧しても、インターネット全体ではなかなか回復しない。
ということを、今の担当者は知らなかったのだろう。不幸な時代だ。。。
ということはどうでもよくて、PIC16F1827+MikroCでADCを使う方法を今まで誤っていたので、メモを残そうと思ったが、書くの疲れたのでまた後日。
PIC16F1827やPIC16F1938で、チップのリビジョンによって、動いたり、動かなかったりするぞ、ということがあった。古いチップだと動いて、新しいチップだと動かないので、チップのバグに違いない!と思っていたが、最近はMikroCの仕様(バグ)という気がしてきた。非同期シリアル(UART)を使うときに、MikroC標準関数でのボーレートの指定がうまく効かず、直接チップのレジスタを叩かなければ動かないことがあったので、以前の現象も本来やるべき初期化処理をMikroCがやっていないだけかもしれない。ということで、PIC16F1827やPIC16F1938は、チップ自体は悪くない、と今は思うようになった。
概ねス口コソが完成したので、より安定して使えるようにプリント基板をおこすことにした。いままで基板の設計はPCBEを使っていたが、今回はとてもそれで設計できる規模ではないので、もっと気の利いたものを使おうと思う。
で、Eagleにしようかなぁ、と思ったけど、無償版は制約が厳しすぎるのでやめた。もちろん有償版を買う金などあるわけがない。
と、そんなときに、Designspark PCBなるPCB設計ツールを見つけたので、使ってみた。
その感想は、、、、
1.Eagleと似ている
Eagleの使用経験があれば、マニュアルを読み込まなくてもなんとなく使える。Eagleでできることは大体できる。
2.使い勝手はEagleと同様あまりよくない
Eagleは使いやすいと思わなかったが、これも同じ感じ。
3.ライブラリが少なめ
まあ、無料だから仕方ないかな。。。
4.不安定?
よく落ちる。Windows3.1くらいの安定度と思えばいい。メモリー4MのMacで漢字Talk6を動かしたときぐらいかも。
5.落ちたらファイルが破壊されることがある
こまめにセーブするのはあたりまえ。
こまめにファイル名を変えてセーブする必要がある。
使えば、DesignSpark PCBがなぜ無償なのかわかる。有償でサポートできる品質に達していないからである。
でも、無償なら、「これはすごい!」ソフトだと思うので、しばらく使い込んでみることにした。
で、Eagleにしようかなぁ、と思ったけど、無償版は制約が厳しすぎるのでやめた。もちろん有償版を買う金などあるわけがない。
と、そんなときに、Designspark PCBなるPCB設計ツールを見つけたので、使ってみた。
その感想は、、、、
1.Eagleと似ている
Eagleの使用経験があれば、マニュアルを読み込まなくてもなんとなく使える。Eagleでできることは大体できる。
2.使い勝手はEagleと同様あまりよくない
Eagleは使いやすいと思わなかったが、これも同じ感じ。
3.ライブラリが少なめ
まあ、無料だから仕方ないかな。。。
4.不安定?
よく落ちる。Windows3.1くらいの安定度と思えばいい。メモリー4MのMacで漢字Talk6を動かしたときぐらいかも。
5.落ちたらファイルが破壊されることがある
こまめにセーブするのはあたりまえ。
こまめにファイル名を変えてセーブする必要がある。
使えば、DesignSpark PCBがなぜ無償なのかわかる。有償でサポートできる品質に達していないからである。
でも、無償なら、「これはすごい!」ソフトだと思うので、しばらく使い込んでみることにした。
ファストサーバが大変なことになっている。クラウドの時代、自前でサーバを持つのは古い、バックアップや運用も全部お任せ、と言われて、任せた人が被害者なのだろう。なるほど、AIJと同じかな。「最適な運用をしますので、すべて任せてください」、というものには、任せてはいけないということか。
それはさておき、フルコンであるPOWER FCをせっかく使っていながら純正コンピュータも必要、というのがイケてないなぁ、、、
ということで作ってみた。
見てわかるとおり(わからない?)、純正コンピュータなしで、11Оに1ОО用パワーFCを接続するアダプターです。
やっていることは単純で、「11Оコンピュータにあって、1ООコンピュータに無い処理をする」だけである。
そう聞くと、「そんなの簡単じゃん!」と思うかもしれないが、これが結構面倒だったりする。週末の空き時間でコツコツ作り続けて、約2ヶ月かかった(しかも一部未完成)。かなり難易度が高いので、DIYでやってみようという人は、心してかかるように。
「11Оコンピュータにあって、1ООコンピュータに無い処理をする」(スcコン以外)とはどんなものか、というと、これがけっこうあって、
とまあ、これくらいある。
とりあえず、1~14までは実装できたのだが、15と16はこれから。15はオペアンプかコンパレータを使えばどうにかなりそうだが、16はどうしたものか。。。。このTRC警告信号送っているのって、エンジンECUじゃないからなぁ。。。。17、18は対応する気なし、ていうか無理。
それはさておき、フルコンであるPOWER FCをせっかく使っていながら純正コンピュータも必要、というのがイケてないなぁ、、、
ということで作ってみた。
見てわかるとおり(わからない?)、純正コンピュータなしで、11Оに1ОО用パワーFCを接続するアダプターです。
やっていることは単純で、「11Оコンピュータにあって、1ООコンピュータに無い処理をする」だけである。
そう聞くと、「そんなの簡単じゃん!」と思うかもしれないが、これが結構面倒だったりする。週末の空き時間でコツコツ作り続けて、約2ヶ月かかった(しかも一部未完成)。かなり難易度が高いので、DIYでやってみようという人は、心してかかるように。
「11Оコンピュータにあって、1ООコンピュータに無い処理をする」(スcコン以外)とはどんなものか、というと、これがけっこうあって、
- ВЕАΝの「リアデフォッガ信号」をもとにリアデフォッガー(RDEF)リレーをオンにする。
- ВЕАΝの「リアデフォッガ信号」をもとにアイドルアップ(ELS2をセット)する。
- ВЕАΝの「TAIL(スモールライトのことね)信号」をもとにアイドルアップ(ELS1をセット)する。
- 冷却ファンの回転が一定以上になったら、アイドルアップ(ELS3をセット)する。
- ВЕАΝの「A/C信号」をもとにエアコンのコンプレッサーを回す(A/Cをセット)。
- イグニッション信号(IGF)をもとに、タコメータ用の信号(TACH)を生成して純正メータのタコメータを動かす。
- 水温センサーの電圧(THW)を読み取り、低温だと低回転、高温だと高回転に冷却ファンが回るようにパルス信号(RFC)を生成する。
- 水温センサーの電圧(THW)を読み取り、ВЕАΝの「水温信号」を生成して、純正メータの水温計を動かす。
- 外気温センサーの電圧(TAM)を読み取り、ВЕАΝの「外気温信号」を生成して、EMVに表示されるようにする。
- オルターネータの発電チェック端子?(RL)を読み取り、発電していない場合は、ВЕАΝの「バッテリー警告信号」を生成して、メータの「バッテリー警告灯」を点ける。
- 油圧スイッチ(MOPS)を読み取り、油圧が不足している場合は、ВЕАΝの「油圧警告信号」を生成して、メータの「油圧警告灯」を点ける。
- エアコンガスの高低圧スイッチ(PRE)の状態を調べ、異常の場合はコンプレッサーを回さない。
- エアコンガスの中圧スイッチ(HP)の状態を調べ、異常の場合は冷却ファンを回す。
- 通常時は、ВЕАΝの「コンプレッサーロック信号」を「正常」で生成する。これを送らないと、エアコンコンピュータがコンプレッサーONの信号をВЕАΝ経由で送ってきてくれない。
- コンプレッサーのロックセンサー(LCKI)の値を読み取り、イグニッション信号(IGF)と比較して,回転のずれ80%超えが1秒以上続くと、ВЕАΝの「コンプレッサーロック信号」を「ロック」で生成する。
- TRC警告灯が消せたらいいなぁ。。。。
- トラクションコントロールの仕組みが全く異なる・・・
- エアバッグが開いたときに燃料ポンプを止める。
とまあ、これくらいある。
とりあえず、1~14までは実装できたのだが、15と16はこれから。15はオペアンプかコンパレータを使えばどうにかなりそうだが、16はどうしたものか。。。。このTRC警告信号送っているのって、エンジンECUじゃないからなぁ。。。。17、18は対応する気なし、ていうか無理。