ラベル メモ の投稿を表示しています。 すべての投稿を表示
ラベル メモ の投稿を表示しています。 すべての投稿を表示

2013年8月30日金曜日

STM32F103でCAN通信

STM32F103VE(事実上のSTBee)を使ったCAN通信のメモ
嘘偽りなく調べ物した時のメモとしてそのままブログのエディタを使ってるので可読性とかは気にしていません


2012年2月14日火曜日

ソースコードの印刷

ソースコードが印刷できねぇぇぇ  というお話


Visual C++で印刷するとコードが黒一色で印刷されちゃう
さすがに読みづらい

で Xcodeはどうなんよ! ってことで 実験
どうやら 白黒になるらしい
行番号が無いだけ悪化してるとも言える

次 テキストエディット
うーん 色は良い感じなんだけど行番号が無い
ってことで ソースコードには不向き

んじゃ EmEditorとかどうよ
うーん 色はつくけど文字量がなぁ
あと行番号が無い
(Xcodeと同じレベル)

んで 名前は気に入ったテキスト印刷ソフト
エスプリント
なんか 単色印刷っぽい
(DL直後に即ゴミ箱行きですよ 評価は良かったんだけどなぁ 設定の問題か...)



んで 思ったのです
Wordでよくね?


いやー Wordって行番号の印刷ができたんですねぇ(^_^;)

(パソコン検定準2級をやらなかったのは3級の時にWordとExcelのスコアがギリギリだったからナノですよ)


ま インクの警告を無視して印刷したので水色が青になったり茶色が黄色になったりしてますけども…
幸いにして変な部分はincludeに集中してるから
軽く読む分にはには問題ないか


とりあえず
文字サイズ9.5
余白は左が1インチ それ以外の3辺が1/2インチ
という設定

Word 2007ですが

行番号は"ページレイアウト"タブの右下にある右下向きの矢印をクリックして
出てくる"ページ設定"ウインドウの"その他"タブにある"行番号(N)..."をクリックして設定します

多分Word 2010でもおk

Office 2010欲しいなぁと思いつつ
最初に買ったのが2007 Proの優待パッケージで
2010 Proのアップグレードが2007優待より値段が高い っていうおかしな状態で
次PC買い換える頃にはOffice 201xが出てるだろうからその時に考えよう と思ってます
Power Point 2010良かったなぁ
まぁOfficeもExcelもPower PointもAccessもほとんど(全く)使ってないので
2007で十分なんですけどね
Outlook? あんな使いづらいの誰が使うっていうんですか
メールはバックアップが非常にめんどくさくて
Gmailを使い始めたらバックアップとか考えなくていいという簡単さに負けてしまい
結局Winをクリーンインストールしてからメールクライアントはインストールしてません
(Outlookが勝手に入ってるけど)



とりあえず 長年の疑問
「ソースコードって印刷できないの!?」
は Wordにより解決されました
ってかなんでVisual C++はソースコードが印刷できないの?
Visual Studioなら印刷できるのかな?
僕の場合Visual C++はソースコードエディタとして使って
基本的にPCのプログラムはMacで書いちゃうから
無料のでも全然問題がないんですよ

とりあえず
今回はそんな所でノシ

2012年1月3日火曜日

組み込みに最適なプログラミング言語

プログラミング言語は様々な種類があります
どっかには「1日に1個生まれては消えていく」とか書いてあった気がするのだけど
まーそんなにあっても使い切れませんわな
覚えるのだけでも大変(大体はCみたいなある程度普及しているものを基礎にしているのだけど)

つーことで
組み込みに最適なプログラミング言語はなんぞや というお話

まず最初に浮かぶのはアセンブラ
PICならアセンブラで決定です ぼくは使わないけど

ただ 大規模になってくるとアセンブラでは到底不可能です
(トライステートの電波時計とか アセンブラで書いてます 凄いですよね)

僕も最初はアセンブラでしたが今は書けと言われても無理です

アセンブラは書いたとおりに実行してくれる(場合が多い)ので
実行速度とかでは有利です
ただ  やっぱめんどくさいですよね

