2015年1月30日金曜日

I2Cの5V↔3.3Vレベルシフト 中間まとめ的な

PSoC 4 Pioneer Kitで駆動電圧を3.3Vと5Vに切り替えて実験してみた

PSoC 3.3V | LCD 3.3V | PullUP 3.3V


PSoC 5V | LCD 3.3V | PullUp 3.3V


どちらもLCDはちゃんと表示される

LCD駆動とPullUp用にPSoC 4 Pioneer Kitから引き出している3.3Vの電圧をテスタで測ると3.48V

オシロで測定したSCL、SDAの波形を見るとどちらも3.4V程度だ

データーシートで見ると
High値のMin: 0.7×VDD
High値のMax: VDD+0.5V
なので、

3.3V駆動の時は2.31V~3.8Vで範囲内に収まっているのでこれはOK

5V駆動の時は3.5V~5.5Vなので仕様外になる

PullUpの値を調整して3.5V~3.8Vの間に収めてやればデーターシートの仕様内に収まるが
正直めちゃくちゃめんどくさい(^q^;

3.3Vと5VのデバイスでI2C通信させようと思うとRESETの信号レベルも考えないといけない

PSoCを5V駆動させたときのRESET信号


High値は5Vぐらい

PSoCを3.3V駆動させたときのRESET信号



High値は3.4Vぐらい

PSoCを5V駆動したときは3.3V駆動のLCDの仕様外になる(^q^;)

これもI2Cと同じようにオープンドレインにしてまとめてレベル合わせをするという手もあるが

可変安定化電源を作った時(http://dad8893.blogspot.jp/2014/12/blog-post_18.html)に
ツェナーで実験したようにツェナーで作った電圧は信用できない(誤差がかなりある)

シャントレギュレーターで精度を上げてPullUp用の電圧を調整などと考えてみても
部品点数が増えてどっちの信頼性が高いのかわからなくなる(^q^;

中間まとめ

製品で使うならデーターシートは絶対なのでI2Cで通信するデバイスの駆動電圧を合わせることが第一の解決策だと思う

が、5Vと3.3Vなら3.3VでPullUpすれば大体動くし
深入りしないで動かなければまた考えるという態度でいくことにします

5VでPullUpしてデバイスをぶっ壊すよりは3.3VでPullUpしておいてダメだったらまた考えるというのが趣味の電子工作としては現実的で楽な解決策のような気がします

PSoC 4 Pioneer KitでI2C LCD

Strawberry LinuxさんのI2C LCDを動作させてみた
http://strawberry-linux.com/catalog/items?code=27021

まずはArduinoで動作確認


Arduinoのすすめさんが公開されているI2CLiquidCrystalライブラリを使った
http://n.mtng.org/ele/arduino/i2c.html

使ったサンプルスケッチ(Hello World)ではLCDを5V駆動させるようになっているようだ

ライブラリの中は見ていないが、このLCDに使われているコントローラーのST7032iでは
Bonというパラメーターで5V、3.3V駆動を切り替えられるようだ
http://strawberry-linux.com/support/27021/1176395

初期化後の波形は


7c:00:38 7c:00:39


7C:00:14 7c:00:74

でStrawberryLinuxさんのドキュメント(i2c_lcd-an003.pdf)とほとんど同じ(^q^/

3e → 7cはAddress表記の7bitと8bitの違い
最後の70 → 74はコントラストの設定値の違いだ

PSoC 4 Pioneer Kitで動かしてみる

PSoC Creatorでプロジェクトを作って動作チェック


ACKがこない(^q^;

PullUp用のRを5.6Ωから3.3kΩに下げてみる


波形は多少きれいになったがやはりACKが来ない(^q^;

何度か動かしてみるとACKがくるときもあったのでLCDのRESET PINも制御してみることにした

最初にやったAruduinoの例ではRESET PINは制御していない(VDDに直結)


ACK来た!GJ(^q^/

が、ACKは来たものの、そのあとのコマンドが続かない(@q@;

ソースをいじってLED点灯をステップごとに入れたりしてあれこれ試行錯誤しているうちに気づいた!

グローバル割込みを許可する前にLCDの初期化コマンドを流していた(^q^;;;;

ソースの中のグローバル割込みを許可するCyGlobalIntEnableを先頭に持ってきて


GJ(^q^/


気づいたこととか

Arduinoはやっぱり頼りになる

今までの積み重ねの層の厚さはさすが!
いろいろな方が試されているのでWebで検索すれば何らかのヒントが見つかることが多い

困ったときはArduinoである

PSoC 4 Pioneer KitのRGB LEDはデバッグに便利

3bitあるのでデジタル出力で8つの状態が表現できる

TopDesignでcy_pinをDrag&DropしてConfigureで多少設定してやればすぐ使えるし
LED3個ではなくRGB LEDなので考えなくても直感的に(赤・青・緑・黄・紫などで)把握できる

今回のテストプロジェクトはGitHubで公開しています
https://github.com/ryood/PSoC-I2C-LCD-Test

2015年1月27日火曜日

I2Cの5V↔3.3Vレベルシフト 妥協するのもあり?(弱気)

前回勢いで5V↔3.3Vのレベルシフトはしなくてもいいみたいなことを書いてしまいましたが
あまりにも適当すぎたので取り下げます(^q^;

PSoC 4 Pioneer KitとPrototyping Kitの間で
前回のI2C通信のExample(http://dad8893.blogspot.jp/2015/01/psoc-4-pioneer-kitprototyping-kiti2c.html)を3.3V、5Vの条件を変えて実験してみた


調べてみたらPullUp用のR値が高すぎると波形がなまるみたいなので10kΩから5.6kΩにさげた

上限の計算の仕方がわからないのでとりあえず(^q^;

1. Proto Slave 5V | Pioneer Master 5V | Pull Up 5V

テスターで測定するとPullUp用の電圧は4.75V~4.85V(±0.1V)程度で変動


オシロの波形ではH/Lは4.8V程度

2. Proto Slave 5V | Pioneer Master 5V | Pull Up 3.3V

PullUp用の電圧は3.47V~3.48V(±0.01V)程度で変動


H/Lは3.6V程度

3. Proto Slave 5V | Pioneer Master 3.3V | Pull Up 5V

PullUp用の電圧は4.78V~4.82(±0.04V)程度で変動


H/Lは4.0V程度

4. Proto Slave 5V | Pioneer Master 3.3V | Pull Up 3.3V

PullUp用の電圧は3.40V~3.41V(±0.01V)程度で変動


H/Lは3.4V 程度

LED点灯の動作はどれも正常に動作した

この前のPSoC 4 Pioneer KitとPrototyping KitでI2C通信でPrototyping KitのLEDの点灯の仕方が怪しかったが

DataSheetを調べてみるとLEDの接続の仕方が

Pioneer KitはSink


Prototiping KitはSource


なので点滅の仕方が逆だったみたいだから一応これでOKとしておく(^q^;

結論

PSoC 4 Pioneer KitとPSoC 4 Prototyping KitのI2C通信ではPull-upは3.3Vでも5VでもOK

妥協できるデバイスもある(^q^;

2015年1月24日土曜日

I2Cの5V↔3.3Vレベルシフト 妥協するのが手っ取り早い?

<追記:2015.01.27 この投稿は一切信用しないでください(^q^;>

I2Cのレベルシフト(http://dad8893.blogspot.jp/2014/09/i2c5v33v.html)についていろいろ暗中模索したがオシロを使って多少見えてきた

Arduino Unoで使われているATMega328PのDataSheet
(Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet.pdf)を見るとI2CのHigh値の入力下限は0.7 Vccとなっている


もし5V駆動していれば5V×0.7なので3.5V以下は読みこぼしても知りませんよということだろう

PSoC 4 Pioneer Kitに載っているCY8C4245AXI-483の
DataSheet(PSoC4_PSoC_4200_Family_Datasheet_001-87197_0D_V.pdf)を見ても
GPIOの下限は0.7 × VDDDとなっている
PSoC 4はSCB(Sirial Communication Block)というブロックがあってGPIOのうち限られたPINだけSCBの入出力に割り当てることができるようだ

DataSheetの10ページあたりから詳細が載っているが
SCBで使えるPINのうちでもI2Cに使えるPINはさらに限られる

が、結局I2CのDC特性はGPIOに従うということになる

と思う(^q^;

なのでどちらにしても5V駆動していたらI2Cの入出力は3.5V以下だとHighだと認めなくても知りませんよということだろう

でも、実際に動かしてみると(ある程度)いい加減なPull-Upでも意外と通信できるようだ

PSoC 4 Pioneer Kit と PSoC 4 Prototyping Kitで条件を変えてテストしてみた

Prototyping KitはV-Busの5Vの駆動しかできないが
Pioneer Kitはジャンパの設定でMPUの駆動電圧が3.3Vと5Vに切り替えられる

Pioneer Kit 3.3V - Prototyping Kit 5V - Pullup 3.3V



Pioneer Kit 3.3V - Prototyping Kit 5V - Pullup 5V



Pioneer Kit 5V - Prototyping Kit 5V - Pullup 3.3V


3.3VでPullUpしていてもなぜだか3.6V付近までHigh値があがっている
5VでPullUpしてもなぜだか4V近辺www

PullUp用に使っている3.3Vの端子はテスターで計ったら3.39Vだったが

3.6Vもあれば5V駆動していても5V×0.7=3.5Vを上回る

というわけでデバイスの5V駆動と3.3V駆動はあまり気にせず3.3VでPullUpしておけば
PSoC 4の場合は問題ないと思います

AVRの場合も余力があれば調べたいと思う

もちろんお金もらって仕事でやる場合とか車や産業用みたいな人体に悪影響が出る場合は
ちゃんと考えないとダメですが

ここ10年ぐらいはお金もらっててもベータ版というので逃げてた企業も多いみたいなので(^q^;;;

PSoC 4 Prototyping Kitの使い方

自分でまた使いそうなのでまとめておきます

Pioneer Kit用のProjectをPrototyping Kitで使う方法

1. Component CatalogのSystemの中にあるBootloadableコンポーネントをTopDesignにDrag&Drop

2. BootloadbleのConfigureのDependenciesでBootloderのHex FileとELF Fileを指定

<PSoC Creator Install Directory>\CY8CKIT-049-42xx\1.0\Firmware\SCB_Bootloader\Dependencies

UART_Bootloader.hex
UART_Bootloader.elf

3. Workspace ExplorerのProject名を右クリックして出てくるBuild SettingsのCode GenerationのApplication TypeをBootlodableに変更

4. Build

5. Prototyping Kitのボタンを押しながらUSB接続
 →青色LEDの点滅を確認(約0.5秒サイクル)

6. PSoC CreatorのToolsメニューからBootloder Hostを起動

7. Fileを以下に指定

<project>\<Project>.cydsn\CorexM0\Arm_GCC_***\Debug\<project>.cyacd

8. Program

PSoC 4 Pioneer KitとPrototyping KitでI2C通信

PSoC 4 Pioneer Kit(CY8CKIT-042)とPSoC 4 Prototyping Kit(CY8CKIT-049-42xx)で
I2C通信をさせてみた

PSoC CreatorのExample ProjectにSCB_I2cCommMasterとSCB_I2cCommSlave
というプロジェクトがあって、Pioneer Kit同士でI2C通信をさせるExampleだ

Pioneer Kit単体ではMasterもSlaveもどちらのプロジェクトもそのまま通った

SCB_I2cCommMaster

Exampleのドキュメントを読むとPSoC Creatorに付属の「Bridge Control」というツールを立ち上げて
Pioneer KitとConnectすると内部でPull-upできるみたいだが(間違ってるかもしれません)
ややこしそうなのでブレッドボード上で10kΩのRでPull-upした


オシロで波形を見てみると

上がSCL、下がSDAです
0 0 0 1 : 0 0 0 0 : 1

SlaveのいないMasterなので、プログラムで指定されたSlaveのAdress(0b0001000)+Writeモードの0を流してNACK(1)なので終了

SCB_I2cCommSlave

こちらはSlaveなのでMasterがいないと何もしない

が、PSoC Creatorに付属のBridge Controlを使うとPioneer Kitに載っているPSoC 5 LPを使って
Masterの動きをさせてPSoC 4と通信することができる

たぶんそういうことだと思う(^q^;

PC上のBridge Controlでコマンドを流してやるとPioneer KitのI2C用に指定した端子(SCL:P3_0、SDA:P3_1)でI2Cの信号波形が見れた

この時外部でPull-upはしていない


Prototyping Kitでやってみる

Pioneer Kit単体ではまあまあちゃんと動いてそうなので
Prototyping Kit: Master
Pioneer Kit: Slave
にして通信させてみた



波形を見ると9bit目がNACK(H)になる時があるがExample Projectのドキュメントを見ると
通信の終わりにMasterがNACKを返す仕様みたいなのでこれで正常だと思う

たぶん(^q^;


Slaveの方のRGB LEDの点滅はちゃんとしているが
Masterの方は正常動作だとPrototyping Kit基板上の青色LEDではなくて
外付けした緑のLEDが点灯しないといけないはずなので
攻守交替して
Prototyping Kit: Slave
Pioneer Kit: Master
でもやってみた


Pioneer KitがSlaveの時はBridge Controlが使えたが
Prototyping KitがSlaveの時は使えない

ProtocolでUART以外は選択できないようになった


Prototyping Kitに載っているCY7C65211というUSBコントローラーはUARTしかだめみたいだ

こっちはPioneer Kitの方で緑のLEDが点滅
Prototyping Kitの方は外付けのLEDも含めて順繰りに点灯する

仕様通り(^q^/

2015年1月21日水曜日

PT2399の音出しとまとめ的な

再びインパルス波(もどき)を入力してオシロでチェック


オーディオ・インターフェイスに突っ込む前に電圧をチェックできるので何かと安心だ

テスターだと交流モードでもまともな電圧は計れないらしいので勘でチェックするしかない

このキットだと電源電圧は7805で5Vに安定化されているが
Peak-Peak値が-3.6Vから+4.8Vで8.4V程度出ている

コンデンサーと発振回路でいわゆるチャージポンプ的な働きをしているんだろう(たぶん)

オシロがないとこういうのはわからないなあ

ぴゅんぴゅん1号とつないで音出しをした


音は動画にしてYoutubeにあげました


http://youtu.be/ihWaBeRuI2g

DRYからWETに徐々にエコーをかけた

思ってたより強烈にかかる(^q^/

しかも音が暗くてDubbyな感じだ

(弾けない)ギターは売ってしまってないけどまた欲しくなってきた(^q^;
中古で買っていじり倒そうかな

PT2399はちゃんと動かせればなかなか面白いICだと思います

デジットのキットについて

http://eleshop.jp/shop/g/g858415/

データシートに載ってる回路図を見ると本体の部分はPT2399のデータシート
http://sound.westhost.com/pt2399.pdf)のApplication Noteの回路とほとんど同じようだ

CRの値が多少違うのでチューニングされているのかもしれない

ギターの入出力用にTL072の反転増幅回路が入っているので
LINEレベル(ぴゅんぴゅんマシンの出力みたいな)だとアッテネーターを入れないとだめかもしれない

あとは9V電池から5Vを作る78L05の安定化電源が入っている

やりかけのブレッドボードの実験(^q^;

音が出せたのでEagleで自分で引いた回路図を再チェックしたら
動かない原因がなんとなくわかった

ぐちゃぐちゃしているアナログ回路ではなくて
PT2399のデジタル部の電源の接続が間違ってた


3PINはアナログGNDだが、これだと浮いてしまっている(^q^;;;

転記ミスだ

あと、Delayの深さ用のPOTに入れる前のRが抜けていた
(こっちは大して問題ないかもしれない)

キットで音が出たことだし、なんかこっちはもういいかな

2015年1月19日月曜日

PT2399エコー キットの作成

正月にでんでんタウンのデジットで買ってきたPT2399のキットを組んだ


今まで組んだキットの中で一番部品数が多くて結構しんどかった

回路図を転載するのもどうかと思うので
共立さんのサイトでデータシートが公開されているので
興味のある方はこちらからどうぞ

http://eleshop.jp/shop/g/g858415/

Arduinoでインパルス波(もどき)を出力して(http://dad8893.blogspot.jp/2014/12/arduino.html
オシロスコープで波形を見た

このキットはギターのエフェクターということで
Arduinoの出力(5V(p-p))をRで100mV(p-p)程度に分圧して入力した

入力波形


出力波形


間違えてオシロの画面画像ではなくてデータを出力してしまったので
パラメーター等がないですが

入力:100mV/div、出力:1V/divです

出力は矩形波を微分したっぽい波形が表れている

デジタルなのにアナログっぽい音といわれるゆえんはこの辺にあるのかな?

音出しもしたかったが今日は疲れたのでまたこんど(^q^/

2015年1月16日金曜日

I2CをやるためにPSoC 4 Prototyping Kitを使ってみた

PSoC 4 Prototyping Kitとは
正月にでんでんタウンで仕入れてきた800円のPSoC 4のボードだ


オシロも手に入れたことだしI2CのLCDを「動けばいい」という感じで使うのではなくて
I2Cの規格自体を多少は理解して使うことにした

PSoC CreatorのExampleを探すとPSoC 4 Pioneer Kitを2枚使って
I2Cで通信させるサンプルがあった

PSoC 4 Creator KitとPSoC 4 Protyping Kitを持っているので
これで通信さればいいかなあという目論見でPSoC 4 Prototyping Kitも使ってみることにした

PSoC 4 Prototyping KitのExample

PSoC Creatorやその他もろもろのツールはすでにインストールしてあるので
付属のフライヤーにある通りwww.cypress.com/CY8CKIT-049-42xxから

CY8CKIT-049-42xx Kit Only (Kit Design Files, Documentation, Examples) 

というのを見つけてインストールしてみたが、フルキットをInstallするように指示された

CY8CKIT-049-42xx Kit Setup (Kit Design Files, Creator, Programmer, Documentation, Examples)

をインストールすると、どうもCypress USB-Serial Driverというのが必要らしくて
フルキットじゃないとダメなんだろう

Pioneer KitのほうはPSoC 5 LPを書き込み(&その他もろもろ)に使っているが
Prototyping KitはCY7C65211というUSBコントローラーを使っているのでこれのドライバーだ

800円だしさすがにPSoC 5 LPは載せられないということか(^q^;

最初よくわからなかったがドキュメントを読んでExampleをやってみると
プログラムにUSBコントローラーを制御するブートローダーをくっつけた状態で
PSoC 4に書き込まないといけないようだ

デフォルトのブートローダーだと
基板上のボタンを押しながらPCのUSBコネクタに差し込むと書き込み待機状態
ボタンを押さないで差し込めば書き込んだプログラムが動くという仕組みになっている

初期状態だと

押す→基板上のLEDが早く点滅(約0.5秒サイクル)→書き込み待機状態 
押さない→基板上のLEDがゆっくり点滅(約1秒サイクル)→ユーザープログラムの実行状態
となっている

プログラムを書き込むときは、標準のPSoC Programmerではなくて
PSoC CreatorのToolメニューから起動できるBooltloder Hostを使わないといけない

もしPSoC Programmerで書き込むと2度とプログラムを書き込めなくなる。たぶん(^q^;

Mini Prog 3という書き込み器を使えばブートローダーを復活できると思うが
Digi-keyとかじゃないと売ってないし、1万円以上する(@q@;

なので最初に使うときはPrototyping Kitではなくて多少高いけどPioneer Kitをお勧めします

高いといってもArduino Unoとほとんど同じ値段だ

I2Cのプロトコル

I2Cについても多少調べた

ちょっと端折っていうと
通信の開始時にMasterデバイスがSlaveデバイスのアドレス(7bit)を指定してSDAに流す

Slaveが自分のアドレスだったら、「あ、俺だわwww」と思ってACKを同じSDAに流してマスターからの通信開始を促す

Slaveが自分のアドレスではなかったら、「おまえらにまかせたwww」と思って何もしない

Masterは返事がないとNACK(「しくじったか(^q^;」)と理解する

NACKの場合Masterは(プログラム次第だが)返事がくるまで最初からまた同じことを繰り返す

前回オシロで波形を見てみた図だと

ArduinoでI2C-LCDとの通信がうまくいった場合


上がSDA、下がSCL

9bit目のSDAがLに引っ張られている(LがACKです)

<追記:2017/02/08>
おそらくオシロのプローブの倍率設定がx1側になっていたようで、電圧値が10倍になって波形もなまって表示されています。
</追記>

PSoCでI2C-LCDとの通信が失敗している場合



9bit目のSDAがHのまま!

アドレスの7bitとACK/NACKの9bit目の間の8bit目は何かというと
HがRead(SlaveからMasterへ)
LがWrite(MasterからSlaveへ)
とMasterが指定するbitだ

このI2C通信のExampleがうまく動かせれば
3.3V⇔5Vのレベルシフトについてももう少し調べてみたい思います

2015年1月15日木曜日

ぴゅんぴゅん3号の構想

PSoCで音出しと表示の最低限のことはできそうなので
ぴゅんぴゅん3号(Arduinoのシールド版のVer.2)の外形について
部品を並べて考えてみた



画像の右側は1号、2号だ

こうやって見ると1号の方が怪しげで完成度が高そうに見える
完全ディスクリートだし(^q^;

2号はLCDのおさまりが悪すぎるが性能は高い

左から真ん中の上側のArduino Uno、PSoC 4 Pioneer Kit、NucleoはArduinoとピン互換の3枚

真ん中の下はこないだ購入したPSoC 4 Prototype Kitだ

左下が作る予定のピュンピュン3号シールドの候補

左側がaitendoさんのLCD、右側がストロベリー・リナックスさんのLCDだ
どちらのLCDもI2C接続

音の出力はRCAジャックから

ICソケットはDAC用だ

Arduinoのシールドなので、PSoC 4 PioneerキットでもNucldoでも載せられる

下真ん中のPSoC 4 Protype Kitでもファームウェアを工夫すればそのまま載せられるかもしれない

コントローラーはぴゅんぴゅん2号用に作ったものをそのまま流用するか



USBのホストとして使えればアナログJOYSTICK付のゲーム用のコントローラーも候補に入れている

今のところPSoCでI2CのLCDの表示がうまくいっていない

LCDのコマンドをPSoCのコンポーネントではなくてプログラムで直書きしようかな

DACとの通信用にSPIもやらなければいけないのか・・・

うん、まあなんとかいけそうな気がしてきました(^q^/

<追記>

RCAじゃなくてステレオミニジャックにすればそのままイヤホンつなげられるか

出力用のOPAMP一個ぐらい載せるスペースはありそうだし

出力を直だしできればピュンピュンマシン以外にも流用できるかな?

2015年1月14日水曜日

PSoC 4 Pioneer Kit: またまたI2Cではまる(^q^;

音は出せそうなのでI2Cの表示系の実験

PSoC CreatorのExampleで
I2C_LCD_Example_PSoC4というのがあったのでやってみた

Exampleに付属のI2C_LCD_Example_PSoC4.pdfのP2のTable1で


CY8CKIT-042(今使ってるPSoC 4 Pioneer Kit)のピンアサインを変えろとなっているが
オシロで出力を確認したところ

SCL: P4_0
SDA: P4_1

でいいようです
<2015.01.16追記>↑もう少し確認してみます

さすがのPSoCといえどもI2Cの出力PINは固定されているようだ

Character LCD with I2C interfaceというコンポーネントを使えば
さくっとI2C LCDの表示ができるかと思ったがなんも表示されなかった

困ったときはArduinoということで「Arduino のすすめ」さん(http://n.mtng.org/ele/arduino/i2c.html)のところのスケッチで確認したら表示はOK

I2C的な波形は出ているのでI2Cのコマンドが違っているような気がする




PSoC CreatorのI2C_LCDコンポーネントは
I2Cデバイスのアドレスを指定するところがあったり
LCDのコマンドを編集できるようになっているようだ



こんなもんオシロがなかったら追い込めんわ(^q^;;;

↓ちなみにArduinoのIC2の出力波形はこんな感じです


2015年1月13日火曜日

聞こえる周波数、聞こえない周波数

甥っ子(中1)がiPhoneのアプリで「聞こえる周波数を試す」みたいなのをやってくれた

とうぜんおっさんには上の方の周波数は聞こえない(^q^;

今試したら13,000Hzぐらいまでだった



うちの再生装置でも最低でも20kHzぐらいまでは出るので聞かせてやったら
16,000Hzぐらいで聞こえなくなったらしい

ガキのくせに難聴か(^q^;

おっさんが中一の頃はなあ19,000Hzぐらいまで聞こえてたんだぞ(妄想)

正弦波だとこんなもんだが

腹にくる低音域と透き通るような高音域の

あ、やっぱクラシックの名盤と言われてるやつを聴きなおしたくなってきました(^q^/

PSoC4 Pioneer Kit: DACモジュールでサイン波生成

PSoC4に内蔵されているIDAC8モジュールを使ってサイン波を出力してみた

まずはサンプルプログラムでモジュールの使い方を確認

PSoC Creator 3.1の[File]-[Example Project]から選択して開いた

IDAC8_PSoC4_Example

8bitの電流出力型のDACだ

このサンプルでは8bitの数値を指定して電流出力する

テスターの電流モードで出力値を確認した
(出力PINとGNDにテスタを直につないで大丈夫です)


main.cのIDAC_VALを変更すれば出力値が変更できる


出力値の精度はまずまずだ


電流出力型なので電流→電圧変換を内蔵オペアンプで行うことにした

これもサンプルプログラムで使い方を調べた

OpAmp_PSoC4_Example

2倍の非反転増幅回路のサンプルだ


テストには自作の可変電圧電源(http://dad8893.blogspot.jp/2014/12/blog-post_18.html)を使った(^q^/

IDAC8とOPAMPを使って電圧出力型のDACにしてみる

回路図(PSoC Creatorで作成)


PINから出ている点線の配線やRはPSoC4 Pioneer Kit外の回路だ

プログラムは簡単に32個のサインテーブルを作って、32μ秒ごとに出力する方法にした

32μ秒 * 32 = 1.024m秒

なので

1 / 1.024m秒 = だいたい1kHz

程度のサイン波が出力される

<main.c>
#include <project.h> 
uint8 sin32Table[] = {
    152 ,
    176 ,
    198 ,
    217 ,
    233 ,
    245 ,
    252 ,
    255 ,
    252 ,
    245 ,
    233 ,
    217 ,
    198 ,
    176 ,
    152 ,
    127 ,
    102 ,
    78 ,
    56 ,
    37 ,
    21 ,
    9 ,
    2 ,
    0 ,
    2 ,
    9 ,
    21 ,
    37 ,
    56 ,
    78 ,
    102 ,
    127
};
int main()
{
    /* Start the IDAC component */
    IDAC_1_Start();
 
    /* Start Opamp component */
    Opamp_1_Start();
 
    /* Sets Opamp power mode to High power */
    Opamp_1_SetPower(Opamp_1_HIGH_POWER);
    for(;;)
    {
        int i;
        for (i = 0; i < 32; i++) {
            IDAC_1_SetValue(sin32Table[i]);
            CyDelayUs(32);
        }
    }
}

ブレッドボードで組んでオシロスコープで波形を見てみた



周波数: 825.3Hz
Peak-Peak電圧値: 1.560V
平均電圧値: 1.746V
波形を拡大するとみごとに階段状の波形だ(^q^;


オーディオ・インターフェイス経由でPCに取り込んでWaveSpectraでも波形とスペクトルを見てみた


かなり歪んでるなあ


このまま使えばファミコンっぽいチープな音源になりそうだ

LPFは通しておいたほうがいいかな

うまくいけばぴゅんぴゅん3号として製作する予定