トピック関連記事
48時間以内の記事は New Mark で表示されます
CNC用PCが壊れる
話題がかわりますけど、最近、ちょっと挙動が不安だったCNC用PCがとうとう壊れました(T_T)

WIN-XPの再インストール等してみましたけど、結局の所、不意にフリーズしたり、再起動したりで諦めました。
11年稼働していたので、まぁ寿命といえばそれまでです。

で、新しいPCの購入なのですが、MACHの必要スペックを見てみると、
パラレルポート制御の場合は
・WIN-XP,VISTA,7,8の32bit
・外付けのグラフィックボード
となっています。
※11年前は、そのような条件だったのは知っていましたけど、今では64ビットのOSとかでも大丈夫になっているのかと思っていました。

で、私の使っているシステム(オリマイのクワトロ)はシリアルポートも必要です。

マザーボードは、シリアル、パラレルが付いたものがまだ売られているようなのですが、OSの方が売られているのか不明でした。
結局、組んでOSインストールも面倒なので、中古で探す事に…
しかし、それもまた大変です。現物の裏を見てシリアル、パラレルポートが付いているのを1つずつ確認しました。
けれども、ポートがあれば、OSが64BITだったりで、やっと見つけたのが
https://www.0799.jp/products/detail.php?product_id=981
あたりです。
しかし、古すぎる。
CPU Core2DuoE8400[3G]/2GB
2009年10月 発売
だととても5年ももつと思えません。

で、そこからさらに探してやっと見つけ出したのが
http://www.used-pc.co.jp/shopdetail/000000074528/
です。
Corei5 3470 3.2GHz
と大夫良くなりました。
ベースモデルはWIN8 64Bitだったのを諸事象でWIN7 32bitに構成をかえたもののようです。
これは即購入を決意しました。

長く安定して動いてくれるのを祈るばかりです。
次に壊れた時はCNCシステムの変更になりそうです。
猛牛ロック 2018/12/08(Sat) 18:33 No.1313
Re: CNC用PCが壊れる
猛牛ロックさん,こんばんは。

前スレでは,細かい解説ありがとうございます。いつもながら勉強になります。




時間がたつと,しかたないんでしょうかね。

それにしても,だんだん,以前の環境が手に入りにくくなりますね。

一番のネックは,シリアルポートでしょうかね。

これ,なければ,ノートでも十分なんですけどね。

最悪

 PC→→ 「スムーズステッパー」 →→ CNC

みたいな環境でシリアルポート省略かな。

以前,ノートのシリアルポートでも動いたの記事で,私の環境であれこれやりましたが,結局ノートのシリアルポートはだめでしたね。


それに,Mach3もいつまでもつのでしょうかね。

Mach4は,確か,インストールできるPCが一台かなんかだったような気がします。

久しぶりにSSTのHP見てみましたが,

https://warp9td.com/index.php/sw#WindowsDriverUss

ドライバーは,windoes10のものまであるんですね。
mabo   2018/12/08(Sat) 22:19 No.1316
Re: CNC用PCが壊れる
maboさん、ご例示提供有難うございます。
原因が分かりました。
可変抵抗器のご接続でした。
写真の左側が正解。



気が付くまで2日間以上かかりました。



プログラムを見ていて疑問があります。
若しお分かりでしたら、教えてください。



60行目です。
(temp << 8)の意味を知りたいのです。
<<は、tempのビット列を8ビット右へシフトすると思います。
これは、ADRESHに入った値をADRESHビット内の右端に合わせて値を整列させるということですか?

1111000→0001111

若しそうであれば、
ADRESHに読み込まれる値は、左端から入るということになるけど、
どうなんだろう?

TR   2018/12/09(Sun) 06:58 No.1317
Re: CNC用PCが壊れる
TRさん,猛牛ロックさん,おはようございます。

TRさん,ごめんなさい。

かなり前に作ったプログラムなので,中身すっかり忘れてます。

なぜ,左詰にしたのか,忘れてます。

ADFM = 0

で左詰めの設定をして,右に8ビットシフトしてますので,下位の2ビット切り捨ててます。

