| TOP | ホーム | ページ一覧 |

No.14834 への▼返信フォームです。
 
電子サイコロの制作
   投稿者: saku    
2022/10/15(土) 23:42
No. 14834 引用
 
  初めまして、sakuといいます。
今回、電子工作を久々にしたくなり「電子サイコロの制作」を参照させていただいたのですが、ソースファイルを開いてみたところ、言語や形式がわからず、行き詰まってしまいました。私は普段からArduinoを使用しているので、ほかの言語や、開発環境なども知らず、
C言語に書き換えようにも何もわからずじまいです。ぜひ言語などについて、書き換えるときに注意してほしい点などありましたら教えていただけるとありがたいです。

 
Re:電子サイコロの制作  引用
  投稿者: O-Family    ..2022/10/16(日) 09:41  No.14835
  sakuさん、初めまして。

HEXファイルを掲載してあるので、まずは回路を組み立てて動かしてみてはいかがですか?

私は昔からC言語が嫌いで当ページでも触れていませんが、どの言語でも処理の行程は同じで、英語やフランス語と同じく単語を理解しないと文法はわからないですよね。

私もCは嫌いと言っても、CやArduinoのスケッチを読み解くことは出来るので、参考になるプログラムから移植することはできます。

当ページにもBASIC言語のマニュアルを日本語で載せてあるので、どう言う処理が行われているかを解読していけば、他言語の移植も可能になるはずです!

プログラムのコメントも必要以上にたくさん書いてあるので、参考にしてください。
個々の文法や処理内容で不明な点があれば、遠慮無く質問して下さい!
Re:電子サイコロの制作  引用
  投稿者: saku    ..2022/10/19(水) 01:36  No.14836
  .jpg / 48.8KB

返信が遅くなりすみません
まずはということでパーツをはんだ付けししてみました!
抵抗器がのっていたものよりも大きく、折り曲げたり、浮かしたりして何とか付けました…
また、最近フリスクのケースが37×70×11mm程にサイズが変わったそうで、
秋月電子さんのほうでもフリスク用基板が56.5×32mmの22×12穴に変わっていたりと大変でした
ソースの方は代用できそうな文法を探しています…
はんだ付けが終わったものと、はんだ付けの時に書いた簡易図を添付しておきますので、
何かアドバイスがあればお願いします!
長文失礼しました。
Re:電子サイコロの制作  引用
  投稿者: saku    ..2022/10/19(水) 01:38  No.14837
  .jpg / 48.8KB

青が抵抗器それ以外は略して書きました

Re:電子サイコロの制作  引用
  投稿者: saku    ..2022/10/19(水) 03:53  No.14838
  一日に何度もすみません
