ロボコニストの技術日記

知見や技術を備忘録として書こうかな

RX631の初期設定について(2) ~クロック設定の闇編~

こんばんちはひふみです。こんちゃ!

 

今日は、クロック設定についての話を簡単にしたいと思います。

なんで、CMTの後なの?って思われるかもしれませんが、僕自身まさかクロック設定がこんなにも大変なものだとは認識していなかった。。。

最後の最後は、え・・・、ここ・・・?っていう、簡単な見落としでした。

クロックの設定が出来たので恐らくMTUも出来ているのですが、如何せん回路がおかしいのかステッパーが回りません。CMTで回そうとしても回らないので、このブログを書き終わり次第色々確認してみます。

 

さてさて、それでは本題です。今日はタイトルの通りクロック設定の闇についてです。実際、ブロック図通りに書けば動くのですが、そのためにプロテクト解除とか、使わない機能についても設定しないといけなかったりとか、予約ビットですら設定しないといけなかったりとかで、本当にめんどくさかったです。

悲しみ。そろそろ具体的な話をしていきましょうか。

まず、始めにしなければならないことは、レジスタライトプロテクション機能の解除です。僕みたいなアマチュアには罠でしかありませんでした。本来は、プログラムが暴走して、重要なレジスタを書き換えられないようにするためのプロテクト(保護)です。プロテクトレジスタ(以下PRCR)は、上位8bitがPRCキーコードビットと呼び、PRCRレジスタの書き換え可否を制御しています。PRCRレジスタを書き換える場合は、上位8bitを"A5h"とし、下位8bitに設定値を書き込む様です。例としては、

SYSTEM.PRCR.WORD=0xA501 ;

とかでしょうか。これが何を意味するかはデータシートで見てみてください。

さて、これがまずレジスタを叩く為の準備です。以上は今後も使うことになるので、よく調べておきましょう。レジスタ書き換え許可が終わり次第、書き込み禁止に設定しておきましょう。何かプロっぽくてかっこいい!

次の設定で、各クロック発振器を停止しておきましょう。動いている最中に設定は厳禁です。

そして、ようやっとブロック図通りの設定をしていく訳ですが、PLL停止ビットでPLLの動きを止めておきましょう。そして分周の設定、逓倍の設定の二つが終わり次第PLL停止ビットでPLLを許可してあげましょう。

次に、メインクロックを動作させてあげる(MOSCCR)わけなのですが、メインクロックが安定するまで少々お時間頂きたいので、for文か何かで"168h"ほど無駄時間を生成しておきましょう。何故かはかふぇルネで調べましょう(僕は知らない)。

はい。それでは、そろそろ動き出してくれます。200MHzは生成できています。これを各システムに分けていく訳ですが、当然1分周ではいけません。そのため、分周をシステムクロックコントロールレジスタ(SCKCR)で設定します。この時注意しなければならないことがありまして、データシートP.255 表9.1を見てみると、システムクロック以外は大抵50MHz(Max)となっています。従って、4分周以上の分周をしないといけないことになります。そこで、各システムのクロックを分周設定していきます。そしてクロックソースの設定(SCKCR3)をして終了。といきたいのですが、少し遡って罠があります(僕には罠だったけど強い人は罠じゃないだろうな、ハハハ)。おもむろにSCKCRのレジスタの説明を眺めてみます。普段であれば、予約ビットの欄には、"読むと“0”が読めます。書く場合、“0”としてください"みたいな文章が書かれています。ですがどうでしょう、SCKCRの下位8bitは"“0001b”を設定してください"と書かれているではありませんか!これは困りました!困りましたよ!一つ一つ設定するだけでは動かないのです!この"“0001b”を設定してください"を見逃していた僕は、クロックをまともに動かすことが出来ていなかったのです!なんということでしょう!この7月に入ってからあれやこれや悩んでいたことはすべて無駄なことだったのです!!"0001b”を設定してください"を見逃していたために!!!!

・・・取り乱しました。

要は、レジスタ丸ごと設定してくれと仰るのです(iodefine.hで自分で名称付けても良いのかもしれませんが)。今回は面倒なのでレジスタ丸ごと設定してやりましょう。例えば、

SYSTEM.SCKCR.LONG=0x~~~~11 ;

とかでしょうか。最後の11は0b00010001です。あとは適当な設定をしてあげれば動くと思います。LONGになっているのは、このレジスタが32bit長なので、深く気にすることはないですね。

とまぁこんな感じでクロック設定が終わりました。

およそ7月からプログラムを書いていますが、中々進捗出せないですね。悔しいです。今後も頑張っていきます。

 