多分,PR2の値を60〜255にするための処理だと思いますが,忘れています。

猛牛ロックさんのように,理論的な背景があるわけではなく,
トライアンドエラーで,設定した数値なので,なぜこうしたか不明です。

混乱させてすみません。

追記です。多分,精度がいらないので,

http://electronicworkce.boo.jp/pic16f88%E3%81%A7ad%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%82/

のHPのようにしたのかもしれません。
mabo   2018/12/09(Sun) 10:06 No.1318
Re: CNC用PCが壊れる
> (temp << 8)の意味を知りたいのです。
> <<は、tempのビット列を8ビット右へシフトすると思います。

8ビット「左シフト<<」です。
よくあるのが
unsigned int adc=(ADRESH<<8)+ADRESL;
です。右詰めなら10ビット、左詰めなら16ビット(下位6bitは0)になります。
ADRES「H」レジスタなので、単純に「その位置(桁)に戻した」ということです。
猛牛ロック   2018/12/09(Sun) 13:10 No.1319
Re: CNC用PCが壊れる
>です。右詰めなら10ビット、左詰めなら16ビット(下位6bitは0)になります。
ADRES「H」レジスタなので、単純に「その位置(桁)に戻した」ということです。

例は、右詰になっていますが
ということは、ADコンバーター設定でコンバーターに読み込ませる設定を左詰めにしたから、
右に8ビット戻したということですか。


// ADコンバータ設定
ADCON0 = 0b00000001; // RA0をADコンバータピンにし、ADコンバータ機能をEbableに
ADCON1 = 0b10010000; // 結果数値は右寄せ、
TR   2018/12/09(Sun) 17:58 No.1320
Re: CNC用PCが壊れる
> ということは、ADコンバーター設定でコンバーターに読み込ませる設定を左詰めにしたから、
> 右に8ビット戻したということですか。

ADRESHとADRESLの桁を合わせたと言う事です。右揃え、左揃えは関係ありません。
元々の桁が違うので、それをもとにもどしただけです。

10進数で言えば、ADRESHは万の単位、ADRESLは一の単位だと思ってください。
98765432という数値が、9876と5432の2つに分かれてくるわけです。で、9876を左に4つシフトさせて
98760000にしてから5432を足して、元に戻します。
猛牛ロック   2018/12/09(Sun) 19:21 No.1321
Re: CNC用PCが壊れる
AD返還後のことが写真の部分に書かれると推測します。
推測の意味は、
ADRESHとADRESLが合わさって16ビットなんだけど、10ビット分だけ読み込みますとあるようです。
それも、合わせ場合、左詰めか右詰めを選べるようなことが書いてあると思います。

猛牛ロックさんの言っている意味が分かりません。
写真のことと何か、関係があるのですかそれとも、全く違うのでしょうか?

合成写真右は、ツールラボさんからお借りしました。
絵を添えた方が分かりやすいと思いました。

TR   2018/12/09(Sun) 20:02 No.1322
Re: CNC用PCが壊れる
TRさん,猛牛ロックさん,こんばんは。

猛牛ロックさん,解説ありがとうございます。

なんか,自分の前に作ったプログラム,だしてしまいましたが,
このプログラム,通常のやりかたではないですね。

PWMといいつつ,PR2をいじって,周期をかえてましたが。

PWMの本来である,振幅を変更してないので,邪道かもですね。

目的がステッピングモーターの制御だったので,苦肉の策でした。
mabo   2018/12/09(Sun) 21:30 No.1323
Re: CNC用PCが壊れる
画像のそのままです。ADRESHはADRESH<<8で、本来の桁になります。
割合で使う場合も、ADRESLと合体する場合は桁合わせの為に「<<8」をします。

画像の説明では
ADRES、つまり変換した10ビットの値は0b1111011011です。
これがADRESHとADRESLの2つに分かれて格納されます。
右詰めなら
ADRESHが0b11
ADRESLが0b11011011です。
なので、ます、ADRESH<<8をすると0b1100000000です。元の0b「11」11011011の桁に移動させただけです。
そして、ADRESLを足すと、元のADRES値(10ビット)になります
※12ビットとして使いたいなら(ADRESH<<10)+(ADRESL<<2)みたいになります。