[ On Diceno Goto Dno0 , Dno1 , Dno2 , Dno3 , Dno4 , Dno5 , Dno6 '表示目ごとの起動処理。]
となっている部分は多分岐処理なのでしょうか?
また、多分岐処理の場合、switch文などの比較変数を用いて代用可能でしょうか?
Re:電子サイコロの制作  引用
  投稿者: O-Family    ..2022/10/19(水) 08:39  No.14839
  抵抗器は1/6Wか1/8Wのφ1.8mmの小さな物を使った方が良かったですね。
無理にフリスクのケースに入れなくても、小型のケースは色々ありますよ!

「On Goto」文は「switch case」文と同じ働きです。
Re:電子サイコロの制作  引用
  投稿者: saya    ..2022/11/06(日) 17:00  No.14840
  O-Family様
お世話になります。
初心者なのでご教授いただけますと助かります。
電子サイコロのプログラムで、
Mcucr = &B0011_0000 '##### BASCOMのバグ #####
これはどういうバグなのでしょうか?

MCUCRを調べるとSEとSM1に1を立てていることはわかりました。
― PUB SE SM1 SM0 ― ISC01 ISC00
基本操作を見るとビット1,0 - ISC01,0 : 外部割り込み0条件制御らしいということしかわかりませんでした。

! sleepは何だろう?と調べたら!ってアセンブラ命令のsleepなんですね。
POWER modeがありますがsleepを使う特別な理由があるのでしょうか?
それとも13Aはsleepを使わないとうまく動かないなどあるのでしょうか?
レジスタを覚えるのに苦労しておりますのでご教授いただけますと助かります。
よろしくお願いします。
Re:電子サイコロの制作  引用
  投稿者: O-Family    ..2022/11/06(日) 17:38  No.14841
  これは、古いバージョンのコンパイラのバグで、すでに開発元に報告して製品版のコンパイラの新しいバージョンでは修正されています。
試用版のユーザーのためにソースは古いまま掲載してありますが、下記の行をコメントアウトしてあるように、AVRをパワーダウン・モードにする命令です。
' Power Powerdown 'AVRをパワーダウン・モードに移行する。

上記のBASIC命令をコンパイルすると、下記のアセンブラ・コードになります。
Mcucr = &B0011_0000
! sleep

コンパイラが最新版ならば、「Power Powerdown」命令を使えます。
Re:電子サイコロの制作  引用
  投稿者: saya    ..2022/11/06(日) 18:13  No.14842
  ご教授感謝いたします。
PICとAVRを交互に学習すると頭が変になりそうです。
PICとAVRはレジスター構成が違うので理解するのに苦労します。
AVRは下位から上位まで覚えることがほぼ同じ内容ですがPICはFSRが違いすぎて特定のデバイスに特化しないと深みにはまります。
AVRの方が使いやすいというのはよくわかりました。
ありがとうございました。
Re:電子サイコロの制作  引用
  投稿者: O-Family    ..2022/11/06(日) 18:35  No.14843
  PICやAVR、またESP32やラズベリーパイ等々の環境でも、複雑で面倒なレジスター操作を全て憶えなくてもいいようにコンパイラが存在します。
一部の特殊な操作の場合のみ、レジスターを調べて直接操作すればいい環境です。

すでにアセンブラのみで記述する人も、ほとんどいないと思いますね。
C言語は初心者には難解なので、アマチュアにはArduinoのスケッチやPythonのユーザーが多くなりました。
どのような目的で学習されているのかわかりませんが、私も面倒な学習は嫌いなので、安易な方法で楽しまれるのもいいかと思います!
Re:電子サイコロの制作  引用
  投稿者: saya    ..2022/11/06(日) 19:30  No.14844
  今回つまずいたところです。
Set Gifr.pcif レジスタ操作でpcifのビットがわかりませんでした。
理解するまで1時間格闘。
Mcucr = &B0011_0000先の説明で納得しました。
! sleep
On Pcint0 Intspk Nosave
何故Nosave?
割り込みルーチンではアセンブラでスタック操作。
アセンブラで書く理由を理解するのが難関(;^ω^)
>複雑で面倒なレジスター操作を全て憶えなくてもいいようにコンパイラが存在
初心者にはこの程度でも複雑怪奇なんです。
PICやAVRのBASICって簡単だと思い込んで買ってしまったのが運の尽き。
最初はパソコンのBASIC(PC-8801相当)と勝手に思い込んでしまいました。
マイクロコントローラーを始めましたのは面白そうだったからと頭の体操です。
Re:電子サイコロの制作  引用
  投稿者: O-Family    ..2022/11/06(日) 22:07  No.14845
  > Set Gifr.pcif レジスタ操作でpcifのビットがわかりませんでした。
ここは、この掲示板でも何度か質問があった所で、割り込みの内部回路やレジスターを省略するために各AVRチップによっても複合化が複雑になっていて、とてもわかりにくいですね。
私も、今でもピン変化割り込みを使うときは、データシートを何度も確認する所です。

> On Pcint0 Intspk Nosave
> 何故Nosave?
これはコンパイラの中身を知らないと理解できない所で、通常は「Nosave」オプションなど使わなくてもいいのですが、AVRは演算のレジスターがR0〜R31と数が多く、コンパイラは通常の命令でもほとんどのレジスターを使用するので、割り込み処理ルーチンでは全てのレジスターを一端スタックのメモリーに待避します。
割り込み処理では、この待避の作業でフラッシュの容量を多く使い、待避を行うだけでかなりの処理時間を取ります。

アセンブラで書くときは、割り込み内で使用するレジスターだけを待避すればいいので、レジスターの待避をユーザーに任せる命令が「Nosave」オプションです。

割り込み処理をBASIC命令で書くときは、「Nosave」オプションを使うとプログラムが暴走してしまいます。
フラッシュの容量や、高度な割り込み処理で処理時間を極端に短くしたい場合にのみ使うので、こんな命令もあると言う程度に憶えておいてください。
これも基本的にコンパイラに任せておけば、レジスターを意識しなくてもいい点です。

> 初心者にはこの程度でも複雑怪奇なんです。
私のプログラムは、けっこうAVRの機能を使い尽くすように設計しているので複雑になっている所も多いと思いますが、普通の処理を行う場合は、ほとんどBASIC命令だけでコンパイルしてくれるので、それほどレジスターを深掘りすることもないと思うのですけどね!

> PICやAVRのBASICって簡単だと思い込んで買ってしまったのが運の尽き。
逆に、購入がきっかけで楽しみが増えた程度にプラス思考で!

> 最初はパソコンのBASIC(PC-8801相当)と勝手に思い込んでしまいました。
BASCOMの文法はN88やVBと大きく違いが無いですし、AVR特有の機能を使うための命令群が多いので面食らうかもしれませんが、その分固有のレジスターを意識しなくてもいいと言うことなんです。
C言語やスケッチでは、固有の機能を使う際にそれぞれのライブラリを探してきて、そのライブラリの使い方を理解してから組み込む必要があるので、命令として用意されているBASCOMはずいぶん楽だと思います。

> マイクロコントローラーを始めましたのは面白そうだったからと頭の体操です。
私も、自分の作ったプログラムが思い通りに動いたときの感動は今でもありますよ。
楽しめるのが一番いいですからね!
Re:電子サイコロの制作  引用
  投稿者: saya    ..2022/11/07(月) 09:42  No.14846
  詳しい説明ありがとうございます。
勉強不足な面が多々ありますのでO-Family様のプログラムをたくさん見させていただき今後の参考と知識向上を目指したいと思います。
ありがとうございました。



名前
Mail   URL
文字色
タイトル   簡単タグ入力
添付   >>お絵かき
フォームに保存  プレビュー      削除キー