ということで Cの登場です
液晶でもシリアルでも 1回ヘッダとかでまとめちゃえば
次はインクルードするだけで面倒な処理をしなくても実行してくれるという利点があります
標準ライブラリとかもありますし

ですが 「Cが便利」と言っても
PCのプログラムでCを使ってシリアル接続とか解説してるページ無いですよね?
マイコンで完結してしまうものしか作れないという欠点があります

ということで
C#の登場です
C#は便利です GUIもCUIも作れます
もちろん組み込みにも使えます(遅いけど)
シリアル接続も標準で使えます
液晶はライブラリをダウンロードして下さい

C#はCに似ているので C#を覚えてからCを使うというのもアリです
(配列とか色々と違ってくるので応用能力は必要ですが)


とりあえず
「手っ取り早く組み込みマイコンを使ってみたい」
というなら Netduino PlusでC# という組み合わせがおすすめです
マイコンでSDカードにテキストファイルを書き込むとかも簡単にできるようになっているので

2011年12月31日土曜日

大きな桁数の足し算

最近生活リズムが乱れまくってますね…

ニートなんてこんなもんです(キリッ

ごめんなさい...


とりあえず 大きな数値同士の足し算をする関数
第一引数に最初の数値を
第二引数に次の数値を
第三引数に結果を
戻り値に結果の桁数を
という感じ
ムダな処理とかもかなりあるけど
PCで動作確認だけする予定だったので
移植性とか全く考えてないんですよ…
だってPICで1000桁同士の足し算とかやらないじゃないですか…

とりあえず「結果の桁数がintに収まる程度」までは計算できると思います
(実際問題として配列とかの最大数の問題があるので intの最大数までの計算はできませんが)

引数はすべて文字列へのポインタです
最低限の条件として
第一引数長 < 第三引数長 && 第二引数長 < 第三引数長
である必要があります

処理としては
文字列長獲得

文字列前後反転

文字列から数字を抜き出して足し算

文字列前後反転
という感じです

戻り値がintなので
例えば文字列の中に数字以外が含まれていたらEOFを返して終了
とかにしてもいいかも

このコードはけっこームダが多い気がするので
実際には使わないが吉と思いますけど
一応書いておきます
デカイ数字を扱うのにこういう方法もあるんだよ~
という一例として


int add(char *text1, char *text2, char *text3) {

char
*text1p, *text1q, *text1c,
*text2p, *text2q, *text2c,
*text3p, *text3q,
ca, cal = 0;
int i;

for ( text1p = text1; *text1p != '\0'; text1p++ ) ;
for ( text2p = text2; *text2p != '\0'; text2p++ ) ;

text1c = text1p;
text2c = text2p;

*(text1p--) = '\0';
*(text2p--) = '\0';

for ( text1q = text1; text1p > text1q; ) {
ca = *text1p;
*text1p = *text1q;
*text1q = ca;
text1p--;
text1q++;
}

for ( text2q = text2; text2p > text2q; ) {
ca = *text2p;
*text2p = *text2q;
*text2q = ca;
text2p--;
text2q++;
}

for ( i = 0; ; i++ ) {
if ((text1 + i) >= text1c && (text2 + i) >= text2c && !cal) {
*(text3 + i) = '\0';
break;
}
*(text3 + i) = (
((text1 + i < text1c) ? (*(text1 + i)) - '0' : 0) +
((text2 + i < text2c) ? (*(text2 + i)) - '0' : 0) +
cal);
if (*(text3 + i) >= 10) {
*(text3 + i) -= 10;
cal = 1;
} else {
cal = 0;
}
*(text3 + i) += '0';
}
text3p = text3 + i - 1;
text3q = text3;

while (text3p > text3q) {
ca = *text3p;
*text3p = *text3q;
*text3q = ca;
text3p--;
text3q++;
}

return i;
}


とりあえず
この程度の桁数なら「数世代前」のPCでも一瞬で計算できます
まぁ… あたりまえっちゃー当たり前なんですが
PCはC2Q RAM8G Win7Ux64

※画像はCで作った「コマンドライン引数で与えられた数値を足してstdiutに出力する」というコンソールアプリをC#で呼び出してGUIにしているものです


お世辞にも綺麗と言えるコードではないですけど
AOJでトップランククラスのコードだとどういう風に扱ってるんでしょ
まずテキストで扱うということはしてないと思うのですけども…


↑のコードは上記PCでVisual C++ 2010を使って作成したものです
またGUI部分はVisual C# 2010で作成しました



/* 今年最後の1日は「彼女はつっこまれるのが好き!5」を読みながら開始しました
  どんな一日になるんだろう
  とりあえず宇宙へのパスポートを読みながら寝ようかと思いつつ */

2011年12月30日金曜日

ビット長と最大数の関係


みずらいけど 各ビット長での符号あり/なしの最小値と最大値の表

Excelの内部計算がIEEE 754だから 36bitくらいまでしかちゃんと表現できない
どうやったらちゃんと表現できるだろうね
一番手っ取り早いのは頭で倍々して行ってメモ帳とかで打ち込むのかw

とりあえず計算方法

符号あり最小値:((2^(ビット長 - 1)) * -1)
符号あり最大値:((2^(ビット長 - 1))-1)
符号なし最小値:0
符号なし最大値:((2^(ビット長))-1)
という感じ

符号ありは1bitが符号に割り当てられるので使えるビット長-1の長さが実際に使える範囲です
符号なしは2進のn乗を計算して1減算するだけです



#ifdef nonsns

掛け算とか割り算って 足し算とか引き算を繰り返すだけだから
数百桁の足し算とか引き算をできる関数を作ってやれば
128bitの最大値とかも計算できるだろうけど
足し算引き算掛け算割り算をする関数を作った所で
使い道が無いのが欠点だよね
超大規模な予算とか
天文学的数字の計算にしか使えない

Cで書いて
アセンブラに移植して
「PIC アセンブラでも1.8446744e+019位余裕で扱えます!」
とか? いらねぇよ…

#endif

とりあえずIEEE 754 と言うか 浮動小数点数とかが まだよくわかってないから
そこら辺も勉強し直さねば

Amazonから本とかいろいろ来て積み本もどんどん増えてるし...

とりあえず


プログラミングの何がめんどくさいって扱える数字がめんどくさい
この表だと0bitが左だからなんか見づらい

多分作りなおす


さて
「128bitCPU」とか
ぐぐればいろんな記事が出てくるけど
個人的には128bitCPUなんてどうでもいいからlong long longみたいな変数に対応して欲しい
long longがlongの倍ならlong long longで128bit変数
みたいな

charは環境によって違うみたいね
HI-TECHだと「普通はunsignedだけどコンパイラオプションでsignedだよ」みたいなこと書いてあるから
可能であれば明確的に指定すべきかも
他の人にコードを渡す場合とか
コンパイラを変更した時とか 移植したときに
問題が出るかもしれないし

いちいちsignedを指定するのはめんどくさいけど
保守性とかから見れば 多少は
有効かと

組み込み用の石だと符号ありと符号なしでは実効速度が違ったりとかする場合があるから
そういう意味では組み込み開発者はちゃんと区別するべきなのかも

PIC16F88で4096個のパルスを出力するコードとか 大変だったなぁw
(時間制限がキツイからfor(int i = 0; i < 4096; i++) { }とかじゃ遅すぎる)
結局charのネストでも重くて
結構無茶なコード書いた気がする

TLC5940を制御するだけなのだけどね…
Arduinoだとライブラリがあるけど
PICは探して出てくるほど多くなかったから
気が向いたら修正して公開するかも

2011年12月5日月曜日

Media Centerで電波レベルを確認する方法【メモ】

メモ
Media Centerで電波の受信レベルを確認する方法
まずMedia Centerが起動している状態から
最後にPCの環境が書いてあります

1. 「Extras ライブラリ」をクリック


2. 「TVチューナーの設定」をクリック


3. 「アンテナ受信確認」をクリック


4. 電波(地上or衛星)を選び「テスト」をクリック

そうすると電波状態が表示されます
30以上あれば文句ないのかな?

ただ基地局との距離が10kmとか有ると
雪が降ってる時と降っていないときの違いがものすごくて
降っているときに合わせると降っていないときに過剰になってしまう

利得調整が屋外のブースターなので
天気に合わせて調整というのもめんどくさい
どうしたものか…
「ブースターで最高まで上げて手元でレベルを落とす」
とかでもいいかもしれないけど うーん...

とりあえず メモということで


PC環境
Win7Ux64
CPU:C2Q @ 2.66GHz
RAM:2GBx4 8GB
チューナー:IO-DATA GV-MC7/VZ
アンテナ:YAGI 地上デジタルアンテナ
ブースター:YAGI DSU35M
(上記3リンクはamazonアソシエイトリンク)

地デジ環境改良+衛星放送環境構築

モーパイがBS11で放送されるということなので
衛星放送を受信できる環境を構築しようと思いました
ついでにチューナーの特性上ブースターが必要なようなので
地デジにも対応したブースターを買いました
結構高いっすorz

そして
地デジはブースターを通して見れるようになりました
めでたしめでたし

さて 衛星放送
これが
Twitterを見てる人は知ってると思いますが
衛星アンテナが運送業者(佐川急便)の手違いで紛失されました
現在追跡して探しているようですが
うーん… どうしたものか
YACの教材資料で
中華鍋で衛星放送を受信するというのがありましたね
傘で衛星放送を受信してみますか…

とにかくモーパイが始まるまでに衛星環境を構築しないとダメなので
少なくとも今月中旬までには届いて欲しいところ
間に合わなかったら近くの電気屋でアンテナを買ってきて
amazonからは代引の受取拒否するか…
とも考えているのですが

支払い方法で3回くらいやり直ししたり
今回はいろいろ大変だ……


/* ****** */

PCの方
とりあえずメモリ4本さした状態で起動してますが
一応動いてます
ただ時々グラフィックドライバが落ちますが
なんなんでしょうかねぇ…
グラボとMedia Centerの相性が悪い?
地デジチューナーの環境を満たしてないから?

2011年10月25日火曜日

PICで高速にシリアル通信

PICでpurintfを使う場合
普通は

void sputch(const char ch) {
while(!TXSTAbits.TRMT);
TXREG = ch;
}
っていう関数を使うことになる
これはシリアルで文字列を送信するためのものなんだけど
9600bpsだと1bitあたり
1/9600*1000000で104uSかかる
それが8bit+2(スタートストップ)で
1バイト送信するのに1mSくらい
ということは30文字送信するのに30mSかかる
これは無視できない時間

ということで
割り込みで送信できるようにしてみた


char text[50];
char textSize;
char textCnt = 0;



static void interrupt intr(void) {
if (TXIF) {
if (textSize > textCnt) {
TXREG = text[textCnt];
textCnt++;
} else {
textCnt = 0;
TXIE = 0;
}
}
}

これで


void main(void) {
init();

textSize = sprintf(text,"hello world ... serial TEST\r\n");
TXIE = 1;

for ( ; ; ) {
}
}
とかだと 300uS程度で処理が完了する
あとは割り込みで勝手に送信してくれる


ただ 当たり前だけどこれはハードウェアシリアルが有るPICに限られます


2011年10月20日木曜日

デジタル化!


嘘はいってないぞ 嘘は

デジタルオシロスコープ
冬だったか春だったかに買ったんだけどね
正弦波作るって言うことで色々いじってる


結構便利なんだけど

メーカー配布のソフトウェアで波形を保存した状態
うん 意味ねぇ!
単位が無いからどんな波形なのかがわからない

ちなみに印刷はこんな感じ ↓
黄色がかなり見づらいけど
それ以外は大丈夫だ 問題ない

下の方とか結構スペースあるから
画像ファイルで保存するよりも
印刷して必要なことをメモしてファイルにまとめるとかのほうが
後々楽かもしれない

生データ(?)は
こんな感じで保存されてるから
何がなんだかわけわかんない



でもまぁ3万円台のオシロという前提なら高性能だと思う
他のオシロは使ったこと無いけど
http://akizukidenshi.com/catalog/g/gM-01873/

Amazonでも売ってるらしい↓


恐るべしAmazon

個人的には結構気に入ってます
オシロでネギ振りしてる人とかいるけど
そういうことをするんでもなければ問題ないかとw

2011年10月16日日曜日

PixiaでPNGを縮小してみた


ちょっとした用事で透過付き画像作りたくて
こんなサイトを見つけた

うーん…
Pixiaだと不完全な縮小?

どうすんだよー
Illustrator? Photoshop? GIMP?
とりあえず透過なしでやれるとこまでやってみるか…

2011年10月11日火曜日

ケミカルライト の処分方法

(iPod touchで撮ったのであまり画質よくないっす)

コンサートとか サバゲとか でよく使われるこのケミカルライト
サイリュームっていう名前でも売ってたりするんだけど

どうやら地域によって廃棄方法が違うらしい

「会社の焼却炉にぶち込んだ」っていう人もいるみたいだけど
さすがにそれはマズイだろ ということで調べてみたよ

僕が住んでいる地域(上富良野町)のクリーンセンターに問い合わせてみたところ
「スーパー等で売っている不燃ごみの袋に入れて指定日にゴミステーションへ持っていくか 直接クリーンセンターへ持ってきていただければ大丈夫です」
との事だった
普通に使う分なら1回に1本程度だから
まとまってから出してもいいみたい

サバゲとかで一晩に5本とか10本を廃棄することになっても
普通に袋に入れたり 入りきらなかったら複数に分けてもいいみたい

ケミカルライトって プラスチックのパイプの中にガラスアンプルが入ってるから
プラスチックとか ガラスとかではダメみたい 液体も入ってるし
ということで ココらへんでは 不燃ごみとして捨てるのが正しいみたい

まぁ捨てるなら各自調べてから捨ててください

ちなみに百均で売ってるケミカルライトでも結構明るい
足元を照らすとかの用途には使えないけど
台風とかで停電が一晩中続きそうならこれを廊下のすみに何本か投げておくとだいぶ歩きやすいよ
地震の場合ロウソクは厳禁だから
(そのままでも危険だし余震で倒れるとあたり一面火の海になっちゃう可能性がある 消火もできない)
ケミカルライト何本か持っててもいいかも?
ただし簡単にパキって折って使えるから
塩ビ管みたいなハードケースに入れておかないとイザという時に使いものにならないかも

あと中が見えないときは 買うときに耳に近づけて振ってみるといいかも
シャコシャコ音がしたら 輸送中とかに折れてる可能性があるので注意


以上 ケミカルライトの廃棄方法他でした

2011年9月15日木曜日

DIPスイッチを使うよ

今回はDIPスイッチの基本的な使い方を解説するよ



回路は↓これ
どっか間違ってる気もするので参考程度に
DIPSWの左側がプルアップ抵抗 今回は470Ωを使ったけど本来はV+に直結するべき
DIPSWの右側はプルダウン抵抗 4.7kΩを使ったよ
基本的にこれだけで使える
スイッチがOFFだとPICはLになりスイッチがONだとPICはHになる
一般的にはプルアップしてスイッチを押すとLになるけど
今回はわかりやすいように(+後々簡単なように)アクティブHにした

そしてコードは↓これ
/* *** */

#include <htc.h>

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & BOREN_OFF & LVP_OFF & DEBUG_OFF);