左詰めなら
ADRESHが0b11110110
ADRESLが0b11000000
です。おおよそ、左詰めの場合は8ビットで使うか、16ビットで使うかの場合が多いです。
8ビットならADRESHのみしか使いません。16ビットで使うなら同じ様にADRESH<<8をします。
つまり、0b1111011000000000です。これとADRESLを足して16ビット値とします。


<追記>

> ADRESHとADRESLが合わさって16ビットなんだけど、10ビット分だけ読み込みますとあるようです。
> それも、合わせ場合、左詰めか右詰めを選べるようなことが書いてあると思います。

ADCの変換値はADRESです。それは10bitの値です。
1バイト(8bit)には当然収まらないので、2バイト、つまり、ADRESHの1バイトとADRESLの1バイトの
2つにわけられて書かれます。そして、関係ない場所の6bitには0が書かれます。

正直、何が解らないのかが解らないです。


更に追記
もしかしたら、10進数&メモリ3*2桁、値4桁に置き換えて、
1234の数値が右揃えなら「001234」になって、
左揃えなら「432100」になるなんて思っていました?
単純に右揃えなら「001234」で、左揃えなら「123400」と
格納されます。※関係ないマスには0が入ります
で、
右揃えなら、1と234の2つに分かれるので1を3つ左シフトして1000にしてから234を更に足します
猛牛ロック   2018/12/09(Sun) 22:13 No.1324
Re: CNC用PCが壊れる
temp = ADRESH;
temp = (temp << 8) + ADRESL

上記の式は、ADRESHを8bit右にずらしてADRESLと合体させてADRESの10ビットにするといっているが、
結果は、ADRESHの内6ビットだけ消えて、
残りの2ビットとADRESLと合体し、10ビットとなるわけですね?
TR   2018/12/10(Mon) 10:18 No.1325
Re: CNC用PCが壊れる
> 上記の式は、ADRESHを8bit右にずらしてADRESLと合体させてADRESの10ビットにするといっているが、
だから違います。「<<」は見ての通り左へのビットシフトです。2進数表示で8つ「左」にずらします。
どこかで右って間違いましたか?

> 結果は、ADRESHの内6ビットだけ消えて、
いいえ消えません。勿論tempが8bitの変数ならすべて消えることになります。
しかし、今回は
unsigned int temp;
と、16ビットなので、8BIT左にずらして、本来の桁へと移動させただけです。
16ビットの内の下位8ビットに入っていたものを上位8ビットに移動させています。

(ADRESH<<8)+ADRESL
という計算自体が、「元のADRESレジスタを取り出している」と言う事です。
(2行表記でも同じ)


<追記>
あぁ、MABOさんのNo.1318 のレスですね。

これは、No.1314とNo.1315の話が混ざっている?ような気がします。

No.1315では左詰めの設定で、単にADRESHのみをreturnしています。
8ビット値で充分な場合は通常、左詰めにして、ADRESLを見ずにADRESHだけを採用します。

No.1314は右詰めに設定して、普通に10ビット取り出しています。そして、main関数のループ部で、
CCPR1L = num / 4;
と8ビットに直しています。
つまり両者ともに上位8BITしか使っていません。

まぁ、実際には8ビットしか使っていないので、
「左詰め&ADRESHのみ」をする方が良い、という考え方もあります。

ただ、もう一方で、今回のadconv関数をライブラリとして使いまわす、という考えもあります。
それは、無駄にデータシートを見て書き直すよりも、実績のある馴れたものを使う、という考え方です。
ADRESレジスタ値をそのまま返す関数として、adconv関数を使って、それを使いたいBIT数に変える、というのも
プログラミングではよくあります。
下手にadconv関数を書き換えてしまうと、振り返った時に「このソースで使ったのはどっちだったっけ?」となるわけです。

猛牛ロック   2018/12/10(Mon) 12:44 No.1326
Re: CNC用PCが壊れる
間違って覚えてしまったようです。
了解です。
有難うございました。
TR   2018/12/10(Mon) 17:11 No.1327

処理 記事No 暗証キー

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