トピック関連記事
48時間以内の記事は New Mark で表示されます
続11ーPWM
TRさん,忘れてました。

プルアップしてましたね。

今日はできないのですが,

明日,モーター回して見ます。

****追記****

 猛牛ロックさんおおっしゃる通りでした。

 ただ,直してしまうと,きっと,ワンクロック多くなりますかね。
mabo 2019/06/16(Sun) 23:17 No.1683
Re: 続11ーPWM
えーと、添付図左がX9Cのものです。右がAD5220です。

まず、X9Cですけど、普通、プログラムを組む際はタイムチャート(ここではAC TIMING 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にすれば間違いないと思います。
更に、その後にワイパー部を繋ぐ、というシーケンスも必要なのかもしれません。

猛牛ロック   2019/06/17(Mon) 00:18 No.1684
Re: 続11ーPWM
maboさん、おはようございます。

物には何でも仕掛けがありますよね。
工作室売店の専門家が言った言葉をもう一度再掲します。
工作室売店の記事 ↓
「抵抗値もばらつきがある。5kΩの物を購入しても4〜6kΩにばらつく。このばらつきは分圧の時には気にならなくなります。」
http://iizukakuromaguro.sakura.ne.jp/216_digitalPOT/216_digitalPOT.html

上記文章を見ると、
実験しないといけないんだけど、分圧して使うなら、使い物になるように読めます。
自分は、思い切って、ML4の可変抵抗を外して、抵抗を計測してみますよ。



追記
可変抵抗器ですが5kでした。
x9cも5220も該当なし。諦めます。
TR   2019/06/17(Mon) 06:59 No.1685
Re: 続11ーPWM
> TRさん

> 抵抗値もばらつきがある。5kΩの物を購入しても4〜6kΩにばらつく。このばらつきは分圧の時には気にならなくなります

これまでも、私はそういった事を何度も説明してきました。ぱっと見返しても、
No.1592
No.1602
No.1612
No.1644
No.1656
あたりはそれに絡む事柄です。(直接は関係ないものも含んでいますけど)
で、本来「気にならなくなる」筈なのに、そのように動いていないようなので、本当かどうか?(ちゃんと動いているのか)を
分圧が崩れないように「何も付けずに」、「電圧」を測ってくれという事も何度も言ったと思います。


> 上記文章を見ると、
> 実験しないといけないんだけど、分圧して使うなら、使い物になるように読めます。


自分の思い込みで解釈しないでください。
どこにもそんなことは言っていません。飯塚さんもそんなことを言われたら困ってしまうでしょう。
それは、「抵抗値が幾つであれ、電圧は比例関係になるから分圧で使うならあまり関係ない」、という事です。
例えれば、PICにボリュームをつけて、ADC入力で利用したりしますけど、その際のボリュームの抵抗値が異なるものを使っても、
(同じ特性のものなら)抵抗値は関係ない、という意味です。


> 自分は、思い切って、ML4の可変抵抗を外して、抵抗を計測してみますよ。

何故、それが出るのでしょうか?
「分圧で使用するなら抵抗値はあまり関係ない」と言っているのを見て、その抵抗値を計測してみる、という行動に繋がるのがよく判りません。
抵抗を測る自体は悪い事では無いので構いませんけど。

> 可変抵抗器ですが5kでした。
> x9cも5220も該当なし。諦めます

この結論もよく判りません。上述のように、分圧利用なら抵抗値はあまり関係ありません。
5kΩでも10kΩでもほぼ同じ動作になります。
抵抗器=可変電流として利用されているのなら、10kΩデバイスで、その範囲で動かせばいい話です。(ワイパー移動=分解能は半分になりますけど)


※※※※※※※※※※※※※※※

私も、すき好んで否定的な事ばかり言っているわけではありません。
勿論、私のいった事で、TRさんが気分を害されることも、多々あったでしょう。
それを承知で、指摘するのは良い状態では無いと感じています。

なので、しばらく静観させてもらう事にします。
猛牛ロック   2019/06/17(Mon) 13:04 No.1686
Re: 続11ーPWM
プログラムを作っていただき、感謝申し上げます。
自分は、そう思っています。

猛牛ロックさんは、色々と言われていますが、自分は、多分半分も分かっていないと思います。
そう思ってください。
また、掲示板でのやり取りは、相手側に、自分が思った通りに伝わりづらいとも思います。



可変抵抗器換装の件ですが、ついていたものは5kなんですよ、ML4にくっついている状態だと1kでした。
多分何かの原因があると思います。
そこで、10kの可変抵抗器をつけたら、弊害や故障につながることが気になったので、
やめようかと考えました。
そういった心配が100%ないなら、続けて行こうかと思います。

それから、x9cは壊れていて、電圧などは計測できな状態で来ていましたよ。



***********
maboさんへ、
デジタルポテンションの方は、拙い自分ですが、一緒に進む気持ちでいます。
また、できるものなら、自分も理解したいと思っていますので、引き続きよろしくお願いします。
TR   2019/06/17(Mon) 13:37 No.1687
Re: 続11ーPWM
猛牛ロックさん,TRさん,こんばんは。

猛牛ロックさん,16F88の件はご提案ありがとうございます。

私も,そろそろかな,なんて思いますが,HP上には,88の情報まだ,あるようなので,ちょと考えるんですが,

潮時ですね。

代替えですが,性能もさることながら,値段も大きいですね。
ちなみに秋月では,88は,270円でした。

値段考えると,一番安い,16F1827あたりかななんて思います。


TRさん,今晩,PWMコントローラーのボリュームを,
AD5220に置き換えて,モーター回してみました。

結論から言うと,モーターをコントロールすることは,
可能でした。

ただ,実際使うとなると,猛牛ロックさんがおっしゃったように,シーケンスをいろいろ考えるようでしょうね。

いろいろやってみて,手強い感じしてます。

おかしな動作が,いくつかありました。

一番端のポジションから,一つずワイパーを動かして行きました。

本来なら,回転数は,ワイパーを一定の方向に動かすにつれて,
上がる動作の傾向,あるいは,下がる動作の傾向を続けるはずですが,

他のポジションでは,回転数が下がるのに,ある特定のポジションでは,
回転数が上がる,次のポジションでは,また下がる,という現象がみられました。

何回か実験して,毎回同じ場所でおきますので,

プログラムの問題よりはハードの特性のような気がしますが,

キー判定で割り込み使ってますので,割り込みの影響もあるのか,

この辺はちょっとわかりません。

これ,抵抗値の誤差と同じで,ワイパーの動作に使ってる,
FET?トランジスタ?ダイオード?の特性の違いなのかなと
思いました。


それと,実際にモーターを回すと,ノイズが出てくるのか,

AD5220の電源を入れてから,モーターの電源いれると,

誤動作が多い感じです。

モーター電源ON→AD5220 ON→PIC ON

の順番の方がいいようです。

もうちょっといじって見ます。
mabo   2019/06/18(Tue) 00:08 No.1688
Re: 続11ーPWM
maboさん、おはようございます。

>TRさん,今晩,PWMコントローラーのボリュームを,
AD5220に置き換えて,モーター回してみました。

結論から言うと,モーターをコントロールすることは,
可能でした。

ただ,実際使うとなると,猛牛ロックさんがおっしゃったように,シーケンスをいろいろ考えるようでしょうね。

いろいろやってみて,手強い感じしてます。


〇シーケンスという単語ですが、制御する順番でしょうか、そうなら、必要と自分も実験時に思いました。



>おかしな動作が,いくつかありました。

一番端のポジションから,一つずワイパーを動かして行きました。

本来なら,回転数は,ワイパーを一定の方向に動かすにつれて,
上がる動作の傾向,あるいは,下がる動作の傾向を続けるはずですが,

他のポジションでは,回転数が下がるのに,ある特定のポジションでは,
回転数が上がる,次のポジションでは,また下がる,という現象がみられました。

何回か実験して,毎回同じ場所でおきますので,



〇自分のx9cはそういった事はありませんでした。



>プログラムの問題よりはハードの特性のような気がしますが,

キー判定で割り込み使ってますので,割り込みの影響もあるのか,

この辺はちょっとわかりません。


〇キー判定って何ですか?


>これ,抵抗値の誤差と同じで,ワイパーの動作に使ってる,
FET?トランジスタ?ダイオード?の特性の違いなのかなと
思いました。


それと,実際にモーターを回すと,ノイズが出てくるのか,

AD5220の電源を入れてから,モーターの電源いれると,

誤動作が多い感じです。

モーター電源ON→AD5220 ON→PIC ON

の順番の方がいいようです。





自分が実験時に思っていた順番と真逆です。
理由
x9c全体をONにすると、一瞬、モニター用LEDが発光した。
LEDの発光具合だけを見ると動作は安定していました。

いろんなものがあるので、不具合個所を見つけるのは大変ですよね。
自分の時は、
以下の単純な実験方法でした。その時は、電圧値(104mV〜4.5V)、
抵抗値(210Ω〜8.5kΩ))。
動作はスムースでした。ただし、x9cは、電源部をONにし、次に可変抵抗部分に電源を入れました。
No1584で、一度電圧値を報告(157mV~4.5V)しましたが、メモを見ると104mV~4.5V
でした。