#define _XTAL_FREQ 20000000
#define TXP RC6

void send(char);

void main(void) {
TRISC = 0x0F;
PORTC = 0;
TXP = 1;

char data = 0;

while(1) {
if (data != (PORTC & 0x0F)) {
send(0x08);
data = (PORTC & 0x0F);
send(data + (data > 9 ? (0x37) : ('0')));
}
__delay_ms(5);
}
}

void send(char ca) {
TXP = 0; __delay_us(100);
TXP = ((ca >> 0) & 1); __delay_us(100);
TXP = ((ca >> 1) & 1); __delay_us(100);
TXP = ((ca >> 2) & 1); __delay_us(100);
TXP = ((ca >> 3) & 1); __delay_us(100);
TXP = ((ca >> 4) & 1); __delay_us(100);
TXP = ((ca >> 5) & 1); __delay_us(100);
TXP = ((ca >> 6) & 1); __delay_us(100);
TXP = ((ca >> 7) & 1); __delay_us(100);
TXP = 1; __delay_us(100);
}
/* *** */

一応
5ms毎にスイッチを監視し変更があればASCII16進に変換してバックスペースと共に送信
という感じ
これはぼくが作ったLCDモジュールの仕様によるもので
バックスペース(0x08)→1行目1文字目に移動
ENTER(0x13)→2行目1文字目に移動
ESC(0x1B)→表示クリア
になってるから


