迷走の果て・Tiny Objects

迷走する日々の覚え書きです。自分で分かってることは省略してますので、念のため。

ストロベリーリナックスさんでお買い物

MCP1640_1.jpgMCP1640 DC-DCコンバータモジュールを購入した。
小さいのに驚かされる。

ユニバーサル基板に仮組みして実験の開始。

先ずは無負荷で出力電圧を5Vにセットした。
100Ωの抵抗をつなぐと4.88Vまで低下、300Ωでも同じ。
1KΩだと5Vになる。
負荷をあれこれと変えて出力をオシロで観測した。写真がボケているのはご勘弁。何せ古いデジカメなのだ。

MCP1640_no_load__50ohm.jpg負荷によってリプルの波形が違っている。
データシートによると負荷が軽いうちはPFMモードで動作し、重くなるとPWMモードに変わるそうだ。
下にデータシートからのグラフを示しておくが、5V出力なら10mA以上ならPWMモードになる。

どうやらPFMモードでは電圧が高くなるので、PWMモードになるように負荷を掛けたときに電圧が5Vになるようにセットした。

LEDを点灯するぐらいならリプルは問題ないが、回路によっては除去したい場合もある。
PWMモードなら周期は2μsなので簡単なLCフィルタで除ける。
上の写真では手持ちにあった22μHのインダクタと100μFのケミコンを使ってみたが、リプルは見えなくなった。

問題はPFMモードでの除去、負荷によって周期は大幅に変化する。どうしたものか。
まぁ、私の場合は10mA以上で使うことが多いだろうから簡単なLCフィルタだけにしておく。
軽い負荷で使うときにリプル除去が必要ならまた考えよう。

MCP1640_PFM_PWM.jpg






スポンサーサイト

CY8C24223で周波数カウンタ・main.c

さて、main.cを公開するのは気が引けるのだ、なにせ下手なコーディングなので・・・。
文字配列の使い方がどうもねぇ。

まぁ、いいか。
念のため、動作保障はしません。自己責任でどうぞ。なんて書くのはイヤなんだが、一応書いておかないと。

ご注意!
#include <m8c.h>
の<>は半角に変えてください。

//----------------------------------------------------------------------------
// CY8C24223A-24PXIを使った周波数カウンタ
// start 2013.05.11
// copyright edy
// Gate P1[5]
// 0ならゲートは閉じている、1なら開いている
//----------------------------------------------------------------------------

#include <m8c.h>// part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules


#define MAXCOUNT 65535

#define Gate (PRT1DR & 0x20)

long freq ;

#pragma interrupt_handler Counter16_ISR

void Counter16_ISR(void)
{
freq+=MAXCOUNT + 1 ;
}

void main(void)
{
int p ;

char s[11];
freq = 0 ;

Counter16_Start() ;
PWM16_Start() ;
LCD_1_Start() ;
Counter16_EnableInt();
M8C_EnableGInt;

//LCD_1_Position(0,0);LCD_1_PrCString("Freq Counter");
while(1) {
while ( Gate != 0 ) {;} //ゲートが開いている間ループ、すなわちゲートが閉じるのを待つ
Counter16_Stop() ;

freq = freq + (MAXCOUNT- Counter16_wReadCounter()) ;

p=9;
do{
s[p]=(freq % 10)+'0' ; freq/=10 ;
if (freq>0){
p--;
if((p==2)||(p==6)) {s[p]=',';p--;}
}
}while(freq>0);

while(p>0) {p--; s[p]=' ';}
s[10]=0;

LCD_1_Position(0,0);LCD_1_PrString(s);LCD_1_PrCString("Hz");
freq = 0;
Counter16_WritePeriod(MAXCOUNT);
Counter16_Start() ;
while ( Gate == 0 ) {;} //ゲートが閉じている間ループ、すなわちゲートが開くのを待つ
}
}

CY8C24223で周波数カウンタ・続き2

デジタルモジュール内部結線です(サムネイル表示、クリックで拡大)。
PWM16とCounter16を配置してます。
PWM16でゲートパルスを作ります、パルス幅は1秒、周期は1.1秒です。Port1_5に出力してあります。
同時にCounter16のEnableにも接続しています。
Counter16で周波数をカウントします。このままではゲートタイム1秒のとき、65535Hzまでしかカウントできません。
そこでCounter16のTerminal Countで割り込みをかけて変数をインクリメントするように割り込みルーチンをセットします。

Interconnect.jpgInterconnectです、Asyncを選んでおきます。SysClk_Syncだとシステムクロックの半分までしかカウントできません。

PWM16.jpgCounter16.jpg
PWM16とCounter16のパラメーターです。Counter16のClockSyncはUnsynchronizedにしておきます。

Global_Resources.jpg

Pinout_20130516093624.jpg

CY8C24223で周波数カウンタ・続き

CY8C24223周波数カウンタ

とりあえず、大雑把な回路図を示しておく。
LCDの接続やら、コントラスト調整の半固定抵抗、パスコンなどは省略してある。
実際には入力アンプも必要だ。