実験方法
VR〜PIC〜x9c〜LED

測定箇所は、写真を参照してください。



最後に一点確認させてください。
5220のプログラムは、No1671をそのまま使っていますか?

それと、自分の実験方法では気になる動作はなかったのでしょうか?
*5220の絶対定格を見ると、「Bx~Wx プラスマイナス20mA」となっているので、
5220なら、発光LED(約10mAに抑えて)を使っても壊れないと思います。


今後について

・追加のx9cが来たらもう一度テストをします。

・自分は、デジタルポテンションをやめるつもりです。
既存可変抵抗は、東京コスモス製で5kが使われていました。
ML4につい状態では、抵抗値は1kでした。
抵抗値に差があるのは、何かの理由があると思います。
x9cも5220も5kはないんです。交換をして、弊害や故障が怖くなりました。


で、なんですが、
maboさんが言っていた言葉を思い出しました。
違う方法で可変抵抗と同様な動作をする方法も考えていると。
参考URLなどありましたら、方法を含めて教えて下さい。
 No1633にそれらしき写真が見えます!!!

TR   2019/06/18(Tue) 05:57 No.1689
Re: 続11ーPWM
TRさん,猛牛ロックさんおはようございます。

TRさん,プログラムですが,猛牛ロックさんやTRさんお使いの一部分を使ってます。

