04/16: 初めまして
若輩ながらこの度こちらのブログに参加させていただけることになりました
徒然なるままに気が向いたときに書かせていただきたく思います
あまり夢見がちすぎる内容だと部長の検閲が入るらしいのでそれなりに自重した感じで・・・・・
どうかよろしくお願いいたします\(^o^)/
徒然なるままに気が向いたときに書かせていただきたく思います
あまり夢見がちすぎる内容だと部長の検閲が入るらしいのでそれなりに自重した感じで・・・・・
どうかよろしくお願いいたします\(^o^)/
08/06: 最近の地味な方の活動
悪けりゃ、改良しよう!
ということで、最近
電子蓄音機をAVRマイコン、APR9600、LCDモジュール、クロックIC
使って作ったわけなんですがユーザインターフェースや、ノイズといった点で
納得いかないことがありまして。。
悪けりゃ、改良しよう! というわけです。
他にも、個人購入部品の部品在庫たっぷり。やりたいことたくさんなんですが。
納得いかないまま次のステップに進むには気持ち悪いではないですか!
という情熱で改良、設計中です。
改良点1
・リアルタイムクロック LMC555からRTC-8564NBへの変更
クロックなんですけど、単なる1msに1パルス送ってくる信号で
時計を作ったわけなんですけど初期設定がめんどくさい。
設定がたくさん => 使いづらい。
それに、RTC-8564NBならカレンダーや時間のデータを取ってくれる。
改良するメリットは十分です。(個人的に)
改良点2
・作ってみないとわからないノイズ対策
やはり、ノイズが多いというのは作品として残念です。
配線すら気をつけるクセをつけるべきです。
あと増幅器でのノイズです。
改良点3
・ユーザインターフェース
入力装置の見直し
よくわからない操作ボタンが多すぎましたね。
プログラムの改良
(機能拡張を考えすぎれば設定多し; 今回シンプルに行きましょう)
夏本番!気合でがんばりましょう。
ということで、最近
電子蓄音機をAVRマイコン、APR9600、LCDモジュール、クロックIC
使って作ったわけなんですがユーザインターフェースや、ノイズといった点で
納得いかないことがありまして。。
悪けりゃ、改良しよう! というわけです。
他にも、個人購入部品の部品在庫たっぷり。やりたいことたくさんなんですが。
納得いかないまま次のステップに進むには気持ち悪いではないですか!
という情熱で改良、設計中です。
改良点1
・リアルタイムクロック LMC555からRTC-8564NBへの変更
クロックなんですけど、単なる1msに1パルス送ってくる信号で
時計を作ったわけなんですけど初期設定がめんどくさい。
設定がたくさん => 使いづらい。
それに、RTC-8564NBならカレンダーや時間のデータを取ってくれる。
改良するメリットは十分です。(個人的に)
改良点2
・作ってみないとわからないノイズ対策
やはり、ノイズが多いというのは作品として残念です。
配線すら気をつけるクセをつけるべきです。
あと増幅器でのノイズです。
改良点3
・ユーザインターフェース
入力装置の見直し
よくわからない操作ボタンが多すぎましたね。
プログラムの改良
(機能拡張を考えすぎれば設定多し; 今回シンプルに行きましょう)
夏本番!気合でがんばりましょう。
07/23: 関係のある話
今回もVHDLといきたいのですが、少し予定が立て込んでいまして。
いきなりですが、今回は法律の話。
自身、あまり触れる事が無いのですが、少し調べる機会がありました。
我々の様な人間には関係ない?
そう言わず読んでみて下さい。とても関係のある話です。
皆さんは、改正著作権法をご存知ですか。
今年6月に成立し、来年より施行される法律です。
いきなりですが、今回は法律の話。
自身、あまり触れる事が無いのですが、少し調べる機会がありました。
我々の様な人間には関係ない?
そう言わず読んでみて下さい。とても関係のある話です。
皆さんは、改正著作権法をご存知ですか。
今年6月に成立し、来年より施行される法律です。
07/16: マイコンの規模(独り言バージョン)
最近、割り込み処理について説明するのに圧電ブザーを使って
いろんな周波数の音を出すマイコンのプログラムを書くと
面白いのではないかと思いやってみました。
使うマイコンはAVRマイコン ATTINY2313-20PUです。
とりあえず、出力周波数を表示するLCDと圧電ブザーでちょちょいっと。
言語はC言語で。
いろんな周波数の音を出すマイコンのプログラムを書くと
面白いのではないかと思いやってみました。
使うマイコンはAVRマイコン ATTINY2313-20PUです。
とりあえず、出力周波数を表示するLCDと圧電ブザーでちょちょいっと。
言語はC言語で。
07/01: VHDLの他には?
プログラム言語と聞かれたら、何を思い浮かべますか?
10人に聞けば1つ以上の答えが返ってくるでしょう。
VHDLはハードウェア記述言語の1つです。
他には?
今回はその2つ目を見てみます。
10人に聞けば1つ以上の答えが返ってくるでしょう。
VHDLはハードウェア記述言語の1つです。
他には?
今回はその2つ目を見てみます。
06/28: マクロを用いたデバッグ
kozukaです。
今回はETロボコンの活動について書こうかと思っていたのですが、諸事情により7月9日まで一時活動停止となったので、c言語でのマクロを用いたデバッグについて書こうと思います。
今回はETロボコンの活動について書こうかと思っていたのですが、諸事情により7月9日まで一時活動停止となったので、c言語でのマクロを用いたデバッグについて書こうと思います。
06/25: ACアダプタ
ACアダプタについて・・・
ある日、安物(700円)の一般的なACアダプタを誰かさんに壊されました。
そして、なぜ壊れたのか推測してみました。
その前に一般的なACアダプタとは基本的に
1:交流の変圧 (トランスを使う)
2:整流 (ダイオードブリッジを使う)
3:デカップリング (コンデンサを使う)
をします。

