09/11/09 01:05:08 Rmws1wKw
>>94
知識だけじゃなく、他にも大分足りないみたいだな。
哀れw
95 名前:774ワット発電中さん[] 投稿日:2009/11/08(日) 17:52:07 ID:8Ck1ROyi
あ・・間違えた。
>>94だが、AD出力ポートでは無く、DA出力ポートだった。失礼。
101:774ワット発電中さん
09/11/09 02:51:46 YjGRlLyi
100は91と同一人物?
黙っててくれと言ったのが勘に触ったのなら誤る。すまん。
俺、かなり足りないから。by94
102:774ワット発電中さん
09/11/09 04:11:55 Rmws1wKw
>>101
「誤る」位だから日本語までおぼつかないのか。
確かにかなり足りないらしい。
しかしもっと足りないのは、俺なんかへのレスよりも、>>96で
> >>94
>なるほど,そこは盲点でした.
>DA1の出力を×1のOpAmpを通す回路を作成してみます.
なんていう頓珍漢な思考に至らしめてしまった事へのフォローだろ。
なんとかしてやれよw
そんな事だから
>所詮、俺様のエッジとエスパーのエッジは違う部分を指していたりする。
って言われるんだよwww
103:774ワット発電中さん
09/11/09 10:32:46 9YiXNw5Y
>>112は、静かにしたほうが良いと思います。
104:774ワット発電中さん
09/11/09 10:37:24 5c16RVHQ
>>112に期待
105:82
09/11/09 13:34:50 zJkbu3hx
>>100-102
ということは回路ではなく,やはりプログラム側に問題があるという認識でよろしいのでしょうか.
波形画像アップしました.
1-1.bmpはマイナス側の意図しないパルス波形を拡大したものです.
URLリンク(loda.jp)
P=denki
106:774ワット発電中さん
09/11/09 14:24:05 yAdcnywA
int
main(void)
{
unsigned int ad_data;
double da0;
for(ad_data=0;ad_data<=0xff;ad_data++)
{
da0 = 2.15 * (ad_data - 1.725 / 3.225 * 0xFF);
printf("%02x %f\n",ad_data,da0);
}
}
107:774ワット発電中さん
09/11/09 15:34:10 CqihsLov
>>106
00 -293.250000
01 -291.100000
02 -288.950000
03 -286.800000
04 -284.650000
.
.
.
fe 252.850000
ff 255.000000
108:774ワット発電中さん
09/11/09 15:59:28 mIuNBS/o
>>105
>ということは回路ではなく,やはりプログラム側に問題があるという認識で
切り分けるなら、オシロの観測点を、
・マイコンのAD入力ピンの波形
・マイコンのDA出力ピンの波形
にすべきだよ。
ADピンの波形がNGならハードウェア、DAピンの波形がNGならソフトね。
細かいことはよくわからないけど、
各機能を確認してから全体のプログラムを連結したほうが良いかもしれない。こんな感じ。
1. 入力側のハード確認
+/-10Vを入れ、AD入力ピンの波形が、「期待する中心電圧、期待する振幅」になっているか
2. ADの確認
terminalソフト+SCI(RS232)を使って、期待した変換値になっているか、数字で表示してみる。
fprintf ( SCI0, "AD=%04x\r\n" , AD_henken() );
3. DAの確認
DAピン電圧が期待した電圧になっているか。
for()で、0x000~0x3ffまでをDAから出力し、DAピンをオシロで波形確認。
ADでありがちなのは、
・右詰め、左詰を間違っている。
・Vref端子に電圧を与えていない。
DAでありがちなのは、
・DAは8bit出力なのに、intの値を入れているとか。
・DAは電流が「全然取れない」ことを知らずに、電流を必要とするような回路になっているとか。
がんばってちょ~よ by 河村市長
109:82
09/11/09 16:10:55 zJkbu3hx
>>108
すみません,書いていませんでしたが,>>105でアップした波形のうち,
上のCh.1がDA出力の波形,下のCh.2がAD入力の波形です.
比較のため2つを同時に計測しています.
プラス側DAはADと同じ波形を示しているのに,マイナス側で問題の事象が起きています.
また,SCIにて電圧値を確認しようとしていますが,これも文字化けという事象のため行き詰っている状態です.
>DAでありがちなのは、
>・DAは8bit出力なのに、intの値を入れているとか。
こちらに関してはプログラム上では一応16進数に変換しなおして代入しているため大丈夫との認識ですが,
もう少し考えてみます.
110:774ワット発電中さん
09/11/09 16:11:14 mIuNBS/o
× for()で、0x000~0x3ffまでをDAから出力し、DAピンをオシロで波形確認。
○ for()で、0x00~0xffまでをDAから出力し、DAピンをオシロで波形確認。
111:774ワット発電中さん
09/11/09 16:28:49 tpWCW9Ct
本筋とは関係ないからどうでもいいけど、ADINに繋がるLF356って負帰還だよね
112:82
09/11/09 16:48:22 zJkbu3hx
>>111
あ!
すみません,確認したところピン番号はあっているので,回路図のLF356に表記したプラスとマイナスの記載を逆にしてしまっていたようです.
AD側は現状,おそらく問題なしとお考えください.
113:82
09/11/09 17:03:50 zJkbu3hx
>>108
for文で-0xFF~+0xFFまで段階的にループさせた結果です.
階段状の波形が見られると思います.
このように,回路上での単純なマイナス出力は問題なくできています.
また,>>111でご指摘がありました回路図の訂正です.
とはいえオペアンプのプラスとマイナスを書き換えただけですが…
URLリンク(loda.jp)
114:98
09/11/09 18:19:06 Lb7iW035
>>99
情報ありがとうございます
いったん起動しなくなると、しばらく放置しないと元に戻りません
115:774ワット発電中さん
09/11/09 18:41:35 mIuNBS/o
>>109
>プログラム上では一応16進数に変換しなおして代入しているため大丈夫との認識ですが,
何進数でも関係なくて「char か int か」の違いだよ。
というか、DAのbit幅以上の値を書き込むと、DA値は自分のbit幅しか出力しないから、
ゼロが出ると思う。そのDAは何bit?
今回のDAの用例では、DA0とDA1で差動出力にしているみたいだから、
オシロの波形は、AD入力ピンで1つ、DA出力ピンで2つの、計3つの波形が
描かれないといかんと思うけどどう?
0V→負の期待した電圧→0V→負の期待した電圧→ ということだから、
DAの2つの波形を見ると、NG出力している方がわかるんじゃないかと思う。
差動なので、OP AMP出力が0Vだからと言って、必ずしもDA出力が0Vという訳ではなくて、
DA0=DA1であれば、出力=0Vになるから、注意して。
頑張ってちょう。 by 山田昌 (提供:鎌倉ハム)
116:82
09/11/09 23:02:01 CqihsLov
>>115
>今回のDAの用例では、DA0とDA1で差動出力にしているみたいだから、
>オシロの波形は、AD入力ピンで1つ、DA出力ピンで2つの、計3つの波形が
>描かれないといかんと思うけどどう?
これに関しては一度測定したことがありますが,例えばマイナス出力用のポートをDA1とした場合,DA0はプログラム通りおとなしく0Vを出し続けています.
また,ポートDA1の故障も疑い,プログラムでマイナス出力用ポートをDA0,プラス用をDA1と,逆にした場合も同様にDA1はおとなしく0Vを,
DA0は0Vと期待した負の電圧を行ったり来たりしていました.
明日,確認の意味もこめてもう一度測定してみますが,オシロスコープの仕様上,3ch同時取得ができないのでDA0とDA1の2ch分の波形をアップいたします.
117:774ワット発電中さん
09/11/09 23:41:42 mIuNBS/o
>>116
もし、terminalで数字を表示できるくらい遅く動かしても良いなら、
DAの吐く値をterminalに出力して、オシロの波形で0に戻るときにどのような数字が出ているかを
見れば、割に簡単に原因はつかめると思うけどね。
118:82
09/11/10 15:09:58 3jQ1Y2XS
>>115
DAの2つの波形の画像アップしました。
差動増幅器をかける前の信号なので,全て正の値で出力されています。
画像のch1の波形はマイコンのDA1の値,つまり負の値になる部分を出力したものです。
ch2の波形はDA0の値,つまり正の値になる部分を出力したものです。
Mはch2-ch1の波形です。差動増幅回路を通して出た波形もこのような波形になっていると思います。
(実際は3倍になりますが・・・)
URLリンク(loda.jp)
pass = denki
119:774ワット発電中さん
09/11/10 16:51:03 1DHXlYI7
とりあえずオペアンプとの間を切断(抵抗の足切りでも良いだろうけど)
してDAの生の出力を見てみるかな
120:774ワット発電中さん
09/11/10 16:52:07 aFEtRi/s
>>118
波形測定、お疲れさん。もうちょっといいオシロが欲しい所だね。
今回の波形で、DA0(オシロのCH1?)の出力が原因ということがわかったですね。
あとはソフトが、このDAコンバータにいくつのデータを送っているか調べれば
OKじゃない?
前にも書いたけど、
ゆっくり動作ができるのなら、もうfprintf()とオシロだけで、
原因が調べられると思うよ。
がんばってちょうでゃぁ。
121:774ワット発電中さん
09/11/10 17:07:54 KXVv8jAF
A/Dの値をDA1に直接いれてみるとか?
DAC.DADR1 = ADC.ADDRAH;
DAC.DADR0 = 0x00;
にしたら、どうなるかな?
122:774ワット発電中さん
09/11/10 17:48:20 1DHXlYI7
それにしても,この程度のことでいつまで引っ張ってるんだろうね.
123:774ワット発電中さん
09/11/10 18:01:31 aFEtRi/s
学生かな。
124:774ワット発電中さん
09/11/11 09:53:31 L5ogpBtv
たしかにね。
でも答えが出てないのもまた引っ張る原因かな。
はい、次の話題ドゾー
125:82
09/11/12 17:49:00 OdV5fyS5
>>119
行ってみましたが,グラフのように出力されていました.
プログラムの問題のようです.
>>120
SCIで確認したところ,どうやらADC.ADDRAHの値が変になっているようです.
しかし,それも以前アップした画像のように,ADチャンネルにつないだOpAmp出力は綺麗なので,プログラムの初期化あたりみたいです.
現在仕様書と照らし合わせていますが原因不明です.
どなたかこのようなパターン,心当たりないでしょうか.
126:774ワット発電中さん
09/11/12 18:11:59 jHAJi33c
ADC.ADCR.BYTE = 0x27;
SCNが1になってるけど?
127:82
09/11/12 18:26:32 OdV5fyS5
>>126
もしかしたら…と思い,訂正しましたが,変化ありませんでした.
>>121
いま試してみました.
AD入力の波形はトレースしているのですが,半分以下の値(今回は0~3.3Vなので,1.6Vくらい)から下が行ったりきたりでした.
どうやら,この行ったり来たりをシフト&拡大していたため,マイナス値での波形がおかしくなっていたようです.
マイナスだからどうこうという問題ではなく,出力レンジの約半分以下のあたりでおかしいみたいです.
128:774ワット発電中さん
09/11/12 20:49:01 uqa11j4O
>>125
頑張ってるね。
>SCIで確認したところ,どうやらADC.ADDRAHの値が変になっているようです.
「ようです」って、
その値がおかしいと判断できたなら、もう修正できるんではないの?
なのにまだ悩んでいるのが よくわからない。
軽くイラっとくるような、そんな感じね。
129:774ワット発電中さん
09/11/12 23:43:34 jHAJi33c
SCIで確認できたソースとデータを晒さないと
130:774ワット発電中さん
09/11/13 03:46:19 4lVKY55j
教えてください。
数字の表現で、
2進数は、0b11110000 とか表現します。
16進数は、0x123cffe6とか表現します。
10進数は、通常 頭に何もつけずに 1234とかで書きます。
8進数は、どのように書くのでしょうか?
8=octalなので、0o7777とかでしょうか?
また、いずれの場合も先頭に「0」が付きますが、なぜ0が付くのでしょうか?
また、なぜ0なのでしょうか、1でもAでも良いような気がするのですが。
131:774ワット発電中さん
09/11/13 05:05:49 LV5+36YP
C言語なら
10進数 1234
16進数 0x1234
8進数 01234
2進数表記はない
理由はない。単なる決まりごと。
132:774ワット発電中さん
09/11/13 11:25:51 UJ4Qd5m0
>>131
ありがとうございます。
8進数は、頭に「0(ゼロ)」を付けるのですか?
すると、
0(10進数) = 00(8進数)
1(10) = 01(8)
2(10) = 02(8)
3(10) = 03(8)
4(10) = 04(8)
5(10) = 05(8)
6(10) = 06(8)
7(10) = 07(8) ここまでは、どちらでも良いとして
8(10) = 08(8) ←この場合(8)はコンパイラが「エラー」と言うのでしょうか
9(10) = 09(8) ← 同上
10(10) != 010(8の場合9になる?) ← 同上
133:774ワット発電中さん
09/11/13 13:47:09 BYTPuUOD
C言語では0で始まる値は8進数と決まっている。
頭に0をつけることで10進リテラルと区別している。
ただの0は8進数リテラルの0でもある。
gccには>>130が書いたような2進数リテラルも存在する。
>>132
8進数なんだから010が10進数での8だよ。
10進数に10の記号が存在しないように、
8進数で8以降の文字は使われない。
134:774ワット発電中さん
09/11/13 14:37:21 TVorZbbT
0 から始まるだけで8進数なんて、知らない人も多いだろうから、
ゼロパディングして体裁整えようとしてハマる人もいるだろうな。
何を隠そう、自分もそうだった。w
135:82
09/11/13 18:22:49 /QpWsSgr
みなさんお騒がせしました.
プログラムのミスも結構あったのですが,結果的にボードを買いなおしたらちゃんとできました.
今まで使っていたボードのメモリか,ポートに異常があったようです.
136:774ワット発電中さん
09/11/13 19:28:42 UJ4Qd5m0
>>134
そうです。体裁を重視して、0を付けたら、偉いことになったことがありました。
0が8進数の文字だとは知らなかったです。
他の進数は、0xとかアルハベットば入るのに。
137:774ワット発電中さん
09/11/13 20:40:24 F28FghOz
>136
物事の順が逆。
2進数をまとめる表記として8進数が真っ先に成立したから
もっとも楽な表記が8進数に割り当たっている。
16進数の表記とかはあくまでも8進数表記法の拡張。
138:774ワット発電中さん
09/11/13 20:55:53 l+fi87LY
今のゆとりは8進数の歴史的意味なんてわかんないだろ。
同じように、
バイトといえば8ビットだと信じているし、ワードといえば16ビットだと信じている。
オクテットなんて言葉は知らないし、ニブルなんて言っても通じない。
怖いねゆとり世代。
139:774ワット発電中さん
09/11/13 21:33:38 UJ4Qd5m0
ま、待ってください。言葉はわかりますよ。
byte 8bitじゃないんですか?
word 1命令語 機種依存というか説明するときの都合で16,32,64bitなんでもあり
octet 8という意味です octal, octpasなど
nibble 4bit [7:4] とか [3:0]ですよね。
>8進数の歴史的意味
これ、ぜひ教えてください。 なんで8進数が真っ先にできたのですか?
インテル4004が4bitだったのは、0~10を扱いたかったのだと思います。
8進数だと0~7ですよね。3本線でやりたかった? なんででしょうか?
140:774ワット発電中さん
09/11/13 22:58:00 TVorZbbT
Z80 のインストラクションなんかを見る機会があったら見てみたらいい。
大抵 OP コードというものがあって、8ビットが 2、3、3 に分解されて
意味をなしていたりする。レジスタ指定が3ビットで、8進数だと
意味がわかりやすいとかじゃなかったかな。
別に知ってるから偉いってほどのもんじゃない。役に立たないうんちくにすぎないし。
C 言語は、単に言語仕様が良くないだけだと思うがね。
なんにせよ、自分がちょっと知ってるだけでゆとりゆとり言うアホは相手にしなくていいよ。
141:774ワット発電中さん
09/11/13 23:14:35 HR0+H1hf
新規に記号を足し加える必要がある16進数は受容されるまでに時間が必要だった、んじゃなかったっけ?
Z80以前では16進数より8進数の方がメジャーだったから、
Z80に限らず(というか、8080に限らずと言い直すべきか)、
3ビット区切りはメジャーだったんじゃないの?
4004のようなマイコン方面からじゃなく、
メインフレーム機やミニコンなどのCPU(当時は複数チップで1CPUとなる方がメジャーだったはず)の世界から。
と思うんだけど、メインフレーム機やミニコンの命令セットをぜんぜん知らないので、
詳しい人はよろしく。
142:774ワット発電中さん
09/11/13 23:33:17 UJ4Qd5m0
Wikipediaを見てきました。
「二進法の 3 桁を八進法の 1 桁で表現できるため
二進数を人間に分かりやすく記述するのに適している。
しかし初期の一部のコンピュータを除いて 1 バイトは 8 ビットであり、
8n 桁 (n は整数、例えば 32 桁や 64 桁) の二進数を扱うことが多いため、
二進数の 4 桁を 1 桁で表す十六進数のほうが表記が分かりやすく、
頻繁に使われる。C や Perl などでは、数の前に 0 を付けると八進数と見なされる。
例えば 011 は 11 ではなく (11)8 すなわち 9 である。」
だそうです。
8進数が「おいしい」とは書いてないみたいです。
何が嬉しくて・・・・・。
人間が10進数を扱いたいから16進数にした、というのは、僕の推測ですが、
よく似た事例に、OP AMPの電源電圧があります。これも僕の推測ですが、
アナログコンピュータとしてのOP AMPで、10進数を扱いたいので、+/-15Vという
電源電圧になったのではないか、と読んでいます。
もしそれが正解なら、16進数の件も 強ち(あながち)違っている訳ではない、と思っています。
時計は12進数か24進数か60進数、日付は12進数か30進数、えとは12。
コンピュータで、8進数が最初に使われた理由は、考えつかないです。
嬉しさがわからないです。
143:774ワット発電中さん
09/11/13 23:36:03 5EKI/5g6
UNIXが最初に載ったマシンが
12ビットだとか18ビットのDECのマシンだったからじゃない?
144:774ワット発電中さん
09/11/13 23:46:00 5EKI/5g6
>>142
> コンピュータで、8進数が最初に使われた理由は、考えつかないです。
「ケン、疑問に思ってたんだがPDPってどういう意味? それに、なぜ18ビットなの? なぜ8の倍数ではなく6の倍数を基準としたミニコンでなければならなかったの?」
の部分を参照。
URLリンク(h50146.www5.hp.com)
145:774ワット発電中さん
09/11/14 00:42:31 oDohfGlm
>>144
ありがとうございます。納得しました。
ASCIIコード表で、6bitだと64文字定義できますね。
実際にキーボードの英数を数えてみたら、ギリギリ64で入りそうでした。
3bitの倍数が始まりなんですね。大変勉強になりました。ありがとうございました。
146:774ワット発電中さん
09/11/14 01:05:14 Wdbx79J2
バイトが8ビットではない時代の話がウィキペディアにあるね。
>本来バイトとは、欧文文字1字分の文字コードを表現するために用いるビット数のことをいい、
>扱う文字種や、あるいはワードサイズをいくつかに分割することによって決められ、
>その大きさは処理系によって異なる。
>歴史的には5ビットから12ビットまであったといわれ、初期のコンピュータの多くでは6ビット、
>また7ビットや9ビットとして扱うコンピュータもあった(DEC PDP-10、NEC ACOS-6など)。
>しかし、大型汎用機で市場を席巻したIBM System/360アーキテクチャが8ビットバイトを採用していたことや、
>1980年代以降8ビットマイクロプロセッサを用いたマイクロコンピュータが爆発的に普及したこともあり、
>一般的には1バイトは8ビットであると認識されるようになった。
147:774ワット発電中さん
09/11/14 01:24:00 Wdbx79J2
もうひとつ面白い話。
ビットの語源は 「binary digit」で、
ドイツ語で石ノミと同音。この「石ノミ」の複数形がバイトなんだそうで。
ちなみに旋盤などで使われるバイトもこのドイツ語の「石ノミ」が語源だそうです。
148:774ワット発電中さん
09/11/14 03:41:50 +rDh85/p
ビットもよく使われているよ。充電ドリルの先に付ける6角形のドライバーとか刃物、
ビットって言うみたい。
149:98
09/11/14 12:15:03 A1Z8p+7j
その後、
外部DRAMがoki製の場合は
cpu_support.Sの364行を修正する必要があるようです
ところで、jsp/config/h8/akih8_3069f/sys_config.hの237行ですが
#define ENABLE_PB_CS (H8PADDR_CS4|H8PADDR_CS5|H8PADDR_CS6|H8PBDDR_CS7)
H8PADDRではなくH8PBDDRなのではないでしょうか
150:774ワット発電中さん
09/11/14 15:03:01 rvoB+7mN
それ設定ファイルみたいだけど。
バージョン古いとかじゃないの?
ENABLE_PB_CSでググるとか。
151:98
09/11/14 16:25:22 A1Z8p+7j
>>150
TOPPERSの初級実装セミナー教材(v1.5)です
同じディレクトリにあるh8_3069f.hには
#define H8PBDDR_CS4 (1<<H8PBDDR_CS4_BIT)
#define H8PBDDR_CS5 (1<<H8PBDDR_CS5_BIT)
#define H8PBDDR_CS6 (1<<H8PBDDR_CS6_BIT)
#define H8PBDDR_CS7 (1<<H8PBDDR_CS7_BIT)
とあってH8PADDR_CSxの定義が無いんですよね
152:774ワット発電中さん
09/11/14 16:29:22 XglhlExF
ENABLE_PB_CSは#if 0で無効になってるみたいだけど
153:774ワット発電中さん
09/11/19 21:21:24 BWIjMPoA
NECと統合か・・・
サービス悪くなるんだろうな。不安・・
154:774ワット発電中さん
09/11/20 00:59:56 OCkt+ePB
教えてください。
ADコンバータのデータを、H8を介してPCにRS232で転送したいと、プログラムをCで組んでいます。
そのADは2つあり、それぞれ20bitです。
データはパラレルで2ms毎にやって来て、それを115200bpsのRS232Cで送り、
ターミナルで「123456,123456<CrLF>」と10進数の文字で表示したいです。
問題は、2msと時間が短いので、各計算をササッとすませなければなりません。
質問です。
送信は送信終了割込を使用しますが、変数内容→文字の変換に時間がかかっています。
変換方法のうまいやり方はないでしょうか? 現在やっているのは、
suuji[10] = { "0123456789" };
a = x / 100000; tx_chr = suuji[a]; temp = x % 100000;
a = x / 10000; tx_chr = suuji[a]; temp = x % 10000;
a = x / 1000; tx_chr = suuji[a]; temp = x % 1000;
a = x / 100; tx_chr = suuji[a]; temp = x % 100;
(省略)
という感じです。
何かステップ数が少ない変換方法はないでしょうか? 宜しくお願いいたします。
155:774ワット発電中さん
09/11/20 01:19:52 ZKzxYOSt
AD変換した物をなぜそのまま送らない。
20 20 → 8 8 (4 4) 8 8 → USART送信
で良いじゃないか。
大体ADに20bitも桁が必要なのかね。
156:774ワット発電中さん
09/11/20 01:38:36 3upbEYoS
H8の送り方の手順決めて、PC側で受信ソフトを作る方がいいんでないかい
157:774ワット発電中さん
09/11/20 02:07:22 ZKzxYOSt
2ms間隔でprintfする意味も分からないし。
158:774ワット発電中さん
09/11/20 02:22:20 L0mJDA28
バイナリで送らずに文字で、しかも真ん中に,があるところを見ると、
Excelなどに取り込みたいんでしょう。
多少の違いはあれ、バイナリから文字へはその計算になる。
だからRS232を速く送ることを考えた方がいいかも知れない。
水晶を変えれば、誤差0で高速なボーレートが行けるかもしれないよ。
>>157
printf?? 何言ってんの、違うだろ。送信割り込みを使うって言っているんだから。
159:774ワット発電中さん
09/11/20 02:30:13 ZKzxYOSt
いやだからターミナルでprintfするんじゃないの?
別に2msでする必要は無いんじゃね。
後々、データ採るんだろうけど。
160:774ワット発電中さん
09/11/20 02:32:27 /v4XzsV8
生バイナリで送ってテキストに保存
後でテキストをPC側の簡単なプログラムに掛けて10進になおす
に一票
C言語の基礎知識がしっかりしてれば、あとは
・PCで動くコマンドラインアプリの作り方
・テキストファイルの入出力
を勉強すればできるよ。
161:774ワット発電中さん
09/11/20 02:34:37 q6s76T9S
>>154 まず1000で割ると上と下それぞれ3桁が得られるでしょ。
そのそれぞれを100で割るのは16bit演算でできる。そうしてできた00~99の数値を
"00"~"99"の表を引く。これで割り算が3回に減らせる。
ldivとdiv関数使えば商と剰余を一度に得られるし。
162:161
09/11/20 02:41:58 q6s76T9S
まあ、俺もみんなの言うように生で送る手法のが情報が圧縮できてイイとは思うけど。
固定桁がイイなら、HEXで送るとかは? sprintfが間に合わないなら、"00"~"FF"の
表をバイトで引けばイイし。HEXから十進数へは後でエクセルでも直せる。
163:161
09/11/20 02:52:54 q6s76T9S
6桁,6桁CRLFなら送信時間は確かに間に合うが、20bitは10進6桁に収まらないじゃん。
16進で6桁必要だ。運用上10進6桁と判っているならいいが。10進8桁必要なら
161の手法で/10000と/100を使えば割り算3回ね。
164:774ワット発電中さん
09/11/20 04:43:42 5Pj6OspK
テキストとして送りたいだけならニブル毎に16進にするのがいいと思うけどね。
テーブル引きや割り算なんて不要になるし、生データに戻すときも楽。
>>154みたいな事をするぐらいならsprintfか、itoaがあるならそれで
一度バッファに文字列を作成してそれを送信する。
20bitは((1<<20)-1)までの範囲。
10進の場合1048575までの7桁、それが2セットなら14バイト。
16進の場合fffffまでの5桁、それが2セットなら10バイト。
UARTで送る場合start、stop等の冗長ビットが必ず付くから
どう送るのかは確認した方がいい。8n1と仮定して
115200bps / (8+2)bit / 1000ms * 2 = 23(文字)
2msごとに23文字までは間に合う。
1bit増えると20文字まで減ったりする。
165:774ワット発電中さん
09/11/20 10:16:27 MoHXJ0cl
>>159
ターミナルでPRINTFって何?
PRINTFって、送り側の命令じゃないの?
166:774ワット発電中さん
09/11/20 11:06:54 yDItESXB
>>154
割り算は以外に遅かったりする。
まあクロック数えてないんでこれが速いかわからんが。
char *ore_itoa(int val) {
static const int digit[]={100000,10000,1000,100,10,1};
static char ret[7];
int i;
for (i = 0; i< 6; i++) {
char d = '0';
while(val >= digit[i]) {
val -= digit[i];
d++;
}
ret[i] = d;
}
ret[i] = '\0';
return ret;
}
167:774ワット発電中さん
09/11/20 14:00:15 ZKzxYOSt
>>165
ターミナルも自分で作るんでしょ?
168:774ワット発電中さん
09/11/20 15:39:27 +ClAs7/p
>>157 >>158 >>165
組み込みでprintf使ってる奴って初めて見た
ウチの会社では使用禁止
169:774ワット発電中さん
09/11/20 15:54:15 CccjsWjH
>>168
自作の簡易printfのことだと思いたい
170:774ワット発電中さん
09/11/20 16:51:45 OCkt+ePB
154です。
みなさん、ありがとうございました。勉強になりました。
割り算を減らすのが味噌みたいですね。
それで、みなさんのお話を参考に、初めて作ってみました。
・生データで送るのもありですが、文字列でやりたいと思いました。
・相手はPCのターミナルソフトで受け、Logでふぁいる生成して、そのあとで他に読み込ませるつもりです。
・16進数の文字で送るのがいいと思いましたが、やり方がわからなかったので、1000で割って100で割って・・・です。
・20bitデータはまちがいでした。20bitADの下2bitは捨てていて、18bitデータでした。すみません。
ひとまず、それなりの出力は得られましたので、今から実際に組み込んでみて時間に間に合うか見てみます。
ありがとうございました。
また報告します。
>>160
>生バイナリで送ってテキストに保存
ターミナルのlog機能でbinaryも記録できるのでしょうか?
binaryを受けると、音がしたり、画面がくちゃくちゃになるので、
binaryは受けられないと思っています。
画面はくちゃくちゃでも、logファイルにはちゃんと入ってるよ、ということなら、
すごくうれしいです。
最後の[EOF]はデータとどのように区別するのかが興味があります。
171:774ワット発電中さん
09/11/20 16:55:29 OCkt+ePB
154です。試しに作ったソースを貼ります。ポインターは難しくてわからないので、配列にしました。
void main(void){
const unsigned char dd[200] = { "000102030405060708091011・・・9293949596979899" }; // 0~99
unsigned long int Li1, Li2; // 送信したいデータ1, 2 (Li=Long intの略)
unsigned int i1,i2; // 途中変数 (i=int)
unsigned char c1,c2,c3,c4; // 切り出された数値 (c=char)
unsigned char txd[13]; // 送信用の文字列buffer。これが答
while(1){
Li1=123456; // 例として 数字1
Li2=987654; // 例として 数字2
i1 = (unsigned int)(Li1 / 1000); // 1000で割る
i2 = (unsigned int)(Li1 % 1000); // その余り
c1 = (unsigned char)(i1 / 100); // 100で割る
c2 = (unsigned char)(i1 % 100); // その余り
c3 = (unsigned char)(i2 / 100); // 100で割る
c4 = (unsigned char)(i2 % 100); // その余り
c1 <<= 1; // 配列が2文字毎になっているので2倍する
c2 <<= 1;
c3 <<= 1;
c4 <<= 1;
// 送信用bufferの組み立て
txd[ 0] = dd[c1+1]; // 最上位は1桁
txd[ 1] = dd[c2 ]; // その下の桁は2桁 上側
txd[ 2] = dd[c2+1]; // その下の桁は2桁 下側
txd[ 3] = dd[c3+1]; // その次の桁は1桁
txd[ 4] = dd[c4 ]; // その下の桁は2桁 上側
txd[ 5] = dd[c4+1]; // その下の桁は2桁 下側
txd[ 6] = ','; // カンマ
i1 = (unsigned int)(Li2 / 1000);
i2 = (unsigned int)(Li2 % 1000);
c1 = (unsigned char)(i1 / 100);
c2 = (unsigned char)(i1 % 100);
c3 = (unsigned char)(i2 / 100);
c4 = (unsigned char)(i2 % 100);
c1 <<= 1;
c2 <<= 1;
c3 <<= 1;
c4 <<= 1;
txd[ 7] = dd[c1+1];
txd[ 8] = dd[c2 ];
txd[ 9] = dd[c2+1];
txd[10] = dd[c3+1];
txd[11] = dd[c4 ];
txd[12] = dd[c4+1]; // このあと送信終了割込が送信する。
}
}
実行結果
123456,987654
123456,987654
172:774ワット発電中さん
09/11/20 17:14:09 OCkt+ePB
154です
実行時間を測定してみました。
i1 = (unsigned int)(Li1 / 1000); // 1000で割る
から
txd[12] = dd[c4+1]; // このあと送信終了割込が送信する
までで
116usでした。速いです。
115200bps/10 *15文字 = 1.302ms ですので、うまくいきそうな雰囲気です。
173:161
09/11/20 17:29:22 q6s76T9S
>>154さん、161です。大勢のレスの中から私の手法を拾ってくださって嬉しいです。
私もH8 16bitクラスで、ダイヤルをくるくる回すのに追従して6桁の数値を表示する時に
苦労してあの手法にたどりつきました。 割り算が減るのが嬉しいでしょ(^o^)
ldiv div関数について学んでみてください。171のコードの、i1,i2をdiv_t構造体のquotとrem
にすれば、割り算1回で商と剰余が同時に求まるのですよ。ldivはそれをlongでやってくれる
次のレスで私の6桁editを貼ります。
174:161
09/11/20 17:37:08 q6s76T9S
void longedit(ulong l, short *dst) { /* long edit ルーチン */
/* input : l=long値、dst=編集先エリアのアドレス(ワード境界必須) */
register ushort lswd; /* 千~1の桁 */
ulong _ul_div_wd(ulong,ushort);
ushort _ul_mod_wd(ulong,ushort);
/* 高速化のアイデアは、割り算を減らす工夫にある。
longの割り算を1回、shortの割り算を1回で0~99の断片を
3個作り、100個の表引き(dec2b())で文字に変換する。
レジスタの使い回しがドジだが割り算等本質的な部分は変わらない。 */
*(dst ) = dec2b(_ul_div_wd(l,10000)); /* 上2桁をedit */
lswd = _ul_mod_wd(l,10000); /* 下4桁を計算 */
*(dst+1) = dec2b(lswd/100); /* 千、百の桁edit */
*(dst+2) = dec2b(lswd%100); /* 十、1の桁edit */
}
_ul_div_wd()は32bit÷16bitの商、_ul_mod_wd()は32bit÷16bitの剰余を返すASMルーチンです
DIVXU 引数のレジスタ32bit/16bit だけのルーチンですが、cでは32bit/32bitしかないので
役に立つルーチンです。
175:161
09/11/20 17:38:27 q6s76T9S
dec2bは00~99の表引きだけのルーチンです。
176:774ワット発電中さん
09/11/20 17:54:17 PX2iHqd1
5桁HEXの方が圧倒的に早いのに。
177:774ワット発電中さん
09/11/20 20:25:26 WCUMEYZT
>174
よくわかんないんだけど、H8のCって
D = X / Y;
Q = X % Y;
を一つの除算命令にまとめてくんないの?
178:774ワット発電中さん
09/11/20 21:11:00 hUPPLNau
剰余なんてどれだけ重いかわかってんのか
179:774ワット発電中さん
09/11/20 21:14:43 hUPPLNau
>>154
おまえの使ってるコンパイラがリテラルによる除算が
ちゃーんと乗算に置き換えてくれてることと、
剰余の所用クロック確認したんだろな?
剰余を弥陀に4発並べて時間がかかるって?馬鹿かオマエは。
180:774ワット発電中さん
09/11/20 21:25:38 OCkt+ePB
154です
実行時間を測定してみました 2
sprintf( dd, "%6lu,%6lu\r\n", long_int1, long_int2 );
944usでした。対処したものに比べると、とても遅いです。
中で一体何をしているんでしょうね。
0.944ms + 1.3ms = 計2.34msとなり、他の仕事が全くできず、うまくありませんでした。
>>155
ありがとうございます。せっかくソースまでのせて頂いたのですが、
テストできそうにないです。ごめんなさい。
181:774ワット発電中さん
09/11/20 21:53:05 HONULwjL
>>177
H8がネイティブで持っている割り算命令は
「32Bit ÷ 16Bit → 商16bit、余り16Bit」
が最大。それ以上のビット数になると
シコシコと引き算とシフトをループさせるしかない。
182:774ワット発電中さん
09/11/20 21:59:03 SlmO6eOp
ごめん
ADが2chで20bitってどの型番?
183:774ワット発電中さん
09/11/20 23:33:52 lVv95S+x
>>180
printfを使うから遅くなる
184:774ワット発電中さん
09/11/20 23:37:09 WdiblTMd
ET2009に行ったら、AlteraのブースにFPGA用のH8が展示してあった。
185:774ワット発電中さん
09/11/20 23:44:56 L0mJDA28
>>182
よくわかりませんが、AD7なんとかだと思いました。
よくわかっていません。
186:774ワット発電中さん
09/11/20 23:47:12 L0mJDA28
>>179
日本語でお願いします。
「弥陀に4発」って意味がわかりません。
187:774ワット発電中さん
09/11/20 23:57:57 ZKzxYOSt
弥陀→あみだ→本当は数珠繋ぎと言いたい?
188:774ワット発電中さん
09/11/21 00:00:51 iPmQoKMu
よくわからんけど。
189:774ワット発電中さん
09/11/21 05:00:33 rmfrPQZK
ムダのタイプミス+変換見落とし に一票
190:774ワット発電中さん
09/11/21 05:51:39 hDlcr6mR
>>185
AD7ってポート番号じゃないかと。
H8のMCUの型番を聞いてると思う。
よくわからんのなら仕方がないが。
191:774ワット発電中さん
09/11/21 11:04:19 4e3doTtU
>>190
アナログデバイスの「AD77なんとか」です。
ちなみにH8のポート番号は先頭に「P」が付くです。
P10 P12 PA6 PJ2 とかです。
192:774ワット発電中さん
09/11/21 15:05:59 p0izeEwn
なんだか・・もうちょっと勉強した方が良いんじゃないかと思います
193:774ワット発電中さん
09/11/21 16:47:04 nIGrqGDJ
こうやって勉強するのもよいかと思います。
194:まあどうでもいいけど
09/11/21 20:03:09 bxVCnBmY
>191
AD7785ってとこか…
ということはボード設計したの別の人なんだ。
195:774ワット発電中さん
09/11/22 09:04:59 xOsVkgUs
パラレルって言ってるんだからAD変換ICだろJK
196:774ワット発電中さん
09/11/27 11:34:20 dKjD3v3H
R8Cの速度に失望した
プリフェッチに命令がたまるのにどんだけかかるんだよ
実行サイクル数にどれだけの意味があるのか
197:774ワット発電中さん
09/11/27 13:24:33 SCrMKtFR
>>196
分周(8分周)のまま使っているというオチでは、ないですよね
198:774ワット発電中さん
09/11/27 13:41:41 dKjD3v3H
>>197
それは最初に気がついた
でも分周なしにしてもやたら遅いんでソフトウェアマニュアル読んでたら
プリフェッチが一クロック一バイト!!なんじゃこりゃと
199:774ワット発電中さん
09/11/28 11:18:25 37pMB89d
バス8ビットだからな
200:774ワット発電中さん
09/11/28 13:59:21 MdEvNY4n
8088とかのノリっしょ?
201:774ワット発電中さん
09/11/29 05:29:13 NHHQnE22
面白そうだったので命令セット覗いてみた。80xx系は LD/ST だけど、こっちは MOV
使ってるから、なんかNECの石とも似てた。クロックは20Mにできても8bitなんだから
しょうがないよ。
202:774ワット発電中さん
09/11/29 08:26:01 dWknqZo5
RXもそうだけど、ルネサスになってから出てきたCPUは三菱系な命令セットなんだよねえ。
日立の方つうか68Kに慣れてるといまいち馴染めん。
203:774ワット発電中さん
09/11/29 12:51:40 Ca0iWFRb
SH7266サンプル出荷2010年2月
204:774ワット発電中さん
09/12/02 01:08:39 nWQaVXVL
H8で、RS232の送信で、教えてください。
現在、RS232の送信部分をバックグラウンドで行おうと考えています。
その方法は、
1. 200文字くらいの送信bufferを用意する。
プログラム各所で、そのbufferの最後に、送信したい文字を追加書き込みしていきます。
このあとの送信処理を2通り考えています。
2-1. 送信終了割り込みを使用する方法
bufferの読み出し/書き込みのポインタが違っていたら、未送信文字があると判断して
送信終了割り込みをonにして、未送信の先頭1文字を送ります。
すると送信終了割り込みが入り、もし続きがあればそれを送信、
もし残りがなくなったら、送信終了割り込みをoffにする。
2-2 メインルーチンに、2-1と同じような処理をベタで書き、(割り込み使わない)
処理する。
なぜ2つ考えたかというと、
2-1では、bufferに残りが多数あると、連続して割込が入ってしまい、
残数がなくなるまでメインなどの他の処理が滞ってしまう。
2-2の方法だと、送信が若干間欠にはなるものの、メインは留まらないように
作ってあるので、メイン等の処理→1文字送信メイン等の処理→・・・
が繰り返されると考えたからです。
質問です。
上記の理由で、2-2のほうが良いと考えたのですが、
そうすると、送信終了割り込みの使い道が??になってしまいます。
なので、私の考え方がNGなのか?とも考えています。
2-1,2-2の方法も含めて、私のこのような考え方は変でしょうか?
205:774ワット発電中さん
09/12/02 03:36:35 E7xFlkd+
ふつう一文字送るのにそれなりに時間がかかるので、
連続して割り込みが入って他に何も出来ないなんてことはない。
φ/16でBRRが1とかいう極端な設定の場合は別だが。
206:774ワット発電中さん
09/12/02 04:15:49 iwtTfrxd
>>204 具体的なレートとclockを書いてくれればはっきりするのに。
例えば9600でclockが19.6608とかだったら、割り込みはほぼ1mSに1回でその間に
CPUは20000clock分のmain処理を実行できる。送信割り込み処理なんて50clock位
だから、送信の負担は1%未満。こんなふうに評価する。
送信の送り始めでは、送信レディ割り込みと送信機能ONをコマンドregに書くでしょ。
この時は送信終了割り込みはONにしない。
送信レディ割り込みでは、まだ送信文字が残っている間次の文字をTXDregに書く。
で、最後の文字を書いたら、送信レディ割り込みをmaskして、送信終了割り込みをON
にする。上の9600の例だと、この後2mS後に送信終了割り込みがかかるから、そこで
送信機能OFFと、送信終了割り込みOFFを実行して、1フレーム分の送信が完了する。
207:774ワット発電中さん
09/12/02 04:20:08 iwtTfrxd
__interrupt(vect=94) void txrdy1(void) {/* SCI1TXrdy int. */
SCI1.TDR = s1ring[c1s_rpt]; /* アンバッファリング */
SCI1.SSR.BIT.TDRE = 0; /* TDRE clear */
c1s_rpt = (_UWORD)((c1s_rpt+1)&(sizeof s1ring-1)); /* リングポインタ更新 */
/* SCRx:| TIE | RIE | TE | RE | 0 | TEIE | 0,0 */
if( c1s_rpt==c1s_wpt ) { /* 残り0なら */
SCI1.SCR.BYTE = 0x74; /* TIE off, TEIE ON */
/* この後(約4mS後に)、TEND(トランスミットend)割込みが起きる。
そのときにTE,TEIEをoffにする。それがこの下の処理。 */
}
}
__interrupt(vect=95) void txend1(void) {/* SCI1 TXend int処理. */
/* 最後の文字フレームのストップビットが出力され、シフトレジスタが空に
なるとこの割込みが起きる。この時TE,TEIEをオフる。 */
SCI1.SCR.BIT.TE = 0; /* TE,TEIEオフ */
SCI1.SCR.BIT.TEIE = 0;
} 俺が使ってるTXrdy、TENDの割り込み処理。参考になれば。
208:774ワット発電中さん
09/12/02 04:30:23 iwtTfrxd
_UBYTE s1ring[2048]; _UWORD c1s_wpt,c1s_rpt;; // ringバッファと、リード・ライトポインタ
void ch1puts(_UBYTE* srcp) { /* 送信バッファ書き込みルーチン*/
register _UWORD Rx=c1s_wpt; // loop中はRegに持つ
do { /* サイズ回 loop */
s1ring[Rx] = *srcp++; /* 1 キャラ put, srcp++ */
Rx = (_UWORD)((Rx+1)&(sizeof s1ring-1));// カウンタ更新
} while( *srcp );
c1s_wpt = Rx; // ringポインタ更新
SCI1.SCR.BYTE = 0xF0; /* TIE,TE ON */
/* この後、割込み処理でリングバッファからTXシフトレジスタに書き込む */
} こっちがtask側から使う送信開始ルーチン。null止め文字列を渡すという想定。
へうで作るんだよね? interrupt.cに書かれてる割り込み処理からここに書いた関数を
呼び出すようにするとコールオーバーヘッドがもったいないから、interrupt.cの該当vectの
関数はコメントアウトして、自分のドライバ.cファイルに(俺の場合uart.c)このようにvectを
書けばいい。 リード・ライトポインタだけで、滞留バイト数は不要なのも2chで教えてもらった。
209:774ワット発電中さん
09/12/02 04:41:19 iwtTfrxd
この手法は十分デバックされ尽くして何度も使い回しているから、今ではパツイチで動く。
送信終了割り込みの使い方を知らない人が書いたコードを保守したこともあるが、
// 最後のバイトを書いた所で送信機能をオフにすると最後の2文字が出ない。
// 仕方ないので1mS単位のソフトタイマを設け、最後のバイトを書いたときそれを4にして、
// そのタイマが0になったときに送信機能をオフにする。
なんて書き方をしてあった(w 割り込みを使えばこの辺がスマートに解決できるわけ。
長文すいませんでした。
210:追伸
09/12/02 04:45:29 iwtTfrxd
あまりないと思うけど、バイナリ00hを含むフレームを送信したい場合のみ、208を
ch1puts(_UBYTE* srcp, _UWORD len) { のような渡し方にして、len回loopさせる。
俺は入り口名を別にして両方設けてある。
211:うるさくてごめん
09/12/02 04:59:19 iwtTfrxd
H8の小さい方で、内蔵メモリが少なければ、ringバッファを[256]にしてリード・ライトポインタを
BYTEにすれば、更に処理は軽くなる。 余裕があるなら、滞留数を気にせず送信関数を
コールできるために、1回に発生する送信フレーム("hellow・・・\r\n"とか)の2倍に近い
ringサイズにしておくといい。まあ、何秒に何回こんなフレームが発生するからピーク滞留数は
これくらい、という評価は事前に必要だけど。極端な例で、ring[256]で128バイトの文字列を
208に渡すと、2度目はぎりぎりセーフ。1度目のコールの後、割り込み処理で最初の2文字は
取り出されてTXDregとTXシフトregにあるから、2度目のコール完了後の滞留数は254になる。
212:うるさくてごめん
09/12/02 05:10:42 iwtTfrxd
>>204の2-2のデメリット:if( バッファに残りバイトがあり && SCIステータスregのTIフラグがON ) {
のとき次のバイトをTXDに書き込む; という書き方をするんだよね? この判定の頻度が
もの凄く多くなって、その殆どはFalseになるから、無駄なオーバーヘッドになる。
割り込み機能は、それを 「必要なとき」 だけに刈り込んでくれるわけだから。
オーバーヘッド以外にも、SCI.xxxのような特定のデバイスへの参照は 「ドライバ層」
のモジュール(xxxxx.cのファイルね)に隔離したほうが、リーダビリティや、モジュール強度
の点からも良いプログラム手法になる。
213:774ワット発電中さん
09/12/02 10:30:12 fakrW2Dw
うわあ、さっそくありがとうございました。
通信レートを書かなくてすみませんでした。
115200 の 16MHzです
送信データは、2.56mS毎に必ず発生します。
その他の割り込みは、IRQを4本、受信割り込み二本、タイマー割り込み二本です。
214:774ワット発電中さん
09/12/02 11:41:33 Y77lGLA2
115200ってことは、1byteが100us
16MHzってことは1クロック0.0625us
単純に3クロック1命令とか計算しても500命令
周期の余裕をみて1/3に納めても166命令
215:774ワット発電中さん
09/12/02 11:42:02 E7xFlkd+
そりゃ結構厳しい条件ですな。
無理しないでメインループでポーリングした方がいいと思う。
216:774ワット発電中さん
09/12/02 14:53:57 RSForRWh
東芝の「ベクトルエンジン」みたいなの、ルネでも出ないかな。
あれ誰か使ったことある人いる?
217:212
09/12/02 18:24:51 iwtTfrxd
お、話が進んでる。確かにその位の条件になったら、212のFalseの比率が有意に下がるので
mainで(不本意ながら)そういう処理を書くことも考えられる。でもそれって=敗戦処理なのだ
1クラス上のCPUを選ぶという選択が正しいと思うよ。そのH8に俺の書いた体系を実行
させれば、最大効率+処理能力の余裕 が得られる。・・・んだけど
218:774ワット発電中さん
09/12/02 18:39:11 Qk+se2c7
これだからCしか出来ない奴は(ry
219:774ワット発電中さん
09/12/02 22:01:55 jDpnuX9j
>>212
割り込みは応答時間が馬鹿にならないし、
他の割り込みが実行中なら、さらにそれだけ
待たされるわけだから、無駄なボーバーヘッドは
割り込みの方が大きくなるんだけど。
特にUARTの送信はボーレートを計算すれば
次の割り込み要因がONになるまでどれぐらいの
猶予があるかは見積もれるわけだし、
言い換えればタイミングが判っている処理を
割り込みで待つ必要はない。
むしろ空き時間を作りたいなら極力割り込みは
避けるべきだね。
と言ってみる。
220:774ワット発電中さん
09/12/02 22:10:24 gdSfHBSs
ボーバーヘッド
221:774ワット発電中さん
09/12/02 22:31:22 Gdqcdnr4
ボンバヘッ!
222:774ワット発電中さん
09/12/03 01:00:48 n1wexY7w
趣味でマイコンを始めようと思ってH8/3052Fの開発キットを購入したんだが、
最近はAVRやPSoCも人気があるようで…。
H8がAVRやPSoCよりも優れている点はないのでしょうか?
個人的には国産マイコンであるH8に、何らかの利点があってほしいのですが…。
223:774ワット発電中さん
09/12/03 01:19:01 IFDWjehh
気に入ってるから使う、それで十分じゃないか。
ちなみに俺は 78K と V850。
224:774ワット発電中さん
09/12/03 01:57:50 4MkTpdVV
>>222
主な利点
・32bitまでの汎用レジスタ
・アドレスが広い
・外部バスがある。DRAMとかが直結可能(3052の場合2MBまで)
・DMAがある
・DACがある
・ライタ不要
・情報が多い(ただし古い)
主な欠点
・SPI、I2Cがない(ソフトで書くと遅い上にI2Cとしては簡易的な物になる)
・フラッシュ書き込み回数が少ない(外部EEPROMとかで回避)
・IC単価が高い
・表面実装しかない
・2chスレが荒れ気味(gccとhew論争や基地外の1行レス等)
225:774ワット発電中さん
09/12/03 02:52:24 CQRSVPtB
昔はPICばっかり使ってたけど、最近はH8ばっかり。
メモリ多いし、処理は速いし。
プログラム組んでいて、何かしら安心感が違う。
好きだなぁ、H8。H8Sはさらに速くていい。
SHは使ったことないけど、そこまでいくならFPGA使うな。
226:774ワット発電中さん
09/12/03 03:35:15 P//54SVp
>・フラッシュ書き込み回数が少ない(外部EEPROMとかで回避)
これについては、開発用のボードで何度も書いて開発してゆき、
完成したSフォーマットファイルを
製品用のボードに焼くことで十分回避できると思います。
227:774ワット発電中さん
09/12/03 22:02:45 st8O4b4Z
内蔵FLASHは書き換えの多い不揮発なデータ領域にむかないでしょ
228:774ワット発電中さん
09/12/04 02:21:36 Xnkclfs9
H8メーリングリスト(終了したやつ)の内容を、
全部ダウンロードしたいのですが、
一発で全部ダウンロードってできますか?
1つ1つの発言を全部開いてCTRL+C, CTRL+Vを繰り返すということもできないので。
229:774ワット発電中さん
09/12/04 06:51:02 qfIWpPKo
wgetでも使え windows版もあるらしいぞ
230:774ワット発電中さん
09/12/04 12:28:28 QfMiLdxD
CPUにはいいけどPICみたいな使い捨て分野だと不利だよね
>>226
H8だとシミュレータもあるよね
俺トラ技のR8C練習してるけど、シミュレータのこと書いてなかったから無駄に書き換えしてたお
231:774ワット発電中さん
09/12/04 23:06:44 T7Ql8HoG
話がかみ合ってない気がする。
最近のチップだと、flashを丈夫に作っておいて
データ保存領域として動作中に書き換えてることを意識してる。
そうするとEEPROMなんかを外付けする必要が無くなるからね。
そういうことがH8だとできないってことでしょう。
232:774ワット発電中さん
09/12/05 00:40:51 zhUjJjjQ
そういう使い方で、ECC入れてエラー訂正すれば書き込み回数10倍にできまふ。
なんていうアプリケーションノートがあったような気がする。
233:774ワット発電中さん
09/12/05 08:20:50 cDDcHBTJ
国内メーカが公称値が少な目なのはワーストケースを考えて更にマージン
取るなどしているからで,実力値は相当高かったりするけどね
フラッシュで頻繁に書き換えが発生するならECC入れるなりCRCチェックして
代替処理するなりという細工は必要だろう。
もっとも,ECCもソフトだけでやるとちと面倒臭いけどね。
234:774ワット発電中さん
09/12/09 13:10:50 nLa+FP4P
教えてください。
H8のタイマー割り込みを使って、時計を作ったのですが、
時間が少しずれます。僕がいけないのでしょうか?
ズレは、12時間で2秒早いです。ストップウオッチの手計測なので誤差大ですが、
2秒は間違いなく、早いです。
水晶=18.432MHz GRA=18432 タイマ割込周期=1.0ms毎。
タイマー割込内で tim++;
mainで、timを時間、分、秒に分解して液晶に表示
というプログラムです。
タイマー割り込みで加算しているので、
プログラムのうまい下手は精度に関係しないと思っていますが、どうでしょうか。
235:774ワット発電中さん
09/12/09 15:46:03 gf/dmPgO
はい、あなたがいけないです。
236:774ワット発電中さん
09/12/09 16:14:49 nLa+FP4P
そうですか。ショボ~ン。
237:774ワット発電中さん
09/12/09 16:31:15 YB/Ugbu8
それぐらいの誤差はあるんじゃないの?水晶ってそんなに正確なんかな?
テキトーですまんが、H8 って、割り込みの後、次の割り込み許可の操作とか
いらないんだっけか?その辺の処理が積み重なってるとか。
いい加減でゴメン。
238:774ワット発電中さん
09/12/09 16:53:20 TyMKnm3L
GRAを1引いてみそ。
239:774ワット発電中さん
09/12/09 16:56:38 5PbYlznp
>>234
どんな水晶を使っているかわからなけれど。
12時間で2秒のずれが全部水晶の誤差だとしても、
だいたい 50ppmだからそんなもん。
240:774ワット発電中さん
09/12/09 16:57:22 gf/dmPgO
それ、さらに周期が短くなって、ますますズレが大きくなるんでね?
241:774ワット発電中さん
09/12/09 18:12:41 IIV43797
URLリンク(windowsxp_sony.pasokoma.jp)
>通常のRTCの水晶発振子の誤差は、50ppm以内です。
>これを1日に換算すると、60*60*24*50/1000000=4.32(秒)となります。
12時間で2秒は許容範囲
ストップウォッチがずれてる可能性も
242:774ワット発電中さん
09/12/09 18:27:07 nLa+FP4P
みなさん、ありがとうございます。
>H8 って、割り込みの後、次の割り込み許可の操作とか
>いらないんだっけか?その辺の処理が積み重なってるとか。
もちろん次の割り込みの許可は必要ですが、
ハードのカウンタですので、次の割り込みが入るまでにそれを行えば、
大丈夫だと思います。
GRAを1個引いたら、さらに早くなると思います。
ていうか、もう目の前から物がなくなってしまったので、試せません。すみません。
50ppm、流石ですね。根拠に信憑性がありますね。
>ストップウォッチがずれてる可能性も
これは気づきませんでした。たしかにそうですね。
みなさん、どうもありがとうございました。
なんとか動いているみたいで、安心しました。ありがとう。
243:774ワット発電中さん
09/12/09 20:01:48 FaYt4P5s
>>238 でfaだと思う
早くなってるって事だから辻褄が通らないんだけど…
> 水晶=18.432MHz GRA=18432 タイマ割込周期=1.0ms毎。
この条件ならGRAの設定値は本来は「18431」でないといけないよ。
ハードウェアでカウンタを設計すれば分かるけど、カウンタの値は0から始まるから
周期は「上限の設定値+1」になる
上限の設定値を2とすると、カウンタの値の遷移は
0, 1, 2, 0, 1, 2, 0, 1, 2, ...
となるから、結果的にカウンタの周期は3サイクルになる
親切なマニュアルだと、「所望の周期-1」を設定しろと書いてある
>>242
>GRAを1個引いたら、さらに早くなると思います。
>ていうか、もう目の前から物がなくなってしまったので、試せません。すみません。
気になるから取り戻して確認しれ
確かに一般的な水晶の許容差が50ppmだからそんな物かもしれんが、何でも誤差で済ませては
エンジニアとしては負けだ
244:774ワット発電中さん
09/12/09 20:15:52 KvhfgRJd
まあ、+1した時に何ppm変化するか、やってみないと判らない様な奴は
エンジニアとは到底言えないけどな。
245:774ワット発電中さん
09/12/09 20:25:21 FaYt4P5s
書込む前に計算してみたんだけど、+1されてるとだいたい2秒と少し遅くなる
でも本人は、2秒「早い」って言ってるからね
246:774ワット発電中さん
09/12/09 23:09:58 ssIPqQLb
本来なら12時間で4秒ほど進むレベルの水晶だったのに、
設定ミスで誤差が相殺された。
という可能性はないの?
247:774ワット発電中さん
09/12/10 03:57:08 Na9SbRfK
天体の運行を元にした時計と水晶の時計とは違って当然なんじゃないの?
地球の回転だってばらつきはあるし、1年間の365.2422日だって近似値だし、それから
割り算した1秒がきっちり1000mSとはかぎらないでしょ。
248:774ワット発電中さん
09/12/10 04:36:48 I+UurQZ0
>>246
たかがカウンタの設定値を決めるのに「可能性」なんか持ち出すなよ。
理屈通りの値を設定すれば良いだけ。
>>247
小、中学校あたりから勉強しなおした方が良いかも。
249:774ワット発電中さん
09/12/10 09:51:09 fdyUtH6O
ちまたの時計は地球の自転エネルギーで時を刻んでいるのかーっ
というツッコミをしたくなるボケ方だな。
250:774ワット発電中さん
09/12/10 13:17:08 3gQsjmMq
コリオリ時計!
そういうのもあるのか!!
251:774ワット発電中さん
09/12/10 13:45:50 Ymq5uMhk
科学館にあったな。
252:小学生
09/12/10 15:34:52 Na9SbRfK
>>248-249 石のクロックと言うときの何Hzの元になる1秒は何から定義されているのですか?
私は「セシウム133 原子の基底状態の2つの超微細準位間の遷移に対応する放射の9 192 631 770 周期の継続時間」
だと想定しました。 しかし、人類の生活に用いられる時計は、天文の運行に即して進行する
「暦表時の1900年1月0日12時に対する太陽年の1/31 556 925.9747倍」 による1秒で運行
するように作られていました。(上の行のスペースは区切りを見やすくするためのコンマと同等)
(ゼンマイ時計の頃は人力による補正が必要でした。) コンピュータで時計をエミュレートする
時にこの2つの定義を検討せずに採用したことが根本原因だとおもいます。如何でしょうか?
253:774ワット発電中さん
09/12/10 16:12:14 CPhCGbl0
ツマンネ
254:774ワット発電中さん
09/12/10 18:45:21 fdyUtH6O
ちまたの時計は原子時計と同じ精度のクリスタルで時を刻んでいr……ツマンネ
そろそろスレ違いかな?
…水晶発振子スレなんか無いと思うけど。
255:774ワット発電中さん
09/12/10 18:50:41 I+UurQZ0
>>254
その辺の話ならスレチでは無くて板違い。
オカ板池
256:774ワット発電中さん
09/12/10 20:37:10 FTbu6sN5
>254 …水晶発振子スレなんか無いと思うけど。
これがあったりすんだけども。オカルトは無しにしてくれね。
水晶振動子&水晶発振器を鋭く語るスレ
スレリンク(denki板)l50
257:774ワット発電中さん
09/12/10 22:17:14 X8l3QN5/
バリキャップで調整すればいいんだよ メンセキメンセキ
258:774ワット発電中さん
09/12/10 23:10:11 x+dmwli+
B/Sぐらいちゃんと捏造できないと困るよ シャッチョさん
259:774ワット発電中さん
09/12/11 10:10:19 1jTGfOEF
>>256
あるのかYO!
探しておけば良かったな…しかし…語ることモスク内だろうと思ったけど、結構マトモに進行してるスレみたいね。
260:774ワット発電中さん
09/12/11 10:17:50 EXOfQ7E7
アッラーは偉大なり、とか語るんですね。
261:774ワット発電中さん
09/12/11 13:22:38 KzSVmg3H
>>259
デリケートなアナログ系デバイスの代表者だから、
語ることは山ほどあると思うけど
毎日同じ時間に、お祈りささげたり
262:774ワット発電中さん
09/12/13 14:30:13 GLjUJIcH
H8 3052Hマイコンで,SPIを使ったSDカードへのアクセスをしようと考えています.
使用しているコンパイラがBesttechnologyで配布されていたGCC Developpers Liteです.
以前シリアル通信用のライブラリをいじった事があったので,同じようにChan様配布の
FatFSをライブラリ化しようと考えていたのですが難しくてなかなか進みません.
どなたか,既にやられている方とか,資料などありましたらご教示いただけないでしょうか.
263:774ワット発電中さん
09/12/14 10:07:40 lVHuoOVS
トラ技1月号のH8は、ルネサスのフリーのコンパイラーHEWがあれば、開発できますか?
264:tkana3
09/12/16 23:07:04 wo2lmVtl
こんばんは。
初めて質問させていただきます。
H8/3048でちょっとしたものを作っています。
AKI-h8/3048をキットで購入し、サンプルプログラムMBTEST.MOT
を動かせました。
その後、F-ZTATを起動すると全く時間をカウントしないうちに「time
out error」となります。
これは、キャッシュみたいなのものが残っているのでしょうか。
以上よろしくお願いします
265:262
09/12/17 00:09:09 7/hNDWaA
>264
F-ZTATを一旦終了させ、3048側の電源を入れなおして再度
やってもダメですか? 3048だと動作痛に書き込みモードへの
切り替えスイッチを操作するとCPUが故障する可能性もあります
のでご注意ください・
>262
自分のですが、現状。Port9にSDカードを接続して(トラ技2008年1月号を
参考に)います。Port9の4ビットと5ビットは汎用入出力で使いたいのですが
どうやら、SCI関連のSCRレジスタ内でSCIの割り込み許可をすると、入出力に
使えないような感じです。SCIの割り込みを認めたうえで、Port9の4,5ビットを
汎用入出力として使うにはどうしたらいいのでしょう。開発はGccDevelopperLite
(BestTechnologuy配布)です。ヒントだけでもよいので、なにかご助言お願い
いたします
266:tkana3
09/12/17 01:11:31 5CqoLK1y
>265
ありがとうございます。
>F-ZTATを一旦終了させ、3048側の電源を入れなおして再度
PCリブートしてもダメですね。
リブートしても、キャッシュみたいなものが残っていて
time out を例えば123秒とすると
↓
リブート後にも設定が123秒のまま残っていますので。
>やってもダメですか? 3048だと動作痛に書き込みモードへの
>切り替えスイッチを操作するとCPUが故障する可能性もあります
はい既に1つ壊しましたのでw
267:774ワット発電中さん
09/12/17 03:30:30 PGqCB46B
>>265 SCI1 SCI0 の、CKE1,0=0,0 にして使えば、P95,94を調歩同期のSCK入力としない、
という意味になるから、入出力ポートとして使えるはずですよ。 CPUのクロックが、分周
しやすい値になっている必要がありますけど。きっちり20Mとかだと分周してできたuartの
レートが近似値になっちゃいます。
268:774ワット発電中さん
09/12/17 08:19:06 LSI9CFQf
>264
秋月のテストプログラムは時間遅延の処理に単純なループ処理で
プログラミングしているのが原因でしょう。
秋にはタイマー割り込みまではできないようです。
269:Tac Itow
09/12/17 08:26:06 LSI9CFQf
>>265
共用IOピンは、いずれか一つのデバイスのみ使用するのが良いです。
270:774ワット発電中さん
09/12/17 19:34:21 cWnhDY60
とうとうNECと統合か・・・
使いにくくなるなぁ。
271:774ワット発電中さん
09/12/22 17:07:54 O4bK7TNl
H8Sの同じソフトを、ルネサスとライフボートのコンパイラに食わせて、LINK結果のROMサイズが
20995 bytes と、5732 bytes だったよ。 個々のモジュールの機械語はライフボートのほうが
僅かにおバカなんだが、最終結果のROMで4倍近い差がつくの。面白いね。
272:774ワット発電中さん
09/12/24 01:04:40 WWqXGuHJ
いくらなんでも違いすぎだろ。
要らんライブラリをリンクしてるんじゃないの?
273:774ワット発電中さん
09/12/24 08:13:47 i6qKCKr5
ライフボートのほうは整数型限定のprintfが付いてるけど、ルネサスのはフルセットのが
付いてくるの。実数の編集なんて10MHz程度の石じゃ使えないのに。
274:774ワット発電中さん
09/12/24 10:01:50 JOOop9wV
SHマイコンの勉強をしようと思ってるんですが、
皆さんデバッガーは何を使っておられますか?
調べた限りではE10A-USB、DR-01、XrossFinder等があるようですが、
オススメのやつとかあるでしょうか?
275:774ワット発電中さん
09/12/24 10:05:23 9q+l7YAT
つーか
printf()とかリンクしてるターゲットソフトの方がダサいと思う俺は老害?
276:774ワット発電中さん
09/12/25 13:17:29 G8wCQFwd
%dとか%xなんかに相当する編集コードは自分で書けば簡単だけど、c標準の扱いする
ほうが楽だし融通が効くでしょ。string末尾のnullとか。C++使うほどでかい石じゃないし。
277:774ワット発電中さん
09/12/25 18:10:20 oo8ylZNI
使い分け出来ればいいんじゃないの
278:774ワット発電中さん
09/12/25 21:04:01 YB40WXEk
printfは呼び出し時のスタックへのpush(レジスタ渡しできない)、
書式文字列の解析に時間的なコストが掛かるのと、
出力先によって異なる改行コードとかが問題になる。
必要なのはLFなのか、CRLFなのか。
さらに言えば書式文字列自体の空間的なコスト。
printfが許容できるならゴミみたいなもんだけど。
H8では時間的コストの方で使わないことが多い。
数字の桁揃えしたい時にたまに使うけど、後で別個の関数に直したりする。
279:774ワット発電中さん
09/12/25 23:52:15 Wf6DOT23
バイナリのサイズのコストもある
元ネタみたいにサイズを気にするケースで
わざわざprintf()使うのは筋が悪い
280:774ワット発電中さん
09/12/25 23:56:07 9Z/+5yuV
元ネタみたいにサイズを気にするケースで
わざわざprintf()が巨大なバイナリを吐く処理系を使うのは筋が悪い
281:774ワット発電中さん
09/12/26 14:39:37 vzYfEUYN
H8Sジャンクヤフオクに出品中wwwwうぇwwうぇwww
URLリンク(page18.auctions.yahoo.co.jp)
282:774ワット発電中さん
09/12/26 17:10:51 GjmZmHDw
>>281
通報しますた
283:774ワット発電中さん
09/12/29 10:05:42 lBQ6thQV
>>281
秋月ジャンク…売れたのか…
500円が4000円ってボリ杉だろ
284:774ワット発電中さん
09/12/29 10:19:03 uPcx6NK1
ちゃんと動くようにしてるから良いんじゃないの
285:774ワット発電中さん
09/12/29 17:10:33 daX7Zf1+
そうだね。ソフト入れて価値が上がっているから、いいよね。
286:774ワット発電中さん
09/12/29 17:44:04 DZJ1w606
>>283-286
僅か数千円で新規にプログラム書く気になるか?
どう考えたらボリ過ぎになるんだ?
287:774ワット発電中さん
09/12/29 19:14:42 IR7oxBsA
プログラムは使いまわしが利く
288:774ワット発電中さん
09/12/29 22:07:54 daX7Zf1+
>>287
それは関係ないと思うよ。
そこに至るまでの経費や手間がかかってる
289:774ワット発電中さん
09/12/29 22:14:16 S8+1yhp1
落札者が納得さえしていれば問題ない。
ボリ過ぎだろうがなんだろうが、押し売りしたわけでもないし。
290:774ワット発電中さん
09/12/30 09:37:36 VyTG297z
その通り
291:774ワット発電中さん
09/12/30 14:58:18 ubZNT9W3
そそそ、その通り。
292:774ワット発電中さん
10/01/01 00:07:23 bC8lMeB2
新年 あけましておめでとうございます。
今年も「ルネサスマイコン総合スレ」を、宜しくお願いします。
2010年 元旦 1回目スレ立て本人
293:774ワット発電中さん
10/01/03 13:24:04 gGm0s7g5
H8S 2368,2378の、SCIの章、シリアルステータスレジスタの各STATUS-bitの説明に
また、フラグのクリアはビットクリア命令を使用してください。と書かれています。
これ、BCLR #6,@0xFFFFFF8C ならイイけど、MOV @80:8,reg BCLR #6,reg MOV reg,@8C:8
だと、ダメなのですか?
受信エラー処理のとき、MOV @8C:8,reg AND.B #87h,reg MOV reg,@8C:8 とかで、
4つのステータスbitをいっぺんにoffにしようと思ったのですが、BCLRで1bitずつしないと
ちゃんとoffれないってこと? それだとクリヤ条件(1を読んでから0を書く)とも矛盾しますよね?
どなたか体験した人いますか?
294:774ワット発電中さん
10/01/03 14:52:46 UA+y00/M
とにかく一回読んでから0書き込みすればリセットできたはず。
295:293
10/01/03 17:58:01 gGm0s7g5
ですよね~。 したらあの註は何なんじゃいと思いまして。 私も過去のプロジェクトでは
LD mask STの方式でうまくいってたみたいなんですよ。
296:774ワット発電中さん
10/01/03 22:15:17 K3BAaqLY
ノンマスカブル割込のサービスルーチンの中でそのレジスタをいじる環境では
atomicなビットクリア命令を使わないと問題が出るよってくらいの意味だと思う
297:293
10/01/04 03:54:14 nl4ckptQ
おお!鋭い。私はImaskのほうだけ考えてました。H8SはEXRで割り込み制御を多重に
する使い方のほうが一般的ですものね。
298:774ワット発電中さん
10/01/05 02:00:44 ZJy+w/ZI
H8-MLの内容が欲しいんだけど、
まとめてダウンロードする方法はないでしょうか?
299:774ワット発電中さん
10/01/05 03:23:44 u+ygNqxZ
for ((no = 1; no <= 6120; no++)); do wget -O- URLリンク(www.exp.org)本文だけ取り出すてきとーなフィルタ > H8-ML_$no.txt; done
みたいな事すればいいんでないかい。
300:774ワット発電中さん
10/01/05 23:02:57 6E8Evz4j
AVRやPICに対するH8の利点として、IOポートが多いことが挙げられると思うんだ。
H8のIOポートをほぼ全て使用する電子工作とかないかな?
301:774ワット発電中さん
10/01/06 00:18:18 sv8qi2Ft
全部に LED でもつなげ。
302:774ワット発電中さん
10/01/06 04:38:15 Q70SMhGB
>>300
>H8のIOポートをほぼ全て使用する電子工作とかないかな?
簡単だよ。
外部バスモードで、メモリ、PIOをつなぐ。
これでアドレス16本、データ16本、CS、RD, WRの3本使用。
外バスにすると、CS兼用ピンは自動的に入力しか使えないので、放置。
P7やP9などの入力専用ピンにはスイッチ、AD入力として、消費。
LCDを8bitモードで動かせば、data8本、RS, RD, Eで11本の消費。
直前状態の保持に、EEPROMをSPIで接続、これで3本。
プログラム書き込みとデバッグ用にSCI0,SCI1を使用。4本消費。
LCDにはロータリーエンコーダが付き物。外部割り込みで取り込む、これで2本消費。
303:774ワット発電中さん
10/01/07 03:04:22 ZXPhSJrb
今月号のトラ技の特集の、H8SXをC言語で使いたいと思っています。
安くて良いCコンパイラは何がありますでしょうか?
やはり、日立のHEWでやるべきでしょうか?
304:774ワット発電中さん
10/01/07 04:34:56 2wxnBROX
gccって選択もある。使ってみたいなら、gdlで検索する。
305:774ワット発電中さん
10/01/07 09:36:44 G+QHfJXJ
>>303
逆に、HEWで困る理由って何?
256k超えるような巨大ファームでも作るつもり?
306:774ワット発電中さん
10/01/07 22:15:36 MqqXuHFS
HEW って太っ腹だよな。
V850 も 256KB に制限緩和してくれないかな。
307:774ワット発電中さん
10/01/08 08:49:04 LEql/8+E
トラ技増刊号のH8SXオシロ動画で
画面描画が秒単位で掛かってるのはどういう事かな。
フレームバッファ1画面しか持ってなくて
計算しながら書いてるにしても妙に遅い気が。
308:774ワット発電中さん
10/01/08 11:26:43 S3+9l/sx
256kBまでフリーなのはSHだな。H8系は64kBだったと思う。
それでも趣味では十分だろうね。
309:774ワット発電中さん
10/01/14 06:19:01 dYJdA0Uw
DIVXU.W R5,ER6 で、元の数がER6=1000000h、R5=100 だったりすると、商は16bitに
入りませんね。こういうとき答えはどうなるのですか?
310:774ワット発電中さん
10/01/14 12:23:55 7mRzMxNN
マニュアルに書いてあるとおりの結果になるのではないでしょうか。
311:774ワット発電中さん
10/01/14 14:24:20 dYJdA0Uw
ハードウェアマニュアルには、ER÷R→ER上余り、ER下商しか書いてないの。
312:774ワット発電中さん
10/01/14 14:27:17 zW9uDSgH
何かそういうフラグ立つんじゃね
と適当言ってみるテスト
313:311
10/01/14 14:40:50 dYJdA0Uw
あ、それで思い出した。フラグはNとZが立つと書いてあったから、正÷正でネガティブが
立ってたら、オーバーフローという判定はできるかも。
314:774ワット発電中さん
10/01/14 15:33:04 y0yflrpx
>>309
シミュレータで確認して、それから考えてみよう。
315:311
10/01/14 16:28:58 dYJdA0Uw
シミュレーターでは、結果がオーバーフローする時にはER6は変化しませんでした。
ということは、割られる数が変化しないということでオーバーフローのチェックにしないと
いけませんね。実際に使う場面では、割り算が成立するような数値を入れるように注意して
使うことが殆どなので、一般的に使えるルーチンにしてチェックを入れることはしません。
316:774ワット発電中さん
10/01/15 01:06:59 OyMx1yKE
>>311
プログラミングマニュアルの方に書いてある。
んで、それを信じるとシミュレータで試しても意味はないと思う。
317:774ワット発電中さん
10/01/15 04:07:19 CSZ106Yw
それを貼ってくれませんか?
318:774ワット発電中さん
10/01/15 05:50:23 OyMx1yKE
>>317
>なお、ゼロ除算またはオーバフローが発生した場合の結果は保証されません。
つうことで結果がどうなるかを気にした時点で負けなのです。
マニュアルの方にも事前にチェックしとけやと書いてありますです。
319:774ワット発電中さん
10/01/15 08:47:41 3Gtn1OGc
>>316
んだな。結果は保証されないと明記してあるなら、シミュレータと実機の結果が
異なっていてもアリだしな。
320:317
10/01/15 12:36:10 CSZ106Yw
ありがとうございます。やっちゃってからチェックしようという態度そのものがいけないのね。
321:774ワット発電中さん
10/01/15 13:16:52 /ljx9+xz
> 入りませんね。こういうとき答えはどうなるのですか?
ゼロ除算またはオーバフローが発生した場合の結果は保証されません。
322:774ワット発電中さん
10/01/15 13:43:41 3Gtn1OGc
>>320
それは問題ないと思うが、後の資料確認をサボったのがまずかった
323:774ワット発電中さん
10/01/16 15:45:13 7s95TZGl
uartの初期化(SMRとBRRの設定)の後、起動までに1bit文の時間待て、という制約は
何から来ているのでしょうね? 実際に待たずに起動して不具合に出会った人居ますか?
324:774ワット発電中さん
10/01/16 18:50:14 MdlInehL
ヒント:C
325:774ワット発電中さん
10/01/16 19:43:46 l1UZx1ul
>>323
HDLなんかで自分でUARTを書いてみれば分かるよ
326:774ワット発電中さん
10/01/16 21:29:54 4fTRD3Dc
ちょっと待て、というのはわかるけど、それが 1bit分の理由が知りたい人
327:323
10/01/17 03:27:26 z4GvVkIR
>>325 uartの制御は何度も書いてます。ふつうは製品なので、わざと違反して遊んだり
できないんですよ。 自分で考えたのは、
uartは起動したらステートマシンとして動作するが、単位クロックの切りのいい所から
始まらないと、startbitが正しく検出できないんじゃないか、とかですね。
他の人の考えも聞いてみたいと思ったもんで。
328:774ワット発電中さん
10/01/17 03:30:23 740vlB12
本当のところは設計に関与した人間にしかわからんのだから諦めるこった
ただ,自分でUARTを書いてみれば1ビット分は容認してもらった方が
楽だなと思えることはある。
329:774ワット発電中さん
10/01/17 04:14:05 z4GvVkIR
では諦めます。 JSR func BEQ xxxx みたいな構文をcで吐かせられませんかね?
計算結果のコンディションコードがreturn時に立ってるのに、funcから戻った所でまた
返値を検査するコードが出るのがシャクなんですよね。
330:774ワット発電中さん
10/01/17 04:21:59 740vlB12
Cを使わなければ良いだけでは?
331:774ワット発電中さん
10/01/17 09:24:36 J4ptD/RJ
>>327
UARTをHDLで書いてみたら?というのに対してUARTの制御を書いたことがある、
という返し方はかみあっていないと思うが、本人がそれでいいならいいか。
>>329
C にはコンディションコードの概念が無いのだから、そんなこと気にするのが変。
どうしてもというならそこだけアセンブリブロックで書けばいい。
ただし他人からは基地が意と思われる。
332:774ワット発電中さん
10/01/17 09:28:49 CfjFLUqs
効率を求めるならコンパイラなんか使わないほうがいい。
実際、コンパイラの吐いたアセンブラソースを見ると、
「なにそれ?ふざけてんの?」的なものがかなりある。
よく、「今時のコンパイラは並みの人間がアセンブラで
書くよりはるかに効率のいいコードを吐く」と言われるけど
それってどこの世界の話?って思ってしまう。
「Cで書いたほうがソースの可読性、保守性に優れている」
って言うんならわかるんだけどね。
「コンパイラの方が良質なコードを吐く」ってのには
いまだに賛同できない。
333:774ワット発電中さん
10/01/17 09:36:21 J4ptD/RJ
32-64bit RISCの世界じゃね?
334:774ワット発電中さん
10/01/17 09:38:06 CfjFLUqs
たとえばH8の場合、アセンブラで書けば
サブルーチンとのパラメータの受け渡しに
ER0~ER6まで使えるのに、
Cで書くとわざわざスタック渡しにしてくれたりする。
335:774ワット発電中さん
10/01/17 11:49:43 jTUu3MSk
ここ登録いるんか…アプリケーションうんぬってなんだ
336:774ワット発電中さん
10/01/17 13:04:56 z4GvVkIR
eepmov.b で、R4L=0で始めたら256byte移動できますか?
337:774ワット発電中さん
10/01/17 14:07:42 9EZw+bdx
>>336
そういうありがちな疑問はマニュアルに答えが書いてあるから、
まずマニュアルを確認すれ。
338:774ワット発電中さん
10/01/17 15:07:02 86SILdFn
そりゃ再帰に対応するにはスタックに積むのが一番安全だからね。
レジスタにハメ込んでいったら、かなりマヌケなCコンパイラになっちゃうでしょ。
339:336
10/01/17 15:41:24 z4GvVkIR
>>337 実装がいいかげんだったら、そういう抜け道もあるかと思ったんですが、
シミュレータで試したところ、やはり実行前にもR4のチェックはやっているみたいです。
移動サイズはbyteで1~255、wordで1~65535でした。
340:774ワット発電中さん
10/01/17 22:35:57 CfjFLUqs
>>338
明らかに再帰なんかしていない、それどころか他のルーチンを
一切呼んでいない末端ルーチンならレジスタ渡しでいいだろ。
その程度のプログラム構造の解析をしていないコンパイラは
手抜きと言われてもしかたあるまい。
341:774ワット発電中さん
10/01/17 22:53:48 CFRxrhTn
一般に、リンクするまで再帰されるかどうか決定できないんだから
.objファイルには再帰に対応できるコードを出すのが常識だろ
342:774ワット発電中さん
10/01/17 23:17:49 CfjFLUqs
>>341
>一般に、リンクするまで再帰されるかどうか決定できないんだから
だ・か・ら、そこがコンパイラの弱点なわけ。
人間がアセンブラで書いたらそんなの最初っからわかる。
俺はコンパイラそのものは否定しないよ。
>>332でも書いたとおり、ソースの可読性や保守性は勝る。
それにしても、FPGA用のVHDLコンパイラなんかは、
階層間をまたがる最適化を徹底的にやっている
(同じ値を持つフリッププロップは徹底的に同一化される)
のに、ソフトのコンパイラはなんで関数の階層をまたがる
最適化をしないんだろうね?
343:774ワット発電中さん
10/01/18 00:11:45 j3kJNk59
>340,341
leaf function 最適化でぐぐれ。今時は普通にやってるはずだが。
344:774ワット発電中さん
10/01/18 01:30:34 LlHqu5An
GNUや日立の評価版に過剰な期待をするなって話だろ
ゴリゴリに最適化を求めるならコンパイラにも金を出しなよと
345:774ワット発電中さん
10/01/18 07:33:04 WlQl5fng
leaf functionはgccでも普通にやっている。ただ,H8/SHへの
ポーティングでどうなっているのかは知らん。
ただ,こいつをやられると後からアセンブラで書いたプログラムから
Cの関数を呼び出すときにハマりそうだけどな。
346:774ワット発電中さん
10/01/19 16:34:52 lYcT0THi
H8S/2368,2378シリーズのマニュアル読んでいて思ったんですけど、
なんで使えないノーマルモードのベクタとかアドレス空間とかわざわざ書くんでしょうね。
素直にlongのベクタと16MBのアドレス空間だけ書いてくれればいいのに、
使えません、って断ってshortのベクタと64KBのアドレス空間をページ確保して
記述するのはノイズ以外の何者でもないような。
347:774ワット発電中さん
10/01/21 10:58:27 Cou8UM6u
h8sxも
348:774ワット発電中さん
10/01/21 13:44:21 wZqJfY8a
かといって品種ごとに微妙に違うつうのも地雷埋まってそうで嫌だ。
349:774ワット発電中さん
10/01/21 17:36:03 Cou8UM6u
H8SX のブロック転送命令における制限事項
ってのがある。
gccだとpeephole2を使うと回避できた。
350:774ワット発電中さん
10/01/26 03:44:18 j0f4sRoT
質問です。
H8SをC言語でプログラムしています。
うまく動かなくて、今日半日も悩んでしまいました。
「なんでそんなことするの?」という疑問が湧きました。
H8/3048ではそんなこと無かったんですが。
1 ポートアクセスの変数が入出力で異なっていた。
出力のとき P1.DR.BIT.B0 = 1;
入力のとき a = P1.PORT.BIT.B0;
なんで、こんな面倒なことするのでしょうか。
2 周辺モジュールの電源が、デフォルトoffになっている。
使うときに、onにする必要がある。
デフォルトonでいいと思うのですが、なんでデフォルトoffなんでしょうか?
今考えてもムカムカ、イライラしてきます。もう忘れないと思いますけど。
351:774ワット発電中さん
10/01/26 03:47:26 j0f4sRoT
書き忘れました。
上記の1の場合、P1.DR.BYTE |= 0x24とかやったとき、
PORTとDRでレジスタ(番地)が別だとすると、
リードモディファイライトは正しくできるのでしょうか?
そんなことするなら、はじめから1つのDRだけでI/Oできるようにしておけばいいのに。
と思いました。
352:774ワット発電中さん
10/01/26 07:11:54 XeHS9662
前に同じこと聞いてた人がいたな
353:774ワット発電中さん
10/01/26 10:47:26 NBr/nFLK
>>352
あんときはポートのレジスタ分離だけじゃなかったっけ?
しかし電子回路を少しでも知っていれば出ない疑問な気もするなあ。
んー。日立製じゃなくても外部機能がOFFから始まらないマイコンってあるのかな?
354:774ワット発電中さん
10/01/26 14:00:56 8Jo7XG6X
>>350
これだからCしか出来ない奴は…
355:774ワット発電中さん
10/01/26 20:16:08 YPuSjNhY
>>353
>外部機能がOFFから始まらないマイコンってあるのかな?
外部機能って何のこと?
>>350の2つの疑問は、H8/3048をやってから、H8Sをやると、ビックリするよ。
3048などは、入出力ともにxx.DR.BIT.Bxでいけるし、
UARTやDAなどは、始めから電源onのままだよ。
で、Cとかアセンブラとかには関係ないよね? >>354
356:774ワット発電中さん
10/01/26 21:06:54 pAcx77Du
>>355
内部モジュールって単語が出てこなかった。>外部機能
CPU+周辺っていう8ビット機のイメージで居るから…。
まあともかく、普通無効から始まるよね?っていう。
機能無効とユニット全体無効(OFF?)が分離してるかどうかはさておき。
設計思想が共通じゃないと困るってのはあるけど、H8とH8Sは世代もモノも違…うよね?
で。
アセンブラだとマイコンの設計思想が判ってないと使えないとか言いたいのでなかろか。
どっちかってとアセンブラってよりマシン語だな。これ。
命令コードとレジスタの割り振りとかのコア設計の考え方がどうのっていう…。
357:774ワット発電中さん
10/01/26 21:18:54 8Jo7XG6X
>>355
Cしか出来ない奴って、データーシート読む癖がほとんんど無いんじゃ無いかな。
アーキテクチャが変わった所で隠蔽されて、初期化ルーチンなんて何処かからコピペするおまじないと思ってるんだろ。
それでも動いてしまう事もあるしね。
理解してプログラムしてるか、たまたま動いてるだけかの違いであって、アセンブラと対比したい訳じゃない。
単に、「Cしか出来ない奴」
もしくは、高級言語でも良いけど。
358:774ワット発電中さん
10/01/26 21:53:00 YPuSjNhY
いや、PORTとDRが別になっていてもいいけど、
3048のように一緒でもできるのに、なぜH8Sは別になっているのか、
その理由を知っていることが大事だと思う。
つまり、
H8/3048の頃は、○○なので、同じで良かったが、
H8Sの頃には、○○という理由で別々にした、あるいはせざるを得なかった。
だから、両者の間には○○という差があるので、使うときには注意が必要、とかね。
359:774ワット発電中さん
10/01/26 22:58:38 jmarbqPB
コピペして動けばOKとか、単にそいつがいい加減なだけ
360:774ワット発電中さん
10/01/26 23:18:51 vojIBfM5
入出力が分かれてた方が便利だからでしょ
入力だったポートを出力に切り替えたときに値が不定では困るし
361:774ワット発電中さん
10/01/26 23:41:02 hawXrJP5
なんのこっちゃ。切り替えるときに然るべきデータを出力すればいいやん。
362:774ワット発電中さん
10/01/27 00:50:35 nYkEUbc7
不定ではないな。
いままで入力で読めるレジスタだったなら、入力されてる値が入ってるわな。
同じレジスタで問題がある構成は…
入力から出力に切り替える直前に外側が不定(レジスタも不定)でありながら
出力に変えた瞬間にはもう不定ではダメとかいう構成の場合…少しは外側考えて作れ、という気もするほどアレだが。
363:774ワット発電中さん
10/01/27 02:17:09 M73qQf0u
なぜDRのみの方式と、DR/PORTの方式の2通りあるのか、俺も気になるなぁ。
あと、他のマイコンもどうなっているんだろうか。
364:774ワット発電中さん
10/01/27 07:26:15 SUKaQKWU
DR方式を理解出来ないで使ったところがあったんじゃないの
365:774ワット発電中さん
10/01/27 11:27:40 w73WG//G
>>363
78K0/Kx2とかサイトでマニュアル見られるね。
Cで書くときは式の左右どっちでもP1とかでいいけど
マニュアルには出力だけ転送レジスタが挟まってたりするねえ。
コンパイラが自動判断するんだろうか?
わりと脱線だな。
366:774ワット発電中さん
10/01/29 02:07:52 SRzoUSon
超初心者な質問をお許しください。
使用マイコン:R8C tiny シリーズ
while(1)
{
LED点灯
LED消灯
}
上記のような感じでプログラム最上層でループさせると0.5秒ほどで
LED点滅(実際にはほとんど点滅しているようにはみえませんが)が
止まってしまいます。(マイコンの動作が停止した?)
WDTは非動作なのに何で停止するのでしょうか?
367:774ワット発電中さん
10/01/29 02:09:11 SRzoUSon
あげさせてください。
368:774ワット発電中さん
10/01/29 03:22:55 p07IEaDc
点灯消灯の時間はどうやって作り出しているの?
369:774ワット発電中さん
10/01/29 03:42:09 SRzoUSon
時間は適当です。
実行時間分のみのパルス幅です。
点灯消灯はオシロで計測しています。
370:774ワット発電中さん
10/01/29 03:53:22 bMqu4++X
クロック設定してる?
俺トラ技の使ってたけど、PC接続時は設定しなくても最速(20MHz)?クロックなのに、スタンドアロンは設定しないと起動直後のクロック(15k?)になっちまう
371:774ワット発電中さん
10/01/29 04:05:09 SRzoUSon
クロックは設定済み、スタンドアロン使用です
372:774ワット発電中さん
10/01/29 04:20:13 AL5w5xlv
全ソースを晒したら
373:774ワット発電中さん
10/01/29 06:18:36 RCi065ur
もう1回実行したら最初は点くの?=LEDが切れたとかはない?
WDTがデフォで作動になってたりしない?
374:774ワット発電中さん
10/01/29 06:59:02 SRzoUSon
リセットかけて実行すると毎回、何回か点滅します。
LED切れは無いです。今日やってわからないときはソース晒しますので
アドバイスいただけると幸いです。よろしくお願いします。
375:774ワット発電中さん
10/01/29 07:02:23 SRzoUSon
>>373
WDTが設定されてたらリセットがかかって、プログラムの最初からやりなおすので
LED点滅が停止したりはしないですよね?
WDTにマイコン停止みたいなモードがあったりするのでしょうか?
376:774ワット発電中さん
10/01/29 07:36:43 8S2SkAL5
ちょっと躓いたからってすぐ他人を頼るようじゃ成長しない
基本に立ち返ってちゃんと検証するもんだ
377:774ワット発電中さん
10/01/29 13:01:27 RCi065ur
点灯と消灯が均されて薄暗く見えてるってことはない?
端子のレベルをオシロで見てオンオフを繰り返してればLEDがそういう特性だっただけで
プログラムは動作してることになるね。
378:774ワット発電中さん
10/01/29 17:56:00 5JsSbDOG
smalight
379:774ワット発電中さん
10/01/29 21:39:33 6802BCWf
ソース晒したほうが早いと思うんだけどな
まず、その while ループの中でWDTカウンタはちゃんとクリアされてるよね?
それから、カウンタがオーバーフローしたときの動作は割り込みかリセットか選べるけど、
ちゃんとリセットに設定してる?
割り込みにしてるなら、その処理を書かないとダメだよ
380:774ワット発電中さん
10/01/29 21:53:47 6802BCWf
↑はウォッチドッグを使っちゃってたらの話ね
381:774ワット発電中さん
10/01/29 22:12:41 M/7lsYjE
ウォッチドッグってなんでそう呼ばれているのでしょう
382:774ワット発電中さん
10/01/29 22:17:21 pwSMRkyk
番犬
383:774ワット発電中さん
10/01/29 22:37:12 ZhIJReLm
WDT以外だと、なにか割り込み生きてて、ベクタが設定されてなくて遠いところに旅立ってるとか。
さておき
リセット→ポート初期化まで点灯→ポート初期化で消灯→ループに入って高速明滅で点灯(のように見える)
この流れだ0.5secというのはどうか。
384:774ワット発電中さん
10/01/30 04:01:42 LuZeDJ5P
まっ,その手の現象でまず疑うのは電源とリセット信号
385:774ワット発電中さん
10/01/30 04:25:34 Xkhenw9b
割り込みフラグのクリア忘れってのは、どう?
386:366
10/01/30 13:38:42 1iqPBp6L
366です。アドバイスいただきありがとうございます。
いろいろ調べた結果、割り込みを禁止にしていると問題が発生しないことがわかりました。
割り込みを許可にすると割り込みがかかった瞬間にプログラムカウンタがクリアされ、
プログラム動作が停止しました。割り込み先のベクターテーブルはちゃんと設定しているつもりですが、
どう考えても割り込みのジャンプ先に問題がありそうです。いまだ解決にはいたっていませんが。
387:774ワット発電中さん
10/01/30 14:36:30 HHz3OMKg
どの割り込みを使ってるかもわかんないでやってるんだ
388:774ワット発電中さん
10/01/30 16:45:38 1iqPBp6L
一応使わない割り込みはマスクし、必要なものだけ設定しているのですが、
よくわかりません。あとは自分の力で頑張ってみます。
みなさまいろいろとありがとうございました。
389:774ワット発電中さん
10/01/31 07:54:39 RUVjMhRt
SPが二つあるんだけど、両方設定してるよね
390:774ワット発電中さん
10/01/31 19:01:52 zIO+WRl0
SPってなんですか?
391:774ワット発電中さん
10/01/31 19:10:57 RUVjMhRt
URLリンク(ja.wikipedia.org)
392:774ワット発電中さん
10/01/31 20:46:45 zIO+WRl0
スタックポインタのことだったんですね。
2つあるんですか!知らなかった。調べてみます。
393:774ワット発電中さん
10/02/02 09:45:29 9y1QeF9T
RX200って、いつの間にか32bitマイコンになっていると思ったのですが、実質ヤメなのかな
394:774ワット発電中さん
10/02/02 10:13:16 H2C7TBv8
URLリンク(gcc.gnu.org)
ここまで金出しておいてヤメてことはないと思うけどねえ。
395:774ワット発電中さん
10/02/02 10:36:43 czUxIGP8
関係ないけど、gccはvolatileな変数だとbit命令を使わんからね
396:774ワット発電中さん
10/02/02 11:50:53 9y1QeF9T
>394
情報ありがとう。
rx.h rev.155677 のログをみると、このリビジョンで RX200のCPUタイプが追加されてますね。
もともとは命令セットも違うものだったんじゃないかと思っていましたが。
たとえが悪いかもしれませんが、
M32C/80 ができて、 M16C/60が作られず、M16C/70止まりのような気がします。
397:774ワット発電中さん
10/02/03 00:46:00 C+O4LXoR
SHの入門として秋月のSH7144F開発ボード買おうと思っているのですが、SPIモジュールがないって本当ですか?
SDカードアクセスが楽にできないのはつらいなあと・・・
398:774ワット発電中さん
10/02/03 22:07:30 1aDzY0UE
>>397
ハードウェアマニュアル読めばいいんでね?
ググってみてもいいんでね?
URLリンク(bitcraft.web.fc2.com)
399:774ワット発電中さん
10/02/11 16:21:51 I5BqFRX9
秋月のマイコン
AKI-H8/3664Fを使用しています
あるピンの状態でプログラムを切り替えることをしたいと思っております
例えば
7番ピンと8番ピンにトグルスイッチをつけ
プログラムの開始時に7,8番ピンがショートの状態であるなら関数Bを実行
ショート状態でないなら関数Aを実行という感じのものです
H8 3664 ピンの状態 外部入力などでググってみたのですが
プッシュスイッチを押した際に割り込みが行われるというようなものしか見つけられない状態でいます
あるピンがショート状態にあるかないかを判断するための検索ワードや
こうすれば良いのではというものがありましたら教えていただけないでしょうか?
よろしくお願いいたします
400:774ワット発電中さん
10/02/11 16:25:32 u9T6Nx+Z
ポートが0か1かで判断すればいいのでは
401:774ワット発電中さん
10/02/11 16:49:46 I5BqFRX9
ありがとうございます
入力設定にしピン2個をショートさせて状態が1になるか0になるか見ようと思います
402:774ワット発電中さん
10/02/11 17:03:54 szL/b+K2
7番ピンと8番ピンを繋げる理由がわからない。
403:774ワット発電中さん
10/02/11 17:17:23 aIvxQwi8
ある入力ピンをプルアップしておいて
そのピンとGNDとの間をスイッチで
OPEN/SHORT切り替えればいいんじゃね?
404:774ワット発電中さん
10/02/12 10:05:55 IhrwOQZE
ポートの構造そのものが判ってないレベル?
URLリンク(rur.mech.tuat.ac.jp)
405:774ワット発電中さん
10/02/12 11:30:06 Nzr8zQx1
ハードもソフトも?な、とんでも君?
406:774ワット発電中さん
10/02/12 11:33:05 ecVMlWuo
そりゃぁ検索しても出てこんわ
一個のスイッチを読み込むためにピンを2本も使うヤツは滅多にいない
「キーマトリクス」で検索してスイッチ一個だけ実装汁
407:774ワット発電中さん
10/02/12 17:09:58 edkY1RH3
>>403 >>404 >>405 >>406
そのレベルに当たると思います
今までは出力にして5Vを流してLEDが光るぜ!と遊んでいただけだったので
ポートの構造などを考えてもいませんでした、、、
教えていただいたURLや検索ワードで何か道が開けそうです
質問に答えていただきありがとうございました
408:774ワット発電中さん
10/02/12 19:52:04 LfX9MbvS
がんがれ!
409:774ワット発電中さん
10/02/12 20:33:12 NaTJbHsl
そのレベルでなんでマイコン買おうと思ったのか聞きたい
冷やかし半分、興味持つきっかけへの興味半分で
410:774ワット発電中さん
10/02/13 05:41:21 PYMDyulG
顧客の機器でそういう遊びを全てやってしまった俺はラッキーだったんだな。
411:774ワット発電中さん
10/02/13 09:07:45 qlWyuZyJ
R8Cの書き込みが少ないですけど、R8Cってどうなんですか?
412:774ワット発電中さん
10/02/13 10:46:11 fpjly9HB
工業高校の電気科の教師してますが、真空管の動作電圧って
ドコとドコの端子間の、信号ORバイアスの事か分かりません
。質問されて困ってます。
ちなみに、馬鹿にされて座学ははずされてますので。
最近では、実習すらあやしくなりそーですなw。
2ちゃんねるで馬鹿にされてしまうと、行き場がなくなり
しまいには生きていけいけなくなりますから、よろしく。
413:774ワット発電中さん
10/02/13 12:19:39 XGyBNAPy
>>411
ちっちゃくて使いやすいとは思うよ
ただ三菱系なので、H8とかに慣れてるとあれ?ってのがたまにある
情報も多くはないな
個人的には可愛いからおすすめなんだけど
414:774ワット発電中さん
10/02/13 13:20:45 PYMDyulG
>>413 キャリーの立つ条件が反対とかありますか?
415:774ワット発電中さん
10/02/13 18:19:40 yUBwxk48
>>412
ここはルネサス製マイコンの話をするためのスレ
誰も回答しないよ
416:774ワット発電中さん
10/02/13 22:10:42 xh6L4Btw
>>415
三菱系も統合された後のものだから、ライセンスはルネサスだと思うんだが?
てか、日立マイコンってなら違うのは判るが、ルネサスはソレも含めてルネサスじゃないの?
417:774ワット発電中さん
10/02/13 22:11:53 xh6L4Btw
あ。すまん、参照先が違ったわ。
>>411に対してかとオモタ。
忘れて。
418:774ワット発電中さん
10/02/13 22:50:58 nZQ+gl7K
>>417
ワカル。俺もそー思ったw
>>411
R8C良いよ。とても素直な設計だと思う。環境も良いし、資料は全部webで手に入る。
お勧めはオークス電子OAKS製品。デバッガのKD30最高。
419:774ワット発電中さん
10/02/16 03:19:50 ho0uA+qz
教えてください。
RS232のフォーマットの中に、stop bitというのがあります。
defaultが1bitで、「時間が稼ぎたいよぉ」というときに2bitを使うのは、わかります。
が、1.5 stop bitというのがあるらしいのですが、どんな時に使うのでしょうか?
単に1と2の中間ってことだけでしょうか?
420:774ワット発電中さん
10/02/16 05:07:05 SZ43h4AR
受信側は1bitにしておくのが基本。そうすれば2bitも1.5bitも受け取れる。
受信側の負担を和らげるために、送信側で2とか1.5にして時間を稼ぐ。
今の高性能マイコンではほとんど無意味だけど。
上記を実現するためには送信と受信で別のCHを使わなくてはならないが、
1つの機器と送受信するには1個のCHでやりたいのがふつうだから。
1つのCHで受信側と送信側でstopbitの長さを違う設定にできる石は、俺は知らない。
421:774ワット発電中さん
10/02/16 06:31:16 P1bX/B8v
連続でデータを送受するとき、ケーブルが外れたりとかで、おかしくなったときに
stop1bitだとデータが変になったりするけど
stop2bitだと化けることが少なくなる。
422:774ワット発電中さん
10/02/16 07:18:42 D1P1jECA
>>419
異常検出用。
ストップビット長チェックしておいて,規定の長さ分無かったら
異常と判断して再同期をかける。
試しに適当なデータ列を送った時の波形を描いてみて,
データの途中の'0'をスタートビットと勘違いしたとしてエラーが
起きるタイミングと回復動作を考えてみると良い.
423:774ワット発電中さん
10/02/16 13:51:01 gx7eOtBv
スゴイ。
1.5bitって、そういうことだったのか。
ちょっと感激。
なるほどぉ。
424:774ワット発電中さん
10/02/16 14:05:04 yK3Aliyp
たしか昔日立にクソ真面目なCPUがあって(64180だったかな)、
ストップ1bitにすると2bitで送信した場合に受信できないのがあったな
425:774ワット発電中さん
10/02/16 14:17:54 sTmUSHdS
>>424
それって送受信逆でフレーミングエラーになってただけじゃないか?
次のスタートビットはストップビット後にいつやって来るかは判らんのだし
426:774ワット発電中さん
10/02/16 23:02:13 mlN+ubZF
SHをサーバちっくに使ってて、今はARP、IP、ICMP、UDPまで実装したんだけど
TCP、httpをのっけたいんだけど、わけわかめ
参考となる本とかおすすめサイトを教えてえろいしと
427:774ワット発電中さん
10/02/16 23:25:54 8v5dmuVr
Linuxにしたほうがラクそうだな
428:774ワット発電中さん
10/02/16 23:31:52 PLdp+CjR
すげーな
429:774ワット発電中さん
10/02/16 23:48:11 mlN+ubZF
やっぱOSのっけるほうが早いっすか
コツコツと自力プロトコルスタック?を書いていたんすけど、tcpで完全に止まってしまったです
HOSとかlinuxとかMES辺りが候補としてあげられそうなので、そこらも含めてもちっと考えてみます
430:774ワット発電中さん
10/02/17 04:41:00 sAVPgPqH
tcpは状態遷移が難しいからね
431:774ワット発電中さん
10/02/17 11:39:54 Pm79c5T+
uIP とか使うのは?
432:774ワット発電中さん
10/02/17 15:48:19 jb5e3Y3r
>>429
OS載せるのは手っ取り早い面もあるが、無駄にマイコンがでかくなるから
気力があるなら自前がいいと思う。
俺はPICにアセンブラで実装したけど、一旦作ってしまえば
物理層を普通のシリアルにして、馬鹿ハブ相当のスター結線するだけで
DIPの小容量マイコン同士が通信出来るし、そのうちの一台にLANへのゲートウェイを設けて
携帯ブラウザから気温変化のLOGを見たりIOしたり自由自在。
今出先なので、あとで参考文献書くかも。
433:774ワット発電中さん
10/02/17 16:00:10 6kMgnNwe
すごすぎw
434:774ワット発電中さん
10/02/17 18:15:53 FTtjEo6Q
膣圧計に仕込んで擬似セクースは
435:426
10/02/17 19:30:05 lu3ZEoLF
今日は、軽くOSを調べてみました
けど、プロトコルとはなんぞや?ってことで、理解を深めるということが目的なので
自力実装を最後まで完遂してみようと思います。
その後にOSを載っけて、みたいと思います
>>432
参考文献を教えて頂ければ幸いです
436:774ワット発電中さん
10/02/17 21:19:20 b+mzVQxN
のちに、日本のリーナスと呼ばれる人の
記念すべき初めての投稿であった。
437:774ワット発電中さん
10/02/18 05:08:07 o9HZKKyH
昔はNE2000互換ボード使って実装してみる!なんていう特集も定期的に
組まれていたりしたんだけどね。
IPまで自力で実装できたならTCPはそれほど難しく無いと思うけどもな。
ISOの7階層モデルの概念だけさらっと読み流せば理解できるかなぁ
「イーサネット TCP/IP」なんてキーワードで探せばいろいろ出てくるんじゃないかいな