動作を確認したかったので,タクトスイッチを使って,ワイパーをup,down,するプログラムを作りました。

今日もいろいろ動かしましたが,今日は,

モーター電源ON→→ PIC ON → AD5220(PICの電源ONの一秒以内)

がほぼ100%近くコントロールできました。

一秒以内というのは,PICでAD5220の初期化1秒程度まっています。

それと,クロックの発生で,0→1を続けて行うので,

念のため LATABits.RA0 とかいう表記を使いました。

次のページに頭にあった構想の絵掲載します。

私の頭にあったもので,HPはあるかどうか不明です。

それと,TRさんの実験方法ですが,あれこれいえるほど知識ないのですが,

気になるのは,SECさんの基盤お使いのことです。

安定した動作等になるまでは,破損してもいい環境での実験の方がいいかと思いました。

今回のユーチューブの動画は,SECさんの基盤やSSとは接続していません。
mabo   2019/06/18(Tue) 11:17 No.1690
Re: 続11ーPWM
TRさん,頭にあった構想の配線図です。

X9C や AD5220を パクっただけです。



このデコーダIC(秋月)を使うと3本の線で,8個のトランジスター等のコントロールができるようです。

複数個つかって,コントロールするには,4本の線が必要に
なりますが,

18ピンか20ピンのPICを使うと,3個のデコーダコントロールできますので,