今回はこれ以外に機能を付けなかったから通常のポート使用量だけど
気が向いたらもうちょっと少ないポート数で使えるような工夫も紹介するかも

2011年9月9日金曜日

PICでLチカ【改】

#include <htc.h>
#include <config.h>

#define _XTAL_FREQ 20000000

#define LED RB5

void main(void) {
TRISA =   0b000000;
TRISB = 0b00000000;
TRISC = 0b00000000;
PORTA = 0;
PORTB = 0;
PORTC = 0;

while(1) {
LED = !LED;
__delay_s(1);
}
}

コンフィグをヘッダにすることで移植を楽にした

自分は現状88と873Aしか使ってないから

#if defined(PIC16F88)
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & LVP_OFF & DEBUG_OFF);
#endif

#if defined(PIC16F873A)
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & BOREN_OFF & LVP_OFF & DEBUG_OFF);
#endif
みたいな感じになってる

これでプロジェクトを作るときに選択した石のコンフィグが作られる
まぁ「典型的なコンフィグ」しか設定できないけどね
ちょっと動作確認したいだけならこれでも大丈夫だと思う

2011年8月25日木曜日

mbedでLチカ

#include "mbed.h"

DigitalOut myled[4] = { LED1, LED2, LED3, LED4 };

int main() {
    while(1) {
        for (int i = 0; i < 16; i++) {
            myled[0] = ((i >> 0) & 1);
            myled[1] = ((i >> 1) & 1);
            myled[2] = ((i >> 2) & 1);
            myled[3] = ((i >> 3) & 1);
            wait_ms(500);
        }
    }
}