24MHzのクリスタルオシレーターは以前秋月電子で手に入れたものだが、今は売ってないですね。
SG-8002を使ったオシレーターが幅を利かせている。
これは周波数カウンタのクロックとしては使えるのかな?
RF関係には使えないという記事があった、ジッタが多いそうだ。

CY8C24223で周波数カウンタ


前の記事の続きである。
案の定、ユーザーモジュールの設定を間違えていた。
訂正したものの、周波数表示がおかしい、これはC言語の文字列の扱いのミス。
やっとまともに周波数を表示できるようになったと思ったら、今度はPWMモジュールの設定ミス。

で、何とかまともに表示するようになりました。
外部クロックに24MHzのクロックモジュールを使っており、それを入力したので当然表示は写真のようになるはずだ。
もうちょっと検証しなければ。

久しぶりにPSoCプログラミング


久しぶり、一年以上は経っている。
CY8C24223を使った周波数カウンタを作ってみた。
Freq Counterと表示した後に、周波数表示をするはずなのだけど、そのまま。

ハードウェアは正常のはずだ、ちゃんと表示が出たのだから。
となるとソフトの問題か、ユーザーモジュールの設定の問題か・・・。

さて、楽しいデバッグの始まりである。

「コンピュータはこちらの思い通りには動かない、命令されたとおりに動く」

CY8C24223A-PXIを入手しました。

ヤフオクで落札した。10個で送料、振り込み手数料込みで825円也。1個当たり82.5円。
CY8C24223_10.jpg
CY8C24223.jpg
今(5月9日)も出品されている
データシートはこちら。
デジタルブロックは4つと少ない。
さて、これで何をしようかと目論んでいる。普通は目的があってそのために部品を選ぶんだろうけど、今回は逆だ。

周波数カウンタは出来るだろうか?
以前作った周波数カウンタはデジタルブロックを4つ使ってゲートが開いている間カウントさせ、ゲートが閉じるとMPUがカウント値を読んで表示させていた。これで50MHz超のカウンタが出来た。
ゲートが開いている間はMPUはひたすら待っているだけだ。
ゲートパルスは同じくデジタルブロックを使い、オシレータモジュールの出力を分周していた。
デジタルブロック4つでは同じようには出来ない。

さて、ここからあれこれ考えるのがお楽しみである。

電子かざぐるま・続き

作るきっかけはこの論文である。
マイクロホンベースの風速センサの開発がテーマなのだが、私はそこまでしていない。

一部引用させていただく。
--------------------------------------------------------------------------------
また,マイクロホンを風センサとして利用した製品としては携帯ゲームなどに例がある.
ただし,これらは風というより息を吹きかけたことをトリガにキャラクタの振る舞いを変化させるといった大きな瞬発的な変動を利用した使い方をしている.
また,風に反応する電子風鈴の電子工作キット[6] の例では3~4Hz 以下の,可聴範囲外に
発生する雑音を検出し,閾値を超えると発振器をトリガして鳴らすというもので,いずれも風の強弱の変動の検
出・利用には至っていない.
--------------------------------------------------------------------------------
引用終わり。
ここで紹介されている電子風鈴はこちら
マイク出力を増幅し、数ヘルツのLPFを通す、あるレベル以上の信号があれば風が吹いたと判断しLEDを回転させればいいわけだ。
ここでは8pinPSoCとMC14022を使って実現している。
PSoC電子かざぐるま

実際にはLEDを3個一組として八組用意した、計24個。
MC14022の出力ではLEDを3個も駆動できないので、トランジスタによるスイッチを入れてある。

PSoC電子かざぐるま


以前作った電子かざぐるまです。中央上部にマイクがあり、息を吹きかけるとLEDがかざぐるまみたいに回ります。

詳細は後ほど追記します。(多分)

 | HOME | 

文字サイズの変更

プロフィール

edy

最新記事一覧(サムネイル画像付き)

百均のUSB LED電球(2) Aug 13, 2017
百均のUSB LED電球 Aug 11, 2017
状態変数型バンドパスフィルタ(2) Aug 05, 2017
状態変数型バンドパスフィルタの解析、発振回路に応用するため。 Jul 30, 2017
CJMCU Beetleを試す Jul 29, 2017
Arduino 互換ボード SS MICROを試す Jul 22, 2017
店の電飾(3)無限鏡(infinity mirror) Jun 25, 2017
店の電飾(2)回路の変更とスケッチ Jun 25, 2017
店の電飾 Jun 18, 2017
Arduino Pro Microを試す。(3)HIDとして使う(2) Jun 15, 2017

全記事表示リンク

全ての記事を表示する

ブログリンク

リンク

このブログをリンクに追加する

月別アーカイブ

08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  12  11  10  09  07  05  04  03  04  03  01  12  11  10  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  02  01  12  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  10  09  08  07  06  05  04  03  02  01 

カテゴリ

プログラミング (0)
freescale (1)
AVR (3)
テルミン (16)
緊急警報放送 (3)
78K (1)
PSoC (295)
地上デジタル放送 (2)
電子工作 (409)
HX711 (2)
ACS712 (6)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (32)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

アクセス

RSSリンクの表示

フリーエリア

FC2Ad

まとめ

Template by たけやん