24個の抵抗を操作できそうです。

ただ,使う物の電気的な特性等について,知識が,かなり少ない状態ですので,

実験でのトライアンドエラーになるかなあ,と思います。

***追記です。****
よく分からないのですが,個人的には,5kΩのところに,
10kΩの抵抗使っても大きな危険はないような気がしてます。
この逆だと,ちょっと怖い感じです。

mabo   2019/06/18(Tue) 11:31 No.1691
Re: 続11ーPWM
maboさん、こんにちは。
プログラムを変更されたということですが、大分進んでいるようだし、モーターが回って良かったですね。




>モーター電源ON→→ PIC ON → AD5220(PICの電源ONの一秒以内)


picと5220の電源は、同じと思いますが、picがONして、1秒以内に、5220がONさせる方法?

プログラム変更に
必要な時間を書いたのかな?
どのようにしましたか?
プログラムを教えて下さい。

何処でLATAですが、確か、inkやudに係るプログラムでわ、当初から使っていましたよ。

>デコーダIC(秋月)

情報有り難うございます。
リレーの代わりですね。リレーより安くて良さそう。

ところで、
可変抵抗の分圧としての機能はどうするのだろ?

例えば、最上段のトランジスタをONの時
A~ワイパーの抵抗は0、ワイパー~Bは、その間の合成抵抗値となる。
VRの場合、A~ワイパー間に抵抗値があると思います。
その違いはどうしたらよいか?
分かりませんか。
実は、ちょっと前から、考えていましたが、分かりませんでした


>安定した動作等になるまでは,破損してもいい環境での実験


今ゎ、再雇用の激安サラリーなので、安全第一で、進めます。
アドバイス、有り難うございます。


そうだ
5220は分圧して使っているのですか?
ワイパーの先にFETのゲートとつながっているのか?
TR   2019/06/18(Tue) 13:44 No.1692
Re: 続11ーPWM
TRさん,猛牛ロックさん,こんにちは。

前掲の絵間違いありましたので,再掲します。

細かいことは,やってみないと分からないかなあ。

プログラムですが,キー判定に up down の部分絡ませた

だけです。

ADC等は省きました。

それと,UP.DOWN のサブ関数,0〜128 こえても,

動作できるようにしてます。

あまりあまり褒めた物ではありませんが,下記がそれです。

88破損させてしまたので,手持ちの1827です。

***追記***
ブレッドボードでの作成なので,PIC AD5220 PWMコントローラー,全部,別電源にしてます。


//***************************************
// PIC16F1827 Configuration Bit Settings
//
// 'C' source line config statements
//
// 2019-6-15 dejitaru_UP_DW
//
//LCDピンアサイン
// LCD_RS RA7
// LCD_EN RA6
// LCD_D4 RB7
// LCD_D5 RB6
// LCD_D6 RB5
// LCD_D7 RB4
//
//input キー
//TEN_UP RB2
//TEN_DW RA4
//ONE_UP RB1
//ONE_DW
//




// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF // Low-Voltage Programming Enable (Low-voltage programming enabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>
#include <stdlib.h>
#include "skSD1602LCD.h"

#define _XTAL_FREQ 8000000

#define TEN_UP RB2
#define ONE_UP RB1
#define TEN_DW RA4
#define ONE_DW RA3

#define CLK LATAbits.LATA1//AD5220コントロール
#define U_D LATAbits.LATA2//AD5220 アップダウン

#define FALSE 0
#define TRUE 1


//変数宣言
int count;
int WP_POSITION;
long pwmOnTimeCounter;
long pwmPeriodCounter;
long CONTROL_MODE_EXTERNAL_PWM_LOW;
unsigned int dutyCycle;
unsigned int lcd_dutyCycle;
unsigned char bGotPwmPulse;

