RoboCup Junior Japan Rescue Kanto OB
2005~2013
2005~2013
今日は秋葉→池袋→練馬と慌ただしい一日でした。お台場にも行こうかと考えていたのですが、体力的に断念しました。
まずは秋葉、秋月千石スパラジのいつもの短時間巡回コースでした。
秋月では、PIC16F1823という小型のPICを購入しました。
12ピンのPICですが、アナログピン6個搭載の上、MSSPが搭載されているので、
サブPICとして非常に優秀な機能を持っています。
そして、千石では・・・何も買わなかったなぁ。
欲しいものが売ってなかったので・・・
という訳でそのままスパラジへ。
スパラジでは、とりあえずこの辺を買い漁りました。

なんかしばらく見ないうちにT字コネクタ安くなってるし・・・
回路制作において、一番金がかかるのがコネクタなので、これは非常に嬉しいです。
それで今度は池袋。東急ハンズに行ってきました。
ハンズでは、とりあえずポリ板買いました。
別にハンズである必要はなかったのですけど、練馬に行くついでだったもので・・・。
という訳で最後に練馬に行ってきました。いつものようにTruthですね。
ついたらいきなり模様替えが行われていたのでかなり焦りましたね。なんか棚運んでる・・・
それでお仕事終了、家に帰ってきて今に至る感じです。
それにしても秋葉から直で池袋ってだいぶ事故っているような・・・。残念な街ツアーをしてしまいましたね。
まぁでもこれで大体買いたいものは買ってしまったので暫くはどこにも買い出しに行かなくて済む・・・よね?
(^・ω・)ノ RadiumProduction in RoboCup Junior
まずは秋葉、秋月千石スパラジのいつもの短時間巡回コースでした。
秋月では、PIC16F1823という小型のPICを購入しました。
12ピンのPICですが、アナログピン6個搭載の上、MSSPが搭載されているので、
サブPICとして非常に優秀な機能を持っています。
そして、千石では・・・何も買わなかったなぁ。
欲しいものが売ってなかったので・・・
という訳でそのままスパラジへ。
スパラジでは、とりあえずこの辺を買い漁りました。
なんかしばらく見ないうちにT字コネクタ安くなってるし・・・
回路制作において、一番金がかかるのがコネクタなので、これは非常に嬉しいです。
それで今度は池袋。東急ハンズに行ってきました。
ハンズでは、とりあえずポリ板買いました。
別にハンズである必要はなかったのですけど、練馬に行くついでだったもので・・・。
という訳で最後に練馬に行ってきました。いつものようにTruthですね。
ついたらいきなり模様替えが行われていたのでかなり焦りましたね。なんか棚運んでる・・・
それでお仕事終了、家に帰ってきて今に至る感じです。
それにしても秋葉から直で池袋ってだいぶ事故っているような・・・。残念な街ツアーをしてしまいましたね。
まぁでもこれで大体買いたいものは買ってしまったので暫くはどこにも買い出しに行かなくて済む・・・よね?
(^・ω・)ノ RadiumProduction in RoboCup Junior
今日はイオンの5%OFFの日ですね。
今回の記事はポインタについてです。
今回は一回目なので、また例の如く、ポインタってなんなんだ!?という概念的な説明を行います。
ポインタはC言語の基本のなかでは最上級に難しい部類に入りますので、
ここが理解できるかどうかで、C言語が出来るようになるかどうかが決まると言っても言い過ぎではないと思います。
というわけで内容に入る訳ですが、まずポインタの前に、アドレスというものについて紹介します。
アドレスとは、端的にいうと、変数の格納場所を示す数列です。住所みたいなものですね。
コンピューターの場合、変数は一次元で配列されていますので、
上から何番目の変数かが分かればそこが指し示す変数は一つに特定されます。
実際にはアドレスは、メモリ内における変数の値の保存場所だと思って頂ければ大丈夫です。
それでポインタというのは、そのアドレスを保存する変数という位置づけけになります。だから変数の仲間のようなものです。
このアドレスをポインタに格納することによってプログラムをもって効率的に走らせることが出来るのですが・・・
ちょっと複雑なので、今まで以上に記事を分けて紹介することになるかと思われます。
という訳で、今日の記事はこのくらいで。
最近NXTやってないなぁ。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今回の記事はポインタについてです。
今回は一回目なので、また例の如く、ポインタってなんなんだ!?という概念的な説明を行います。
ポインタはC言語の基本のなかでは最上級に難しい部類に入りますので、
ここが理解できるかどうかで、C言語が出来るようになるかどうかが決まると言っても言い過ぎではないと思います。
というわけで内容に入る訳ですが、まずポインタの前に、アドレスというものについて紹介します。
アドレスとは、端的にいうと、変数の格納場所を示す数列です。住所みたいなものですね。
コンピューターの場合、変数は一次元で配列されていますので、
上から何番目の変数かが分かればそこが指し示す変数は一つに特定されます。
実際にはアドレスは、メモリ内における変数の値の保存場所だと思って頂ければ大丈夫です。
それでポインタというのは、そのアドレスを保存する変数という位置づけけになります。だから変数の仲間のようなものです。
このアドレスをポインタに格納することによってプログラムをもって効率的に走らせることが出来るのですが・・・
ちょっと複雑なので、今まで以上に記事を分けて紹介することになるかと思われます。
という訳で、今日の記事はこのくらいで。
最近NXTやってないなぁ。
(^・ω・)ノ RadiumProduction in RoboCup Junior
またI2Cが動かなくなりました。
なんていうか、アドレスをずっと送り続けているのか、SSPBUFが空になっていないのか。
原因は不明です。
とにかくまともに動作をしなくなってしまいました。
プログラム変わってないのに・・・おかしいなぁ。
とりあえず、訳がわからないのでプログラムを書き直すことにしました。
回路にも異常はないし、一体なんなのでしょうね。
とにかくこれは解決しないと・・・
今回作成した基盤はi2cがないと話にならない仕様なので困りましたね。
参考資料も乏しいので嫌な予感がしますがもうちょっと頑張ってみようと思います。
(^・ω・)ノ RadiumProduction in RoboCup Junior
なんていうか、アドレスをずっと送り続けているのか、SSPBUFが空になっていないのか。
原因は不明です。
とにかくまともに動作をしなくなってしまいました。
プログラム変わってないのに・・・おかしいなぁ。
とりあえず、訳がわからないのでプログラムを書き直すことにしました。
回路にも異常はないし、一体なんなのでしょうね。
とにかくこれは解決しないと・・・
今回作成した基盤はi2cがないと話にならない仕様なので困りましたね。
参考資料も乏しいので嫌な予感がしますがもうちょっと頑張ってみようと思います。
(^・ω・)ノ RadiumProduction in RoboCup Junior
とりあえず本日の活動報告を。
今日は珍しく最初から最後まで真面目に活動が行われました。
全員が真面目に部活やったのっていつ以来だろう・・・
みんな真面目は本当に稀な気がします。
普段は必ず誰かしら事故ってるからなぁ・・・
主な活動内容は一年生の講習会用の基盤作り。
本来なら、一年生にやらせたいところなのですが、時間配分的に無理があったようなので、
今回の基盤に関しましては、二年生が代理で作成しています。
まぁ二年生の練習にも(色んな意味で)なっているようですから、一石二鳥ってことにしておいて下さい。
それで僕はといいますと、二年生で16Fの4桁台をやってみたいという人がいたので、とりあえず先行でやってます。
その続きで今日はLCDをやってみることに。
当初計画の順番とかなり違うのですが、仕様的にUARTができないことが発覚してしまった以上、
プログラムのデバッグが全くできないので早急にやる必要があったのです。3なんかデバッグ機能ついてないし・・・。
とりあえず、一年生の時にライブラリの存在を知らず、使わずに制御して大変な目にあったので、
今回はネットにあがっているライブラリを使ってみることにしたのですが・・・
結局仕様の違いなどの問題があったので、
最終的に半分以上の関数がほとんど書き換えられ、新しい関数がいくつか増えてしまって、
実質ライブラリがあってもなくても変わらないという惨事になってしまいました。
まぁ結果的には一日で終わらせられましたけど・・・
また謎の鬼畜制御が行われる運びとなってしまいました。非常に残念です。
なんかもう、とんでもないことになっているような・・・
まぁ一番最初にI2Cの相互通信を始めている時点で、なーんか嫌な予感はあったのですけど・・・
という感じでひとまず新16Fで試してみたい機能は一通りやったように思います。
一週間で終わったなオイ・・・
次は、この試した機能を結合させてPIC16F1939のメインモジュールを完成させようと思います。
明日一日で終わるかなぁ。それでは今日はこの辺で。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今日は珍しく最初から最後まで真面目に活動が行われました。
全員が真面目に部活やったのっていつ以来だろう・・・
みんな真面目は本当に稀な気がします。
普段は必ず誰かしら事故ってるからなぁ・・・
主な活動内容は一年生の講習会用の基盤作り。
本来なら、一年生にやらせたいところなのですが、時間配分的に無理があったようなので、
今回の基盤に関しましては、二年生が代理で作成しています。
まぁ二年生の練習にも(色んな意味で)なっているようですから、一石二鳥ってことにしておいて下さい。
それで僕はといいますと、二年生で16Fの4桁台をやってみたいという人がいたので、とりあえず先行でやってます。
その続きで今日はLCDをやってみることに。
当初計画の順番とかなり違うのですが、仕様的にUARTができないことが発覚してしまった以上、
プログラムのデバッグが全くできないので早急にやる必要があったのです。3なんかデバッグ機能ついてないし・・・。
とりあえず、一年生の時にライブラリの存在を知らず、使わずに制御して大変な目にあったので、
今回はネットにあがっているライブラリを使ってみることにしたのですが・・・
結局仕様の違いなどの問題があったので、
最終的に半分以上の関数がほとんど書き換えられ、新しい関数がいくつか増えてしまって、
実質ライブラリがあってもなくても変わらないという惨事になってしまいました。
まぁ結果的には一日で終わらせられましたけど・・・
また謎の鬼畜制御が行われる運びとなってしまいました。非常に残念です。
なんかもう、とんでもないことになっているような・・・
まぁ一番最初にI2Cの相互通信を始めている時点で、なーんか嫌な予感はあったのですけど・・・
という感じでひとまず新16Fで試してみたい機能は一通りやったように思います。
一週間で終わったなオイ・・・
次は、この試した機能を結合させてPIC16F1939のメインモジュールを完成させようと思います。
明日一日で終わるかなぁ。それでは今日はこの辺で。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今回の記事はbitとbyteについてです。
まずはbitについて。
bitとは引数プログラムのデータに構造における最小単位のことです。
この単位は2進数でいう一桁に相当するもので、中には0か1かの数字が入っています。
なので1桁の2進数なら1bit、2桁の2進数なら2bitに相当する訳です。
だからよくプログラムでは、2進数の何桁目かを何bit目と呼ぶことが多いです。
そして、8bit、つまり2進数8個で1byteになります。
つまり2byteで16bitになる訳ですね。
これがbitとbyteの概念です。
因みにbyteの上位にwordというものもありますが、
定義が場合によって2byteだったり4byteだったりして、わかりにくいのであまり使われません。
基本的にレジスタのサイズだとか、変数のサイズだとか、
コンピューターにおけるデータのサイズはだいたいこのbitとbyteで表現されます。
HDDも○○G byteですからね。
特にレジスタにおいては、どこでもかしこでもbit単位で表記がされていますので、非常に重要になってきます。
という訳で、今回はbitとbyteについて紹介しました。
このbitとbyteにはデジタル回路だと、信号線の数にも相当させることもできます。
このことに関しましては、また今度紹介しようと思いますのでよろしくお願いします。
それではまた次回の記事でー。
(^・ω・)ノ RadiumProduction in RoboCup Junior
まずはbitについて。
bitとは引数プログラムのデータに構造における最小単位のことです。
この単位は2進数でいう一桁に相当するもので、中には0か1かの数字が入っています。
なので1桁の2進数なら1bit、2桁の2進数なら2bitに相当する訳です。
だからよくプログラムでは、2進数の何桁目かを何bit目と呼ぶことが多いです。
そして、8bit、つまり2進数8個で1byteになります。
つまり2byteで16bitになる訳ですね。
これがbitとbyteの概念です。
因みにbyteの上位にwordというものもありますが、
定義が場合によって2byteだったり4byteだったりして、わかりにくいのであまり使われません。
基本的にレジスタのサイズだとか、変数のサイズだとか、
コンピューターにおけるデータのサイズはだいたいこのbitとbyteで表現されます。
HDDも○○G byteですからね。
特にレジスタにおいては、どこでもかしこでもbit単位で表記がされていますので、非常に重要になってきます。
という訳で、今回はbitとbyteについて紹介しました。
このbitとbyteにはデジタル回路だと、信号線の数にも相当させることもできます。
このことに関しましては、また今度紹介しようと思いますのでよろしくお願いします。
それではまた次回の記事でー。
(^・ω・)ノ RadiumProduction in RoboCup Junior
最近更新速度が右肩あがりなので久しぶりに思えますが、実はまだ二週間も立っていない配列の記事の続きです。
前回は、基本的な配列の使い方についての紹介を行いました。
今回は、タイトルにもあるように、配列についての実践的な使い方について紹介します。
まずはカウンタ変数を使った配列の実践例
例えば、配列の要素全てを連続で読み出したい、または書き込みたい場合に使われます。
配列の要素は数字で番号が振られていて、[ ]内に書かれますよね。
実はその数字、そのプログラム内で数字と判断できるものは何を書いてもいいんです。
従って当然、変数の名前を書いてもそれは有効なんです。
たがらこういうこともできます。
#include"stdio.h"
#define NUM 5
int main(void)
{
int i;
int data[NUM]
for(i=0;i<NUM;i++)
{
data[i]=i;
}
for(i=0;i<NUM;i++)
{
prinft("%d",data[i]);
}
}
このようにfor文を利用することで、いちいち全ての要素のプログラムを記述しなくとも
要素の書き込みや読み込みを連続して行うことが出来るのです。
次は関数の引数に配列を使う実践例です。
前に関数の引数の話はしましたが、普通の変数の場合は引数となった変数のデータは関数にコピーされます。
従ってどんなに関数にコピーされた引数が変更されようと、元の変数に影響はありません。
しかし、配列の場合はそうではありません。
配列の場合、要素単体を引数とする場合は変数と同じように関数側の値を変えても要素に影響はありませんが、
配列そのものを引数とする場合は、引き渡した関数側の配列の中身を変えると、元の配列の中身も変化してしまうのです。
これにはアドレスというものが深く関わっていますが、ここでは一先ず触れないことにしておきましょう。
つまりプログラムにすると、
#include"stdio.h"
#define NUM 5
void input(int a;int x[])
{
x[1]=5;
a=5;
}
int main(void)
{
int i;
int data[NUM]
for(i=0;i<NUM;i++)
{
data[i]=i;
}
input(data[0],data);
for(i=0;i<NUM;i++)
{
prinft("%d",data[i]);
}
}
この時、関数inputの前ではdata[0]=0、data[1]=1になっていますね。
しかし、関数inputの後ではdata[0]は0のままですが、data[1]は5に変わってしまっているのです。
配列の名前が違うのでややこしいですが、配列の場合は、引数として引き渡すと、
元の配列と引渡し先の関数の配列は名前は違っても要素の中身は同じになるのです。
これが配列の大きなな特徴です。これは非常に意味があって、アドレスを習ったり、配列をもっと複雑に使うようになると
この重要さが理解できるようになると思います。
因みに配列を引数として呼ぶ場合は、メイン文の方の引数の部分(実引数)は配列名だけにしてください。
それで関数の方(仮引数)は普通に配列の定義と同じように記述して下さい。一次元配列の場合は要素の所は空でも大丈夫です。
最後に紹介するのは多次元配列です。
C言語では、多次元配列と言って、配列の中に配列、配列IN配列を作成することができます。
多次元配列の定義はこんな感じ。
int x [4][5];
こんな風に[]の数を後ろから増やしていく形式を取ります。これでx[4]を一つの要素とした要素5個の配列を作った訳です。
要素の総数は4×5で20個ですね。
forの2重ループで2次元平面での座標取りなんかをする場合に非常に便利です。
この他の使用方法は他の配列をまぁ大差ありません。同じように使うことができますね。
また、2次元だけでなく、3次元、4次元と、同じようにすればもっと大きな多次元配列も作成できます。
配列の実践的な用法はこんな感じでしょうか。実践と言いつつ、実用的なプログラムが一切出て来なかったのは仕様です。
「実用なんたら・・・って名前の授業ほど実用性がない」という例の高専の法則に肖ってみたつもりです。内輪ネタですね。
という訳で名ばかりの実践編は以上です。配列についてはひと通り書いたつもりですが、まだ、色々残ってはいるので、
この先もっと他の構文についての説明が終わった辺りでまた紹介したいと思います。
それでは今回はこのへんで
(^・ω・)ノ RadiumProduction in RoboCup Junior
前回は、基本的な配列の使い方についての紹介を行いました。
今回は、タイトルにもあるように、配列についての実践的な使い方について紹介します。
まずはカウンタ変数を使った配列の実践例
例えば、配列の要素全てを連続で読み出したい、または書き込みたい場合に使われます。
配列の要素は数字で番号が振られていて、[ ]内に書かれますよね。
実はその数字、そのプログラム内で数字と判断できるものは何を書いてもいいんです。
従って当然、変数の名前を書いてもそれは有効なんです。
たがらこういうこともできます。
#include"stdio.h"
#define NUM 5
int main(void)
{
int i;
int data[NUM]
for(i=0;i<NUM;i++)
{
data[i]=i;
}
for(i=0;i<NUM;i++)
{
prinft("%d",data[i]);
}
}
このようにfor文を利用することで、いちいち全ての要素のプログラムを記述しなくとも
要素の書き込みや読み込みを連続して行うことが出来るのです。
次は関数の引数に配列を使う実践例です。
前に関数の引数の話はしましたが、普通の変数の場合は引数となった変数のデータは関数にコピーされます。
従ってどんなに関数にコピーされた引数が変更されようと、元の変数に影響はありません。
しかし、配列の場合はそうではありません。
配列の場合、要素単体を引数とする場合は変数と同じように関数側の値を変えても要素に影響はありませんが、
配列そのものを引数とする場合は、引き渡した関数側の配列の中身を変えると、元の配列の中身も変化してしまうのです。
これにはアドレスというものが深く関わっていますが、ここでは一先ず触れないことにしておきましょう。
つまりプログラムにすると、
#include"stdio.h"
#define NUM 5
void input(int a;int x[])
{
x[1]=5;
a=5;
}
int main(void)
{
int i;
int data[NUM]
for(i=0;i<NUM;i++)
{
data[i]=i;
}
input(data[0],data);
for(i=0;i<NUM;i++)
{
prinft("%d",data[i]);
}
}
この時、関数inputの前ではdata[0]=0、data[1]=1になっていますね。
しかし、関数inputの後ではdata[0]は0のままですが、data[1]は5に変わってしまっているのです。
配列の名前が違うのでややこしいですが、配列の場合は、引数として引き渡すと、
元の配列と引渡し先の関数の配列は名前は違っても要素の中身は同じになるのです。
これが配列の大きなな特徴です。これは非常に意味があって、アドレスを習ったり、配列をもっと複雑に使うようになると
この重要さが理解できるようになると思います。
因みに配列を引数として呼ぶ場合は、メイン文の方の引数の部分(実引数)は配列名だけにしてください。
それで関数の方(仮引数)は普通に配列の定義と同じように記述して下さい。一次元配列の場合は要素の所は空でも大丈夫です。
最後に紹介するのは多次元配列です。
C言語では、多次元配列と言って、配列の中に配列、配列IN配列を作成することができます。
多次元配列の定義はこんな感じ。
int x [4][5];
こんな風に[]の数を後ろから増やしていく形式を取ります。これでx[4]を一つの要素とした要素5個の配列を作った訳です。
要素の総数は4×5で20個ですね。
forの2重ループで2次元平面での座標取りなんかをする場合に非常に便利です。
この他の使用方法は他の配列をまぁ大差ありません。同じように使うことができますね。
また、2次元だけでなく、3次元、4次元と、同じようにすればもっと大きな多次元配列も作成できます。
配列の実践的な用法はこんな感じでしょうか。実践と言いつつ、実用的なプログラムが一切出て来なかったのは仕様です。
「実用なんたら・・・って名前の授業ほど実用性がない」という例の高専の法則に肖ってみたつもりです。内輪ネタですね。
という訳で名ばかりの実践編は以上です。配列についてはひと通り書いたつもりですが、まだ、色々残ってはいるので、
この先もっと他の構文についての説明が終わった辺りでまた紹介したいと思います。
それでは今回はこのへんで
(^・ω・)ノ RadiumProduction in RoboCup Junior
今日はコンピューターで使われる数字や数列についてのお話です。
一般に、今使われている数字は10進法という方式ですね。
これは、0123456789
この10個の数字単位で桁があがっていく仕組みです。9の次は10ですからね。
時計だったら60秒、60分で桁というか、単位が変わりますよね。だから時計は60進法です。
このように、数というのは、場合、用途によって、桁上がりのタイミング、即ち進法が変わることがあります。
実はコンピューターでも使われている進法がまた違うのです。
コンピューターでは、2進法という進法が使われています。
2進法では、数字は0と1しか使いません。
つまり、0の次が1、その次がもう桁があがって10になる訳です。
これは、人間からしたら非常にわかりにくい進法ですが、コンピューターからしたら、とてもありがたい進法なのです。
何故コンピューターでは2進法がいいのでしょう。
コンピューターはデジタル回路で動作していますから、制御信号は電圧のONとOFFの2つです。
また、2進法も、0と1の2つで構成されています。
もうお分かりですね。2進法は、デジタル回路の信号とデータの構成が同じなので、
2進法で書かれた数字(2進数)は、コンピューターの信号と等価とみることができます。
だから、信号を数字に置換してやるだけで簡単にコンピューターに命令を送ってやることができるのです。
その置換を実際にやっているのが、プログラムの書込機、
つまりPickitなどのライターや、マイコンそのものの機能になる訳です。
要するにこっちからやるべきことは、その命令となる数字を送ってやること、
これがレジスタの書き換えであり、プログラムそのものなのです。
そういう2進数、0と1だけで書かれたプログラムが機械語というものです。
でもこれは只の0と1の集まりなので、まず人間には理解できません。
そこでコンパイラができ、人間に理解ができるプログラミング言語というものでプログラムができるようになりました。
2進法の話のはずが、随分逸れましたね。
これが2進法の説明です。
因みに、レジスタに書き込む時は言語でも2進数で書かれることがありますが、やっぱり長ったらしくなります。
なので今のプログラムでは、この命令を2進数ではなく、16進数で記述する場合が多いです。
16進数では、数字の順番が
0123456789ABCDEF
となっていて、Fの次が10になります。
何故わざわざまた別の進数を使って記述するかと言いますと、
プログラムではこの2進数で記述される命令の一桁一桁をbitと呼ぶのですが、
そのbitによる命令を行う際にある特性の影響で命令自体を16進数で記述した方がいいんです。
そういう訳で、実用的には16進数で記述される方が多いです。
bitに関しては、また他の記事で紹介することにして、以上が2進数と16進数の紹介でした。
今日はA/D変換の動作が確認できました。
明日はLCDをつけてみようと思います。
(^・ω・)ノ RadiumProduction in RoboCup Junior
一般に、今使われている数字は10進法という方式ですね。
これは、0123456789
この10個の数字単位で桁があがっていく仕組みです。9の次は10ですからね。
時計だったら60秒、60分で桁というか、単位が変わりますよね。だから時計は60進法です。
このように、数というのは、場合、用途によって、桁上がりのタイミング、即ち進法が変わることがあります。
実はコンピューターでも使われている進法がまた違うのです。
コンピューターでは、2進法という進法が使われています。
2進法では、数字は0と1しか使いません。
つまり、0の次が1、その次がもう桁があがって10になる訳です。
これは、人間からしたら非常にわかりにくい進法ですが、コンピューターからしたら、とてもありがたい進法なのです。
何故コンピューターでは2進法がいいのでしょう。
コンピューターはデジタル回路で動作していますから、制御信号は電圧のONとOFFの2つです。
また、2進法も、0と1の2つで構成されています。
もうお分かりですね。2進法は、デジタル回路の信号とデータの構成が同じなので、
2進法で書かれた数字(2進数)は、コンピューターの信号と等価とみることができます。
だから、信号を数字に置換してやるだけで簡単にコンピューターに命令を送ってやることができるのです。
その置換を実際にやっているのが、プログラムの書込機、
つまりPickitなどのライターや、マイコンそのものの機能になる訳です。
要するにこっちからやるべきことは、その命令となる数字を送ってやること、
これがレジスタの書き換えであり、プログラムそのものなのです。
そういう2進数、0と1だけで書かれたプログラムが機械語というものです。
でもこれは只の0と1の集まりなので、まず人間には理解できません。
そこでコンパイラができ、人間に理解ができるプログラミング言語というものでプログラムができるようになりました。
2進法の話のはずが、随分逸れましたね。
これが2進法の説明です。
因みに、レジスタに書き込む時は言語でも2進数で書かれることがありますが、やっぱり長ったらしくなります。
なので今のプログラムでは、この命令を2進数ではなく、16進数で記述する場合が多いです。
16進数では、数字の順番が
0123456789ABCDEF
となっていて、Fの次が10になります。
何故わざわざまた別の進数を使って記述するかと言いますと、
プログラムではこの2進数で記述される命令の一桁一桁をbitと呼ぶのですが、
そのbitによる命令を行う際にある特性の影響で命令自体を16進数で記述した方がいいんです。
そういう訳で、実用的には16進数で記述される方が多いです。
bitに関しては、また他の記事で紹介することにして、以上が2進数と16進数の紹介でした。
今日はA/D変換の動作が確認できました。
明日はLCDをつけてみようと思います。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今回は前々から告知していた「レジスタ」というものについてお話しします。
レジスタとは、パソコンのプロセッサ、つまり中のCPUだとかDSPだとか、
そういった処理装置が持つ所謂小さなメモリのようなものです。
通常コンピューターは実際に処理を行なっている部分とデータを保存している部分はそれぞれ独立していて、
片方をCPUだとか言って、もう片方をメモリだとか言ったりしますよね。
コンピューターは通常、このようにデータの保存場所とデータで処理を行う場所が分かれているので、
いちいち何かする度にメモリとCPU間でデータの通信を行う必要があります。
でもそれだと、通信の時間分、処理速度が遅くなってしまいますので性能としては残念なコンピューターが出来上がる訳です。
だからといって、CPUとメモリを一緒にしてしまうと、それはそれで勝手が悪くなるし、何より汎用性が低下してしまいます。
だったら、データの中でも常に使われてデータ総量も少ないもの、
例えば一番簡素な「命令」のデータなどはCPUと一緒でいいんじゃないか?ということになりまして、
そこで考えだされたのがレジスタです。
レジスタというのは、CPUに内蔵されている高速メモリだと考えて頂ければわかりやすいと思います。
よく使われる命令などのデータに関してはCPUに直接保存することで、通信の量を抑え、処理を高速化しているのです。
まぁレジスタってのはそんなものです。逆に言うと、レジスタのデータ自体が一つの命令として意味を持っているので
レジスタ自体を直接書き換えてしまえば、一番早く、的確にCPUに命令を送ることが出来るという訳です。
この仕組みはマイコンであるPICも変わりませんから、今まで何度も「レジスタを書き換える」という話が出てきたのです。
レジスタのデータは基本的にbit単位で構成されていて、
8bitCPUなら8bit、16bitCPUなら16bitでひとつのレジスタは構成されています。
このレジスタのbitの中身、つまり0、1を変えてやることでレジスタの中身は書き換えられます。
基本的に一つのレジスタの中にはいくつかの命令が組み込まれていて、
レジスタ内の0,1を変えることでレジスタ内の命令の全てを同時に変更することもできたりします。
また、レジスタは書き込むだけではなくて、読み込むこともでき、
指定しているレジスタのbitが書き込みオンリー(W)なのか、読み込みオンリー(R)なのか
読み書きどっちも行えるのか(R/W)というのも重要な点です。
特に(R/W)のレジスタは、思いもよらない様な使い道を見つける場合も多々ありますので要チェックですね。
と、まぁこれでレジスタの説明は以上です。
と言っても文章だけなのでちょっとわかりにくいですよね。
PIC Cだとレジスタ一つ一つに名前がついていて、変数と同じような感覚で(R/W)が行えます。
先程の記事で記載したプログラムでも大量にレジスタの書き込みは行なっているので
こっちのプログラムからレジスタを探してみると、大体の感じはわかって頂けるのではないでしょうか。
このプログラムだと、直接レジスタを操作する命令はint mainの中にしかありませんが、
その中だと、見た感じ9割近くそれに該当するような・・・。
HITECでプログラムを書くと本当にレジスタだらけになってきてしまいますので、
PIC、特にHITECでプログラムを書く場合はこのレジスタの理解が大事であるということが解って頂ければと思います。
という訳で今回の記事はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
レジスタとは、パソコンのプロセッサ、つまり中のCPUだとかDSPだとか、
そういった処理装置が持つ所謂小さなメモリのようなものです。
通常コンピューターは実際に処理を行なっている部分とデータを保存している部分はそれぞれ独立していて、
片方をCPUだとか言って、もう片方をメモリだとか言ったりしますよね。
コンピューターは通常、このようにデータの保存場所とデータで処理を行う場所が分かれているので、
いちいち何かする度にメモリとCPU間でデータの通信を行う必要があります。
でもそれだと、通信の時間分、処理速度が遅くなってしまいますので性能としては残念なコンピューターが出来上がる訳です。
だからといって、CPUとメモリを一緒にしてしまうと、それはそれで勝手が悪くなるし、何より汎用性が低下してしまいます。
だったら、データの中でも常に使われてデータ総量も少ないもの、
例えば一番簡素な「命令」のデータなどはCPUと一緒でいいんじゃないか?ということになりまして、
そこで考えだされたのがレジスタです。
レジスタというのは、CPUに内蔵されている高速メモリだと考えて頂ければわかりやすいと思います。
よく使われる命令などのデータに関してはCPUに直接保存することで、通信の量を抑え、処理を高速化しているのです。
まぁレジスタってのはそんなものです。逆に言うと、レジスタのデータ自体が一つの命令として意味を持っているので
レジスタ自体を直接書き換えてしまえば、一番早く、的確にCPUに命令を送ることが出来るという訳です。
この仕組みはマイコンであるPICも変わりませんから、今まで何度も「レジスタを書き換える」という話が出てきたのです。
レジスタのデータは基本的にbit単位で構成されていて、
8bitCPUなら8bit、16bitCPUなら16bitでひとつのレジスタは構成されています。
このレジスタのbitの中身、つまり0、1を変えてやることでレジスタの中身は書き換えられます。
基本的に一つのレジスタの中にはいくつかの命令が組み込まれていて、
レジスタ内の0,1を変えることでレジスタ内の命令の全てを同時に変更することもできたりします。
また、レジスタは書き込むだけではなくて、読み込むこともでき、
指定しているレジスタのbitが書き込みオンリー(W)なのか、読み込みオンリー(R)なのか
読み書きどっちも行えるのか(R/W)というのも重要な点です。
特に(R/W)のレジスタは、思いもよらない様な使い道を見つける場合も多々ありますので要チェックですね。
と、まぁこれでレジスタの説明は以上です。
と言っても文章だけなのでちょっとわかりにくいですよね。
PIC Cだとレジスタ一つ一つに名前がついていて、変数と同じような感覚で(R/W)が行えます。
先程の記事で記載したプログラムでも大量にレジスタの書き込みは行なっているので
こっちのプログラムからレジスタを探してみると、大体の感じはわかって頂けるのではないでしょうか。
このプログラムだと、直接レジスタを操作する命令はint mainの中にしかありませんが、
その中だと、見た感じ9割近くそれに該当するような・・・。
HITECでプログラムを書くと本当にレジスタだらけになってきてしまいますので、
PIC、特にHITECでプログラムを書く場合はこのレジスタの理解が大事であるということが解って頂ければと思います。
という訳で今回の記事はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
今日は大変壮大な事故をしました。
ちょっとPIC16F1939でUARTをやってみようとしたのですが、
プログラムを書いても動かないのでデータシートを見てみたら・・・
UARTモジュールがなかった(笑)
EUSART、つまりUARTが同期式になったバージョンの通信には対応しているようですが、
非同期式のUARTには対応していないようです・・・。
という訳でUART通信をやるには自分で一からメンドクサイプログラムを書かないといけない・・・と。
単純な2線シリアルの非同期式の通信なので、やろうと思えば結構簡単にできるのですが、
そこまでしてやる気は全く起きない・・・というかやる必要性と有用性が全く皆無なので止めました。
という訳で今日はA/D変換のプログラムを書いて、書き終わって、今は後輩に投げた回路待ちです。
PIC自体はもう昔からやっていますから、コンパイラとPICの仕様が変わっただけなので、
PICそのものの特性さえ理解出来れば、後はささっと終わってしまいますね。
という訳で明日アナログ入力ができているか確認して、LCDのプログラムでも作ってみようと思います。
まぁこれもライブラリ落とすだけの簡単なお仕事ですから、今回はライブラリごとは作りませんよ!すぐに終わるはずです。
そしてARMの方も順調で、遂にgccでのCのプログラムが書き込めるようになりました。
後はUSBの制御とか、そこら辺ができています。今年はマイコへの勢いが強いので、スムーズに行ってくれますね。
それで、今日は1936のプログラムを一つ上げてみようと思います。
まぁ簡単にLEDつけるだけのプログラムですけど・・・。
書き込みの方法とか、プログラム自体の説明はまた今度ということで、
とりあえず今は参考までにということでプログラムだけここに記載します。
とりあえずこんな感じです。1秒周期でLEDが点滅するようなプログラムですね。
一先ず今日はこれを投げて終了です。もう少ししたらPickit3についての記事を書くと思いますので
その時に書き込みについてもお話できたらいいなぁ。
と言うことで今日の記事はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
ちょっとPIC16F1939でUARTをやってみようとしたのですが、
プログラムを書いても動かないのでデータシートを見てみたら・・・
UARTモジュールがなかった(笑)
EUSART、つまりUARTが同期式になったバージョンの通信には対応しているようですが、
非同期式のUARTには対応していないようです・・・。
という訳でUART通信をやるには自分で一からメンドクサイプログラムを書かないといけない・・・と。
単純な2線シリアルの非同期式の通信なので、やろうと思えば結構簡単にできるのですが、
そこまでしてやる気は全く起きない・・・というかやる必要性と有用性が全く皆無なので止めました。
という訳で今日はA/D変換のプログラムを書いて、書き終わって、今は後輩に投げた回路待ちです。
PIC自体はもう昔からやっていますから、コンパイラとPICの仕様が変わっただけなので、
PICそのものの特性さえ理解出来れば、後はささっと終わってしまいますね。
という訳で明日アナログ入力ができているか確認して、LCDのプログラムでも作ってみようと思います。
まぁこれもライブラリ落とすだけの簡単なお仕事ですから、今回はライブラリごとは作りませんよ!すぐに終わるはずです。
そしてARMの方も順調で、遂にgccでのCのプログラムが書き込めるようになりました。
後はUSBの制御とか、そこら辺ができています。今年はマイコへの勢いが強いので、スムーズに行ってくれますね。
それで、今日は1936のプログラムを一つ上げてみようと思います。
まぁ簡単にLEDつけるだけのプログラムですけど・・・。
書き込みの方法とか、プログラム自体の説明はまた今度ということで、
とりあえず今は参考までにということでプログラムだけここに記載します。
#include <pic.h>
//#include<htc.h>
//#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 );
void delay_ms(long x)
{
long i;
for(i=0;i<x;i++)
{
__delay_ms(1);
}
}
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;
while(1){
RD2=1;
delay_ms(500);
RD2=0;
delay_ms(500);
}
}
とりあえずこんな感じです。1秒周期でLEDが点滅するようなプログラムですね。
一先ず今日はこれを投げて終了です。もう少ししたらPickit3についての記事を書くと思いますので
その時に書き込みについてもお話できたらいいなぁ。
と言うことで今日の記事はこのへんで。
(^・ω・)ノ RadiumProduction in RoboCup Junior
起きた時間のせいでかなり慌ただしい一日となってしまいました。
というのも、今日は昼13:30にチャリで秋葉について、そっから2時間
秋月、千石、チャンプ、スパラジの4店舗間をチャリで行ったり来たり。正直チャリじゃなかったら何時間かかったかわかりません。
そしてそのままチャリで飯田橋に行って、授業一個やって、帰ってきたのが大体22:00頃でしょうか。
早起きをしても、秋葉自体が朝に弱い街なので意味が無いし、結構こういう日はあるんですけど、
そういえば先週の木曜も似たような感じで秋葉に逝ったような・・・
今日の急ぎ具合は半端じゃなかったように思えます。
秋葉のホコ天ではチャリに乗れないのでそこでは降りて、キックボードみたいに蹴って移動、
ホコ天を過ぎるとまた乗る・・・という作業を何回したかわかりません。
そして今日手に入れたものが此方。

