Page: | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Arduino Multi-function Shieldについての注意点です。
内容はおいおい書いていきますけど、使用上の注意点がありますので、
商品到着前?に書いておきます。
この商品は、Arduino Leonardoを元に開発されています。
※殆どのモジュールのベースモデルはUNOです。ですがこれは違います。
で、添付図を見てもらうと、モジュールを嵌めた際に、UNOのUSB口がモジュールの
7セグ部の半田部に干渉します。USB口が金属なので、当たるとショートしてしまいます。
なので、そのどちらか、或は両方にビニールテープ等で絶縁処理をしておいてください。
※Leonardoの場合は、ミニB端子なので、干渉しません。
また、それに伴うものですけど、基板上のシルクが「〜13」となっています。
「〜」印は「PWM=アナログ出力可能なピン」という意味合いですけど、
UNOの場合は、13番はPWM出力出来ません。(UNOボードのほうは正しく「13」です)
それと、回路に関してですけど、LED、ブザー、スイッチは全てアクディブローです。
なので、ロー出力で初期化すると、ブザーが鳴り続けることになるので注意して下さい。
Re: Arduino Multi-function Shield回路図です。
あと、主要なリンクを書いておきます。
ARDUINO本家 IDEダウンロード
https://www.arduino.cc/en/Main/Software
↓
「Windows Installer, for Windows XP and up」
↓
「JUST DOWNLOAD」
USBドライバ(CH340ドライバ(メーカーサイト)。必要な場合)
http://www.wch.cn/download/CH341SER_EXE.html
↓
下載
Arduino日本語リファレンス
http://www.musashinodenpa.com/arduino/ref/
http://garretlab.web.fc2.com/arduino_reference/index.html
AVRマイコン日本語データシート
https://avr.jp/
↓
「データシート」
↓
「mega328P.pdf」
AVRWiki
http://avrwiki.osdn.jp/cgi-bin/wiki.cgi?page=AVRWiki
Arduino Multi-function Shield系リンク
Using an Arduino Multi-function Shield
https://www.mpja.com/download/hackatronics-arduino-multi-function-shield.pdf
ライブラリサイトの1つ
http://www.cohesivecomputing.co.uk/hackatronics/arduino-multi-function-shield/猛牛ロック 2018/10/14(Sun) 16:12 !email! No.1083 !ico_edit!Re: Arduino Multi-function Shield猛牛ロックさん今晩は。
荷の到着はまだ大分時間が掛かりそうです。
2枚のボードですが、写真の様に重ねるのですか?
2枚のボードは、ピンを差し込んで固定するのでしょうか・
そんな感じに見えますが、如何でしょうか?
なお、Arduino IDEは、PCにダウンロードは済ませました。Re: Arduino Multi-function Shield多分、今週中は来ないでしょうね。
大体忘れたころに届きます。
TRさんの画像で手前のピンヘッダが緩んでいますよね?それをもっと差し込むと
USB口にぶつかってしまいます。(>_<)
これはUNO純正品でも同じです。
どうやらこれはホビー用というよりも、(中国の)学生の教材として開発されたようです。
アクディブブザーでは無く、パッシブブザー
多回転の半固定抵抗では無く、回しやすいつまみの普通のタイプ
だと良かったのですけど。
(値段的には後者も同等以下になると思うのですけど)
そうすれば、メロディーも作れて面白かったんですけどね。猛牛ロック 2018/10/14(Sun) 21:21 !email! No.1085 !ico_edit!Re: Arduino Multi-function Shield自分が買った品は、
猛牛ロックさんお勧めのページから入り購入しました。
https://ja.aliexpress.com/item/Free-shipping-1pcs-Multifunctional-expansion-board-kit-based-learning-for-arduin-UNO-r3-LENARDO-mega-2560/32730415337.html
https://ja.aliexpress.com/item/1-uno-r3-mega328p-ch340g/32836264665.html
写真は、適当な物が無かったので、
単に、「ボードを重ねる」といった行為を
分かって貰うための写真です。PICとAVR今週あたりに来そうなので、適当に進めておきます。
PICが8ビットのオシレータ無しの物から、32ビットの高性能なものまで、様々な品種があるのに対して、
AVRは8ビットのみで、どれも似通った性能です。
周辺機能も、PICは多種多様(貧弱なものから)で、AVRは変わったもの(というか、ベーシックなものしか)は付いていません。
簡単に言えば、AVRは汎用機、PICは専用機と言えると思います。
PICは、熟知した人が、用途に適した機種を選び、その機能を生かした作り方をする、という感じです。
AVRは、ピン数やメモリが足りていれば、どれも同じもので済ませちゃう感じですかね。
変えても、機能や使い方はそれほど変わりません。
また、AVRの場合は殆どのレジスタはデフォルトで0になっています。そして、周辺機能は無効状態です。
なので、GPIO操作をしたい場合はそのまま始められます。周辺機能は使いたい時に、使いたい周辺機能の
レジスタを操作すれば良いです。周辺機能のレジスタは大抵、その部門ごとにまとまっています。
CONFIG-ヒューズ
PICではヒューズ設定(CONFIG)もプログラムに記述して、書き込み時に同時に書き込まれます。
一方、AVRではヒューズは全く別に処理します。つまり、プログラムには記述しません。
通常、AVRの初期状態のヒューズの状態は、内部クロック最大の8分周有効の状態です。
なので、多くは、1MHzか1.2MHzになっています。
クロック、オシレータ
AVRには全て内蔵オシレータがあります。ただし、通常外付け可能な最大速度の半分程度の速度です。
なので、精度の要らない、また、高速処理の要らないものは内蔵オシレータを使う事になります。
PIC16等では、駆動周波数にたいして、駆動サイクルが1/4になっています。つまり、32Mhzで駆動させても、
命令のサイクルは8MHzになります。
一方、AVRはそのまま1命令サイクルになります。つまり8MHz駆動なら8MHzサイクル、8MIPSです。
ピン
VDD(PIC)とVCC(AVR)、VSS(PIC)とGND(AVR)に違いはありません。呼び方だけの違いです。
MCLRとRESETピンもほぼ同じですけど、MCLRピンはGPIOとして使う事も可能ですけど、RESETピンは
RESET専用と思ってください。それを変えてしまうと、専用の書き込み器が必要になります。
※つまり、高電圧の書き込み器がある場合や、2度と書き込みをしない場合はGPIOに変えるのも自由です。
GPIOは入力部はシュミットトリガ入力で、個別に内部プルアップを指定する事が可能です。
出力部はCMOS出力です。つまり、オープンドレイン出力端子はありません。また、入力専用という端子もありません。
出力特性
PICの通常ピンは内部抵抗が高い為、それほど多くの電流を流すことはありませんけど、AVRの場合はそれよりも特性が良い為に、
より多くの電流を流します。つまり、PICの場合、抵抗を付けずにLEDを駆動させることも可能ですけど、AVRは高い確率でLEDを壊します。
※PICの通常ピンはHIGH出力でGNDに繋いでも30mA程度しか流れません。AVRは70mA以上出て壊れる危険があります。
割り込み
PICでは割り込み要因は全てAND回路でまとめられた上で、GIE(PEIE)の状態で、割り込みがかかります。つまり、最終的に1つの場所に
飛び、自分で要因を判断して、フラグ処理します。
AVRでは、それぞれの割り込み要因とGIEの状態で判断され、それぞれの割り込み関数に飛びます。割り込み関数に飛んだ瞬間に
自動的にその割り込みフラグは解除され、全割り込み禁止(GIEが0)になります。そして、割り込み関数が終了して、割り込み元に戻る時に
自動で、GIEが1に戻ります。複数の割り込み要因が同時に起こっている場合は、割り込みベクタ番号の小さい方が優先されます。猛牛ロック 2018/10/21(Sun) 11:24 !email! No.1097 !ico_edit!AVRのGPIO操作GPIO操作
・方向レジスタ(入出力切り替えレジスタ)
PICのTRISレジスタに相当するのがDDRレジスタです。
但し、PICでは、0で出力、1で入力ですけど、AVRでは0で入力、1で出力です。
・出力レジスタ(HIGH/LOW出力切り替え)
PICのLATレジスタ(場合によってはPORTレジスタ)に相当するものが、PORTレジスタです。
勿論、0がLOWレベル、1がHIGHレベルです。
・入力レジスタ(ピンのH/Lの状態を読み込み)
PICのPORTレジスタに相当するのが、PINレジスタです。0がLOW、1がHIGH
上記の3つのレジスタを操作するのですけど、更に内蔵プルアップも指定します。※AVRのピンは全て内部プルアップがあります。
出力設定=DDRレジスタを入力(0)にして、PORTレジスタを1にすると、内部プルアップが有効、0にすると無効です。
つまり、
DDRD=0b1100;
PORTD=0b1010;
と書くと、
PD0は内部プルアップ無し入力
PD1は内部プルアップ入力
PD2はLOW出力
PD3はHIGH出力
になります。※PICではピンをRD0と最初にRを付けますけど、AVRではPです。
それともう一点、これはハードでは無く、コンパイラの仕様の問題ですけど、
PICでは
RD2=1;
のように、ピンに直接数値を入れるような仕組みが用意されています。
一方、AVR(GCC)では、そのようなものは用意されていません。
なので、AVRのビット操作はビット演算子を用いて行うのが基本です。
但し、レジスタビット名にはそのレジスタのビット位置が付いています。
つまり、PB2もPC2もPD2も2と定義(define)されています。
これは、他のレジスタでも同様です。
そして、多くの場合は自分でマクロを書いて、使い易くします。
マクロ例1(レジスタ、変数共通)
#define bis(addr,bit) (1&(addr>>bit))
#define bic(addr,bit) (!(1&(addr>>bit)))
#define cbi(addr,bit) addr &= ~(1<<bit)
#define sbi(addr,bit) addr |= (1<<bit)
使用例
sbi(PORTD,5);//PD5を1(セット)にする
cbi(data,2); //変数dataの第2ビットを0(クリア)にする
if(bis(PINC,3)) //もしPC3が1(HIGHレベル)なら
if(bic(data,6))//もし、変数dataの第6ビットが0なら
マクロ例2(ピン操作のみ)
//メインマクロ
#define _SET(type,name,bit) type ## name |= (1<<bit)
#define _CLEAR(type,name,bit) type ## name &= ~ (1<<bit)
#define _TGL(type,name,bit) type ## name ^= (1<<bit)
#define _GET(type,name,bit) ((type ## name >> bit) & 1)
#define _PUT(type,name,bit,value) type ## name = ( type ## name & ( ~ (1<<bit)) ) | ( ( 1 & (unsigned char)value ) << bit )
//呼び出し関数マクロ
#define OUT(pin) _SET(DDR,pin)
#define IN(pin) _CLEAR(DDR,pin)
#define HIGH(pin) _SET(PORT,pin)
#define LOW(pin) _CLEAR(PORT,pin)
#define TGL(pin) _TGL(PORT,pin)
#define READ(pin) _GET(PIN,pin)
//引数マクロ例※この部分は書き換えて使う
#define LED B,5
#define clk D,0
#define dat D,1
#define cs D,2
使用例
HIGH(LED);//LEDのピン=PB5をHIGHにする。
TGL(LED);//LEDのピン=PB5をを反転させる。
OUT(clk);//clkピンを出力に設定
if(READ(cs))//もしcsピンが1(HIGH)なら猛牛ロック 2018/10/21(Sun) 11:26 !email! No.1098 !ico_edit!ArduinoとAVR基本はAVR+GCCなので、素のAVRと全く同じわけなのですけど、実際にはそれに手が加わっているので、
だいぶ異なります。
まず、書き込み方法が、従来のSPIでは無く、シリアル通信による自己書き込みになります。
自己書き込みとは、ブートローダという領域で起動して、シリアル通信があるか待ちます。
あった場合はその内容をフラッシュに書き込みます。通信が無ければフラッシュから起動します。
で、書き込み方法は兎も角、それにより、標準でPCとシリアル通信が出来る状態にあります。
なので、変数の値やプログラムの場所をシリアル通信で送る事により、どのような経路でプログラムが走っているかを
簡単に知ることが出来ます(PCデバッグ)
そして、2つ目は、Arduinoといっても、主力はATMEGA328Pを使っているUNO、他が大多数です。
なので、サンプルは異常に多く見つかります。クロック周波数も同じなので、そのままで同じ動作です。
3つ目には、センサーや表示器などの対応したモジュールが多く、低価格で販売されています。
そのモジュールもやはり、UNOを対象として開発されているものが多数です。
そうなってくると、対応ライブラリも充実していて、多くのモジュールはそのライブラリがあります。
なので、そのモジュールを知らなくても、家電感覚で使いこなすことが出来ます。
話が戻りますけど、Arduino言語とはAVRと基本的に変わりません。けれども、仕掛けがしてあります。
本来、というか、別の場所に↓のようにメイン関数があります。
そして、ユーザにはsetup関数と、loop関数を書かせて、コンパイル時に合体させてコンパイルします。
ここでは単純にinit()となっていますけど、この中で、幾かの事をしています。
また、デフォルトで、幾つかのライブラリを取り込んでいます。
その一つがmillis関数に代表される、起動時からの累積時間の取得です。
つまり、タイマー0を利用して、タイマー0割り込みを使い(=割り込み有効になっている)、
起動からの時間を計測しています。
周波数の情報もまた、ボード情報として既に入っています。
int main(void)
{
init();
setup();
for (;;) {
loop();
}
return 0;
}
で、↑の内容から判るように、setup関数には最初に1度だけ行われる、という特性を持っています。
loop関数は永遠に繰り返されます。この2つの関数をユーザーは利用することになります。
まぁ、事前説明はこんなところで、後は、実際にプログラムを組みながら進めたいと思います。猛牛ロック 2018/10/21(Sun) 11:28 !email! No.1099 !ico_edit!Arduino 1stもう既に、Arduino IDEはインストール済みのようですから、USBで、PCと繋いでください。
※まずは、マルチモジュールは使わずに、UNO単体です。
そして、「ツール」→「シリアルポート」を見ると、繋いだArduinoのポートが通常あります。
確認の為に一度USBケーブルを抜き、マウスのフォーカスを「ツール」から外して、もう一度
「シリアルポート」を見てください。
何も変化が無いのなら、ドライバのインストールが必要です。
前述のリンクから、ドライバをダウンロードして、入れてください。
で、シリアルポートをArduinoのポート(COM○)を選択して、その上にある「ボード:」から、
「Arduino/Geuino Uno」を選択します。
次に、サンプルスケッチを読み込みます。
「ファイル」→「スケッチ例」→「01.Basics」→「Blink」を開いてください。
(新規ファイル→下をコピペでも良いですけど)
色々書いてありますけど、コメントを外すと↓になります。
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
LED_BUILTINは、既に定義してあって、UNOの場合は13です。違うボードの場合でも、
そのボードに接続されているLEDの番号になるようにコンパイル時に処理されます。
で、上部の「⇒」アイコンをクリックしてコンパイル→書き込みをして下さい。
ウインドウ下に進捗が表示されます。
順調に点滅しましたか?というか、購入状態でも点滅プログラムが入っていたような・・・
で、つぎは4行デバッグの為のコードを追加します。
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
Serial.print('s');
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
Serial.print('a');
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
Serial.print('b');
delay(1000);
}
書き込み後に、ウィンドウ右上にある、虫眼鏡みたいなアイコン=シリアルモニタを
開いてください。sabab・・・と、表示されます。
このように、適当な場所で、文字や数値をPCに送って表示させることで実際に動いている
順番を確認することが出来ます。
次が、Arduinoの特徴の1つである、millis(起動からの時間をミリ秒単位で返す関数)を使ったスケッチです。
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print(millis() / 60000);
Serial.print(':');
Serial.println(millis() % 60000 / 1000);
delay(1000);
}
1秒置きに取得しているので、分:秒の表示になります。
大よそ、以上の事はデフォルトで用意されているので、PICやAVR単体と比べて、
準備やプログラムの上で、圧倒的に時間的節約になります。猛牛ロック 2018/10/21(Sun) 11:31 !email! No.1100 !ico_edit!
おはようございます。
PIC3の故障は治っていません。
昨晩も、
念の為に、MPLABの最新版IDEをインストールしたり、
逆に古いIDEをインストールしましたが、
エラーのままです。
でも、以前教わった間欠動作のプログラムの理解を進めています。
その中、ひょっとして、誤植ではと思える部分が有ります。
というのも、//以降のプログラムの説明が、
C言語と食い違いがあるのではと思われるからです。
以下にその内容を記載しますので、見て頂けませんか。
宜しくお願いします。
この部分です。
while(sec >0){
if((MODE!=(PORTA&0b11))||(MODE==3&&MACH_sig==0)||(PORTB_save!=PORTB)) return 1;
//セレクタスイッチが変更された場合とMACH制御でのオフ信号、間欠時間の変更があった場合はwhileから抜ける
正しくは、
while(sec >0){
if((MODE!=(PORTA&0b11))||(MODE==3&&MACH_sig==0)||(PORTB_save!=PORTB))
{ return 1;
}
If文の{ }が抜けていると思います。
如何でしょうか?
Re: ひょっとして、誤植ではいいえ、if文やwhile文などの対象はその次に書かれた命令(1つ)です。
{}はそれを広げる(複数の命令を対象にする)為にあります。1つならそのままで良いです。
なので、
while(1); //ここで停止させて、そのまま維持する。
のようなものも成り立ちます。猛牛ロック 2018/10/17(Wed) 15:17 !email! No.1089 !ico_edit!Re: ひょっとして、誤植では>いいえ、if文やwhile文などの対象はその次に書かれた命令(1つ)です。
ということは、
//セレクタスイッチが変更された場合とMACH制御でのオフ信号、間欠時間の変更があった場合はwhileから抜ける
となっているので、
戻り値を1として、
change=Second(DousaTime); //動作時間分ウェイト
上記のchangeに1が戻ることになり、
すなわち、
DousaTimeが1ということですか?Re: ひょっとして、誤植では<そういった異変があったら>戻り値を1として、関数Secondを終えます。whileを抜けるだけならbreak;です。
つまり、異常があったらすぐに動作を止める、という事です。
で、changeに1が代入されます。DousaTimeはここでは何もしていません。つまり、元々あった値のままです。
DousaTimeの値を変更するのは代入演算子(=,+=,/=,|=,等)があった場合です。猛牛ロック 2018/10/17(Wed) 17:48 !email! No.1091 !ico_edit!Re: ひょっとして、誤植では>で、changeに1が代入されます。DousaTimeはここでは何もしていません。
関数というのは、
この場合で言うと、
changeに1が代入されるから、
change=Second(DousaTime); //動作時間分ウェイト
上記の式のchangeに返される、
つまり、
1=Second(DousaTime); //動作時間分ウェイト
Second(DousaTime)が1ということではないのですか?Re: ひょっとして、誤植では「=」はプログラミングの世界では、一般の「イコール(等しい)」とは意味が違います。
「右辺(の計算結果)を左辺に代入する」です。なので、左辺はただ一つの変数で受ける形になります。
従来のイコール(等しい)は「==」です。
戻り値がある関数は変数に代入する形が主ですけど、変数に代入しなくても構いません。猛牛ロック 2018/10/18(Thu) 00:57 !email! No.1093 !ico_edit!Re: ひょっとして、誤植では>戻り値がある関数は変数に代入する形が主ですけど、変数に代入しなくても構いません。
若し、変数に代入したとすれば、下記の事柄は成り立ちますか?
RA7=change //changeに戻り値1が帰ったのを利用して、RA7をHiにする。Re: ひょっとして、誤植ではRA7の型によっては警告が出るかもしれませんけど、変数の型と戻り値の型があっていれば問題ありません。
(コンパイル時に何も言われなければ問題ないし、警告されても、必ず1か0しか戻さなければ問題無いと思います。)猛牛ロック 2018/10/18(Thu) 10:42 !email! No.1095 !ico_edit!Re: ひょっとして、誤植では猛牛ロックさんへ
配列を使いSecond関数により時間制御に種類を持たせた内容ですね。
ようやく分かりました。
有り難うございます。
しかし、よく考えたと思います。TR 2018/10/18(Thu) 12:49 !email! No.1096 !ico_edit!
>}else if(cnt<255)cnt++;//前回と同じだったらカウントアップ
255というのは、タイマー0割り込みにでてくるTMROレジスタ
に出てきて、
タイマ0の場合、TMROレジスタにクロックが与えられると有ります。
でTMROでジスタは、8ビットレジスタので、0〜255の値を入れられるとある。
00000000=0
11111111=255
>}else if(cnt<255)cnt++;//前回と同じだったらカウントアップ
これは、タイマー0割り込みを使おうとしているのですか?
Re: No1053についてこの前後の数行(7行)自体がタイマー割り込みでの(セレクタ)スイッチの読み取り方です。
if(cnt<255)は今回は無くても良いかもしれません。
けれどもスイッチを押した回数の処理では重要です。
今回の方法は連続して○回同じデータが続いたら採用する、という読み取り方です。
で、そのカウンタ変数cntが100になったら採用なのですけど、cnt++はある値で止めないとまた0に戻ります。
つまり、cnt=255+1;は0になります。
そうすると、2回目、3回目…と100に回ってくるので、2回押した、3回押した…と誤検知をしない為の処理です。
このようなカウントする処理だと、delayやループを使う事無く、長押し等の検知も出来ます。
また、LEDの点灯やブローの時間などもカウントして処理します。猛牛ロック 2018/10/10(Wed) 18:01 !email! No.1070 !ico_edit!Re: No1053について>今回の方法は連続して○回同じデータが続いたら採用する、という読み取り方です
この解釈ですが、
TMROレジスタ8ビットを使うという事ですか?
レジスタが、0〜1111111となり、さらに1プラスされると1回目から2回目とカウントするという事ですか?
若しそうなら、
そもそも、このTMROレジスタを使うには、
タイマー0割り込みの機能を使う時だけに限定されるのでは?
単に、TMROレジスタのみをカウント用に使う方法はあるのでしょうか?Re: No1053についてメイン関数で、ループを作り、delay関数で調整しても、必ずずれていってしまいます。
また、delay関数を使うとその間は他の事が出来ません。
一方、タイマー割り込みは決まった間隔で、割り込み関数に飛ぶ、という機能です。
そこで、自分で、タイマーの変数を用意して、割り込み関数に入った数を数えると、正確な、(といっても
動作クロックに対して正確な、ということです)時間で動作させることが可能です。
また、作るタイマーも、自分で幾つでも作ることが可能なので、幾つもストップウォッチ相当を作り、違ったタイミングで
動作させることが可能になります。(タイマーといっても、ループをカウントする普通の変数です)
※TMR0レジスタのことではありません。当然タイマー0割り込みを使えばTMR0レジスタの動作に合わせた割り込みになりますけど、
違う意味です。
タイマーはPWMやキャプチャー等でも使います。勿論、単にタイマーを回して、その値を見て処理する事も可能です。猛牛ロック 2018/10/11(Thu) 11:15 !email! No.1072 !ico_edit!Re: No1053についてTRさん,猛牛ロックさん,こんばんは。
猛牛ロックさんが説明してくださってるので,
私が書くこともないのですが,
私は,
>今回の方法は連続して○回同じデータが続いたら採用する、という読み取り方です。
このために(調べるため),タイマー0をトリガーに使っている,
そんな風に私は理解してます。
つまり,タイマー0の割り込みは,一定間隔で,
データを検証するためのトリガーとして理解してます。
それから話題からそれますが,,
TRさんは,FUSION360を継続して使うため,
なんかされたのですか。
なんか,「3年間は無料でつかえる」という記事もみかけたことがあり,
使い始めてから3年以上経過しているので,
半分あきらめてもいるのです。
別件で,「ハートビート信号」なるものくぐってたら,
偶然にも
http://docs.autodesk.com/ACD/2011/JPN/filesLIC/WS1a9193826455f5ff-3859b43c1209703a838-46f1.htm
がヒットし,くしくもFUSIONののライセンスのページにたどり着きました。mabo 2018/10/11(Thu) 21:30 !email! No.1073 !ico_edit!Re: No1053についてFUSION360の継続使用について
もうだいぶ前なので詳しい事は忘れてしまいましたが、
余り迷うことなく利用期間の延長が出来た感があります。
一度下で聞いてみて下さい。誰か教えてくれると思います。
https://forums.autodesk.com/t5/fusion-360-ri-ben-yu/bd-p/707
それでもだめだったら、
下のページの上部にある「無料体験版」から再度申し込んでください。
https://forums.autodesk.com/t5/fusion-360-ri-ben-yu/bd-p/707
自分の時は、その様にしたような気がします。
>>今回の方法は連続して○回同じデータが続いたら採用する、という読み取り方です。
この文章を見て、何を言おうとしているのかはっきりとしました。
でも、その方法が不明。Re: No1053についてTRさん,おはようございます。
情報ありがとうございます。
無料体験版で後日試したいと思います。
猛牛ロックさんの方が詳しいと思いますが,
>>>今回の方法は連続して○回同じデータが続いたら採用する、という読み取り方です。
>この文章を見て、何を言おうとしているのかはっきりとしま>した。
>でも、その方法が不明。
これは,チャタリング防止の一つの方法で,
サンプリング方式?なんて呼ばれているようです。
考え方としては,
ループのなかや割り込み関数のなかで,
スイッチの判定
↓
押されていたらカウンターをプラス
↓
カウンターが一定の回数になったかの判定
↓
一定の回数になったら,スイッチが押されたと判断
みたいな感じで,コーディングすると,
if(switch==osareta){counter++;}
if(counter==kaisu){
hontouniosareta=yes;
counter=0;
}
みたいな感じでしょうかね。
チャタリングの防止,サンプリング方式等でくぐると結構あります。
http://gurochoro.blogspot.com/2017/08/debounce-in-a-microcomputer.html
あたりにでてます。
それと煩雑なプログラムですが,以前,割り込み等を使って,
半田ごてタイマーをつくりました。
http://mabo52.sakura.ne.jp/index.php?c=7-11
このタイマーは,
スイッチオン
↓
動作時間の設定
↓
カウントダウン開始
↓
0になって,延長ボタンを押すと延長
↓
何もしなければ一分後に電源を切る
この動作をさせるのに,サンプリングみたいなことやって,
二つのキーが同時におされたか,とか,長押しされたか,
等プログラムの中で判断してます。mabo 2018/10/12(Fri) 11:06 !email! No.1075 !ico_edit!Re: No1053について> でも、その方法が不明。
そうでしたかorz
じゃあ、1つずつ?説明します。
マイコンのタイマーは、マイコンの機能の一つ、とは言っても、マイコン制御の外にあります。
つまり、外付けに近い存在です。
マイコンをどんなに酷使させても、タイマーは設定どおりに動き続けます。遅れがありません。
つまり、アラーム付きの時計のように回り続けます。1分と設定すると、1分毎に「ピピッ」と鳴ります。
なので、それを10回数えると10分経ったことが解ります。
一方、delayは「10分休憩」とするようなものです。10分は正確なのですけど、休んでいる間には何が起きても
対応できません。また、何度も休憩していると、現在の時刻が判らなくなります。
なので、正確な時間を測りたい時や、色々な作業をしたいときにはタイマーを使います。
で、タイマーで割り込みを設定すれば、その設定間隔で、(タイマー)割り込み関数が実行されます。
なので、割り込み関数で、自分でタイマー変数を作って、何回入ったかをカウントします。
例えば、タイマー割り込みを1msに設定したとして、割り込み関数で、
static unsigned int timer_ms=0; //time_msは自分で作った変数
timer_ms++; //timer_ms=timer_ms+1;
とすると、割り込み関数に入る度に、つまり、1ms経過するごとにtimer_msはカウントアップされます。
更に1秒毎にカウントアップさせる変数をつくります。
static unsigned int timer_s=0;
if(timer_ms==1000){//timer_msが1000になったら
timer_ms=0; //timer_msを0にして
timer_s++; //timer_sをカウントアップ
}
と書くと、秒を表す変数timer_sが1秒毎にカウントアップされます。
更に、同じ様に、
static unsigned char timer_m=0,timer_h=0;
if(timer_s==60){
timer_s=0;
timer_m++;
}
if(timer_m==60){
timer_m=0;
timer_h++;
}
if(timer_h==24)timer_h=0;
とすると、時計になります。
そうすると、朝の6時に目覚ましを10秒鳴らして
if(timer_h==6 && timer_m==0 &&timer_s<10) buzzer=on;
else buzzer=off;
とか、定時のタスク処理をする事が可能になります。
また、それと同時に自作タイマー(ストップウォッチ)を仕込むことが出来ます。
(外部変数)int timer1=-1;//-1はhome位置。timer1は単に作った名前
if(timer1>-1 && timer_ms==0)timer1--; //timer1がhome位置でなければ、1秒毎にカウントダウン
if(timer1==0)buzzer=on; 3分経ったらブザーを鳴らす
のように作っておいて、どこかで
timer1=180;
とカウント開始トリガを入れれば、3分後にブザーを鳴らすことが出来ます。
このような処理をいくつも仕込むことが可能です。いつでも自由にスタート信号を入れられ、
delayのような待ち時間はありません。
※実際にはブザーを止める処理も必要になります。猛牛ロック 2018/10/13(Sat) 10:08 !email! No.1076 !ico_edit!Re: No1053について猛牛ロックさんへ
先に確認したい事が有ります。
no1040の猛牛ロックさんのプログラムですが、
Second関数の戻り値change は、char change=0 と記載して、初期化もしなくて良いのですか?
宜しくお願いします。TR 2018/10/13(Sat) 15:51 !email! No.1077 !ico_edit!Re: No1053についてあれって、私が書いたものだったんですか…
char change;
と宣言した時点で、変数changeの場所が割り当てられます。
で、外部変数(グローバル変数)だと、自動に0に初期化されます。
今回はローカル変数なので、割り当てられた場所に既に書き込まれたデータがあればそれが値になります。
で、実際に使われるのは
change=Second(DousaTime);
で、取得した値が入り、次行で
if(change==0){
となります。なので問題は無いです。
実際の所、取得した値を入れる変数なので、適正初期値もありません。
つまり、何も問題ないと思います。
※なにも入れていないで、その値の処理になってしまう場合は良くないです。猛牛ロック 2018/10/13(Sat) 18:18 !email! No.1078 !ico_edit!Re: No1053についてchangeは、Second関数の戻り値ですよね?
若しそうであれば、main関数内で、Second関数が呼び出されるたびに
changeに数値が足されていってしまうのかと思いましたが、間違いでしょうか?
ようやく、関数が分かりかけています。
タイマーの方は概念だけは分かりました。
有難うございました。
タイマーについて、ここから先は、実践が出来ないと無理だと思います。Re: No1053について> change=Second(DousaTime);
なので、戻り値がそのままchangeに代入されます。
足されるというのは
change+=Second(DousaTime);
や
change=change+Second(DousaTime);
と書かれている時です。
「=」(や「+=」)は代入演算子と呼ばれ、右辺の(計算)結果を左辺に代入します。
ほかにも、「-=」「|=」「&=」「*=」など複合したものがいろいろありますけど、
どれも
a$=b;
なら、('$'は+,-,/等の演算子)
a=a$b;
の形になります。猛牛ロック 2018/10/13(Sat) 19:10 !email! No.1080 !ico_edit!Re: No1053についてTRさん,猛牛ロックさん,おはようございます。
書き込みありがとうございます。
>タイマーについて、ここから先は、実践が出来ないと無理だと思います。
タイマー関連のもの制作なさるといいかもしれませんね。
材料費もそれほどかかりません。7セグLED等を使えば,
ダイナミック表示等の,練習になると思います。
私は,
http://nonchansoft.my.coocan.jp/pic/timer1.htm
の回路図を参考に,自分なりにアレンジして,
件の半田ゴテタイマーを作りました。
残念ながら,このHPにでているプログラムは,
アセンブリーなので,
細かいところは,わからなかったのですが,
エッセンス?を C に移植しましたものを,
改変いたしました。
完成するまで,自己保持回路までいれると,5年以上かかりました。
途中中断してたこともありますが,猛牛ロックさんのように,
プログラム・PIC等に,くわしければ,もっと短縮できたと思います。
これで,結構勉強になりました。mabo 2018/10/14(Sun) 11:38 !email! No.1081 !ico_edit!Re: No1053について> MABOさん
半田ごてタイマーを見ていて、ふと、マルチファンクションボードと似ている事に気づきました。
3つのスイッチ、4桁の7セグ、ブザーと、偶然にも同じ構成です。
LEDをはんだ(SSR)出力と見立てて、テスト出来そうです。
あっ、マルチボードの7セグもダイナミック点灯ですよ。
74HC595で出力ピンを増やしただけです。なので逆にプログラムは面倒です。
あと、SSRモジュールhttps://www.aliexpress.com/item//32852838446.html
があればかなり近づきますね。
で、SSRの自己保持回路を見ていたのですけど、
「あれ?これってHIGH出力しなくてもSSR動いちゃうんじゃない?」なんて思って
よくよく見たら、切る時の為にフォトカプラ動かすんですね。
省エネでよく考えられていますね。(SSRの自己保持も見たのはココしかない気がします)
私なら、精々、GNDラインをトランジスタで止めて、並列にスイッチかなぁ?猛牛ロック 2018/10/16(Tue) 23:21 !email! No.1087 !ico_edit!
アルディーノについて、巷の記事を読んでみました。 ↓
https://n.mtng.org/ele/arduino/tutorial001.html
C言語なんですね。
PIC初心者としては、とっつきやすいと感じました。
アルディーノってマイコンボードと呼ぶそうですね。
アマゾンで見つけましたが、如何でしょうか?
https://www.amazon.co.jp/keyestudio-UNO-%E9%96%8B%E7%99%BA%E3%83%9C%E3%83%BC%E3%83%89-USB%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB-Arduino%E4%BA%92%E6%8F%9B/dp/B01JRFS1QI/ref=cm_wl_huc_item
本は、これがいいと思いましたが如何でしょうか?
https://www.amazon.co.jp/Arduino%E3%82%92%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86-%E7%AC%AC2%E7%89%88-Make-Massimo-Banzi/dp/487311537X/ref=pd_sbs_14_5?_encoding=UTF8&pd_rd_i=487311537X&pd_rd_r=6d98aebc-caee-11e8-a689-293274f80a62&pd_rd_w=NcGFc&pd_rd_wg=3cFrB&pf_rd_i=desktop-dp-sims&pf_rd_m=AN1VRQENFRJN5&pf_rd_p=cda7018a-662b-401f-9c16-bd4ec317039e&pf_rd_r=YGH2QWXBVV3WBKD23079&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=YGH2QWXBVV3WBKD23079
Re: アルディーノArduinoの日本語リファレンスはこのページです。
http://www.musashinodenpa.com/arduino/ref/
また、このページにある早見表を手元に置いておくといいです。
http://www.musashinodenpa.com/wiki/?quickrefsheet
本に関しては、私はこの類の本は買いません。webで検索します。
この本も有名な本ですけど、全くの初心者用です。
例えば、https://www.elegoo.com/download/
で、「Elegoo UNO R3 Super Starter Kit」や他のキットの説明書を読めば充分だと思います。
実際に動かすスケッチやライブラリも入っています。
モノは、UNOなら、どれも違いは殆どありません。
純正/互換品か、DIP/SMDか、という位です。
回路図は公開されているので回路的にはどれも同じです。
DIP品は外して使う事も可能ですけど、殆どしないでしょうから、SMDでも良いです。
取りあえずは
UNO
https://www.aliexpress.com/store/product//2444008_32836264665.html
マルチボード
https://www.aliexpress.com/item//32730415337.html
の2つがあれば充分始められます。勿論、アマゾンやAITENDOでも売っています
マルチボードは
3つのスイッチ、4つのLED、4桁の7セグ、ブザー、ボリュームが付いたものです。
実際は、しょぼいものですけど、キッチンタイマー相当のものまで作れます。
また、この方がケーブル/配線が無い分、間違いが無く、準備/片付けの時間が要らず、
勉強には適したボードです。unoに差し込めば良いだけです。
※私も、このボードを持っています。聞かれた時に簡単に試せた方が都合が良いです。猛牛ロック 2018/10/09(Tue) 00:23 !email! No.1060 !ico_edit!Re: アルディーノNo.1053
変数宣言について
static unsigned char cnt=0,MODE_temp,MODE_new;
この変数宣言ですが、
変数cntに対する値 → 0、MODE_temp 、MODE_new
以上3個ある、こういった使い方があるんですね!
static宣言
これも初めて目に留まりました。
呼び出された回数を値とする といった事でしょうか?
cntに代入する値を増やそうとしているのでしょうか?
ハッキリとしません。
商品の方、有難うございました。
安くて助かります。
先ずは、今やっているピログラムの確認を
Pic3でやってからアルディーノの購入を考えます。Re: アルディーノvoid f(void){
char a=0,b=5,c;
a++;
b++;
c=a+b;
PORTA=c;
}
void main(void){
while(1){
f();
delay(1000);
}
}
例えばこんな関数fがあったとします。
メイン関数からf関数が呼ばれると、
char a=0,b=5,c;
※カンマで、複数作っても良いです。1つずつ初期化するのと同じです。
で、変数a,b,cが作られますけど、aには0、bには5が入ります。
そして、cは変数を作る=その変数の場所を確保しただけで、内容は書き換えません。
つまり、その前の状態のまま使われます。つまり、内容は不定です。
で、次に、a++とb++するのでaは1、bは6になります。そして、最期のPORTA=cをしてこの関数は終わります。
メイン関数のループで、次にf関数が呼ばれた時にも、さいしょのa=0、b=5から始まります。
次に、
static char a=0,b=5,c;
の場合の動作です。1回目は全く同じ動作です。
でも、最期にPORTA=cをした後もstaticが付くと変数(の値)が残ります。
つまり、2回目にf関数に来たときにはaは1、bは6です。
「static char a=0,b=5,c;」
の初期化作業は最初に入った1回目しかされません。
つまり、入る度にa++、b++されている分増えていきます。
そういった違いです。外部変数に近い動作になります。猛牛ロック 2018/10/09(Tue) 08:38 !email! No.1062 !ico_edit!Re: アルディーノあ、ループ中とかでも同じです。
while(1){
int i=0;
i++;
//…
}
だとループ先頭で、iは毎回0になります。
staticを付けると、最初の1回だけ0で、2周目以降はそのまま値が引き継がれます。猛牛ロック 2018/10/09(Tue) 09:04 !email! No.1063 !ico_edit!Re: アルディーノ猛牛ロックさんとやり取りをしていると、単に、教科書だけ見ていたら気付かない点を教えて下さい助かります。
例
タイマー0割り込みのif(T0IF==1) { //割り込みがあったら
TOIF==1は不要かと思っていました。
また、変数への値代入方法
int c=100 といった風に、一度に1個だけしか変数に代入できないと思っていました。
それと、装飾語のstatic これに至っては、キトで遊ぼう電子回路09には記載ありませんから。
static unsigned char cnt=0,MODE_temp,MODE_new;Re: アルディーノ猛牛ロックさん,ご無沙汰しております。
TRさん今晩は。
書き込みありがとうございます。
私も,猛牛ロックさんのお書きになってるのみると,
なるほどと思うことが沢山です。
ところで,話題がそれますが,
Fusion360期限切れで使えなくなりました。
引き続き使うには,有料版の購入か,新しくアカウント作って
再登録なんでしょうかね。
それから,PICのプログラムが,
古いWINDOWS7で作っていたので,
今の環境には,MPLABの環境がありませんでした。
早速最新版をインストールしましたが,
以前通っていたもののコンパイルができませんでした。
くぐると,
https://neo-sahara.com/wp/2018/08/25/mplab-xc8-compiler-v2-00-%E3%81%A8-mplab-code-configurator-v3-65-%E3%81%A7%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E5%87%A6%E7%90%86%E3%81%AB%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%82%A8%E3%83%A9/
http://tomio2480.hatenablog.com/entry/notfound_xch
等があり,対処するとコンパイルできるようになりました。
PIC3ですが,私も,時々TRさんと同じ症状になったこと
ありました。
私の場合,USBのコードの問題やら,
PIC3から書き込みアダプターとの結線の接続の問題やら
いじったら,解決してました。
もちろん,TRさんのようにOPTIONもいじったように
記憶してます。
記事をさがしたのですが,このことは,ブログには,
載せていなかったようです。
このブログ,備忘録も兼ねているので,失敗でした。
−−追記−−
staticの宣言については,猛牛ロックさんのおっしゃるとおりかと思います。
私は,変数の有効範囲というこことで理解しています。
static宣言してある変数は,その関数からでも書き換えできますが,
サブ関数で宣言してる変数は,その関数ないでしか書き換えできない,と私は理解してました。
正確宣言するには,多分サブ関数の変数(ローカル変数)は,
きっと,autoの宣言するんでしょうかね。
https://www.grapecity.com/developer/support/powernews/column/clang/034/page03.htm
のHPに下記のような記述がありました。
>変数には、
>
> 宣言された処理単位(関数)内でのみ存在する自動変数
> 処理を終えても存在して値を保持し続ける静的変数
>
>の2種類があります。これは、変数の『通用期間』に関する違いです。
>
>さらに
>
> 宣言された処理単位(関数)内でのみ参照できる局所変>数
> 処理単位の外からでも参照できる広域変数
>
>の2種類があります。これは、変数の『通用範囲』に関する違いです。
静的変数→static
自動変数→auto
プログラムを作るとき変数の受け渡しどうするかいつも悩みます。
サブ関数に引数として渡して,戻り値として受け取る方法もありますが,
私の場合,プログラムの視認性が悪くなるのでしょうが,
static宣言をするなどして,グローバル変数として,
操作する方が,手っ取り早いと思ってます。
mabo 2018/10/09(Tue) 21:32 !email! No.1065 !ico_edit!Re: アルディーノmaboさん、こんばんは。
自分も以前、切れてしまいました。
でも今は使えています。Re: アルディーノMABOさん。お久しぶりです。
っといっても、こっちはずっとチェックしてますよ(^^)/
で、ちょっと追記の所で誤解があるようです。(私の誤解かも)
ローカル変数は普通の宣言でauto変数です。つまり、
char i=0;
でauto変数になります。その関数というか、スコープが終わった時点で無くなります。
static char i=0;
とすると、この値、つまり、メモリの番地自体は生き残ります。
でも、スコープ範囲はauto変数も、static変数も変わらないと思います。
あくまでローカル変数として宣言していたらローカルだと思います。
つまり、別の関数からはそのiは呼び出せないし、そこで新たに
int i=0;
とか、前と違う意味のiを作っても全く問題ないと思います。
勿論、全ての関数外に書いたグローバル変数は常に有効です。
そんな風に捉えています。
※たまにグローバル変数なのにstaticが付いているのを見かけます。
意味があるのかどうか、判りません。私の理解では意味ないのですけど。猛牛ロック 2018/10/09(Tue) 23:45 !email! No.1067 !ico_edit!
MPLAB IPEというソフトを使ってみました。
これは、
ネット情報だとPIC3と接続してつかうソフトのようです。
試しに
電圧を3.5V、4.75V、5Vとかえてやってみましたが、
やはり、エラー表示が出てしまいました。
やはり、PIC3は故障のようです。
Target Device ID (0x0) does not match expected Device ID (0x1040).
試しに、Eraseボタンをクリックして、Blank Chechをクリックしたら
次の表示 →Blank check failed
この作業も失敗!
これは、PIC3が故障しているんでしょうね。
皆さん方も、PIC3が故障したことはありますか?
Re: Pic3故障か?PICKIT3(互換品)自体が壊れたことはありません。
でもあんまり使っていません。
一応、使っていない互換品がもう一つあります。
私としてはArduinoの方をお勧めします。
アマゾンで400円(nano)〜500円(uno)で購入できます。
aliなら250円〜350円程度でしょうか。
この間、より重要性というか存在感?が増しているように感じます。
特にホビーの領域では、圧倒しているような気がします。
情報量、手軽さ、様々なモジュールとライブラリ、標準でシリアル通信ができるので、
PCで情報を表示出来ることなど、習得も楽だと思います。猛牛ロック 2018/10/08(Mon) 12:33 !email! No.1056 !ico_edit!Re: Pic3故障か?Arduinoを見ましたが、色々と有りますね。
お勧めの本と、お勧めのArduino(具体のURL)をご紹介下さい。Re: Pic3故障か?とりあえず、自分も駄目もとで、アマゾンの互換品をポチット行きました。
Pic3ですよ。
アマゾンのレビューを見ると、
純正Pic3は2年ほどで壊れたとのレビューがありました。
自分は、2年10か月経過したので、やはり壊れたっぽい。
https://www.amazon.co.jp/gp/product/B01K26W8FQ/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1
maboさんの間欠を、下記のとおり変えてみました。
//プロトタイプ宣言
void InitInterTomer0(void);
をして、教科書のように、
main関数の後に//タイマ0割り込み設定関数を位置し
更に、//割り込みサブルーチンも、main関数の後に位置させました。
動作しましたよ!
それと、
以前にmaboさんから下のように教わったのですが
「
それから、割り込み関数の処理ですが、MACHからの信号を調べて、STARTフラグを操作してるだけです。
MACHからの信号は、一度LOWになるとずっとそのままですが、割り込みでは、何度もその信号をしらべるので、一度だけSTARTを1にするために、STARTが0の時だけに1にするようにしてます。
同じように、MACHからの信号がHIGHになったら、STARTを0にして、RA2を強制的にOFFにして機械を止めます。
これも、STARTが1の時だけ、一回だけ0にして機械を止める処理をします。
」
上記について疑問あり
どうして、わざわざ、STARTフラグを操作をしなければいけないのでしょうか??
理由も書いてあるのですが、どうしても理解できません。
単純に
machからの信号が0になったら、→RA2=OFF
としては駄目なのでしょうか?
変えた全文
/*****************************
* 間欠タイマー
* 16F627A
* XC8 V1.35
*
* RA6←MACHからの入力想定
* RA2←制御機器へ
*****************************/
#include <xc.h>
#define _XTAL_FREQ 4000000 //delay用宣言
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#define KanketuTime 2
#define DousaTime 1
#define On 0
#define Off 1
int Start;
//関数宣言
void Second(int sec);
//プロトタイプ宣言
void InitInterTomer0(void);
// メイン関数
void main (void){
OSCF=1;//内蔵発振器 4MHz使用に設定
CMCON = 0x07;// 1,2,17,18端子を入出力端子に設定
PORTA = 0x00;// 電圧レベルの初期設定
PORTB = 0xFF;
// 入出力設定
TRISA = 0b01010000;//RA5は入力専用・RA6は入力他は出力
TRISB = 0b11111111;//RB0は入力
//初期設定
RA2=Off;//MACH
RA6=Off;
Start=0;
//タイマ0割り込み関数の呼び出し
void InitInterTomer0(void);
GIE=1;//全体割り込み許可
// 永久ループ
while(1){
if(Start==1){//スタートフラグが1なら動作開始
RA2=On;
Second(DousaTime);
RA2=Off;
Second(KanketuTime);
}
}
}
void interrupt InterSyori( void ){//割り込みサブルーチン
if(T0IF==1){//割り込みがあったら
if(RA6==0){//MACHからの信号をしらべて0(Low)だったらスタートのフラグを1にする
if(Start==0){
Start=1;
}
}
if(RA6==1){//MACHからの信号をしらべて1(High)だったらスタートのフラグを0にして
if(Start==1){
Start=0;
RA2=Off;//機器の動作を強制的に止める。
}
}
TMR0=0;
T0IF=0;
}
}
//タイマ0割り込み設定関数
void InitInterTomer0(void)//プリスケラ2 5ビット=0 WDTは使わない
{
T0CS=0;
PSA=0;
//プリスケーラ値を2に設定
PS2=0;
PS1=0;
PS0=0;
TMR0=0x00;
T0IF=0;
T0IE=1;
}
// 待ち時間関数}
void Second(int sec){
while(sec >0){
sec--;
__delay_ms(1000);
}
}
Re: maboさんの間欠についての疑問ご無沙汰してます。_(._.)_
if(RA6==0) { //MACHからの信号をしらべて0(Low)だったらスタートのフラグを1にする
if(Start==0) {
Start=1;
}
}
if(RA6==1) { //MACHからの信号をしらべて1(High)だったらスタートのフラグを0にして
if(Start==1) {
Start=0;
RA2=Off;//機器の動作を強制的に止める。
}
}
の部分ですけど、実際の所、
if(RA6==0) {
Start=1;
} else {
Start=0;
RA2=Off;
}
でも、動作的には全く同じです。
けれども、今回の場合は行っている事が1命令、或いは2命令です。これが
if(RA6==0) {
Start=1;
kansu1();
kansu2();
kansu3();
keisan1;
keisan2;
…
}
みたいに長い処理の場合は、一度行えば充分なのに毎回割り込みに入る度に同じ事をしているなぁ、と言う事になります。
特にLCDなどに同じ文字を上書きするような時はそう思うでしょうね。
> どうして、わざわざ、STARTフラグを操作
これは必要な処理です。
メイン関数で
while(1){
if(Start==1){//スタートフラグが1なら動作開始
…
となっています。
尤も、この部分を
while(1){
if(RA6==0){
と変えるのなら、STARTフラグを使わないでも良いかもしれません。猛牛ロック 2018/10/06(Sat) 23:31 !email! No.1047 !ico_edit!Re: maboさんの間欠についての疑問お久しぶりです。
早速、有り難うございます。
Startは、省略しても大丈夫でしたか。
自分は、while(1)にある if( 1)を忘れたせいか動作しませんでした。 訂正してやってみます。
猛牛ロックさん
タイマー0割り込みに代わるプログラムは
// 永久ループ
while(1){
MODE=PORTA&0b11;
__delay_ms(50);
while(MODE!=(PORTA&0b11)){ //変化があればウェイト、無ければ確定
MODE=PORTA&0b11;
この部分ですか?TR 2018/10/07(Sun) 09:50 !email! No.1048 !ico_edit!Re: maboさんの間欠についての疑問Startや他の要らない部分を削ると↓のプログラムになります
#include <xc.h>
#define _XTAL_FREQ 4000000 //delay用宣言
// CONFIG
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#define KanketuTime 2
#define DousaTime 1
#define On 0
#define Off 1
//プロトタイプ宣言
void InitInterTomer0(void);
// メイン関数
void main (void) {
OSCF=1;//内蔵発振器 4MHz使用に設定
CMCON = 0x07;// 1,2,17,18端子を入出力端子に設定
PORTA = 0x00;// 電圧レベルの初期設定
PORTB = 0xFF;
// 入出力設定
TRISA = 0b01010000;//RA5は入力専用・RA6は入力他は出力
TRISB = 0b11111111;//RB0は入力
//タイマ0割り込み関数の呼び出し
void InitInterTomer0(void);
GIE=1;//全体割り込み許可
// 永久ループ
while(1) {
if(RA6==0) { //スタートフラグが1なら動作開始
RA2=On;
__delay_ms(1000*DousaTime);//4Mhz駆動時は50秒まで
RA2=Off;
__delay_ms(1000*KanketuTime);
}
}
}
void interrupt InterSyori( void ) { //割り込みサブルーチン
if(T0IF==1) { //割り込みがあったら
if(RA6==1) RA2=Off;//機器の動作を強制的に止める。
T0IF=0;
}
}
//タイマ0割り込み設定関数
void InitInterTomer0(void) { //プリスケラ2 5ビット=0 WDTは使わない
T0CS=0;
PSA=0;
//プリスケーラ値を2に設定
PS2=0;
PS1=0;
PS0=0;
T0IF=0;
T0IE=1;
}
*********************
割り込みは現状、動作を直ぐに止めるために付けています。
なので、元のプログラムでは
char Second(unsigned int sec)
という関数自体がその役割です。
1秒と入れても、信号が変われば直ぐに終わる仕様になっています。
※if(1)は意味がありません。付けないのと同等です。猛牛ロック 2018/10/07(Sun) 14:05 !email! No.1049 !ico_edit!Re: maboさんの間欠についての疑問教科書では、
以下の部分の記載がないので、不要となっているように思えます。
タイマー割り込みif(T0IF==1) { //割り込みがあったらTR 2018/10/07(Sun) 15:52 !email! No.1050 !ico_edit!Re: maboさんの間欠についての疑問if(T0IF==1) { //割り込みがあったら
の事でしたか。
PICの場合は割り込みの際に、1つの割り込みベクタ(関数)に飛びます。
しかし、割り込み要因としては今回の「タイマー0溢れ割り込み」以外にも、タイマー1比較A割り込みとか
タイマー2や外部割り込みやSPI割り込み…と山ほど要因はあります。
そこで、割り込み関数に入った場合に、何の割り込みで入ったのかを自分で判断する必要があります。
それがif(T0IF==1) { です。コメント部は正確には「タイマー0溢れ割り込みがあったら」です。
今回は1つしか割り込みはセットしていませんから、取っても同じです。入ってきたら必ず(T0IF==1)になっている筈です。猛牛ロック 2018/10/07(Sun) 17:47 !email! No.1051 !ico_edit!Re: maboさんの間欠についての疑問>割り込み要因としては今回の「タイマー0溢れ割り込み」以外にも、タイマー1比較A割り込みとか
タイマー2や外部割り込みやSPI割り込み…と山ほど要因はあります。
教科書にも、割り込みは、10種類もあるとありました。
if(T0IF==1) {
このように記載すると、10種類の割り込みから、タイマー0割り込みを特定できるという事ですね。
分かりました。
「タイマー0溢れ割り込み」このことですが、
自分としては、
「0タイマー0割り込み設定関数」と記載したかったのですが、「設定関数」の4文字が抜けてしまった様です。
で、
「0タイマー0割り込み設定関数」の自分的解釈は、
この関数を記載すると、
割り込みサブルーチンを実行すると理解しました。
なので、
while(1){
MODE=PORTA&0b11;
略
while(MODE!=(PORTA&0b11)){ //変化があればウェイト、無ければ確定
MODE=PORTA&0b11;
このように記載すれば、
MODE=PORTA&0b11; →まず、セレクターでモードを読み込む
while(MODE!=(PORTA&0b11))→ 現在のモードが、まず読み込んだモードと違えば
{
MODE=PORTA&0b11; →新しい値をモードとする
全て、並べれば、動作は、割り込みサブルーチンを実行するとこと同じと理解しました。Re: maboさんの間欠についての疑問割り込み関数での組み方ですけど、重要な事の一つは早く終わらせる、と言う事です。
このタイマー割り込みの場合、
4MHz/4サイクル/2分周/256=1.953Hz→約0.5ms毎に割り込みがかかります。
つまり、0.5ms後には次の割り込みの番になります。
なので、最長でも、0.5ms内に収まる処理にして、関数を終了させます。
while(1)はこの中をやり続ける、という意味です。
実際にはその中で、break文やreturn文を入れれば外に出ますけど。
while(MODE!=(PORTA&0b11)){
も同じ理由でよくありません。
で、実際の処理の仕方としてはカウンタ/タイマを使います。
static unsigned char cnt=0,MODE_temp,MODE_new;
MODE_new=PORTA&0b11;//最初に固定値をとる
if(MODE_temp!=MODE_new){//前回と違っていれば
MODE_temp=MODE_new;//値を更新して
cnt=0;//0からカウント
}else if(cnt<255)cnt++;//前回と同じだったらカウントアップ
if(cnt==100)MODE=MODE_temp;//カウントが100なら採用
のような処理です。
MODE_new 今回取得した値。
MODE_temp 前回取得した値。
で、MODE_tempが100回≒50ms続いたら採用してMODEに代入します。
このように書けば、10サイクル程度→10us程度の時間しか掛かりません。猛牛ロック 2018/10/07(Sun) 23:24 !email! No.1053 !ico_edit!
maboさん、こんにちは。
お久しぶりになりますね。
以前、大変お世話になりました。
お陰様で、当時製作したフライス盤は、今も時折、活躍します。
当時の思い出の中で、どうしても分からなかった事、それは、PICの言語です。
とうとう、最後まで、以下のプログラム(間欠制御)が分かりませんでした。
その後、退職をして、再雇用となり、時間が出来たので、今でも、時折、C言語を勉強しています。
で、以下のプログラム(間欠制御)ですが、当時は、外部割込みか、タイマー0割り込みのどちらかだろうとおもっていましたが、、、
最近やっと気が付きました。
以下のプログラム(間欠制御)には、外部割込みか、タイマー0割り込みのどれも使われていないという事です。
笑わないでくださいね(;^ω^)
/*****************************
* 間欠タイマー
* 16F627A
* XC8 V1.35
* RA6←MACHからの入力想定
* RA2ブロワ制御用リレー burowa
* RA3掃除機制御用リレー vacuum
* RA7 モニター用発光LED
*****************************/
#include <xc.h>
// CONFIG
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#define _XTAL_FREQ 4000000 //delay用宣言。下記__delay_msを使うとコンパイラがマイコンの周波数に応じてループ回数を計算します
#define On 1
#define Off 0
#define MACH_sig RA6 //machからの信号入力プルダウン
#define burowa RA2=RA7 //RA2:ブロワ出力 RA7:LED出力
#define vacuum RA3 //掃除機出力
unsigned char PORTB_save; //ポートBの保存用。(変更に対応するため)
unsigned char MODE; //セレクタ保存用
// 待ち時間関数
char Second(unsigned int sec){//1S→0.1Sに変更。int secに1を入れると0.01秒ウェイト
while(sec >0){
if((MODE!=(PORTA&0b11))||(MODE==3&&MACH_sig==0)||(PORTB_save!=PORTB)) return 1;
//セレクタスイッチが変更された場合とMACH制御でのオフ信号、間欠時間の変更があった場合はwhileから抜ける
sec--;
__delay_ms(10); //この部分を1000→10に書き換えたので1s→0.01s
}
return 0;
}
// メイン関数
void main (void){
OSCF=1;//内蔵発振器 4MHz使用に設定
CMCON = 0x07;// 1,2,17,18端子を入出力端子に設定 ??
unsigned int DousaTime,KanketuTime; //宣言。#defineからこちらに変更
char change;
PORTA=0;//出力のピンを初期設定。
// 入出力設定
TRISA = 0b01000011;
TRISB = 0b11111111;//負論理ロータリースイッチ2個。RB0-3が動作時間、RB4-7が間欠時間
OPTION_REG=0b00000000;//ポートBプルアップ
unsigned int TIME[]={60,100,150,200,300,600,900,1200,1800,2400,3000,6000,9000,12000,15000,18000}; //unsigned intで65000まで
// 永久ループ
while(1){
MODE=PORTA&0b11;
__delay_ms(50);
while(MODE!=(PORTA&0b11)){ //変化があればウェイト、無ければ確定
MODE=PORTA&0b11;
__delay_ms(50);
}
if(MODE==0||(MODE==3&&MACH_sig==0)){//OFF
burowa=Off;
vacuum=Off;
}
else if(MODE==1){//掃除機のみオン
burowa=Off;
vacuum=On;
}
else if(MODE==2||(MODE==3&&MACH_sig==1)){ //間欠
PORTB_save=PORTB;
DousaTime=TIME[PORTB_save&0b1111];
KanketuTime=TIME[PORTB_save>>4];
vacuum=On;__delay_ms(700);burowa=On;
change=Second(DousaTime); //動作時間分ウェイト
if(change==0){
burowa=Off;__delay_ms(500);vacuum=Off;
change=Second(KanketuTime); //間欠時間分ウェイト
}
}
}
}
Re: PIC追伸
プログラムの構成ですが、
以下の自分だったら、、、
main関数と
// 待ち時間関数
これの配置を変えて
まず最初にmain関数
その次に
// 待ち時間関数
を並べるのが教科書(キットで遊ぼう電子回路)の教えではと思いますが
如何でしょうか??
10/1 追記
Second関数とMaine関数を逆に配置しましたが、
コンパイルできませんでした。
Second関数のsecをSecond(DousaTime)として、
DousaTimeに10を与えることにより
Second関数に戻りsecを計算させているようですね!
こんなことが出来るんですね(@_@)
更に
Second関数中、 return 0とreturn 0を削除しても
Adwinのキットでは動作しました。
この他に
while(MODE!=(PORTA&0b11)){ //変化があればウェイト、無ければ確定
の下の行にある、
MODE=PORTA&0b11;
を削除しても動作します。Re: PICTRさん,こんにちは。
またしても亀レスですみません。
いろいろ頑張っておられますね。
私は,何をするでもなく,草刈り?をやったり,
最近はまってる,渋皮煮(栗)を作ったりしてます。
さて,PICのC言語についてですが,
>10/1 追記
>Second関数とMaine関数を逆に配置しましたが、
>コンパイルできませんでした。
これは,コンパイラーの仕様(文法)に関わることだと思いますが,
多分,明示的に最初にサブ関数の宣言をしてやるとコンパイルできるかもしれません。
void char Second(unsigned int),
等の宣言をすると大丈夫かもです。
「サブ関数プロトタイプの宣言」でくぐると沢山でてきます。
>Second関数のsecをSecond(DousaTime)として、
>DousaTimeに10を与えることにより
>Second関数に戻りsecを計算させているようですね!
>こんなことが出来るんですね(@_@)
そうですね,サブ関数は,ある一定の動作をするためのものですね。
ある数値をサブ関数に渡して,サブ関数で処理(計算?)して,処理した数値を呼び出した側に渡すという動作ですね。
tasu(a,b){
return a+b;
}
main(){
c=tasu(4.5);
}
これだと,変数cに9が入ります。
(文法的にあってるか分かりませんのでコンパイルするには,
手直しが必要ですね)
>更に
>Second関数中、 return 0とreturn 0を削除しても
>Adwinのキットでは動作しました。
「return」については,戻り値がない場合は,多分省略が可能だったと思います。
あるいは,省略すると戻り値として,0がもどるのかもしれません。
>この他に
>while(MODE!=(PORTA&0b11)){ //変化があればウェイト、無け>れば確定
>の下の行にある、
>MODE=PORTA&0b11;
>を削除しても動作します。
これ,プログラム見ましたが,大分時間経過してるので,
ちょと不明です。
分かったらレスします。
それから,割り込み処理ですが,割り込み処理には,必ず,
void interrupt *****(void){
}
というサブ関数が必要ですので,これの有無で判別できます。mabo 2018/10/02(Tue) 10:40 !email! No.1042 !ico_edit!Re: PICmaboさんこんばんは。
レス有難うございます
//待ち時間関数の配置ですが、
プロトタイプ宣言をしたら、main関数の後に待ち時間関数を配置しても動作しました。
これで、教科書通りとなったので、見やすくなりました (^^♪
それと、
main関数のelse ifにある、
change;
このchangeも分かりずらくしているので、
cheangeをカットして、下のようにしても、動作しました。
else if(MODE==2||(MODE==3&&MACH_sig==1)){ //間欠
PORTB_save=PORTB;
DousaTime=TIME[PORTB_save&0b1111];
KanketuTime=TIME[PORTB_save>>4];
vacuum=On;__delay_ms(700);burowa=On;
Second(DousaTime); //動作時間分ウェイト
if(Second(DousaTime)==0){
burowa=Off;__delay_ms(500);vacuum=Off;
Second(KanketuTime); //間欠時間分ウェイト
それと、割り込み関数のvoid interrupt *****(void){
自分も、この記載がなかったので、割り込み関数ではないと分かりました。
10/3追記
main 関数 中、//永久ループの中にある
while(MODE!=(PORTA&0b11)){
MODE=(PORTA&0b11); ← この意味が分かりました。以前教えて貰っていました。
お答え
次のループの意味は、while(保存していたセレクタスイッチの値が現在のセレクタスイッチと違っている間は){
現在のセレクタスイッチの値を保存しなさい
教えて下さった上記の文章を見て分かりました。
whileというループ関数は、if分と似ていますが、()内の条件が真なら{}内の処理を繰り返して行う
という事ですから、便利ですね。Re: PICTRさんこんばんは。
今日も,実家でとれた栗の渋皮煮を作成?してました。
レスの前に,疑問点解決なさったようで,なによりです。
PICのプログラムを作る時は,
ループの処理が不可欠だと思います。
ループがないと,一回きりの処理になってしまいますので。
特にたいていは,無限ループのなかに処理を置くのが
普通ではないかと思います。
処理的には,
判断→処理
の繰り返しですね。
無限ループにはこのみでしょうけど,いくつか種類があります。
コンパイルできるかどうかは,別問題ですが。
1 for (;;) {
処理;
}
2 while(1){
処理;
}
3 do{
処理;
} while(1)
などが代表でしょうか。
何をさせるかで,使うループも違ってくるでしょうね。mabo 2018/10/05(Fri) 00:28 !email! No.1044 !ico_edit!Re: PIC有難うございます。
今回のプログラムを、ざっくりと見ると、
machらの信号の有無を確認し、次の動作に繋げる といった流れだと思います。
で、maboさんは、
割り込み関数を使ってmachの信号の有無を確認した。
猛牛ロックさんは、
無限ループ(while(1)関数)とwhile関数の2つのwhileを使って、
machからの信号の有無を確認した。
ですよね??
いや〜、方々の頭の良さには感服です。
次に、maboさんの割り込み関数を使ったプログラムを学習します。
また何かあると思います。
その節は宜しくお願いします。
maboさん、おはようございます。
梅雨が明けて、毎日が猛暑ですね。
幸い、職場は、エアコンのある環境ですので、家にいるより、快適です。
過日、卓上フライス盤の移動最中に、誤って部品を折ってしまいました。
部材は、鋳物でした。
流石に中華です(笑
この、XJ9512は、フライス盤から、ボール盤に用途変更をし、使っています。
ボール盤としては、ある程度力もあるので、なかなかですよ。
部品を、NCフライスで製作しています。
あともうちょっと。
ジュラコンで、試しに作りました。
Re: XJ9512の補修TRさん,こんにちは。
今日も暑いですね。
ご自分で破損の部品お作りになるんですね。
私のフライスは,そこの部分はエアスプリング仕様に変更で,
外してあります。
ちょっと調べたら,12ドルぐらいで部品はあるようです。
https://littlemachineshop.com/products/product_view.php?ProductID=1463
まあ,送料考えたら,ご自分で製作の方がいいかもですね。mabo 2018/07/15(Sun) 10:09 !email! No.1035 !ico_edit!Re: XJ9512の補修maboさん、レス有難う。
そうなんですよね、送料が高い!
壊した部品ですが、無事に製作が完了し、取り付け後の動作も問題ないようです。
送料の話に戻りますが、
ドイツから、重さ17kgの品を買いました。
日本国内では、同様の品はあるのですが、自分のバイクに合いませんので、
やむを得ず、ドイツから取り寄せることにしました。
セカイモンというオークションの世界です。
実は、ドイツアマゾンで購入しようとしたら、日本へは無理という事でした。
しかし、オークションの世界は凄いですね!
http://www.sekaimon.com/s/ConStands%20Power%20Kawasaki%20Z%201000%20SX%2011-18%20/131090/de/?searchLocationType=all&aspect=Rennsport-TeileTR 2018/07/17(Tue) 17:35 !email! No.1036 !ico_edit!Re: XJ9512の補修TRさんこんにちは。
セカイモンで購入なさったんですね。
私も一応会員にはなってますが,カードの登録してないので,
まだ,購入はできません。
セカイモンに登録したのは,以前どなたかが紹介してくださったものを購入しようかなと考えたのと,
LOG SPLITTERSなるものがほしいなと思ったからです。
http://www.sekaimon.com/gb/11752/Farm+Implements+%26+Equipment/263442149710/
https://www.youtube.com/watch?v=N4zVPnAgtLI
結局止めてしまいましたけど・・・・。
これ,薪割りの道具なんですけど,
知人のところの伐採した材木薪にするのに,便利かな
と思った次第です。
いろいろ便利なものがあるようですね。mabo 2018/07/20(Fri) 11:22 !email! No.1037 !ico_edit!Re: XJ9512の補修動画サイトを見ましたが。
サクサクと薪割りが出来て便利そうですね。
でも、怖そうな感じです。
巻き込まれたら、大怪我をしそうです。TR 2018/07/21(Sat) 20:14 !email! No.1038 !ico_edit!
maboさん、お暑うございます。
今年も、この挨拶をする時期になりましたね。
今日は自分、休みでしたので、
雑木の根に悩まされていたの払拭すべく、伐採しました。
30年生の木です。元が30pにも育っていました。
なので、根本は実家のチェーンソーを借りてきて、
機械の力で切りました。
今日は、伐根が残りましたが、
汗をかいたので、一杯やりますよ(笑い
写真の、のこぎりは、今後に備えて新調しました。
きっと活躍してくれます。
Re: 雑木の伐採maboさん、こんにちは。
今日も暑いですね。
梅雨明けじゃないと思いますが、暑くて、錯覚を起こします。
今日は、暑くなる前に、続きの作業である、伐根をやりました。
約3時間半かかりました。
若い頃と違って、クタクタになったので、ここまでで終了。
埋め戻しは、また次の日です。
今までは、じめじめしていたのですが、これで、ドライになると思います。TR 2018/06/27(Wed) 11:55 !email! No.1032 !ico_edit!Re: 雑木の伐採TRさんこんばんわ。
抜根お疲れ様です。
こればかりは,重機ないと,手作業ですね。
30年ものをやったことはありませんが,
結構やっているので,大変さはよく分かるつもりです。
以前実家で抜根をしないで,なんとかできないかと,
スタンプアウトなるもので,処理したことがありますが,
http://mabo52.sakura.ne.jp/index.php?e=200
広告通りの効き目はなかったようにおもいます。
使い方が悪かったのかはわかりませんが。
時間があるのなら,切り株にして,
10年もほっておくと腐る,なんて気の長い話も,聞きました。
木陰がなくなると明るくなるし,乾燥もするようです。
多分,蚊も少なくなると思います。mabo 2018/06/27(Wed) 23:36 !email! No.1033 !ico_edit!
maboさん、おはようございます。
最近は、何かやっていますか?
自分は、
CNCフライスでバイク部品で、
前輪のクッションをオーバーホールする為の特殊工具を自作しました。
フライスの原点から何度も、プログラムをスタートさせたせいか、
ずれてしまいました。 工夫しないと駄目な感じです。
写真は、製作した自作の特殊工具です。
買ったら、3万位しますので自作しました。
多少使い勝手は悪いかもしれませんが、効果の程を期待しています(笑
⇓
海外の動画を参考にして作りました。
皆さん方も、特殊工具を作っていられるようです。
https://www.youtube.com/watch?v=eUA8-bilx6k&t=5s
Re: 週4日勤務TRさん,こんばんは。
また超亀レスになってしまいました。
TRさんは,着実にDIYなさってますね。
ちょっと,うらやましい気がします。
今回お作りになったのは,バイク修理のための,
SSR(SST?)でしがか,補助具ですよね。
改めて,すごいなと思います。
私は,このところ,DIYと呼べる物は,
あまりやっていません。
つい最近組み立てたのは,
ペルチェ素子を使ったクーラーです。
これ,市販品の組み立てですけど。
携帯の冷却に使おうかと思って
組み立てましたが,組み立てただけで終わってます。
実際に使うには,携帯にセットするケース?
を作成しなきゃなので,できるかどうか。
それと,今,部品街なのが,実家の混合水栓のカートリッジです。
水漏れしはじまったので,交換する必要がでました。
通常の水道だと,パッキングの交換ですみますけど,
混合水栓は,高くつきますね。mabo 2018/05/20(Sun) 21:52 !email! No.1027 !ico_edit!Re: 週4日勤務>ペルチェ素子を使ったクーラー
物凄いものを作っていますね!
テレビで見たくらいです。
手が出ませんよ〜。
混合水栓ですか、買ったことはありません。
いつも水道屋さんです。
なので、高いです。
時間が出来たら、セルフしたいですね。
牡鹿島に行ってきました。
湾が入り組んで、綺麗なところでした。
残念なことに、松島の観光船に乗れませんでした。
次回リベンジしたいと思います。TR 2018/05/21(Mon) 19:59 !email! No.1028 !ico_edit!Re: 週4日勤務TRさん,こんばんは。
書き込みありがとうございます。
>残念なことに、松島の観光船に乗れませんでした。
きれいですね。
私は,現職の時に行ったかなあ。
ちょっと曖昧です。
なるべく節約のため?(高くつくこともあるのですが。)
なるべく自分でやろうとしてます。
今回の挑戦は,混合水栓のカートリッジの交換です。
http://horigblog.blog122.fc2.com/blog-entry-211.html
http://02memo.seesaa.net/article/409331029.html
等を参考に,やり方の勉強をしてます。
実家も我が家も,以前,DIYでこの水栓に交換しました。
交換したときに,
いずれは,水漏れのためにカートリッジの交換だろうな。
と思ってましたが,かれこれ,10年ぐらいでしょうか,
それで,水漏れするようになった次第です。
ネットで,カートリッジは,
野口さん,5枚程度です。
これ,業者に頼むと,多分
出張費 8000円位?
部品代 5000円以上
工賃 5000円?
ということで,多分,部品代の4倍ぐらいになるかな。
ということで,DIYです。mabo 2018/05/22(Tue) 00:00 !email! No.1029 !ico_edit!Re: 週4日勤務混合栓のご照会に感謝します。
これなら自分もできるかもしれません。
どうもでした。
我が家と同じ型が分かれば、やれそうです。TR 2018/05/22(Tue) 06:27 !email! No.1030 !ico_edit!
- JoyfulNote v6.02 -
++ Edited by Hamel ++