あさってたのですが,同じようなことやっている諸兄を見つけました。CNC等のコントロールではなく,オーディオのボリュームの調整のようです。知りましたが,レオスタッド・モードとか言うみたいです。同時に複数のカプラーをONにして,コントロールしてるような感じですかね。それと,機械的なリレーと同等以上のフォットカプラーの紹介もありました。500円前後するみたいですね。DC5.1V電源〜VR〜PIC(PWAM発生)〜ローパス〜PIC(0622/5220駆動プログラム)〜AD5220〜テスターまだ、SEC基板やML4には触れていません。ポテンションメーターは、AD5220が今日来たので、初めて使いました。電圧測定箇所は、AD5220のワイパー〜Rl間です。疑似可変抵抗TRさん,猛牛ロックさん,こんばんは。TRさんの実験環境わかりました。ありがとうございます。PWMの発生に関する記載があったので,ちょっとあれ,と思った次第です。ご自分でプログラムされた,PWM信号を入力にお使いなんですね。AD52204安定しませんか。CLKとU/D単身をプルアップするかしないかでも,私の場合挙動が変化しました。わからにのですが,CS端子は固定してありますが,この変ももしかして関係あるのかもしれません。外部からのノイズ受けやすいのでしょうかね。この辺は,自作した方が,ノイズ等には強いかもですね。(AD5220_val)は,結局同じ意味だと思います。なるまで,マイナスされます。Kの部分が0以外だとループされて,0になると,ループを抜けるので同じ意味かと思います。前回はタクトスイッチ使って,AD5220のコントロールしましたが,秋月の安いエンコーダーで,やってみようかななんて,いろいろ画策してます。それと,自作のデジタルポテンショメーター(デジポット)に必要な部材,まとめています。疑似可変抵抗maboさん、こんばんは。内部クロックは8MHzとする__delay_ms(500);__delay_ms(500);それと自分の5220ですが、電圧を上げていく途中、テスターを見ていると、一瞬ぐっと山が出ます。後、残留電圧ですが、蛍光灯に反応しています。疑似可変抵抗TRさん,猛牛ロックさん,こんばんは。AD5220については,電圧は測って内ので不明ですが,PWMコントローラのボリュームと置き換えて,モーターのコントロールで,判断してますが,安定しないときは,モーターが回らなかったり,回ったりで,きちんとコントロールができるときは,置き換え前のボリュームでのコントロールと同じ程度にコントロールできました。>最初に、ワイパから、電源電圧の半分が出力されませんか?多分,これ,正常かもしれません。マニュアルに,最初はワイパーが,64のところにある,との記述があったように思います。AD5220でおやりでしょうか。PWM発生とローパスを外して,ボリューム(片側5V)をPIC接続してAD変換してみて,結果を見てはどうでしょうか。それと,お使いの部プログラムは,No1671のですか。なかにないようですが・・・・・。====追記です====>GNDにしてあります。これ以上の方法はどういった方法なのでしょうか?意味あるのかは分かりませんが,CS端子もプルアップでPICにつないで,AD5220の初期化の前に,RB2=0;(CSをつないであるPIC端子)__delay_ms(500);AD5220_init();とかやったらどうなのかなと思いました。疑似可変抵抗maboさん、おはようございます。いつもレスありがとうございます。>それと,お使いの部プログラムは,No1671のですか。なかにないようですが・・・・・。今は、No1671は使っていません。mainの中に、初期化関数を配置してもダメでした。理由は不明、一応、猛牛ロックさんとのやり取りで作った内容でした。自分でプログラムは作り直しました。一応動作するようになりました。No1671との差は、自分のは、初期化関数を追加したのは当たり前ですが、5220の動作を重くしたというのか、くどいのかも知れません。きにいらないのが、不安定なところがあるのです。動作不安定な状況写真を付けました。写真右は、5220の内部電圧が下がった状態でして、この辺の内部電圧から5220をOnにすれば初期化が成功します。5220をOffにしてからかなり待たなければなりません。待ち時間を短縮する方法が分かればいいのですが。待ち時間短縮に直接寄与するかどうかわかりませんが、5220の電源直近にオイルコンを付けました。気持ち変わったかな〜程度です。その他にもちょっと癖があります。>PWM発生とローパスを外して,ボリューム(片側5V)をPIC接続してAD変換してみて,結果を見てはどうでしょうか。>意味あるのかは分かりませんが,CS端子もプルアップでPICにつないで,AD5220の初期化の前に,RB2=0;(CSをつないであるPIC端子)__delay_ms(500);AD5220_init();とかやったらどうなのかなと思いました。それも、前記プログラムとの合わせ技で5220のCS端子をGNDに繋いでもいます。5220はON/Offの繰り返しには対応できません。実際のフライス作業に使うわけですが、5220はSSやSEC基板と同じ電源にするので、こういったOn/Offの連続操作はないと思うので、もうやめて、次の段階に進もうかと思いっています。5220故障かな、プログラム大丈夫かも。疑似可変抵抗maboさん、こんにちは。先程、ML4の可変抵抗器の使われ方を調べました。VRは電圧制御の使われ方でした。電源電圧5Vを�@と�A間の抵抗によって電圧を分圧し制御していると思います。後は、5220を使って、バラックでのテストです。一応、ML4〜�Bの電流も調べましたが、MAXで2.7mAでした。赤だけ外して、電圧も確認しました。127Cからすると5kのBカーブです。�Bと�@を本体から外し、�Aをそのままにして、抵抗値を計測したら5.3kでした。焦っても良い事はないので、今日は、これで作業は中止して、5220を弄っています。配線図なんかもチェックします。実際とはずれている感じがします。実感と同じ時間にするには、どういった計算をするのでしょうか?お願いします。疑似可変抵抗TRさん,猛牛ロックさん,こんばんは。>プログラムでよく、__delay_ms(500);このように書きますが、>実際とはずれている感じがします。>実感と同じ時間にするには、どういった計算をするのでしょうか?>お願いします。この部分は,マクロで,次のようになってるようです。)を作ってるようです。分からないのですが,もっと,正確にするには,外部のオシレーター使ったり,割り込み使ったりするんでしょうかね。動かなかったということで,プログラム見てみました。共通の部分でもあるんですよね。して,思い違いが入ってるかもしれない気がします。//U/Ddown関数呼び出し}この部分ですが,32個分の配列を用意して,adc[0]〜adc[31]のそれぞれにADCで変換した値を読み込むことになってます。なってしまうのではと思います。それで,正しく32回分の平均にならないような気がします。次のようにすれば,32回分のデータの平均になるのかなと思います。{0};を入れると,毎回,32回ごとに,まっさらな状態で,平均を取ることになると思います。これを入れないと,一番古いデータの一つと,一番新しいデーターの一つを入れ替えて,常に,平均を出すことになると思います。どちらがいいのか分かりませんが,個人的には,一番古いデーターと,一番新しいデーターを入れ替えて計算するのが,いいのかな,と思います。確認してませんが,確かめてみたいと思います。疑似可変抵抗maboさん、おはようございます。自分聞き方が悪かったかもしれないので、聞き直します。5220駆動プログラムを通じて、delay関数で気付きがありました。例では、maboさんの、初期化関数内に記載している__delay_ms(500);__delay_ms(500);この2行です。ms500は、私の感覚では、0.5秒ですよね。一呼吸相当な感じ(笑いで、delay500が2行なので、1秒経過してから、初期化となる。初期化の様子をテスターで観察すると、様子が分かりました。見ていると、1秒よりずいぶん経過した後に初期化している感じでした。そこで、自分の設定方法が悪いのではと、疑問を持ちました。そこで、maboさんにお聞きしました。以下の通り考えていました。内部クロックを使用する。後は、delay関数を使えば、()内に指定する数値(時間)を止めることができると思っていました。←0.5秒待つ配列関数の方は、自分も再考してみます。なんか、テスターの動きが悪い感じです。動かなかったということで,プログラム見てみました。自分の5220故障しているかも。********************追記maboさんこんにちは。adconv();これの内、&31は、10進数で11111&があるから0b11111と読み替えられるようですね?ループの1巡目でいうとadc[0]&0b11111でマスク処理されて、adc[1]となるのかな。//クロック周波数を16MHzに設定が違います。これではPICが動きません。※間違いの入っている元レスも修正しておいた方が良いです。コピペして使う可能性もありますから。_XTAL_FREQと実周波数部分が書かれていません。基本的にMABOさんと同じ周波数(プログラム前半部)にした方が良いと思います。疑似可変抵抗maboさん、続けて失礼します。問題のところですが以下のようにしました。下の方にある__delay_ms(1);は、サンプリング間隔です。猛牛ロックさんに言われていました。PWM基本周波数と関係するそうです。ワイパ〜Rl間の電圧を見ていると面白いです。ONで約250mv、VR目一杯開けて、その後、目一杯閉めると130mvになります。初期化より、ダウン関数の方が、ワイパ一が下がっているように感じます。動作してくると面白くなってきます。AD5220を2個追加しました。現在PIC(PWM発生)の信号をもとに5220を駆動するテスト段階に入りました。結果、コンデンサは20μF、75Ωが良い感じです。それと、5220駆動プログラムの内、サンプリング間隔は、PWH基本周波数244Hzでやっていますが、__delay_us(244)が良い感じです。MABOさん添付図はAD5220の日本語データシートP8に記載されているものです。・パワーオン時に40H(=64)からカウントを開始する。・クロックを入れると1LSB(最小単位)ずつインクリメントする。・UDピンがHIGHならフルスケール値3FH(63)まで動き、LOWなら00H(ゼロ・スケール)まで動き、どちらもそれ以上のクロックは無視される。私は、「3FH」が7FH(127)の誤植?なのだろうと思っていたのですけど、そうではなく、考え方が間違っているのかもしれません。いや、その点は誤植なのかもしれませんけど、最大値というか、ポジションはここで、7FHだと思っていたのですけど、本当は80H(128)まであって、129ポジションなのかもしれません。※X9Cの方は抵抗が99あって、100ポジションとなっているので間違いはないと思います。00H→3FH→00H」つまり、0→63→0なんですよね。このあたりも???です。W)」となっています。計算式に関してはデータシート上では128抵抗あるように書いてあるようです。ぶっちゃけ、動作しないのなら、あまりデータシート(の数値)も当てにならないのかもしれません。実際に試してみるしかない部分もありそうです。ストレスにより破壊する危険がありますので、不可です。繋ぐ順番そして、切る順番も考慮する必要がありますね。どの程度シビアな要件なのかは判りませんけど。疑似可変抵抗TRさん,猛牛ロックさん,こんばんは。=====猛牛ロックさん=======猛牛ロックさん,詳しい考察ありがとうございました。この辺,私,だめなんですよね。シーケンスや,接続機器との接続のシーケンス,等まで,細かく検討するようなんですね。内部クロックを使用する。ここで、マイコンの動作速度をクロックを16万Hzと設定>後は、delay関数を使えば、()内に指定する数値(時間)を止めることができると思っていました猛牛ロックさんがおっしゃってたように,OSCCONの設定もあるようですね。これ,が正しく設定されてないと,もしかして,早く感じたり,遅く感じたりするかもですね。32以上にならないための処理だと思います。されて,その後と,31との&が取られると理解しました。・31→3132→033→1のようになると思います。実施されると理解しました。なると理解してました。ここ,ちょっと,いつも不安になるところです。adconv();みたいに,明示的に書いてます。しないと理解できないので,頭弱いのかなと思ってます。(笑)私の理解,間違っているかもしれません。それから,プログラムですが,64回のサンプリングですね。adc[i];}みたいに,一つにすると,多分,半分の時間でできます。}を省略しないで書く方が,私は,好みです。省略して書くと,後で確かめるとき,範囲が曖昧になって,理解できななくなってしまします。(笑)>動作してくると面白くなってきます。>AD5220を2個追加しました。安定して,動作するようになったんでしょうか。明るくなってきましたかね。疑似可変抵抗maboさんおはようございます。5220の電源のON/OFFの順番は、同感です。自分も過去に、ON/OFFの順番あるな〜と感じて、書き込んであります。いった注意点は、自分の過去の経験で、分かったことで、デバイスの説明書にはないと思いました。>猛牛ロックさんがおっしゃってたように,OSCCONの設定もあるようですね。下記の通りですね、最初何を言っているのか分かりませんでした。今、maboさんに言われて、分かりました、でも実際は、何度も、データシートを見て、確認していたので、いつの間にか、直っていました。いった地味な積み重ねで、今は動作しています。素人には、丁寧に説明してくれないと何を言っているのかよく分かりません!!maboさん、いつも丁寧な説明に感謝します。adconv();みたいに,明示的に書いてます。しないと理解できないので,頭弱いのかなと思ってます。adconv();駄目だと分かりました。それも、&が利いてマスク処理され、&0b11と同じになるとか。作られる配列の順番は、adc[1],adc[2]〜adc[0]となる、でも、配列に順番が、最後に0が来て、adc[0]に一番最後にサンプリングされた値が入るので、サンプリングにより平均値を出すという考えと合っているのか??と思いますが、どうかなって感じです。一定しているので良いような気もします。maboさんは、どう思いますか??テスターの数値を見ていると、スムースじゃないんですよ。プログラム処理では無理なのかな。いう流れでしょ!?テスターの数値が滑らかに動かないのは、こういった計算処理の所為かなって思います。maboさんもやってみてください。それと、自分の場合、今のままじゃ、コンパイルできませんでした。自分が変えた内容は、下記のとおりです。target1とし、targetと分けることによって、安定しました。adc[i];}有難うございます。この方が見やすいですね、今、このようにしました。ついでに、for文について解釈を教えて下さい。↓*******************初期化式の値が変化式によって変化した後、継続条件式が真ならば処理を繰り返し実行。継続条件式が偽ならば、処理は実行されない。******************for文に来た時、継続条件式をすべて実施した後、やっと、for文を抜けることができるのでしょうか????長文になりましたが、ご容赦願います。ローパスの注意点があります。10μと22kだと、抵抗が大きすぎて、電圧が分圧される度合いが大きすぎます。自分は、今は、75Ωにし、その分、コンデンサ10μを2個並列にしています。並列によって、コンデンサ容量は2倍になる。No.1727続11ーPWMTRさん,忘れてました。プルアップしてましたね。今日はできないのですが,明日,モーター回して見ます。****追記****猛牛ロックさんおおっしゃる通りでした。直してしまうと,きっと,ワンクロック多くなりますかね。続11ーPWMえーと、添付図左がX9Cのものです。右がAD5220です。DIAGRAM)を見ます。青線を見ればわかるように、INCピンはノーマル(操作外)ではHIGHになっています。次にCSをLOWにしていますけど、まぁ、この状態が今回のノーマル状態に相当します。赤線部で、↓となってストローブです。黄色部で、定位置のHIGHに戻します。このようにアイドルHIGHとするように書かれているので、そのままプログラムしただけです。※別に「逆では動作しない」、と言っている訳では無いですよ。「保証されていない」という事です。AD5220に関しても同じ事で、タイミング図で、元々HIGHになっています。AD5220のほうは後方の黄緑線の部分ではCLKピンがLOWです。これは普通、「どちらでも構わない」という事を意味します。一つ、ノーマルHIGHを感じたのはその上の手動の回路図です。みればわかるように、プルアップ=ノーマルHIGHです。こちらのデバイスも私のプログラムが普通です。=データシートのままです。※その図で分かるようにAD5220の方はCSをLOW固定で使って問題無い筈です。X9Cもそれが原因で抵抗値がおかしい、とは思っていません。INCピン(CLKピン)は平常時がHIGHと言っているのに、LOW出力で初期化するのでしょうか?抵抗値にかんしてはX9Cが±20%、AD5220が±30%なので、「8.5kΩ」や「約90kΩ」範囲内です。ワイパー抵抗に関してはどう考えてもおかしい数値です。データシートでは、両者ともに、40Ω(max100Ω)です。実際の数値(AD5220のグラフ)を見ても25〜60Ωです。電源を入れるコツは、計算部門に最初に電源を入れると、動作は問題なかったと思います。電源ONで、一瞬、大きな電流が流れてしまいました。LEDで確認していました。これは仕方がないかな〜。その辺りの感覚は重要です。「仕方がないかな〜」と言っていては駄目ですよ。起動時のシーケンスを考えるべきでしょう。それ以前にこのデバイスがこのまま使えるものかどうかの判断をするのが先だと思っています。使えないデバイスの為にシーケンスを考えても仕方が無いことですから。直してしまうと,きっと,ワンクロック多くなりますかね。ワンクロック多くなるとも言えません。PICがLOW出力で初期化される場合は、その時にデバイスにクロックが入るかどうかは未知数です。電源が入る直前にCLKピンの電圧がHIGHの範囲を彷徨っていたらクロックが入る可能性が高くなります。その時にワイパーがどちらに動くかも未知数です。実際に動かす命令を入れた際に、最初の1回目はワイパーは動きません。初期化(CLKピンをHIGH)する動きになります。※デジタルポテンショデバイスの方がPICよりも早く起動した場合、電源ノイズによって、フローティング状態のCLKピンを何度も上下させる可能性もあります。TRさんが行っていたプルアップ抵抗をつける、というのも悪くは無い提案です。起動時間を待ったのちに、ワイパー位置が最上段にあると仮定して、最下段までさげてから、位置を0にすれば間違いないと思います。その後にワイパー部を繋ぐ、というシーケンスも必要なのかもしれません。続11ーPWMmaboさん、おはようございます。物には何でも仕掛けがありますよね。工作室売店の専門家が言った言葉をもう一度再掲します。「抵抗値もばらつきがある。5kΩの物を購入しても4〜6kΩにばらつく。このばらつきは分圧の時には気にならなくなります。実験しないといけないんだけど、分圧して使うなら、使い物になるように読めます。x9cも5220も該当なし。抵抗値もばらつきがある。5kΩの物を購入しても4〜6kΩにばらつく。このばらつきは分圧の時には気にならなくなりますこれまでも、私はそういった事を何度も説明してきました。見返しても、No.1592No.1602No.1612No.1644No.1656あたりはそれに絡む事柄です。(直接は関係ないものも含んでいますけど)で、本来「気にならなくなる」筈なのに、そのように動いていないようなので、本当かどうか?(ちゃんと動いているのか)を分圧が崩れないように「何も付けずに」、「電圧」を測ってくれという事も何度も言ったと思います。実験しないといけないんだけど、分圧して使うなら、使い物になるように読めます。自分の思い込みで解釈しないでください。どこにもそんなことは言っていません。飯塚さんもそんなことを言われたら困ってしまうでしょう。それは、「抵抗値が幾つであれ、電圧は比例関係になるから分圧で使うならあまり関係ない」、という事です。例えれば、PICにボリュームをつけて、ADC入力で利用したりしますけど、その際のボリュームの抵抗値が異なるものを使っても、(同じ特性のものなら)抵抗値は関係ない、という意味です。自分は、思い切って、ML4の可変抵抗を外して、抵抗を計測してみますよ。それが出るのでしょうか?「分圧で使用するなら抵抗値はあまり関係ない」と言っているのを見て、その抵抗値を計測してみる、という行動に繋がるのがよく判りません。抵抗を測る自体は悪い事では無いので構いませんけど。可変抵抗器ですが5kでした。x9cも5220も該当なし。諦めますこの結論もよく判りません。上述のように、分圧利用なら抵抗値はあまり関係ありません。5kΩでも10kΩでもほぼ同じ動作になります。抵抗器=可変電流として利用されているのなら、10kΩデバイスで、その範囲で動かせばいい話です。すき好んで否定的な事ばかり言っているわけではありません。私のいった事で、TRさんが気分を害されることも、多々あったでしょう。それを承知で、指摘するのは良い状態では無いと感じています。静観させてもらう事にします。続11ーPWMプログラムを作っていただき、感謝申し上げます。自分は、そう思っています。猛牛ロックさんは、色々と言われていますが、自分は、多分半分も分かっていないと思います。掲示板でのやり取りは、相手側に、自分が思った通りに伝わりづらいとも思います。可変抵抗器換装の件ですが、ついていたものは5kなんですよ、ML4にくっついている状態だと1kでした。何かの原因があると思います。そこで、10kの可変抵抗器をつけたら、弊害や故障につながることが気になったので、やめようかと考えました。いった心配が100%ないなら、続けて行こうかと思います。それから、x9cは壊れていて、電圧などは計測できな状態で来ていましたよ。***********maboさんへ、デジタルポテンションの方は、拙い自分ですが、一緒に進む気持ちでいます。できるものなら、自分も理解したいと思っていますので、引き続きよろしくお願いします。続11ーPWM猛牛ロックさん,TRさん,こんばんは。猛牛ロックさん,16F88の件はご提案ありがとうございます。私も,そろそろかな,なんて思いますが,HP上には,88の情報まだ,あるようなので,ちょと考えるんですが,潮時ですね。代替えですが,性能もさることながら,値段も大きいですね。ちなみに秋月では,88は,270円でした。値段考えると,一番安い,16F1827あたりかななんて思います。TRさん,今晩,PWMコントローラーのボリュームを,AD5220に置き換えて,モーター回してみました。結論から言うと,モーターをコントロールすることは,可能でした。実際使うとなると,猛牛ロックさんがおっしゃったように,シーケンスをいろいろ考えるようでしょうね。やってみて,手強い感じしてます。おかしな動作が,いくつかありました。端のポジションから,一つずワイパーを動かして行きました。本来なら,回転数は,ワイパーを一定の方向に動かすにつれて,上がる動作の傾向,あるいは,下がる動作の傾向を続けるはずですが,他のポジションでは,回転数が下がるのに,ある特定のポジションでは,回転数が上がる,次のポジションでは,また下がる,という現象がみられました。何回か実験して,毎回同じ場所でおきますので,プログラムの問題よりはハードの特性のような気がしますが,キー判定で割り込み使ってますので,割り込みの影響もあるのか,この辺はちょっとわかりません。これ,抵抗値の誤差と同じで,ワイパーの動作に使ってる,FET?トランジスタ?ダイオード?の特性の違いなのかなと思いました。それと,実際にモーターを回すと,ノイズが出てくるのか,AD5220の電源を入れてから,モーターの電源いれると,誤動作が多い感じです。ONの順番の方がいいようです。続11ーPWMmaboさん、おはようございます。>TRさん,今晩,PWMコントローラーのボリュームを,AD5220に置き換えて,モーター回してみました。結論から言うと,モーターをコントロールすることは,可能でした。実際使うとなると,猛牛ロックさんがおっしゃったように,シーケンスをいろいろ考えるようでしょうね。やってみて,手強い感じしてます。〇シーケンスという単語ですが、制御する順番でしょうか、そうなら、必要と自分も実験時に思いました。>おかしな動作が,いくつかありました。端のポジションから,一つずワイパーを動かして行きました。本来なら,回転数は,ワイパーを一定の方向に動かすにつれて,上がる動作の傾向,あるいは,下がる動作の傾向を続けるはずですが,他のポジションでは,回転数が下がるのに,ある特定のポジションでは,回転数が上がる,次のポジションでは,また下がる,という現象がみられました。何回か実験して,毎回同じ場所でおきますので,〇自分のx9cはそういった事はありませんでした。>プログラムの問題よりはハードの特性のような気がしますが,キー判定で割り込み使ってますので,割り込みの影響もあるのか,この辺はちょっとわかりません。〇キー判定って何ですか?>これ,抵抗値の誤差と同じで,ワイパーの動作に使ってる,FET?トランジスタ?ダイオード?の特性の違いなのかなと思いました。それと,実際にモーターを回すと,ノイズが出てくるのか,AD5220の電源を入れてから,モーターの電源いれると,誤動作が多い感じです。ONの順番の方がいいようです。自分が実験時に思っていた順番と真逆です。理由x9c全体をONにすると、一瞬、モニター用LEDが発光した。LEDの発光具合だけを見ると動作は安定していました。いろんなものがあるので、不具合個所を見つけるのは大変ですよね。以下の単純な実験方法でした。抵抗値(210Ω〜8.5kΩ))。動作はスムースでした。x9cは、電源部をONにし、次に可変抵抗部分に電源を入れました。No1584で、一度電圧値を報告(157mV~4.5V)しましたが、メモを見ると104mV~4.5Vでした。実験方法VR〜PIC〜x9c〜LED測定箇所は、写真を参照してください。*最後に一点確認させてください。プラスマイナス20mA」となっているので、5220なら、発光LED(約10mAに抑えて)を使っても壊れないと思います。今後について・追加のx9cが来たらもう一度テストをします。・自分は、デジタルポテンションをやめるつもりです。既存可変抵抗は、東京コスモス製で5kが使われていました。ML4につい状態では、抵抗値は1kでした。抵抗値に差があるのは、何かの理由があると思います。x9cも5220も5kはないんです。交換をして、弊害や故障が怖くなりました。maboさんが言っていた言葉を思い出しました。違う方法で可変抵抗と同様な動作をする方法も考えていると。参考URLなどありましたら、方法を含めて教えて下さい。続11ーPWMTRさん,猛牛ロックさんおはようございます。TRさん,プログラムですが,猛牛ロックさんやTRさんお使いの一部分を使ってます。動作を確認したかったので,タクトスイッチを使って,ワイパーをup,down,するプログラムを作りました。AD5220(PICの電源ONの一秒以内)がほぼ100%近くコントロールできました。一秒以内というのは,PICでAD5220の初期化1秒程度まっています。いう表記を使いました。次のページに頭にあった構想の絵掲載します。私の頭にあったもので,HPはあるかどうか不明です。それと,TRさんの実験方法ですが,あれこれいえるほど知識ないのですが,気になるのは,SECさんの基盤お使いのことです。安定した動作等になるまでは,破損してもいい環境での実験の方がいいかと思いました。今回のユーチューブの動画は,SECさんの基盤やSSとは接続していません。続11ーPWMTRさん,頭にあった構想の配線図です。このデコーダIC(秋月)を使うと3本の線で,8個のトランジスター等のコントロールができるようです。複数個つかって,コントロールするには,4本の線が必要になりますが,18ピンか20ピンのPICを使うと,3個のデコーダコントロールできますので,24個の抵抗を操作できそうです。使う物の電気的な特性等について,知識が,かなり少ない状態ですので,実験でのトライアンドエラーになるかなあ,と思います。****よく分からないのですが,個人的には,5kΩのところに,10kΩの抵抗使っても大きな危険はないような気がしてます。この逆だと,ちょっと怖い感じです。続11ーPWMmaboさん、こんにちは。プログラムを変更されたということですが、大分進んでいるようだし、モーターが回って良かったですね。AD5220(PICの電源ONの一秒以内)picと5220の電源は、同じと思いますが、picがONして、1秒以内に、5220がONさせる方法?プログラム変更に必要な時間を書いたのかな?どのようにしましたか?プログラムを教えて下さい。何処でLATAですが、確か、inkやudに係るプログラムでわ、当初から使っていましたよ。>デコーダIC(秋月)情報有り難うございます。リレーの代わりですね。リレーより安くて良さそう。可変抵抗の分圧としての機能はどうするのだろ?例えば、最上段のトランジスタをONの時A~ワイパーの抵抗は0、ワイパー~Bは、その間の合成抵抗値となる。VRの場合、A~ワイパー間に抵抗値があると思います。その違いはどうしたらよいか?分かりませんか。今ゎ、再雇用の激安サラリーなので、安全第一で、進めます。アドバイス、有り難うございます。続11ーPWMTRさん,猛牛ロックさん,こんにちは。前掲の絵間違いありましたので,再掲します。細かいことは,やってみないと分からないかなあ。部分絡ませただけです。ADC等は省きました。こえても,動作できるようにしてます。褒めた物ではありませんが,下記がそれです。88破損させてしまたので,手持ちの1827です。PWMコントローラー,全部,別電源にしてます。頂いた写真をもとに、直感を頼りに、実験しました。仕掛けが何とか分かりました。短絡箇所は1か所だけなんですね。すると、Rh~Rw間、Rw~Rl間を分圧できました。直感頼りでした(笑いデコーダICって初めて見ました、リレー代わりになりますね!!Trは、トランジスタアレイを使えば済みませね。可変抵抗器の代わりになりそうですね。データシートを見始めました。>このデコーダIC(秋月)を使うと3本の線で,8個のトランジスター等のコントロールができるようです。これですが、データシートを見ると、6端子を操作しないと、出力端子を特定できないのではないでしょうか?***********プログラムを見ました。人の作ったプログラムは、作成者独特の変数表現や関数表現があって、なかなか理解が進みません。目を引いたのは、タイマー0割込み。タイマー0をつかって、カウントさせ、カウントアップしたときに、インターラップ関数をさせるという仕掛けですね、参考書を見直しました。折に触れ何度も見て覚えるって感じです。手もちの可変抵抗器2個(10kと100k)をつかって、分圧によりPICに電圧を印可させ、ADコンバートさせて、LEDを発光させてみました。この方法(x9c)も引き続き検討してみます。続11ーPWMTRさん,猛牛ロックさん,こんばんは。TRさん,割り込みの処理は難しいことはしていません。TIMER0で,4つのキーが押されたことを調べているだけです。チャタリングがあるので,タイマー0で割り込んで,8回押された状態が確認できたら,押されたと判断してます。メインの方で,割り込みの方で,押されたと判断されて,なおかつタクトスイッチが,離された時に,タクトスイッチが押されたと最終的判断をして,押された処理をしてます。それから,エンコーダICですが,一個だけ使うなら,赤枠部分は,直接グランドと5Vに固定しておけばよく,PICから,3本の線で,青枠の信号を送れば,緑枠内のように,8個のうち1個を変更できます。複数個使うときは,全部をLにする場合もでてくるので,黄色部分の1本を使って,全部をLにする必要がでてくるので,全部でPICから,4本の線を使います。18ピンのPICを使うと,4×3の12ピンで,3×8で24個のトランジスタ等のコントロールが可能です。最大使えば16ピン使う32個のコントロールできますが,88だと出力に使えるのが,最大15ピンですね。めいっぱい使ってしまうと他のことができないので,12ピン位かなと思います。コントロールしたいのであれば,足の多いのでしょうね。***追記***プログラムの方は,あまり細かくみないでください。動いたというもので,細かいこと猛牛ロックさんのようにはかんがえていません。細部にこだわると,多分,初期化の処理の後で,割り込みの許可でしょうね。続11ーPWM>チャタリングがあるので,タイマー0で割り込んで,8回押された状態が確認できたら,押されたと判断してます。いった理由ですか、チャタリング対策も大変ですね。◯SEC→ローパスフィルター→PICAD変換→X9C→コントローラー→適当なDCモーター***************>ただ,複数個使うときは,全部をLにする場合もでてくるので,了解です。続11ーPWMmaboさん、おはようございます。新しい試み5220の方、モノタロウに注文しました。22日は到着予定です。maboさんから教わった方法を活用して以下の方法で実験してみます。続11ーPWMTRさん,猛牛ロックさん,こんにちは。>5220は、うまく回っていますが、>ローパスフィルターを使っていますか?いえ,外部のPWMの信号はいれてないので,ローパスフィルターは,使ってません。中華製PWMコントローラーのボリュームを,AD5220に置き換えただけです。PIC→→AD5220→→中華製コントローラ→→モーターの配置です。私が掲載した,写真ですが,ワイパーの部分に,抵抗入れておいた方がいいかもですね。端に移動させたとき,短絡することになるので,抵抗入れておいた方が安全かもですね。TRさん,モノタロウ,いい値段しますね。>1秒以内に5220を動作せせるプログラムは、__delay_ms(500);__delay_ms(500);>この2行で操作しているのでしょうか?一応,そのつもりで,念のため2カ所にdelay_msいれました。きいているかどうかは?ですけど。posについて、ネット検索しましたが、分かりませんでした。難しく感じましたただの変数名です。a,b,c等と同じです。一応、x9c_valのvalはvalue(値)から来ています。posもPOSITION(位置)です。そんな感じで何となく頭に浮かんだのを付けているだけです。無い点が気になります。抵抗値変更に要する時間が有るのと無いのでは、差がでると推測します。どのプログラムの事でしょうか?今まではどれも入れていると思うのですけど。PWM>ただの変数名です。a,b,c等と同じです。一応、x9c_valのvalはvalue(値)から来ています。posもPOSITION(位置)です。そんな感じで何となく頭に浮かんだのを付けているだけです。pos;次に、デバイスの初期化は、以下の通りでよろしいわけですよね。1;t--;}MD5220_val=pos;}大事なので、何回か、500待つということは聞き直していました。掲示板でのやり取りは難しい。話戻りますが、x9cの運転プログラムは、主にNo1515です。ベースは、ここから始まっています。whileの中に500待つといった内容がありません。PWMTRさん,猛牛ロックさん,こんばんは。x9c_down()を呼んでいます。中にあると思いますが,ちょっと,確かめでみてください。モータードライバーに使われているFET)がX9Cより先に届きました。疲れているので,のんびり行きます。PWMNo1515では、↓のようになっています。x9c_dowm(void){ud=0;inc=0;__delay_us(1);inc=1;if(x9c_val>0)x9c_val--;//次の上げ下げは500us空ける}//以降なので、500は待ちません。5220の初期化関数が自分的にはしっくり来ていません。pos;posは外部変数ではありません。{このAD5220関数の「引数」です。この位置へ移動しろ、という目標位置です。AD5220(10);の10がposです。他の関数から操作するものではありません。(この関数自体は初期化専用関数でもありません。初期化に利用しているだけです。)実際の初期化はAD5220_val=70;while(AD5220_val)AD5220_down;の方が確実です。whileの中に500待つといった内容がありません。そこでは倍の1000us=1msになっています。動作が被ることはありません。<追記します>目標位置と現在のワイパー位置と差があれば、UPやDOWNをするわけですけど、目標位置に既にいる場合は何もしない訳です。一方で、一定の間隔(ここでは1ms)でサンプリングをしたいので、サンプリング間隔で回して、UPやDOWN関数の方では500usは取っていません。UPやDOWNをした際には2us程度増えますけど、それは無視しています。if(target<x9c_val)x9c_down();__delay_ms(1);}の部分を下記のようにしなければならないので、余計解りにくくなります。__delay_us(500);//動かさない時も同じだけ休む。実際には502usの方がより近い値__delay_us(500);}更に追記。AD5220→MD5220となって進行していました。その部分を直しました。PWMAD5220について>実際の初期化はAD5220_val=70;while(AD5220_val)AD5220_down;の方が確実です。このかきかたでは、初期化関数は、下記の通りと読めますが、OKでしょうか?確認したいと思います。//電源ON時ワイパ中間位置これは、そのまま残すのでしょうか?x9cについて>一方で、一定の間隔(ここでは1ms)でサンプリングをしたいので、サンプリング後にUP/DOWNするわけですが、UP/DOWNに必要な時間を1msとしています。1msではなく,100ns〜500nsではまずいのでしょうか?抵抗値変換に必要な時間を超えてまで待つ理由は何かあるのでしょうか?必要以上に待つように見えてしまいますが。それとも、解釈が違うのでしょうか。PWMAD5220の初期化に関してですけど、パワーオンで、ワイパー位置は64です。PICが同時起動するとして、CLKはその直前はフローティング=HかLかは判らない訳です。ADC用入力端子とすると、LOW出力になる訳で、その時に1クロック入ってしまうことになります。何かの拍子に、また全てLOWにされてしまう可能性があります。いった事を考慮すれば、無駄な作業もしておいた方が良い、という事です。AD5220_init(void){__delay_ms(1);AD5220_val=70;while(AD5220_val)AD5220_down;}と言った所でしょうか。外部変数の宣言は勿論残します。サンプリングに関しては考え方が違います。MACHからのPWM周期を考慮して、サンプリング個数とサンプリング間隔を決めます。(アナログ取得なら)逆に言えば、サンプリング個数と間隔からMACHのPWM周期を決めても良いです。サンプリング間隔は500us以上にしておいた方が賢明、ということです。実際にはtyp100us程度なので、150usでも問題は無いと思います。AD5220_init(void){__delay_ms(1);AD5220_val=70;while(AD5220_val)AD5220_down;}と言った所でしょうか。ありがとうございます。今回は、MACHのPWM基本周波数100Hzを基本としていたと思います。実際のMACHは、100Hzにしてスタートします。**************maboさんへ、AD5220到着ということで、ゆっくりでいいですから、結果をご披露してください。PWMみんなで共通理解を図りたいと思います。PWMx9c運転用プログラムと違う部分を以下のように注記しました。PWMmaboさん、おはようございます。この際、自分も、AD5220を購入しようかと思います。PWMmaboさん、続けて失礼します。target=target>>8;です。