http://www.rcnavi.com/cgi-bin/item.cgi?item_id=HIT44151A&ctg_id=CG&page=1
日本語表記でマルチチャージャーX4 というバッテリーの充電器です。
名前の通り、4系統で同時に充電をする、つまりバッテリー4本同時充電が行えます。
使えるバッテリーはニッケル水素、ニカド、鉛蓄、リチウムイオン、リポ、リフェだったかな。
これだけできてスパラジ価格で13800円。結構いい価格だと思います。
でもコレを抱えて他の店に入るのはちょっと・・・というよりかなり気が引けましたね(笑)
そしてついでにバッテリーを持ち合わせで買える分だけ買って来ました。

http://www.teamyokomo.com/partslist/yb/parts_yb_p228be.html
といっても2個だけですが。
今回買ったのはYOKOMOのバッテリーロボコンでもお世話になっています。
勿論種類はリチウムイオンポリマー(略してリポ)。あの短絡させてから投げると兵器(自爆するかも)になるアレです。
このブログではまだ電池についてのお話はリポ以外全くしていないと思うのですが
リポが恐らく今使われている一般的な電池の中で一番危険な部類に入ります。詳しくは此方に。
NXTを始め、多種多様の機器に搭載されているリポですが、アレ短絡させると爆発するんですよね。
だから結構危険です。使用には細心の注意を払わないと・・・ぼん!
まともな廃棄方法もなく、以前は爆破処理を行なっていました。現在では塩水につけることで完全放電させて
処理しているようです。
今日はそんな爆弾を今日は2つも買い込んだという訳です。
あぁ。怖い怖い・・・。
でも安いし、電力強いし、継ぎ足し充電できるし、何より軽いのでやっぱりなんだかんだで便利なんですよね。
という訳で今日はリポを買ってみた。という記事でした。それではまた。
(^・ω・)ノ RadiumProduction in RoboCup Junior
というのも、今日は昼13:30にチャリで秋葉について、そっから2時間
秋月、千石、チャンプ、スパラジの4店舗間をチャリで行ったり来たり。正直チャリじゃなかったら何時間かかったかわかりません。
そしてそのままチャリで飯田橋に行って、授業一個やって、帰ってきたのが大体22:00頃でしょうか。
早起きをしても、秋葉自体が朝に弱い街なので意味が無いし、結構こういう日はあるんですけど、
そういえば先週の木曜も似たような感じで秋葉に逝ったような・・・
今日の急ぎ具合は半端じゃなかったように思えます。
秋葉のホコ天ではチャリに乗れないのでそこでは降りて、キックボードみたいに蹴って移動、
ホコ天を過ぎるとまた乗る・・・という作業を何回したかわかりません。
そして今日手に入れたものが此方。