volatile char str[7];
volatile int TEN_KEY_UP;
volatile int TEN_KEY_DW;
volatile int ONE_KEY_UP;
volatile int ONE_KEY_DW;
volatile int TEN_KEY_UP_COUNT;
volatile int TEN_KEY_DW_COUNT;
volatile int ONE_KEY_UP_COUNT;
volatile int ONE_KEY_DW_COUNT;

int WP_POSITION=64;

//関数宣言
void main(void);
static void interrupt warikomi(void) ;
void lcd_hyouji(void);
void wp_TEN_UP(void);
void wp_TEN_DW(void);
void wp_ONE_UP(void);
void wp_ONE_DW(void);
void syokika(void);

/*******************************************************************************
* メインの処理 *
*******************************************************************************/
void main(void)
{
int i ;
char s[17] ;
char mes[6]= {0xbd,0xc0,0xb0,0xc4,0x00} ; // "スタート"文字のカタカナデータ
//static unsigned char buff[12];

OSCCON = 0b01110010 ; // 内部クロックは8MHzとする

__delay_ms(500);
__delay_ms(500);


ANSELA = 0b00000000 ; // 全てデジタルI/Oとする
ANSELB = 0b00000000 ; // 全てデジタルI/Oとする
TRISA = 0b00111000 ; // ピン(RA)は出力に割当てる(RA5.4.3は入力)
TRISB = 0b00000110 ; // RB1.2は 入力 他は全ては出力
PORTA = 0b00111110 ; // RA出力ピンの初期化
PORTB = 0b00000110 ; // RB出力ピンの初期化

TEN_KEY_UP=FALSE;
TEN_KEY_DW=FALSE;
ONE_KEY_UP=FALSE;
ONE_KEY_UP=FALSE;

TMR0=157;
TMR0IF=0;
OPTION_REG=0b000000101;//2019-5-29変更
TMR0IE = 1;//タイマー0割り込み発生許可
GIE= 1;//割り込み全体の許可


__delay_ms(500);
__delay_ms(500);

lcd_init( ) ;//LCD初期化処理
syokika( );//5220初期化処理wpをA端子側に

i = 0 ;
while(1) {

lcd_setCursor(0,0) ;
lcd_puts("wp-POSITION:");
lcd_setCursor(0,1) ;
lcd_puts("ohom:");

lcd_hyouji( );

__delay_ms(500) ; // 1秒後に繰り返す

if(TEN_KEY_UP==TRUE && TEN_UP==1){
wp_TEN_UP( );

lcd_hyouji( );

TEN_KEY_UP=FALSE;
}

if(ONE_KEY_UP==TRUE && ONE_UP==1){
wp_ONE_UP( );

lcd_hyouji( );

ONE_KEY_UP=FALSE;
}

if(TEN_KEY_DW==TRUE && TEN_DW==1){
wp_TEN_DW( );

lcd_hyouji( );

TEN_KEY_DW=FALSE;
}

if(ONE_KEY_DW==TRUE && ONE_DW==1){
wp_ONE_DW( );

lcd_hyouji( );

ONE_KEY_DW=FALSE;
}
}

}
static void interrupt warikomi(void) {//割り込み処理
//***********TIMER0割り込み処理****************
if(TMR0IF==1){

TMR0=157;

if(TEN_UP==0){TEN_KEY_UP_COUNT++;}
else{ TEN_KEY_UP_COUNT = 0;}
if(TEN_KEY_UP_COUNT>=10){TEN_KEY_UP_COUNT=9;}
if(TEN_KEY_UP_COUNT==8){TEN_KEY_UP=TRUE;}

if(TEN_DW==0){TEN_KEY_DW_COUNT++;}
else{ TEN_KEY_DW_COUNT = 0;}
if(TEN_KEY_DW_COUNT>=10){TEN_KEY_DW_COUNT=9;}
if(TEN_KEY_DW_COUNT==8){TEN_KEY_DW=TRUE;}

if(ONE_UP==0){ONE_KEY_UP_COUNT++;}
else{ ONE_KEY_UP_COUNT = 0;}
if(ONE_KEY_UP_COUNT>=10){ONE_KEY_UP_COUNT=9;}
if(ONE_KEY_UP_COUNT==8){ONE_KEY_UP=TRUE;}

if(ONE_DW==0){ONE_KEY_DW_COUNT++;}
else{ ONE_KEY_DW_COUNT = 0;}
if(ONE_KEY_DW_COUNT>=10){ONE_KEY_DW_COUNT=9;}
if(ONE_KEY_DW_COUNT==8){ONE_KEY_DW=TRUE;}

TMR0IF = 0;
}

}

