>>936 じゃあ、現状では扱いが面倒なので、手直ししてから公開します。
939 :
919:2006/10/15(日) 07:09:08 ID:qL4IwSDR
>>926-928 有難うございます。
ってことはあの書き方じゃ動作しないんですね・・・
もうちょっと勉強してみます。
>>939 ソフトがどうのっていう話ではないんですよ。 思考に問題があるんです。
例えば
初めに10mS でパルスを出す設定をしたら
そのカウントが済むまでにデューティ変えたらそれまでカウントしていたカウンタはどうなるの?
また初めから10msをカウントし直すの?
それとも書き換えを無視してそのまま継続してくれるの?
だからCPUに正しくカウントさせるのにはそのカウントが0まで(少なくとも10ms+1クロック)
はデューティを書き換えたら「いかんやろ」ってこと。
void main(){
int adc=4999;
while(1){
adc--;
pwm(adc);
//ここをソフトタイマーにするか割り込みにするかフラグチェックかはお好きにってこと
delay_1ms(1000); //pwm カウントup待ち
}
}
これならば1秒毎にデューティが変わるでしょ。
∴pwm出力とデューティ変更は処置上は別次元なのよ。
こうゆうのってデバッカでステップ実行すると動くいてしまうので
初物のチップのときにハマる場合があるかもね。
941 :
919:2006/10/15(日) 21:33:16 ID:qL4IwSDR
そういうことだったんですか!!!
判りやすい解説有難うございます。
ですがタイマーの使い方が判らずdelay_msという関数スラ作れません・・・
難しいですね。。。
そういうことなら、とりあえずはPICあたりからやってみては?
あっちなら懇切丁寧な(たまには間違いもあるだろうけど)書籍
も何もかも山ほどあって便利だろう
PWM のデューティー比を変えて電子ホタルを作るデモ
main.c
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler RewritePWM16PWidth
int i = 0;
#define N 40
int a[N]={4999,5765,6513,7223,7879,8463,8963,9364,9659,9838,
9899,9838,9659,9364,8963,8463,7879,7223,6513,5765,
4999,4232,3484,2774,2118,1534,1034,633,338,159,
99,159,338,633,1034,1534,2118,2774,3484,4232};
void RewritePWM16PWidth(void) {
PWM16_1_WritePulseWidth(a[i]);
if (++i >= N) i = 0;
}
void main()
{
// Insert your main routine code here.
M8C_EnableGInt;
PWM16_1_DisableInt();
PWM16_1_WritePulseWidth(10);
PWM16_1_Start();
Timer16_1_EnableInt();
Timer16_1_Start();
}
プログラムはなんとも簡単
>>943 つづき
Device Editor の設定がむしろ最初はわからないか
モジュールは PWM16_1 と Timer16_1 の2つ
VC1=SysClk/8,VC2=VC1/3としてVC2を1MHzにする
VC3Source を VC2 にし VC3Deviderを20にして VC3 を 50KHz にする
PWM16_1のClockをVC2 にし 10000カウントで0.01秒になるようにセット
Periodは9999にセット Compare Out を LED のつながった 端子に
出す MiniProg1 でP2[0]にでも出すなら RO0[0]-GOE0-P2[0]とか
Timer16_1のClockをVC3にし 5000カウントで0.1秒になるようにセット
こっちのPeriodは4999にして Interrupt Type を Terminal Count に
あとは Timer16_1の割り込みルーチンで PWM16_1_WritePulseWidthを
実行してデューティー比を変える
PMWモジュールは 何も考えなくても デューティー比の書き換えを
各サイクル(Period回だけカウントする)ごとに実施する
PWM16_1_int.asmあたりの書き換えも必要かと
>>945 おおそうでした でも書き換えるのは Timer16_1_int.asm の
ほうです.lcallでなくてもljmp でいいです.
_Timer16_1_ISR:
;@PSoC_UserCode_BODY@ (Do not change this line.)
;---------------------------------------------------
; Insert your custom code below this banner
;---------------------------------------------------
; NOTE: interrupt service routines must preserve
; the values of the A and X CPU registers.
ljmp _RewritePWM16PWidth
;---------------------------------------------------
; Insert your custom code above this banner
;---------------------------------------------------
;@PSoC_UserCode_END@ (Do not change this line.)
reti
>>943 main関数の修正 ごみが残っていました
void main()
{
// Insert your main routine code here.
M8C_EnableGInt;
PWM16_1_DisableInt();
PWM16_1_Start();
Timer16_1_EnableInt();
Timer16_1_Start();
}
配列aは99から4899までを sin で振ったもの
いろいろ変えて遊びましょう
>>941 でもすでにあなたはソフトタイマーの記述をしています。
考え方を変えれば以下はタイマーでしょ。(概念だけね)
実用的ではないけど初物チップの時はここからが始まりなのよ。
どっかのLED光らせて実測しながら決めれば
取りあえずオシロなくてもいけるやろ。
void delay_10us(void)
{
#define E_1usCnt 20 //ここで調整
int i:
for(i=0; i<E_10usCnt; i--){
i=i; //dummy
}
}
void delay_1ms(int iVal)
{
int i:
for(i=0; i<iVal; i--){
delay_10us(100);
}
}
誤 #define E_1usCnt 20
正 #define E_10usCnt 20
ライセンスキーがまだ来ない。
この土日にCで遊びたかったのに・・・orz
催促すれば、運がよければ半日も経たないでくるよ。
日本サイプレスに日本語でメール出してもOKだったよ。
950です。
>>951 先週メールで催促してみたんですが・・・。
>>952 日本サイプレスですか。
調べてメールしてみます。
ありがとうございました。
954 :
774ワット発電中さん:2006/10/24(火) 21:23:44 ID:YQ0ti9jy
PSoCのアナログ部のノイズに関する資料無いですか?
普通のオペアンプのデータシートにあるようなノイズ nV/√Hzの様な感じであれば助かります。
定番の高精度オペアンプとかと比べてどうなんでしょう?
( ´_ゝ`).。○ なんでデータシートを読もうとしないんだろう・・・・
956 :
954:2006/10/25(水) 00:13:15 ID:X/T1I5SL
アヒャ PSoC Noiseとかで適当にググってあきらめてますた。
普通に載ってたんですね。
にしても100nV/rtHzってやっぱり素直に普通のオペアンプ使います。
お騒がせしますた。
アナデジ混在だし、普通のオペアンプに匹敵するほどの性能が出たら
オペアンプなエンジニア連中の立場ってもんが無いしで、
ヌルく使うもんだってことで。
むしろデジタルブロックのみのPSoCが欲しい
それなんてFPGA?
>>958 アナログブロックつかわなきゃいいじゃんwww
それとも24個(29x)では全然不足?
LAN用の素子ENC28J60とつなげた漢はおりませぬか?
PICやAVRとの例はインターネッツで出てくるのですが、
PSoCが見つからんのじゃ。
アナログ入出力に保護抵抗入れています?
とりあえず100Ω入れてみましたが、
psoc_datasheetのp266見てもどうなっているかよくわからんです。
>>960 24794(USBが使えるやつ)はデジタルブロック4つしかないから
足りない。あとROMも16Kbyteしか無いのに初期設定で8KByteぐらい使うから
これも足りない。USB-UARTも使いたいのに…
>>963 そこで29xとI2CorSPI通信でつよ!
ま いまのままじゃ24中途半端だろ っていう主張はわかるけど
ゆるさが身上のPSoCだからなあ これでけっこうさじ加減が微妙にうまい
このぐらいの素子数でうまくやるのが腕前よ といわんばかり ああしゃくだ
むしろ規模はもっと小さくてもいいから、USBでDIPなの出てくれないかな・・・
DIP自体があんまり使われないしね
DIP厨ウザー
DIPでUSBなPSoC俺も欲しい。使い易いし。
お前らバカだな
DIPは宣伝用だろ。
サイプレスからCコンパイラの登録のなんだかというメールが二通来た。
なんだべ。
Cコンパイラのライセンスキーゲットのサイトが
サイプレスマイクロシステムズのサイトからサイプレスのサイトに
移ったってことでしょ。
コンパイラ自動的にサイトの登録ユーザになるけど、まだキーをもらって
ないならユーザ登録してログインしてコンパイラのライセンス登録してねと。
972 :
774ワット発電中さん:2006/11/04(土) 11:45:14 ID:cZOvIOS7
PSoC Designer 4.3 の SP1 を最新のに差し替えてくれってメールがきたよ
CSR モジュールが動かなくなるって ぶっそうやなあ
---
Dear PSoC Designer User,
Our records show that you have downloaded PSoCDesigner 4.3 SP1.
We have re-released PSoCDesigner SP1 since you have downloaded due to a critical
bug fix.
The bug is this:
Many projects using the CapSense CSR user module will not function (including the
CSR example projects). Specifically, the following legacy variables were pointing
to an incorrect location in RAM: CSR_iaSwBaseline[], CSR_iaSwResult[], and
CSR_iaSwDiff[]. Projects that don't use the legacy variables are not affected.
If your project is using this user module, or if you plan to use this user module
in the future, we recommend that you re-download the PD4.3 SP1 from the website
and reinstall the service pack.
The website to access the service pack is
http://www.cypress.com/design/SD1071. Thanks,
PSoC Designer Release Team
Cypress Semiconductor
---
zip をダウンロードして解凍してできるexeを2回実行してやれば
差し替え完了 1回目で削除 2回目で再インストール
973 :
774ワット発電中さん:2006/11/04(土) 13:43:42 ID:DManogzc
$10きっとかってコンパイラのライセンスももらったけど
メール着てない…
>>973 このメール
>Our records show that you have downloaded PSoCDesigner 4.3 SP1.
とあるように すでに SP1 をダウンロードした人に送られているようです
10ドルキットについてくるCコンパイラライセンスは4.3でも
大丈夫のはずなので 上げちゃいましょう やっぱ新モジュール魅力だし
使ったこと無いんで教えて欲しいんですけど、カットオフ周波数1kHz位のLPFとHPFが欲しいんです。
センサ信号の濾波に使います。アナログ波を入れて、フィルタ通過後のアナログ信号を2波出します。
できれば周波数とスカートをシリアルで変更できるとうれしい。
PSoCでできますか?
LPFとBPFはあるけど、HPFは無いなぁ
SCだから、周波数はクロック変えれば良い
スカートなんかは厄介かな。何パターンか予め計算しておいて、
すり替える形か。
切り替え時間が問題にならないなら、ダイナミック・リコンフィグレーション
という手もあり?
LPFから出た信号を反転してもとの信号に混ぜたらHPFになるんじゃないの
目的周波数がわかっていたら、BPFでよろしいかと。
一入力でBPFを2個並列して通すもよし。
ブロードなBPFを設計してもよし。
おせっかいですが、フィルタ設計は添付のエクセルファイルで、スカートを見ながら決めますので、どうにかなります。
29466ならコンパレータ出力ができますし、ちょうどよいかも。
>>977 その発想は無かったわ。
でも、LPF通ったら位相が遅れるんじゃないの。
ということは
LPFから出た信号を反転してHPFから出た信号に混ぜたらにもとの信号なる?
新手法セミナー
ワクテカ
>>980 それって、Band Loss Filterにならんかい?
HPF = 1 - LPF
ならば、LPFを移項して
HPF + LPF = 1
反転しないで足す
(物凄い省略ごめん)
ちゅうか、構成的にDCサーボだな。HPFの一種ではある。
>今年、3回目になりましたPSoCセミナーのご案内です。
メールが来たー。行こうかな。