とりあえずメモ
mbedに搭載されているLED4個で2進4bitカウンタを表示します

mbedのポートの配列を作ってそこに出力
今回は配列にした意味が無いけど forをもう一回使って
myledの代入4行の代わりに
for (int c = 0; c < 4; c++) { myled[c] = ((i >> c) & 1); }
とかでも動くかもしれない(試してはいない)

mbedはPICとかと違ってあまり動作速度を意識しなくてもいいのが利点かな

そういえばmain()の戻り値が組み込みによくあるvoidじゃなくてintになってるけど
これは何なんだろう? ブートローダーから起動してるからとかなのかな

2011年8月19日金曜日

C語高速化のコツ

ちょっと気になったのでメモ

たとえば
byte data[8,8];
っていうのがあったとして そこにデータを入れたい場合 一番手っ取り早いのは


char x, y;
for (x = 0; x < 8; x++) {
for (y = 0; y < 8; y++) {
data[x, y] = ((関数の引数[x] >> y) ? 1 : 0);
}
}

みたいなかんじのコードが楽
だけど PICの場合かなり高コストになっちゃう
ということで 実行速度をなるべく早くしたいなら


char x;
for (x = 0; x < 8; x++) {
data[x, 0] = ((関数の引数[x] >> 0) ? 1 : 0);
data[x, 1] = ((関数の引数[x] >> 1) ? 1 : 0);
data[x, 2] = ((関数の引数[x] >> 2) ? 1 : 0);
data[x, 3] = ((関数の引数[x] >> 3) ? 1 : 0);
data[x, 4] = ((関数の引数[x] >> 4) ? 1 : 0);
data[x, 5] = ((関数の引数[x] >> 5) ? 1 : 0);
data[x, 6] = ((関数の引数[x] >> 6) ? 1 : 0);
data[x, 7] = ((関数の引数[x] >> 7) ? 1 : 0);
}