void lcd_hyouji(void){
unsigned char buff[12];
itoa((char *)buff, WP_POSITION,10) ;
lcd_setCursor(13, 0);
lcd_puts(" ");
lcd_setCursor(13, 0);
lcd_puts(buff);
itoa((char *)buff, WP_POSITION*0.78,10) ;
lcd_setCursor(13, 1);
lcd_puts(" ");
lcd_setCursor(13, 1);
lcd_puts(buff);

}

void syokika(void){
int i;
for(i=0;i<66;i++){
wp_ONE_DW( );
__delay_ms(2);
}

}

void wp_TEN_UP(void){
int i;

for(i=0;i<10;i++){
wp_ONE_UP( );
}
}

void wp_TEN_DW(void){
int i;

for(i=0;i<10;i++){
wp_ONE_DW( );
}

}

void wp_ONE_UP(void){
if( WP_POSITION<=128){ WP_POSITION++;}
else{ WP_POSITION=129;}
U_D = 1;
//asm("nop");
CLK = 0;
// asm("nop");
CLK = 1;
}

void wp_ONE_DW(void){
if( WP_POSITION>0){ WP_POSITION--;}
else{ WP_POSITION=0;};
//WP_POSITION--;
U_D = 0;
//asm("nop");
CLK = 0;
//asm("nop");
CLK = 1;
}