それでは、日も跨いでしまったので以上としましょう。今回もお読み頂きありがとうございました。

 

おやすみんと!

RX631の初期設定について(1) ~入出力&CMT編~

こんばんちは、ひふみです。

 

今回はRX631についての備忘録を書きたいと思います。

すーぐ忘れるんですよね、勉強したこと。事実、入出力とか少し忘れてます(大したことじゃないけど)。

雑談は置いておきまして、本題ですね。

今回の記事は、データシート読んでレジスタいじれるぜ!って人には向いてないかもしれません。データシート読んでもよく分からない。。。レジスタ・・・?うーん?って人に向いてるかもしれません。

 

それでは、始めていきます。

 

ひとつめは入出力についてです。入出力が出来たらLEDぺかーとかスイッチぽちーとかが出来ます。幸せですよね。かっこいいですよね。

それでも、入出力を自在に操るにはある程度データシートが読めないといけません。

入出力入出力と言っているように、大半のポート(ピン)は、入力と出力のどちらも行うことが出来るのです。それの何が問題かといいますと、そのポートを入力で使うのか出力で使うのか指定してあげないといけなくなるのです。そこで、データシートを眺めてみると、IOレジスタなるページがあります(IOについては特に説明しません、流石にこんなブログに来る人はわかってますよね)。そこのIOレジスタアドレス一覧をひたすらに眺めていくと、ありました。ポート方向レジスタです。レジスタシンボルはPDRと言うそうです。だからなんだ💢、と言いたくなりますよね、分かります。そこでおもむろに開発プロジェクトを開きましょう。そして、iodefine.hでなぜだかは知りませんがtrl+Fを押して、PDRと入力してEnterを押してみましょう。そこからは自明ですよね。

このレジスタを"0"か"1"にしてあげると入出力どちらかになるそうです。データシート参照のこと。

さて、入出力の設定が終わりました。次は、実際にIOを叩いてみましょう。IOレジスタアドレス一覧をそう長くない時間眺めてみると、ポート出力データレジスタと、ポート入力データレジスタといった文字列を発見することが出来るでしょう。ここからは、ポート方向レジスタと同じです。頑張って。

はい、IOについては以上です。1時間もかからない内に終わるでしょう。僕はだべりながら20分くらいで終わりました(書き込みに72時間かかったことは秘密です)。

IOが出来ると、ステッピングマウスを作っている場合は励磁が出来るようになります。楽しい。

 

さてさて、次はCMT(コンペアマッチタイマ)についてです。なぜコンペアマッチというかと言うと、タイマカウンタと任意に設定された定数の一致(match)を比較(compare)しているからです。RX631のCMTは2 チャネルの16 ビットタイマによって構成されるCMTを2 つ(ユニット0、ユニット1)、すなわち、4 チャネル内蔵しているらしいです。そして、4種類の分周クロックとコンペアマッチ割り込みを各チャネル独立に選択出来ます。

簡単なCMTの紹介は以上にして、次はCMTの動作の説明をしていきます。

まず、クロック選択ビットで分周クロックの選択をします。

次に、コンペアマッチタイマスタートレジスタを1にします。

そうすると、コンペアマッチタイマカウンタがカウントアップしていきます。そのカウンタがコンペアマッチタイマコンスタントレジスタにて設定された値とマッチした場合にカウンタの値が0hになり、コンペアマッチ割り込みが"1"になります(これには、コンペアマッチ割り込み許可を設定しておく必要があります)。そして、またカウンタがカウントを開始します。以下この繰り返しとなります。

これだけで見ると大変簡単なように見えますよね。僕も簡単やん!何これ簡単やん!って言ってました。過去形です。

 

・・・その理由は後ほど説明するとして、次はカウントのタイミングについて軽く触れます。ここは読み飛ばしても問題ありません。僕の趣味です。

分周クロック(PCLKの分周になりますが、RX631においてPCLKとはPCLKBのことを指します。)とコンペアマッチタイマカウンタのカウントタイミングです。これは、カウントクロックが発生し、これは立ち下がり("1"から"0"に切り替わる瞬間のこと)にカウンタが1増える、いわゆるネガティブエッジトリガと呼ばれるフリップフロップですね。このように、カウントクロックが発生してそれが立ち下がる毎に、カウンタの値が1ずつ増えていきます。以上がカウントのタイミングについての説明でした。フリップフロップ好きなんですよね。(勉強不足であります故、間違いがある可能性が高いので、強い人が読んでたら是非訂正してほしいです。)

同様に、コンペアマッチ割り込みが入るタイミングも、コンペアマッチ信号の立ち下がりによって発生します。

 

最後にCMT(他の機能もだいたいそうですが)を使う時の注意点だけ書いておきます。

