74LS624と8pinPSoCで正弦波オシレータもどき
2010-05-30
だいぶ以前に「はじめてのPSoCマイコン」のテストオシレータを8pinPSoC CY8C27143-24PXIに移植した記事を書いた。
今回のはその続きみたいなもんである。
74LS624という古いVCOが出てきたので使ってみた。
シュミットトリガインバータ74HC14を使った発振回路でもいいのだが、せっかく出てきたICの顔を立ててやりたかったのだ^^;;


8pinPSoC側にも手を加えた。三角波出力は止めて、分周比設定スイッチを設けた。
これにより50KHz~2Hzまでの出力が得られる。

問題は出力が階段状だってこと、スイッチドキャパシタ使ってるのだから無理ないのだけど。

今回のはその続きみたいなもんである。
74LS624という古いVCOが出てきたので使ってみた。
シュミットトリガインバータ74HC14を使った発振回路でもいいのだが、せっかく出てきたICの顔を立ててやりたかったのだ^^;;


8pinPSoC側にも手を加えた。三角波出力は止めて、分周比設定スイッチを設けた。
これにより50KHz~2Hzまでの出力が得られる。

問題は出力が階段状だってこと、スイッチドキャパシタ使ってるのだから無理ないのだけど。

ナイトフラッシャー改:LEDを8個付ける
2010-05-22
ナイトフラッシャー改
2010-05-22
ナイトフラッシャーの解説(Wiki)より引用します。
PSoCのPWMモジュールを使って各LEDの明るさを制御し、「若干の残光を残しながら光りつづける」ようにしてみました。
相変わらずLEDは5個しか付いてないんですが(汗
28ピンのCY827443を使えばLED8個点灯も可能です。
8個以上(基本は8個)の電球が左右に往復を繰り返すように順次点灯、消灯を繰り返し、若干の残光を残しながら光りつづけるというものである。
PSoCのPWMモジュールを使って各LEDの明るさを制御し、「若干の残光を残しながら光りつづける」ようにしてみました。
相変わらずLEDは5個しか付いてないんですが(汗
28ピンのCY827443を使えばLED8個点灯も可能です。
PSoCでナイトフラッシャーもどき
2010-05-19
(ナイトライダー改め)ナイトフラッシャーの周期を変えられる様にしてみました。

ポート設定ですがP0[5]はOpen Drain Lowにしてあります。他はStrongでもOpen Drain LowでもOKです。
LEDのビットパターンはあらかじめ配列に入れておきます。
CPUはスリープさせています。スリープをさせなくても動作させられますが、電池動作を考えているのでなるだけ消費電流が少なくなるようにしています。
コンデンサを抵抗で充電し電圧が0.5Vddに達したら割り込みをかけてスリープを解除します。

CmpLPでスリープ中に割り込みをかける方法がなかなかわからず苦労しました。実のところ今でもこれでいいのか疑問なんですが^^;とりあえず動いてます。
CmpLPのデータシートに次のような注意書きがあります。
Note
To achieve LPCMP interrupt generation during sleep, the comparator bus signal must be set to unlatched using the CLDIS bits in the CMP_CR1 register.
一応書いてあるとおりにしたつもりです(汗
スリープから復帰したら次のビットパターンを表示し、コンデンサを放電させてスリープします。
プログラムの一部を記しておきます。
M8C_EnableGInt;
M8C_EnableIntMask(INT_MSK0,INT_MSK0_ACOLUMN_0);
CmpLP_1_Start();
CmpLP_1_EnableInt();
CmpLP_2_Start();
CMP_CR1 = CMP_CR1 | 0x10 ; // スリープ中にCmpLP_1からの割り込みを可能にする
繰り返しますが、これで正しいのかどうかわかりません。
手持ちのLEDを使ったので不揃いです。8pinPSoCを使ったのでLEDは5個しか付けられません。
ピン数の多いPSoCを使うか、74HC595等のシフトレジスタを使うと増やせます。
ポートが余ればスイッチを付けてビットパターンを変えることも出来るでしょう。
真ん中のICみたいなのは330Ωの集積抵抗です。
半固定抵抗を動かすと点滅周期が変わります。

ポート設定ですがP0[5]はOpen Drain Lowにしてあります。他はStrongでもOpen Drain LowでもOKです。
LEDのビットパターンはあらかじめ配列に入れておきます。
CPUはスリープさせています。スリープをさせなくても動作させられますが、電池動作を考えているのでなるだけ消費電流が少なくなるようにしています。
コンデンサを抵抗で充電し電圧が0.5Vddに達したら割り込みをかけてスリープを解除します。

CmpLPでスリープ中に割り込みをかける方法がなかなかわからず苦労しました。実のところ今でもこれでいいのか疑問なんですが^^;とりあえず動いてます。
CmpLPのデータシートに次のような注意書きがあります。
Note
To achieve LPCMP interrupt generation during sleep, the comparator bus signal must be set to unlatched using the CLDIS bits in the CMP_CR1 register.
一応書いてあるとおりにしたつもりです(汗
スリープから復帰したら次のビットパターンを表示し、コンデンサを放電させてスリープします。
プログラムの一部を記しておきます。
M8C_EnableGInt;
M8C_EnableIntMask(INT_MSK0,INT_MSK0_ACOLUMN_0);
CmpLP_1_Start();
CmpLP_1_EnableInt();
CmpLP_2_Start();
CMP_CR1 = CMP_CR1 | 0x10 ; // スリープ中にCmpLP_1からの割り込みを可能にする
繰り返しますが、これで正しいのかどうかわかりません。
手持ちのLEDを使ったので不揃いです。8pinPSoCを使ったのでLEDは5個しか付けられません。
ピン数の多いPSoCを使うか、74HC595等のシフトレジスタを使うと増やせます。
ポートが余ればスイッチを付けてビットパターンを変えることも出来るでしょう。
真ん中のICみたいなのは330Ωの集積抵抗です。
半固定抵抗を動かすと点滅周期が変わります。
PSoCでナイトライダーもどき
2010-05-12

最近PSoCにさわってないので急遽実験してみました。
ナイトライダーもどきです。
プログラムは簡単なので10分程度で出来ました。
http://www.youtube.com/watch?v=ZOrwZvyoU3o" target="_blank" title="YouTube動画">YouTube動画
手持ちの部品を使ったのでLEDが不揃いです。
あと、点灯パターンは変えた方がいいかも。
周期ももうちょっと速いほうがいかな?
AD584JHを使った基準電源の実験
2010-05-12
手持ちのAD584JHを使って基準電圧源を試作しました。
実は前から何度も設計はするものの、あれやこれやと機能を満載しようとしてしまい、結局作らずにいました。
今回、10Vと1Vを出すだけにとどめました。
10VはAD584の出力を出すだけですが、1Vは抵抗分割の上、OP-07のバッファを入れました。
分割抵抗の比は9:1でなければなりません。
たとえば27KΩと3KΩ、いくつか買い込んでデジタルテスタで測定し、9:1のペアを見つける事も考えました。
でも27KΩはデジタルテスタの200KΩレンジ、3KΩは20KΩレンジで測定することになります。違うレンジで測って精度が出るのかわかりません。

そこで上の回路のように同じ抵抗を三個ずつ直列と並列に接続し9:1の比を得ることにしました。
同じレンジでほとんど同じ抵抗値を測るのだから少なくとも相対精度はいいでしょう。
8本の抵抗を測ってその中から9:1になる組み合わせを決めました。

実は前から何度も設計はするものの、あれやこれやと機能を満載しようとしてしまい、結局作らずにいました。
今回、10Vと1Vを出すだけにとどめました。
10VはAD584の出力を出すだけですが、1Vは抵抗分割の上、OP-07のバッファを入れました。
分割抵抗の比は9:1でなければなりません。
たとえば27KΩと3KΩ、いくつか買い込んでデジタルテスタで測定し、9:1のペアを見つける事も考えました。
でも27KΩはデジタルテスタの200KΩレンジ、3KΩは20KΩレンジで測定することになります。違うレンジで測って精度が出るのかわかりません。

そこで上の回路のように同じ抵抗を三個ずつ直列と並列に接続し9:1の比を得ることにしました。
同じレンジでほとんど同じ抵抗値を測るのだから少なくとも相対精度はいいでしょう。
8本の抵抗を測ってその中から9:1になる組み合わせを決めました。

秋月電子の電圧計キットでLOBATを表示できるようにする。
2010-05-06
秋月電子の電圧計キットをいくつか購入して電圧計や電流計として使っていますが、
電池の電圧が7V以下で表示が狂うことがわかりました。
キットを使った自作電圧計で手元にあった古い単三電池を測ってみた結果です。
電源電圧 表示
8.5V 1.22
7.0V 1.22
6.5V 1.29
6.0V 1.38
5.5V 1.49
5.0V 1.61
このぐらいまで電源電圧が低下しても表示が薄くなったりしないので気付きません。
そこで電池の電圧が低下したときに警告する機能を追加してみました。
キットの液晶パネルSP-521はLO BAT表示ができるので、電圧低下を検出してLOBATを表示させます。
オペアンプにはICL7611を使いました、設定によって消費電流を10μAまで抑えられます。
DPも表示できるようにしておきます、この部分はICL7136のデータシートにある通りの回路です。


R3~R5には手持ちにあった680KΩの集積抵抗を使いました、8素子入りのうち三つしか使わないのでもったいないのですが、「今使わねばいつ使うのだ」というわけです^^;。
R1も手持ちに適当なのがなかったので470K+220K+100K半固定としてあります。
とりあえず動作確認ですから「これでいいのだ」
いずれ修正します。

LOBATを表示させるには一カ所パターンカットが必要です。
電池の電圧が7V以下で表示が狂うことがわかりました。
キットを使った自作電圧計で手元にあった古い単三電池を測ってみた結果です。
電源電圧 表示
8.5V 1.22
7.0V 1.22
6.5V 1.29
6.0V 1.38
5.5V 1.49
5.0V 1.61
このぐらいまで電源電圧が低下しても表示が薄くなったりしないので気付きません。
そこで電池の電圧が低下したときに警告する機能を追加してみました。
キットの液晶パネルSP-521はLO BAT表示ができるので、電圧低下を検出してLOBATを表示させます。
オペアンプにはICL7611を使いました、設定によって消費電流を10μAまで抑えられます。
DPも表示できるようにしておきます、この部分はICL7136のデータシートにある通りの回路です。


R3~R5には手持ちにあった680KΩの集積抵抗を使いました、8素子入りのうち三つしか使わないのでもったいないのですが、「今使わねばいつ使うのだ」というわけです^^;。
R1も手持ちに適当なのがなかったので470K+220K+100K半固定としてあります。
とりあえず動作確認ですから「これでいいのだ」
いずれ修正します。

LOBATを表示させるには一カ所パターンカットが必要です。