mabo   2019/06/18(Tue) 14:35 No.1693
Re: 続11ーPWM
maboさんこんばんは、
頂いた写真をもとに、直感を頼りに、実験しました。
仕掛けが何とか分かりました。
短絡箇所は1か所だけなんですね。
そうすると、Rh~Rw間、Rw~Rl間を分圧できました。
初物です。直感頼りでした(笑い
デコーダICって初めて見ました、リレー代わりになりますね!!

Trは、トランジスタアレイを使えば済みませね。
あと、秋月のCD74HC238Eは、使いこなせたら、本当に、
可変抵抗器の代わりになりそうですね。
データシートを見始めました。


>このデコーダIC(秋月)を使うと3本の線で,8個のトランジスター等のコントロールができるようです。


これですが、データシートを見ると、6端子を操作しないと、出力端子を特定できないのではないでしょうか?




***********
プログラムを見ました。
やはり人の作ったプログラムは、作成者独特の変数表現や関数表現があって、なかなか理解が進みません。

ちょっと目を引いたのは、タイマー0割込み。
タイマー0をつかって、カウントさせ、カウントアップしたときに、
インターラップ関数をさせるという仕掛けですね、参考書を見直しました。
折に触れ何度も見て覚えるって感じです。


で、
>モーター電源ON→→ PIC ON → AD5220(PICの電源ONの一秒以内)

この、PICの電源ONの1秒以内に、AD5220が起動させるという仕掛ですが、
インターラップ関数に、f(TEN_UP==0){TEN_KEY_UP_COUNT++;}  このような、等々の書き込みがあるので、
RB2がLになったら、、、ボタンが押されたという感じかな、
こういった、インターラップ関数が終えて、下記のdelay__ms(500)2回が利いて、
5220が動作開始っていうことになるのでしょうか?


   記
TMR0=157;
TMR0IF=0;
OPTION_REG=0b000000101;//2019-5-29変更
TMR0IE = 1;//タイマー0割り込み発生許可
GIE= 1;//割り込み全体の許可


__delay_ms(500);
__delay_ms(500);


**************
可変抵抗をx9Cに換装の件
maboさんも、大丈夫そうといって話してくれるので、
手もちの可変抵抗器2個(10kと100k)をつかって、分圧によりPICに電圧を印可させ、
ADコンバートさせて、LEDを発光させてみました。
問題なさそうでした。
この方法(x9c)も引き続き検討してみます。

TR   2019/06/18(Tue) 21:25 No.1694
Re: 続11ーPWM
TRさん,猛牛ロックさん,こんばんは。

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ピン位かなと思います。

または,もっとコントロールしたいのであれば,
足の多いのでしょうね。

***追記***
プログラムの方は,あまり細かくみないでください。
とりあえず動いたというもので,
細かいこと猛牛ロックさんのようにはかんがえていません。
細部にこだわると,多分,初期化の処理の後で,
割り込みの許可でしょうね。

mabo   2019/06/18(Tue) 22:33 No.1695
Re: 続11ーPWM
>チャタリングがあるので,タイマー0で割り込んで,8回押された状態が確認できたら,押されたと判断してます。


そういった理由ですか、チャタリング対策も大変ですね。



>モーター電源ON→→ PIC ON → AD5220(PICの電源ONの一秒以内)


1秒以内に5220を動作せせるプログラムは、__delay_ms(500);__delay_ms(500);
この2行で操作しているのでしょうか?



***************
5220は、うまく回っていますが、
ローパスフィルターを使っていますか?

実験方法
◯SEC→ローパスフィルター→PICAD変換→X9C→コントローラー→適当なDCモーター


***************
>ただ,複数個使うときは,全部をLにする場合もでてくるので,

了解です。
サンキュウデス。
TR   2019/06/18(Tue) 23:01 No.1696
Re: 続11ーPWM
maboさん、おはようございます。

新しい試み
5220の方、モノタロウに注文しました。
22日は到着予定です。

で、maboさんから教わった方法を活用して以下の方法で実験してみます。
どうでしょうか


DC5V電源〜VR〜PIC(ADコンバート値を8分割)〜〜CD74HC238E(抵抗器8個による分圧)〜発光LED

成功したら、
SEC基板〜ローパス(PWM基本周波数200Hz=カットオフ周波数)〜PIC(ADコンバート値を8分割)〜〜CD74HC238E+Tr(抵抗器8個による分圧し、ML4の可変抵抗を換装)〜ML4
TR   2019/06/19(Wed) 08:05 No.1697
Re: 続11ーPWM
TRさん,猛牛ロックさん,こんにちは。


>5220は、うまく回っていますが、
>ローパスフィルターを使っていますか?

いえ,外部のPWMの信号はいれてないので,ローパスフィルターは,使ってません。

中華製PWMコントローラーのボリュームを,AD5220に置き換えただけです。

 PIC→→AD5220→→中華製コントローラ→→モーター

の配置です。

私が掲載した,写真ですが,ワイパーの部分に,抵抗入れておいた方がいいかもですね。

一番端に移動させたとき,短絡することになるので,
抵抗入れておいた方が安全かもですね。

TRさん,モノタロウ,いい値段しますね。

約,倍ぐらいかなあ。


>1秒以内に5220を動作せせるプログラムは、__delay_ms(500);__delay_ms(500);
>この2行で操作しているのでしょうか?

一応,そのつもりで,念のため2カ所にdelay_msいれました。

きいているかどうかは?ですけど。
mabo   2019/06/19(Wed) 12:15 No.1698

処理 記事No 暗証キー

- JoyfulNote v6.02 -
++ Edited by Hamel ++