RX631には、モジュールストップ機能というやつが存在しています。こいつが素人には中々厄介。。。こいつによって、CMTの動作禁止/許可を設定しないといけません。初期値ではCMTの動作は停止されていることになっています。それを解除することによって、レジスタアクセスが可能となります。こんな感じでデータシートを読みつつやれば動くと思います。

僕はまだ動いてません。ハハハ。

※追記:PCLKBの設定をしていませんでした。クソ楽しい。

※(7/5追記):7/1、先輩に最適化を取り除いてもらったところ、きちんと動作しました。 while(条件文) ; の何をどう最適化しているのでしょうね。最適化停止前にwhileでプログラムが停止していることは確認していました。なので、while自体が取り除かれている訳ではありません。よくわかりませんね。考えることはやめましょう。最適化の勉強もしないといけないですね。というか、プログラムの勉強からですかね。制御やらプログラムやら、処理的に綺麗なプログラムやらやることは盛りだくさんだ・・・。

 

あ、番外編として、メインクロックの設定についてもお話しようか。

メインクロックの設定は、クロック発生回路のブロック図辿れば誰でも設定出来ると思います。大して書くことはないですが、個人的にここのレジスタ叩くのが大好きです。論理回路好きだから、あ!逓倍した!あ!分周した!ってなっておもしろいんだよね。このクロック発生回路は、マイコンにおいて命の源とも呼べる機能なので、僕に直接聞いてくれると、熱く語り出すかもしれません。熱く語らないかもしれません。

 

それでは、また進捗が出次第ブログを書きたいと思います。ここまで読んでくださってありがとうございました。おやすみなしあ~

圧倒的進捗(初回のブログ記事から見て)

こんにちはこんばんはひふみです。

 

ひふみんとのマシンが完成しました。

嬉しいです。圧倒的やる気の無さから何故完成したのか検討も付かないですが。

マシンの写真のっけときます、ずばり「かわっこいい」。意味は聞かずとも。

f:id:hihumint-t:20160603225229j:plainf:id:hihumint-t:20160603225233j:plain

折角なので、設計と比較しておきましょうか。こうしてみると設計雑ですね、如何にやりたくないことは雑にやるかが見て取れます。凝り過ぎて大会に間に合わないのは良くないので程々にね。(それと、ステッピングモータは無償提供のものを使用しています。無償提供を受けるにあたって、ブログを書くこと(これはOK)、大会に出ること(来年でも良いらしいが、来年までこいつの開発長引かせるのも微妙なので、今年の大会に出るしかないでしょうね。どうなることやら?)の二つを守らなければならないそうです。頑張りましょう。)

 

次はぽりかーぼねーとちゃんの削り出しの様子を見せちゃいます、思っていたより簡単に出来ました、環境構築をしたどなたかとても感謝しております。

f:id:hihumint-t:20160603225320j:plain

 

そしてなんやかんやあってこう。

配線を出すための設計がとってもおしゃんてぃー、ここが個人的には気に入ってます(実は設計ミスでやすやすやすy・・・・・・・、確か下の写真はまだやすやすし足りていないです)。

 

f:id:hihumint-t:20160603225308j:plain

 

そして更になんやかんやあってこう。

あくりさんでーという溶着剤?を使ってジクソーパズルみたいな設計になっていたポリカを接着。接着する前からガチガチで取れる気配すら無かったというのは何でしょうね、僕の設計の甘さでしょうか。

 

f:id:hihumint-t:20160603225419j:plain

 

とまぁこんな感じの進捗具合です。何度見ても「かわっこいい」。ひふみんと君5月中には走るらしかったのですが、僕が手で押して元気よく走っていたのでそういうことにしておきましょう。ちなみに今日は5月34日です。明日やっと6月ですね。

 

そうそう明日といえば発注して一度はマイホームに届いていた基板が届きます。ちょうど部品もその日に届くので、回路や素子選定にミスが無ければ水曜日までにはひふみんと君がお披露目出来るでしょう。お楽しみに。

 

それでは、最後まで読んでくださった方、誠にありがとう。次も楽しみにしていてください。レポート(明日提出)進捗がよければ、明日もブログ書きます。それではあでぃおす。

今日から使えるレポートで役立つTeXの使い方(花型編)

こんにちはこんばんはひふみです。

