RoboCup Junior Japan Rescue Kanto OB
2005~2013
2005~2013
やっと電子情報科に戻ってきたようです。
機械作業も一段落・・・というか、部室に部品を忘れて出来ないだけなんですけど、回路の方もほぼ終了したので、
PICの基盤のプログラムをあれこれ書いています。
例えばタイマーを使って遊んでみたり、センサーから値を読んでみたり・・・
やってることは自分がTruthで教えていることと同じような・・・。媒体がPICって辺りが違うんですけど。
しかもこのあたりは一度24Fで既にやっているんですよね。去年のはじめにも16F1936でやった気もしますし・・・。
まぁだから特に新しいことはやっていないつもりです。アホみたいに久しぶりだから最初からやり直しているようなものですけど・・・。
だから割と何でもかんでもスムーズに行ってくれますね。
研究室でまともに活動が始まったらこういうことをする時間は一切なくなってしまうでしょうか、今のうちに・・・。
そんな魂胆で今またPICで遊んでいる真っ最中です(笑)
PICについてはまた一段落ついたら色々記事に挙げていこうと思います。
それでは今日のはこの辺で。
(^・ω・)ノ RadiumProduction in RoboCup Junior
機械作業も一段落・・・というか、部室に部品を忘れて出来ないだけなんですけど、回路の方もほぼ終了したので、
PICの基盤のプログラムをあれこれ書いています。
例えばタイマーを使って遊んでみたり、センサーから値を読んでみたり・・・
やってることは自分がTruthで教えていることと同じような・・・。媒体がPICって辺りが違うんですけど。
しかもこのあたりは一度24Fで既にやっているんですよね。去年のはじめにも16F1936でやった気もしますし・・・。
まぁだから特に新しいことはやっていないつもりです。アホみたいに久しぶりだから最初からやり直しているようなものですけど・・・。
だから割と何でもかんでもスムーズに行ってくれますね。
研究室でまともに活動が始まったらこういうことをする時間は一切なくなってしまうでしょうか、今のうちに・・・。
そんな魂胆で今またPICで遊んでいる真っ最中です(笑)
PICについてはまた一段落ついたら色々記事に挙げていこうと思います。
それでは今日のはこの辺で。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今日は23時頃にPICのタイマー関数を作ろうと決意して作る。この作業ぐらいしかしていないように思えます。
まぁ実際は練馬で2つほど授業をやってきたんですけど・・・。
タイマー関数というのは、所謂NXT的タイマーです。
PICにもタイマーはあるのですが、秒単位でなく、PICのクロックそのものをカウントするという簡素なものなのです。
なのでNXTの様にタイマーを使用するには、色々とプログラムを書かないといけないのです。
でもそれはいちいちメンドクサイ・・・。
という訳で今回はNQCの様に、
ClearTimer関数で、タイマーリセット、Timer関数でタイマーの値を1ms単位で読み取るような関数を作ってみました。
それで一応完成はしたのですが、なにかがおかしいんです。
というのも、関数を作る際に、クロック数を秒に変換する変換公式があって、それに基づいて変換を行なうのですが、
16F1939で旧型の16Fの公式でそれをやったら、ちょうど1/20倍値が小さくなってしまいました。1/14倍でした。
つまり1秒のつもりが・・・えっと・・・0.05秒?になってしまったのです。約0.07秒ですね。
プログラムも変換式も間違っていないはずなのですが、何故かこんなことに。
とりあえず今のところは普通に値を20倍して難を逃れていますが、これはいったどういうことなのでしょうね。14倍!
これも旧型→新型の仕様変更なのか、自分の残念なミスなのかはまだ不明ですが、今のところこうなりました。
にしても不思議。2のn乗倍じゃなくて、1/20倍になるなんて。とりあえず試験後にでも原因探ってみようと思います。
1/14倍でも不思議ですよねー。
という訳で今日はこの辺でー。
(^・ω・)ノ RadiumProduction in RoboCup Junior
まぁ実際は練馬で2つほど授業をやってきたんですけど・・・。
タイマー関数というのは、所謂NXT的タイマーです。
PICにもタイマーはあるのですが、秒単位でなく、PICのクロックそのものをカウントするという簡素なものなのです。
なのでNXTの様にタイマーを使用するには、色々とプログラムを書かないといけないのです。
でもそれはいちいちメンドクサイ・・・。
という訳で今回はNQCの様に、
ClearTimer関数で、タイマーリセット、Timer関数でタイマーの値を1ms単位で読み取るような関数を作ってみました。
それで一応完成はしたのですが、なにかがおかしいんです。
というのも、関数を作る際に、クロック数を秒に変換する変換公式があって、それに基づいて変換を行なうのですが、
16F1939で旧型の16Fの公式でそれをやったら、ちょうど1/20倍値が小さくなってしまいました。1/14倍でした。
つまり1秒のつもりが・・・えっと・・・0.05秒?になってしまったのです。約0.07秒ですね。
プログラムも変換式も間違っていないはずなのですが、何故かこんなことに。
とりあえず今のところは普通に値を20倍して難を逃れていますが、これはいったどういうことなのでしょうね。14倍!
これも旧型→新型の仕様変更なのか、自分の残念なミスなのかはまだ不明ですが、今のところこうなりました。
にしても不思議。2のn乗倍じゃなくて、1/20倍になるなんて。とりあえず試験後にでも原因探ってみようと思います。
1/14倍でも不思議ですよねー。
という訳で今日はこの辺でー。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今日は中間前最後の部活動でした。
僕はPICいじって遊んでいたのですが、どうにも上手く行きません。
というのも、何故か、単純なPINのON/OFFができていないようなのです。
プログラムにも、問題はないし・・・どういうことなのでしょうか・・・
まあこういう時って十中八九PICがお亡くなりになっているのが原因なんですけど・・・
さてと、家に帰ってPIC交換してみるかな。
今日はそんな感じで久しぶりにプログラムの一日でした。
(^・ω・)ノ RadiumProduction in RoboCup Junior
僕はPICいじって遊んでいたのですが、どうにも上手く行きません。
というのも、何故か、単純なPINのON/OFFができていないようなのです。
プログラムにも、問題はないし・・・どういうことなのでしょうか・・・
まあこういう時って十中八九PICがお亡くなりになっているのが原因なんですけど・・・
さてと、家に帰ってPIC交換してみるかな。
今日はそんな感じで久しぶりにプログラムの一日でした。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今回の記事は今更感溢れる、PICkit3に関してです。
PICkit2の上位互換で、ちょっと高いPIC用のライターですっていう説明が定番ですけど、本当にそうなのでしょうか。
まぁ値段が高いというのは本当ですけど・・・
因みにPICkitは何故か販売店によって価格が全然違います。
ICとかでもよくあることですが、こんなに違う品物は珍しいです。
話を戻します。まずは対応しているPICについてです。
PICkit2は、たまに対応していないPICがあって、32MXシリーズや、新しい16Fシリーズ等のPICが該当します。
そして、PICkit3では、今のところ、全てのPICに対応しているようです。
こう見ると、PICkit3の方が良いようにも見えますが、
実は新型の16Fシリーズの場合、microchip社からパッチが出ているので当てれば普通に使えるようになります。
32MXに関しては、PIC自体が入手が割りと難しいので、使えなくてもあまり問題はありません。
それに、きっとそのうち32MXの方もパッチがリリースされるでしょう。
後はPICkit2の場合はバスパワーと言って、PICkit2の方から回路電源を取ることができましたが、
PICkit3では、それができず、外部から電源をとる必要があります。
そもそも、PICkit3の場合、外部電源を繋がないとPICを認識すらしない仕様になっています。
また、PICkit2では、UARTによるデバッグが行えたり、PCとの通信ができたりしたのですが、
これもPICkit3には搭載されていません。
まぁこのように、仕様としては、割とPICkit2より残念だったりします。
只、PICkit2よりかは基本動作が安定しているような気がしますので、そういう意味では使い易いです。
でも正直なところ、これを買うくらいなら、ハンバーガー基、ICD2や3を買った方が良いように思います。
まぁそんな感じのPICkit3、因みに僕は見た目がカッコいいのでPICkit3を使っています。
(^・ω・)ノ RadiumProduction in RoboCup Junior
PICkit2の上位互換で、ちょっと高いPIC用のライターですっていう説明が定番ですけど、本当にそうなのでしょうか。
まぁ値段が高いというのは本当ですけど・・・
因みにPICkitは何故か販売店によって価格が全然違います。
ICとかでもよくあることですが、こんなに違う品物は珍しいです。
話を戻します。まずは対応しているPICについてです。
PICkit2は、たまに対応していないPICがあって、32MXシリーズや、新しい16Fシリーズ等のPICが該当します。
そして、PICkit3では、今のところ、全てのPICに対応しているようです。
こう見ると、PICkit3の方が良いようにも見えますが、
実は新型の16Fシリーズの場合、microchip社からパッチが出ているので当てれば普通に使えるようになります。
32MXに関しては、PIC自体が入手が割りと難しいので、使えなくてもあまり問題はありません。
それに、きっとそのうち32MXの方もパッチがリリースされるでしょう。
後はPICkit2の場合はバスパワーと言って、PICkit2の方から回路電源を取ることができましたが、
PICkit3では、それができず、外部から電源をとる必要があります。
そもそも、PICkit3の場合、外部電源を繋がないとPICを認識すらしない仕様になっています。
また、PICkit2では、UARTによるデバッグが行えたり、PCとの通信ができたりしたのですが、
これもPICkit3には搭載されていません。
まぁこのように、仕様としては、割とPICkit2より残念だったりします。
只、PICkit2よりかは基本動作が安定しているような気がしますので、そういう意味では使い易いです。
でも正直なところ、これを買うくらいなら、ハンバーガー基、ICD2や3を買った方が良いように思います。
まぁそんな感じのPICkit3、因みに僕は見た目がカッコいいのでPICkit3を使っています。
(^・ω・)ノ RadiumProduction in RoboCup Junior
いろんな人が回路を作っているのを見ていて思うのは、
やっぱり回路には設計者の性格が出る、という点でしょうか。
キタナイ人はキタナイ回路、キチガイな人にはキチガイな回路。
変態は変態なりに変態な回路を作るものです。
現状のロボカップ部もそれなりにみんなキチガイなので、生まれてくる回路も当然キチガイなものが多いです。
まぁその原因のほとんどはうちのロボカップ部の部員はみんなパターン図を書かないからなんですけど・・・
そんな中、今回のPIC回路は、本当に数年ぶりにちゃんとパターン図を書いて作ってみました。
そのおかげで大分まともな回路にはなりましたけど・・・やっぱり線の数がなんか変です(笑)
こんな感じになりました。
一見何も無いようにも見えますが、この連結ピンの数、明らかに事故の臭いがします。
しかも2段構造なのでPICがほとんど見えていない・・・ということで横からの写真も。
ずらーっと並ぶピンヘッダ。そして2つのPIC16F1939、出せるI/Oピンを全て投入した結果こんなことになりました。
めんどくさくなったので殆どのピンにはコネクタを付けていません。費用削減のためにコード直繋ぎでいこうと思います。
でもちゃんとピンの配線までは行なっているので、2枚目の裏の配線はとんでもないことになっています。
まぁそんなこんなでちゃんと動作するPICのメイン基盤が完成しました。まぁまだメイン基板しか無いので何も出来ませんけど・・・。
こっからあれやこれやと投入してキチガイ基盤を量産する予定です。
産技祭用のキチガイ基盤の作らないとだし・・・最近回路の仕事が多いです(笑)
(^・ω・)ノ RadiumProduction in RoboCup Junior
やっぱり回路には設計者の性格が出る、という点でしょうか。
キタナイ人はキタナイ回路、キチガイな人にはキチガイな回路。
変態は変態なりに変態な回路を作るものです。
現状のロボカップ部もそれなりにみんなキチガイなので、生まれてくる回路も当然キチガイなものが多いです。
まぁその原因のほとんどはうちのロボカップ部の部員はみんなパターン図を書かないからなんですけど・・・
そんな中、今回のPIC回路は、本当に数年ぶりにちゃんとパターン図を書いて作ってみました。
そのおかげで大分まともな回路にはなりましたけど・・・やっぱり線の数がなんか変です(笑)
こんな感じになりました。
一見何も無いようにも見えますが、この連結ピンの数、明らかに事故の臭いがします。
しかも2段構造なのでPICがほとんど見えていない・・・ということで横からの写真も。
ずらーっと並ぶピンヘッダ。そして2つのPIC16F1939、出せるI/Oピンを全て投入した結果こんなことになりました。
めんどくさくなったので殆どのピンにはコネクタを付けていません。費用削減のためにコード直繋ぎでいこうと思います。
でもちゃんとピンの配線までは行なっているので、2枚目の裏の配線はとんでもないことになっています。
まぁそんなこんなでちゃんと動作するPICのメイン基盤が完成しました。まぁまだメイン基板しか無いので何も出来ませんけど・・・。
こっからあれやこれやと投入してキチガイ基盤を量産する予定です。
産技祭用のキチガイ基盤の作らないとだし・・・最近回路の仕事が多いです(笑)
(^・ω・)ノ RadiumProduction in RoboCup Junior
それにしても最近、周りの部活との交流がかなり盛んになっているような・・・
どこもかしこも協定結びまくっているような・・・。気のせいでしょうか。
今日は昨日の続き、例のPIC回路の続きです。
といっても、一日かかってまだハンダ付けの途中で終わってしまいました(笑)
まぁ後コネクタ一つなので、明日にはこっちの基盤は終わるであろうと推測されています。
と思ったけど明日は会議なので進展はないでしょうね(笑)じゃあ明後日完成かな?
何れにしてもまだまだ作る基盤は沢山あるので、暫くははんだごてとの生活が続きそうですね。
それでは今日はこの辺で。
(^・ω・)ノ RadiumProduction in RoboCup Junior
どこもかしこも協定結びまくっているような・・・。気のせいでしょうか。
今日は昨日の続き、例のPIC回路の続きです。
といっても、一日かかってまだハンダ付けの途中で終わってしまいました(笑)
まぁ後コネクタ一つなので、明日にはこっちの基盤は終わるであろうと推測されています。
と思ったけど明日は会議なので進展はないでしょうね(笑)じゃあ明後日完成かな?
何れにしてもまだまだ作る基盤は沢山あるので、暫くははんだごてとの生活が続きそうですね。
それでは今日はこの辺で。
(^・ω・)ノ RadiumProduction in RoboCup Junior
ぶいーん。ただいま例の電ノコで基盤を切っています。
今日はあっという間に実験が終わってしまったので割りと暇でした。
という訳で取り組んだのが、
例の16F1939基盤の拡張です。
というのも、この基盤、40ピンのPICが2つも乗っているせいで無駄にI/Oピンが多いんです。
全体だと60以上あるんじゃないかな。多すぎます。
まぁ勿論こんな数、実装できるはずもないので
基盤は2段に分けてI/Oピンやらなんやらはそっちの方からだしていくようになりました。
それでも回路図も自力ではんだづけするには狂っているぐらい面倒な基盤になってきています。
回路図も完成しないまま、回路作成に入ったりもしましたが、全然完成する気配がありません。
っていうかこれ本当に出来るのか・・・?
とにかく毎度のことですが、キチガイな基盤が出来る方向なのはまず間違いないでしょうね・・・。
それでは今日はこのへんで。できたらまた報告します。これは一日二日じゃムリだろうなぁ。レポートあるし。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今日はあっという間に実験が終わってしまったので割りと暇でした。
という訳で取り組んだのが、
例の16F1939基盤の拡張です。
というのも、この基盤、40ピンのPICが2つも乗っているせいで無駄にI/Oピンが多いんです。
全体だと60以上あるんじゃないかな。多すぎます。
まぁ勿論こんな数、実装できるはずもないので
基盤は2段に分けてI/Oピンやらなんやらはそっちの方からだしていくようになりました。
それでも回路図も自力ではんだづけするには狂っているぐらい面倒な基盤になってきています。
回路図も完成しないまま、回路作成に入ったりもしましたが、全然完成する気配がありません。
っていうかこれ本当に出来るのか・・・?
とにかく毎度のことですが、キチガイな基盤が出来る方向なのはまず間違いないでしょうね・・・。
それでは今日はこのへんで。できたらまた報告します。これは一日二日じゃムリだろうなぁ。レポートあるし。
(^・ω・)ノ RadiumProduction in RoboCup Junior
PIC16F1939。 ここ暫く、何度もその単語が出ている PICの型番なのですが、
よくよく考えると、このPIC自体はまだ一回も話題に上がってないんです。
という訳で今回の記事では、このPIC16F1939 についてです。
まず概観はこんな感じ。40PINのPICです。
秋月電子通商にて170円で売ってます。
16Fファミリなので8bitのPICですが、16bitの24Fより早いです。
I/Oピンは最大で36ピン、発振子内蔵型のPICなので普通にフルで使えます。
電源電圧はなんと1.8V~5.0Vまで対応、どの電圧でも動きますが、最高性能を出したい際は5Vで。
動作周波数は最大32MHzとなっています。
旧型の16FはMIPSの関係上、事実上のシステムクロックは動作周波数の4分の1になっていましたが、
この16F19XXシリーズがは、1サイクル1命令なので(分岐を除く)、システムクロックも32MHzです。
A/Dコンバーターは10bit、24Fのように複数個の搭載はされていませんが、アナログピンは全部で14chあります。
アナログ入力14個はこのサイズのPICでは多い方なのではないでしょうか。結構使い勝手がいいですね。
そしてタイマーは独立して5つ搭載されています。当然ですが、そこいらの16Fとは数も質も全然違います。
なんと8bitマイコンのくせに16biタイマーが標準で搭載されていたりするんです。
後、通信モジュールはシリアルのSPI、I2C、EUSARTが対応しています。UARTがないのはちょっと痛いですね・・・。
CCPモジュール、つまりPWM等の波形を扱うモジュールの数も5つと、旧型の16Fを圧倒しています。
後はLCDドライバやらタッチセンサモジュールやら、色々と面白い機能が搭載されています。
まぁこのように、なんか凄いよ。という新しいPICの種類なんですね。
また、同じ40PINで実は160円(10円安い!)で16F1937 というPICも発売されています。
これとの違いはなにかといいますと、RAMとプログラムメモリの量が1939の半分しかなかったりします。
まぁ基本的な性能は変わりませんので、安い方がいいというのであれば此方の方がいいかもしれませんね。(10円だけど)
僕の場合は記述するプログラムの量的な問題から1939の方を使用しています。
でもまぁ普通にプログラムするのであれば、1937のメモリサイズで事足りると思います。
因みに24F なんかになると、ここらへんのメモリの量とか、通信モジュールの数とかが増え始めます。
特にメモリとかがおかしな領域に突入するんです。システム的に絶対あんなに必要ないと思われる量のメモリがあったり・・・。
まぁモジュールはともかく、メモリはそんなに使うことは余り無いと思われますので、
どう考えても24Fのアレは一体・・・ってなりますよね。そんな高度なプログラム、わざわざPICで書かないって。
といっても、結構頑張ったプログラムにしちゃうと1937の場合は足りなくなる場合もでてきますので、
プログラムがつがつ書いちゃうような人には1939の方がお勧めだったりします。
そんな感じで、今日はPIC16F1939 の紹介でした。
(^・ω・)ノRadiumProduction in RoboCupJunior
よくよく考えると、このPIC自体はまだ一回も話題に上がってないんです。
という訳で今回の記事では、このPIC16F1939 についてです。
まず概観はこんな感じ。40PINのPICです。
秋月電子通商にて170円で売ってます。
16Fファミリなので8bitのPICですが、16bitの24Fより早いです。
I/Oピンは最大で36ピン、発振子内蔵型のPICなので普通にフルで使えます。
電源電圧はなんと1.8V~5.0Vまで対応、どの電圧でも動きますが、最高性能を出したい際は5Vで。
動作周波数は最大32MHzとなっています。
旧型の16FはMIPSの関係上、事実上のシステムクロックは動作周波数の4分の1になっていましたが、
この16F19XXシリーズがは、1サイクル1命令なので(分岐を除く)、システムクロックも32MHzです。
A/Dコンバーターは10bit、24Fのように複数個の搭載はされていませんが、アナログピンは全部で14chあります。
アナログ入力14個はこのサイズのPICでは多い方なのではないでしょうか。結構使い勝手がいいですね。
そしてタイマーは独立して5つ搭載されています。当然ですが、そこいらの16Fとは数も質も全然違います。
なんと8bitマイコンのくせに16biタイマーが標準で搭載されていたりするんです。
後、通信モジュールはシリアルのSPI、I2C、EUSARTが対応しています。UARTがないのはちょっと痛いですね・・・。
CCPモジュール、つまりPWM等の波形を扱うモジュールの数も5つと、旧型の16Fを圧倒しています。
後はLCDドライバやらタッチセンサモジュールやら、色々と面白い機能が搭載されています。
まぁこのように、なんか凄いよ。という新しいPICの種類なんですね。
また、同じ40PINで実は160円(10円安い!)で16F1937 というPICも発売されています。
これとの違いはなにかといいますと、RAMとプログラムメモリの量が1939の半分しかなかったりします。
まぁ基本的な性能は変わりませんので、安い方がいいというのであれば此方の方がいいかもしれませんね。(10円だけど)
僕の場合は記述するプログラムの量的な問題から1939の方を使用しています。
でもまぁ普通にプログラムするのであれば、1937のメモリサイズで事足りると思います。
因みに24F なんかになると、ここらへんのメモリの量とか、通信モジュールの数とかが増え始めます。
特にメモリとかがおかしな領域に突入するんです。システム的に絶対あんなに必要ないと思われる量のメモリがあったり・・・。
まぁモジュールはともかく、メモリはそんなに使うことは余り無いと思われますので、
どう考えても24Fのアレは一体・・・ってなりますよね。そんな高度なプログラム、わざわざPICで書かないって。
といっても、結構頑張ったプログラムにしちゃうと1937の場合は足りなくなる場合もでてきますので、
プログラムがつがつ書いちゃうような人には1939の方がお勧めだったりします。
そんな感じで、今日はPIC16F1939 の紹介でした。
(^・ω・)ノRadiumProduction in RoboCupJunior
今日はもう・・・相当な事故り様でしたね。
全員が全員酷かったなぁ。特に安定の副部長!!
そんな今日は、さりげなくちゃんと部活もやっていたり。
今日取り組んだのは、コンパスセンサー。HMC6352という型番です。
http://www.alpha-crucis.com/en/accelerometers-gyros-compasses/1607-compass-module-hmc6352-0845156000517.html
昨日辺りからプログラムを作ってはいたのですが、謎の値を読み出さない現象が発生していました。
これがとっても厄介な状態で、I2Cの通信自体は成功していて、結果も返ってくるのに、
何故か一部の方位の値のみを返さなかったんです。
今日はそんな謎の状況と戦っていました。
それから、戦うことだいたい一時間。
とりあえずちゃんと値を読み出すことに成功しました。
結局原因はタイミングやらノイズやら。
色々重なった結果のようです。
最後面倒になって一気にパラメータを変えたらなんか成功しちゃったので、
最終的に何がいけなかったのかは・・・謎です。
まぁとにかく成功しましたっていう報告です。
今できていないのは・・・後はPICでのI2Cの相互通信だけなのですが・・・何が原因なんだろう。
とりあえず明日、通信速度を下げてもう一度やってみようと思います。
24Fならできるのに、なんで16Fだとこうも時間がかかるんだろう。
謎は深まるばかりです。
(^・ω・)ノ RadiumProduction in RoboCup Junior
全員が全員酷かったなぁ。特に安定の副部長!!
そんな今日は、さりげなくちゃんと部活もやっていたり。
今日取り組んだのは、コンパスセンサー。HMC6352という型番です。
http://www.alpha-crucis.com/en/accelerometers-gyros-compasses/1607-compass-module-hmc6352-0845156000517.html
昨日辺りからプログラムを作ってはいたのですが、謎の値を読み出さない現象が発生していました。
これがとっても厄介な状態で、I2Cの通信自体は成功していて、結果も返ってくるのに、
何故か一部の方位の値のみを返さなかったんです。
今日はそんな謎の状況と戦っていました。
それから、戦うことだいたい一時間。
とりあえずちゃんと値を読み出すことに成功しました。
結局原因はタイミングやらノイズやら。
色々重なった結果のようです。
最後面倒になって一気にパラメータを変えたらなんか成功しちゃったので、
最終的に何がいけなかったのかは・・・謎です。
まぁとにかく成功しましたっていう報告です。
今できていないのは・・・後はPICでのI2Cの相互通信だけなのですが・・・何が原因なんだろう。
とりあえず明日、通信速度を下げてもう一度やってみようと思います。
24Fならできるのに、なんで16Fだとこうも時間がかかるんだろう。
謎は深まるばかりです。
(^・ω・)ノ RadiumProduction in RoboCup Junior
という訳で、全く脈略もないままに16F19XX、HITECコンパイラでのPWMの作動方法について書くことになりました。
PWMについての説明やらなんやらはもう以前の記事で再々やっているような気がいたしますので、
ここでは省略させて頂きます。
という訳で今回はプログラムのお話を。
因みに今回の記事はデータシートが手元にあることを前提としていますので、レジスタの中の詳しい紹介等は行いません。
まず、PWMを行なうにはタイマーの設定が必要です。
これは要するに波の周期を決定するために使われるもので、一般には慣例としてタイマー2が使われるようですね。
別に1でなければどのタイマーでも大丈夫なはずです。
タイマーの設定をするレジスタはT2CONレジスタ。
今回は特に何か指定することもなかったのでEnable、つまりタイマーを有効にする設定のみを行なっています。
あと重要なのが、PR2レジスタで、この値でPWMの周期を決めます。
この値はある計算値を基にして求められるのですが、わざわざ求めなくても、
データシートにPRレジスタの値と主なPWM周期の表が載っていたりします。
ということで今回はこの表に基づいて0xFFとしました。これだと周波数は31.25kHzになりますね。
因みに計算式もその表の付近に載っています。
こんな感じであっけなくタイマーの設定は終了。タイマーのレジスタについてはまた別途の記事で詳しく説明します。
そして今度はPWMの設定。PICではPWMはCCPとかECCPというモジュール内に含まれている機能ですので、
このCCPのレジスタを利用してPWMの設定を行います。
まずは、CCP2CON、今回はCCP2を使うのでこのレジスタを使います。
このレジスタは
ビット7-6:拡張PWMの設定
ビット5-4:デューティ比の最下位2ビット
ビット3-0:モードの選択
となっています。
今回は拡張に興味が無いので7-6は00、
デューティ比はこのPICの場合、最高10ビットで設定出来るようなので、下位ビット分がこんなところで設定できます。
でも、下位ビットっていうと1か2の違いですから、正直どうでもいい。どっちも00でいいでしょう。
3-0は当然PWMの設定になりますね。ECCPの場合はアクティブハイがどうたらと書いてありますが、
どちらもアクティブハイでないと後々面倒なので全部アクティブハイになる1100でいいでしょう。
こんな感じでPWMの初期設定は終了です。
あとはCCPR2Lレジスタで上位8ビット分のデューティ比をプログラム内で設定してやれば
後は勝手にモジュールの方が波形を出力してくれます。
因みにデューティ比は実際には、 設定した値/4(PR+1) になります。
なのでそのあたりはちょっと注意が必要です。
でもこの値ってよく考えるとPRがFFだと分母は10進数で1024になりますよね。
だから単純に1024段階と思って頂ければ何も考えることは無いかと思います。
とまぁPWMのプログラムはこんな感じ。
細かいレジスタ等の紹介はまた別途で行いたいと思います。
という訳で今日は最後に適当なプログラムを乗っけて終了です。このプログラム動いたっけかなぁ・・・?
もしかしたらPICのヘッダをhtcかそこら辺にしないと動かないかもしれません。
PWMについての説明やらなんやらはもう以前の記事で再々やっているような気がいたしますので、
ここでは省略させて頂きます。
という訳で今回はプログラムのお話を。
因みに今回の記事はデータシートが手元にあることを前提としていますので、レジスタの中の詳しい紹介等は行いません。
まず、PWMを行なうにはタイマーの設定が必要です。
これは要するに波の周期を決定するために使われるもので、一般には慣例としてタイマー2が使われるようですね。
別に1でなければどのタイマーでも大丈夫なはずです。
タイマーの設定をするレジスタはT2CONレジスタ。
今回は特に何か指定することもなかったのでEnable、つまりタイマーを有効にする設定のみを行なっています。
あと重要なのが、PR2レジスタで、この値でPWMの周期を決めます。
この値はある計算値を基にして求められるのですが、わざわざ求めなくても、
データシートにPRレジスタの値と主なPWM周期の表が載っていたりします。
ということで今回はこの表に基づいて0xFFとしました。これだと周波数は31.25kHzになりますね。
因みに計算式もその表の付近に載っています。
こんな感じであっけなくタイマーの設定は終了。タイマーのレジスタについてはまた別途の記事で詳しく説明します。
そして今度はPWMの設定。PICではPWMはCCPとかECCPというモジュール内に含まれている機能ですので、
このCCPのレジスタを利用してPWMの設定を行います。
まずは、CCP2CON、今回はCCP2を使うのでこのレジスタを使います。
このレジスタは
ビット7-6:拡張PWMの設定
ビット5-4:デューティ比の最下位2ビット
ビット3-0:モードの選択
となっています。
今回は拡張に興味が無いので7-6は00、
デューティ比はこのPICの場合、最高10ビットで設定出来るようなので、下位ビット分がこんなところで設定できます。
でも、下位ビットっていうと1か2の違いですから、正直どうでもいい。どっちも00でいいでしょう。
3-0は当然PWMの設定になりますね。ECCPの場合はアクティブハイがどうたらと書いてありますが、
どちらもアクティブハイでないと後々面倒なので全部アクティブハイになる1100でいいでしょう。
こんな感じでPWMの初期設定は終了です。
あとはCCPR2Lレジスタで上位8ビット分のデューティ比をプログラム内で設定してやれば
後は勝手にモジュールの方が波形を出力してくれます。
因みにデューティ比は実際には、 設定した値/4(PR+1) になります。
なのでそのあたりはちょっと注意が必要です。
でもこの値ってよく考えるとPRがFFだと分母は10進数で1024になりますよね。
だから単純に1024段階と思って頂ければ何も考えることは無いかと思います。
とまぁPWMのプログラムはこんな感じ。
細かいレジスタ等の紹介はまた別途で行いたいと思います。
という訳で今日は最後に適当なプログラムを乗っけて終了です。このプログラム動いたっけかなぁ・・・?
もしかしたらPICのヘッダをhtcかそこら辺にしないと動かないかもしれません。
#include "pic16f1939.h"
#define _XTAL_FREQ 32000000
__CONFIG(
FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF
& CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF
);
__CONFIG(
WRT_OFF & PLLEN_ON & STVREN_ON & LVP_OFF
);
int main(void)
{
PORTA = 0b00000000;
PORTB = 0b00000000;
PORTC = 0b00000000;
PORTD = 0b00000000;
ANSELA=0;
ANSELB=0;
ANSELD=0;
TRISA = 0b00000000;
TRISB = 0b00000000;
TRISC = 0b00011000;
TRISD = 0b00000000;
OSCCON=0b01110000;
CCP2CON = 0b00001100; //PWMモードにする
PR2 = 0xFF;
T2CON = 0b00000100; //Timer2 Enable
while(1)
{
CCPR2L = 0x80;
}
}
(^・ω・)ノ RadiumProduction in RoboCup Junior
(^・ω・)ノ RadiumProduction in RoboCup Junior
またI2Cが動かなくなりました。
なんていうか、アドレスをずっと送り続けているのか、SSPBUFが空になっていないのか。
原因は不明です。
とにかくまともに動作をしなくなってしまいました。
プログラム変わってないのに・・・おかしいなぁ。
とりあえず、訳がわからないのでプログラムを書き直すことにしました。
回路にも異常はないし、一体なんなのでしょうね。
とにかくこれは解決しないと・・・
今回作成した基盤はi2cがないと話にならない仕様なので困りましたね。
参考資料も乏しいので嫌な予感がしますがもうちょっと頑張ってみようと思います。
(^・ω・)ノ RadiumProduction in RoboCup Junior
なんていうか、アドレスをずっと送り続けているのか、SSPBUFが空になっていないのか。
原因は不明です。
とにかくまともに動作をしなくなってしまいました。
プログラム変わってないのに・・・おかしいなぁ。
とりあえず、訳がわからないのでプログラムを書き直すことにしました。
回路にも異常はないし、一体なんなのでしょうね。
とにかくこれは解決しないと・・・
今回作成した基盤はi2cがないと話にならない仕様なので困りましたね。
参考資料も乏しいので嫌な予感がしますがもうちょっと頑張ってみようと思います。
(^・ω・)ノ RadiumProduction in RoboCup Junior
カレンダー
最新CM
カテゴリー
らじぷろ目次
らじぷろ検索機
最新記事
(01/01)
(01/03)
(08/27)
(04/29)
(01/01)
(11/20)
(09/06)
(09/04)
(08/09)
(08/06)
(07/27)
(05/29)
(03/15)
(01/01)
(05/07)
プロフィール
HN:
Luz
性別:
男性
アーカイブ