http://www.rcnavi.com/cgi-bin/item.cgi?item_id=HIT44151A&ctg_id=CG&page=1
日本語表記でマルチチャージャーX4 というバッテリーの充電器です。
名前の通り、4系統で同時に充電をする、つまりバッテリー4本同時充電が行えます。
使えるバッテリーはニッケル水素、ニカド、鉛蓄、リチウムイオン、リポ、リフェだったかな。
これだけできてスパラジ価格で13800円。結構いい価格だと思います。
でもコレを抱えて他の店に入るのはちょっと・・・というよりかなり気が引けましたね(笑)
そしてついでにバッテリーを持ち合わせで買える分だけ買って来ました。

http://www.teamyokomo.com/partslist/yb/parts_yb_p228be.html
といっても2個だけですが。
今回買ったのはYOKOMOのバッテリーロボコンでもお世話になっています。
勿論種類はリチウムイオンポリマー(略してリポ)。あの短絡させてから投げると兵器(自爆するかも)になるアレです。
このブログではまだ電池についてのお話はリポ以外全くしていないと思うのですが
リポが恐らく今使われている一般的な電池の中で一番危険な部類に入ります。詳しくは此方に。
NXTを始め、多種多様の機器に搭載されているリポですが、アレ短絡させると爆発するんですよね。
だから結構危険です。使用には細心の注意を払わないと・・・ぼん!
まともな廃棄方法もなく、以前は爆破処理を行なっていました。現在では塩水につけることで完全放電させて
処理しているようです。
今日はそんな爆弾を今日は2つも買い込んだという訳です。
あぁ。怖い怖い・・・。
でも安いし、電力強いし、継ぎ足し充電できるし、何より軽いのでやっぱりなんだかんだで便利なんですよね。
という訳で今日はリポを買ってみた。という記事でした。それではまた。
(^・ω・)ノ RadiumProduction in RoboCup Junior
なんかこのままレスキューの競技に参加できそうな感じのロボットを発見しました。
そのロボットが此方
iRobot 710 Warriorというロボットです。
iRobotってどこかで聞いたことがあるような・・・と思って調べてみたら、
あのARMマイコン搭載で有名なルンバを製造した会社でした。
ロボットの動きがとてもスムーズでこのアーム。どうやら70キロ近くまでのものを持ち運ぶことが出来る他、
車の窓ガラスも一発で割れるほどの力があったりします。
これでサイズが小さければ完全にジュニアレスキューに出られますよね。
悪路走行もばっちり・・・というか、階段も登れるほどなので全く何も問題無いと思われます。
だれかこれ小型化してくれないかなぁ・・・。
それにしても、どうみても軍事用のロボットにしか見えないのですけど、一般販売しているのでしょうかねぇ・・・。
という訳で今日の記事は以上です。
http://www.irobot.com/gi/ground/710_Warrior
(^・ω・)ノ RadiumProduction in RoboCup Junior
そのロボットが此方
iRobot 710 Warriorというロボットです。
iRobotってどこかで聞いたことがあるような・・・と思って調べてみたら、
あのARMマイコン搭載で有名なルンバを製造した会社でした。
ロボットの動きがとてもスムーズでこのアーム。どうやら70キロ近くまでのものを持ち運ぶことが出来る他、
車の窓ガラスも一発で割れるほどの力があったりします。
これでサイズが小さければ完全にジュニアレスキューに出られますよね。
悪路走行もばっちり・・・というか、階段も登れるほどなので全く何も問題無いと思われます。
だれかこれ小型化してくれないかなぁ・・・。
それにしても、どうみても軍事用のロボットにしか見えないのですけど、一般販売しているのでしょうかねぇ・・・。
という訳で今日の記事は以上です。
http://www.irobot.com/gi/ground/710_Warrior
(^・ω・)ノ RadiumProduction in RoboCup Junior
カレンダー
最新CM
カテゴリー
らじぷろ目次
らじぷろ検索機
最新記事
(01/01)
(01/12)
(08/29)
(01/03)
(08/27)
(04/29)
(01/01)
(11/20)
(09/06)
(09/04)
(08/09)
(08/06)
(07/27)
(05/29)
(03/15)
プロフィール
HN:
Luz
性別:
男性
アーカイブ