とかのほうが 早くなると思う

まぁ場合によって多少違うだろうけど
forをネストすると実効速度がどんどん遅くなる っていう感じらしい

"ループ文同士での入れ子はループ文を多用するために、プログラミングのミスによるバグの一つである無限ループが発生しやすくなる。"
ということらしいので
やっぱなるべくネストはしないほうがいいらしい

16F88でLチカ

/* ** */

#include <htc.h>

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & LVP_OFF & DEBUG_OFF);

#define _XTAL_FREQ 20000000

#define LED RB4

void main(void) {
TRISA =   0b000000;
TRISB = 0b00000000;
ANSEL = 0;
PORTA = 0;
PORTB = 0;

while(1) {
LED = !LED;
__delay_s(1);
}
}
/* ** */
はい
↓のポストのコードを実際に使うためのコード

このコードでは外部20MHzクロックで
RB4に接続したLEDを点滅させる

だけ

【メモ】HI-TECHでウエイト処理

htc.hをインクルードして
#define _XTAL_FREQ 20000000
をコードに追加
20000000はクロック この場合20MHzね
そしてコードで
__delay_ms(10);
ってやったら10mS待ってくれる
__delay_us
ならマイクロ秒で

そしてついでだから
pic.hに
#define __delay_s(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4.0)))
を追加してみた
これだと秒単位でウエイトができる
20MHzだとして最大で800秒分ちょっと
たぶんusでもmsでもsでもおなじはず