これなら、回路構成が簡単で安く作れますね。
ある日、安物(700円)の一般的なACアダプタを誰かさんに壊されました。
そして、なぜ壊れたのか推測してみました。
その前に一般的なACアダプタとは基本的に
1:交流の変圧 (トランスを使う)
2:整流 (ダイオードブリッジを使う)
3:デカップリング (コンデンサを使う)
をします。

これなら、回路構成が簡単で安く作れますね。
06/18: VHDLな数え方
コンピュータにおいて、基本となる部分はどこか?
ひとつに、カウンタが挙げられます。
現在のコンピュータの構造理論であるノイマン型アーキテクチャ。
カウンタがなければ動くことは叶いません。
ということで。今回は、カウンタを作ります。
ひとつに、カウンタが挙げられます。
現在のコンピュータの構造理論であるノイマン型アーキテクチャ。
カウンタがなければ動くことは叶いません。
ということで。今回は、カウンタを作ります。
06/03: タイトルは特になし
はじめまして、kozukaと申します。
たぶん今回が初登場だと思います。
以後、よろしくお願いします。
今回、私が取り上げるテーマはBoostです。
Boostって何?っていう人はググってください。一言で言えばC++の便利なライブラリです。
今回はそんな中からBOOST_SCOPE_EXITを紹介したいと思います。
これは次のような場合に役に立ちます。
try
{
Database db;
db.open();
// ここでデータベースに対して処理をする
db.commit(); // 正常終了ならコミット
db.close(); // 必ずclose
return;
}
catch( exception )
{
db.rollback(); // 例外が生じたためロールバック
db.close(); // 必ずclose
throw;
}
よくある一般的なデータベース処理の例です。ここで注目するのは、正常時、異常時に関わらずdb.close()が呼び出されている点です。このような正常時、異常時に関わらず行う処理には、Winapiでのdeleteobject()など、リソースの後処理が多くを占めます。今回の例では1行で済んでいますが、実際の場合、何行にも渡る後処理のコードが重複して記述される場合があります。そうなると、どちらか一方の後処理記述漏れや、一方に変更を加えた際に他方への変更を忘れるなどの問題が起こりやすくなります。
言語によってはfinalyブロックが使用できますが、残念ながらC++にはそのような機能がありません。そこで、BOOST_SCOPE_EXITの出番です。以下がBOOST_SCOPE_EXITの使用例です。
#include <iostream>
#include <boost/scope_exit.hpp>// BOOST_SCOPE_EXITを使うにはこのヘッダをinclude
using namespace std;
int main()
{
int* buffer = new int[10];
char* data = new char[20];
try
{
cout << "before SCOPE_EXIT macro" << endl;
//BOOST_SCOPE_EXIT内で使用する変数を指定。
// &をつけると参照渡し。つけないと値渡しです。
BOOST_SCOPE_EXIT( (buffer)(&data) )
{
delete buffer;
delete data; // 確実に後処理
cout << "in SCOPE_EXIT macro" << endl;
}
BOOST_SCOPE_EXIT_END
cout << "after SCOPE_EXIT macro" << endl;
throw "error_message";
}
catch(const char* str)
{
cout << "in catch block" << endl;
}
cout << "after catch block" << endl;
return 0;
}
これを実行すると以下のように表示されます。
before SCOPE_EXIT macro
after SCOPE_EXIT macro
in SCOPE_EXIT macro
in catch block
after catch block
結果からわかるように、 BOOST_SCOPE_EXITで囲まれた部分はスコープを抜けるタイミングで実行されます。この例では、例外が投げられた後です。
このように、BOOST_SCOPE_EXITを使用すれば、後処理部分を一つの部分にまとめて記述出来、正常時、異常時に関わらず確実な後処理を行えます。
※最後に実行されるfinalyブロックと異なり、BOOST_SCOPE_EXITブロックはcatchブロックの前に(BOOST_SCOPE_EXITブロックのあるスコープを抜けるときに)実行されます。順番が違うので注意が必要です。
※今回は、短く、すぐに実行できるコードにするために、使用例をメモリの解放にしていますが、実際のこのような場面では、auto_ptrやshared_ptrを使うべきです。BOOST_SCOPE_EXITは、データベースやファイルを閉じる処理に使いましょう。
たぶん今回が初登場だと思います。
以後、よろしくお願いします。
今回、私が取り上げるテーマはBoostです。
Boostって何?っていう人はググってください。一言で言えばC++の便利なライブラリです。
今回はそんな中からBOOST_SCOPE_EXITを紹介したいと思います。
これは次のような場合に役に立ちます。
try
{
Database db;
db.open();
// ここでデータベースに対して処理をする
db.commit(); // 正常終了ならコミット
db.close(); // 必ずclose
return;
}
catch( exception )
{
db.rollback(); // 例外が生じたためロールバック
db.close(); // 必ずclose
throw;
}
よくある一般的なデータベース処理の例です。ここで注目するのは、正常時、異常時に関わらずdb.close()が呼び出されている点です。このような正常時、異常時に関わらず行う処理には、Winapiでのdeleteobject()など、リソースの後処理が多くを占めます。今回の例では1行で済んでいますが、実際の場合、何行にも渡る後処理のコードが重複して記述される場合があります。そうなると、どちらか一方の後処理記述漏れや、一方に変更を加えた際に他方への変更を忘れるなどの問題が起こりやすくなります。
言語によってはfinalyブロックが使用できますが、残念ながらC++にはそのような機能がありません。そこで、BOOST_SCOPE_EXITの出番です。以下がBOOST_SCOPE_EXITの使用例です。
#include <iostream>
#include <boost/scope_exit.hpp>// BOOST_SCOPE_EXITを使うにはこのヘッダをinclude
using namespace std;
int main()
{
int* buffer = new int[10];
char* data = new char[20];
try
{
cout << "before SCOPE_EXIT macro" << endl;
//BOOST_SCOPE_EXIT内で使用する変数を指定。
// &をつけると参照渡し。つけないと値渡しです。
BOOST_SCOPE_EXIT( (buffer)(&data) )
{
delete buffer;
delete data; // 確実に後処理
cout << "in SCOPE_EXIT macro" << endl;
}
BOOST_SCOPE_EXIT_END
cout << "after SCOPE_EXIT macro" << endl;
throw "error_message";
}
catch(const char* str)
{
cout << "in catch block" << endl;
}
cout << "after catch block" << endl;
return 0;
}
これを実行すると以下のように表示されます。
before SCOPE_EXIT macro
after SCOPE_EXIT macro
in SCOPE_EXIT macro
in catch block
after catch block
結果からわかるように、 BOOST_SCOPE_EXITで囲まれた部分はスコープを抜けるタイミングで実行されます。この例では、例外が投げられた後です。
このように、BOOST_SCOPE_EXITを使用すれば、後処理部分を一つの部分にまとめて記述出来、正常時、異常時に関わらず確実な後処理を行えます。
※最後に実行されるfinalyブロックと異なり、BOOST_SCOPE_EXITブロックはcatchブロックの前に(BOOST_SCOPE_EXITブロックのあるスコープを抜けるときに)実行されます。順番が違うので注意が必要です。
※今回は、短く、すぐに実行できるコードにするために、使用例をメモリの解放にしていますが、実際のこのような場面では、auto_ptrやshared_ptrを使うべきです。BOOST_SCOPE_EXITは、データベースやファイルを閉じる処理に使いましょう。
06/01: AD変換
最近、新型インフルエンザでいろいろとありましたが
無事また活動を再開できるというのはものすごくありがたいですね。
早速ですが、今度はAD変換してみました。
下にサンプルプログラムがありますが、LCD表示関数の中身はありませんので
コンパイルは通りません。LEDを10bit分用意して光らすだけでも
AD変換は確認できるのでそのようにすると良いのではないでしょうか。
実際やってみた感想としては、AD変換すげーーーって感じです。
これで、できることの幅ももっと広がりますね。
ぜひやってみてください。
無事また活動を再開できるというのはものすごくありがたいですね。
早速ですが、今度はAD変換してみました。
下にサンプルプログラムがありますが、LCD表示関数の中身はありませんので
コンパイルは通りません。LEDを10bit分用意して光らすだけでも
AD変換は確認できるのでそのようにすると良いのではないでしょうか。
実際やってみた感想としては、AD変換すげーーーって感じです。
これで、できることの幅ももっと広がりますね。
ぜひやってみてください。