まだブログのモチベーションがある内にTeXについての記事を書きたかったので、今回は実験レポートで使えるTeXコマンドと環境(TeXにおいて環境とは \begin{~} ~ \end{~} と表されるコードのこと)について軽く紹介したいと思います。大抵ググれば出てくるので、上級者向けではなく、初心者(あるいは僕自身)向けです。TeXの導入については全く触れていませんが、もし需要があれば(無い)書きます。ちなみに、僕はTeXインストーラ3という大変便利なインストーラを使って導入しました。このインストーラにはTeX本体だけでなくエディタなんかも付与されてます。「Windows TeX インストール」とかでググるととても分かりやすいブログにたどり着くと思います。お試しあれ。

 

それでは早速、文書製作の際の花形を説明します。

まず、文書の最初に使用するコマンドである \documentclass{} です。このコマンドは文書の基本的なオプションを決定するためのものです。以下にこのコマンドを使用した例を示します。

\documentclass[11pt]{jarticle}

例えば今回の例では、大括弧[]の中身に 11pt というものが入っています。これは文字の大きさを決めるオプションです。他にも、a4j(日本語向けにマージンの取られたA4サイズの用紙)などがあります。複数のオプションを指定する際には [a4j , 11pt] というようにカンマで区切りましょう。

そして、次にC言語で言うメイン関数である \begin{document} ~ \end{documentというdocument環境についてです。~部分に文書を書き連ねていきます。例えば、~部分にHello World ! なんて書けばHello World ! と書かれたPDFが出来るわけです。C言語なんかよりも簡単ですよね、printf("Hello World\n")なんてしなくても長きに渡る文章を書くことが出来るのですから。例として示しておきますと以下のようになります。

\begin{document} 

Hello World !

\end{document

勿論、さらに文を書いていきたい場合は、Hello World ! のあとにひたすらに書き殴っていけばいいわけです。簡単ですね。簡単でしょう?(大切なことなの(ry)

 

以上が花型で、~部分に章、節や数式、図表、参考文献、細かい部分で言えば注釈やラベル・参照コマンド、改行や改ページ、等々(勿論文章もね)を書いていく訳です。(より便利に使うためにパッケージを導入していくのですが、これは遠くの機会に書きます。)僕が今思い出すことが出来た限りのものしか書いてませんが、これくらいを知っておけば綺麗でかつ格好のいい文書を生成することが出来るわけです。また、図や表の位置(またの機会に詳しく説明します)を特に意識せず書くことが出来る(TeXが勝手にやってくれる)ので慣れてしまえば大変楽に使うことが出来ます。

 

次回は章、節と数式についてと細かいコマンドについて紹介したいと思います。

それでは最後までお読み頂きありがとうございました。

~マイクロマウス出場のための hihumint ! 紹介のお知らせ~

こんにちはこんばんは読みに来ていただきありがとうございますひふみです。

まずはじめに、軽い自己紹介をば。

がっつり高専ロボコンの魅力に浸かりロボットを愛する体になってしまった男であり、高専から私立編入という希少価値の高く、更には2年次編入を自ら希望してしまうような、真性の人間であるひふみです。

 

今回のお話の内容は、hihumint ! についてです。

ざっくばらんに紹介しますと、マイクロマウスという、迷路を自律走行しゴールまでにかかる時間を競う大会に出場するロボットです。

このブログを見るような方ですので、元々知っているか、あるいは上記の説明が物足りなく感じ、颯爽とマイクロマウスについてggってきたような方だと思っているので詳しい説明は致さないことにします。ブログが長くなると本題を読んでもらえないかもしれませんからね。

 

さて、本題の hihumint ! です。まず名前が可愛いですね。愛くるしい。

特徴(予想)は、駆動にステッパ(ステッピングモータ)を用いていて、プリント基板で配線がなされていることでしょうか。マイコンルネサスの"RX631"を使っています。モータドライバはサンケン電気のSI-7321Mというドライバを用います。

 

うだうだ述べていてもはっきりしないと思うので、hihumint ! の構想図と回路図を乗っけておきます。

 f:id:hihumint:20160514043708j:plainf:id:hihumint:20160514043655j:plain

はいどうでしょう。すごく微妙ですね。構想図に関してはやっつけにも程があると今となっては思いますが、カッコよくもないけれど、かと言ってダサ過ぎもしないんじゃないでしょうか。(開発環境はInventorとKicadです。)

 

最後に現在の進捗ですが、回路図が間違っているのか、実装配線図にうまく取り掛かれていない状態です。フットプリント等は終わらせてあるので、ほぼ発注まで秒読み(何日だろうが秒で数えれば秒読みなんだ)です。基板が届くのが楽しみです。頑張れ未来の僕。

 

と、言ったところで、大したことは書いてないですが、夜も遅い(朝かもしれないもう明るい)ので終わりにします。今後はTeX、学生ロボコンについての記事も書いていく予定なので楽しみにしていてください、です。

 

それでは最後までお読み頂きありがとうございました。