あとWin6.x(Vistaとか7)の場合普通はUACでpic.hを書き換えはできない はず
とりあえず自分はVisualC++を使ってるから 右クリックから 管理者として実行 で起動しておいた

とりあえず
メモ

2011年6月15日水曜日

TLUE FALSE

http://togetter.com/li/148313

TLUEは変数として使われちゃうから
if (flag == Tlue) { ... }
って使うことはできない
じゃぁどうするか

1.プリプロセッサ
2.変数を作る
というのがパッと思いつく感じ

1の場合
#define Tlue True
とコードの最初に書き加える

2の場合
bool Tlue = True;
と適当なところに書き加える

他にも有ったら追加します

※Trueは書かなくたっていいじゃん っていうツッコミはなしでお願いします
/*
 * if (Flag == True) { ... }
 * と
 * if (Flag) { ... }
 * は同じ動作をする
 */

/* **************************** */

public static bool Tlue() { return True; }
という方法も使えるかも?
if (flag == Tlue) { ... }
ではなく
if (flag == Tlue()) { ... }
としないとだめだけども

/* **************************** */

ここに書いてある方法は一部を除きC#前提です
defineはC#だとうまくいかないっぽいけど

2011年5月9日月曜日

電波時計を作る(方法だけ)

Netduinoで電波時計を作ってました

何故かWinがNetduinoを認識しなくなったので要点をいくつか書くだけにしておきます
覚書

まず受信モジュール
40kHzを受信して〜というのは結構めんどくさいので
トライステートの電波時計V2の受信モジュールを使います

あれあるのになんで作るのかと
大した理由はなく暇つぶし的な

ちなみにWebで公開されている回路図と実際の基板のシルクが違うので注意してください

最低限必要なのは
電源(9V〜20V程度)
です
あとは5Vや3Vをフォトカプラに入れれば3進のパルスが出てきます

これを50ms程度の割り込みで監視して
3種類に分けて
60この配列に入れてやれば準備完了

あとはひたすらifで足し算していくだけ
Netduinoが復活したらコード載せます


/* ********* */

何故かBloggerのエディタがロードできない
旧エディタにして書いてる