H8マイコンへのデータ送信

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
こしー

H8マイコンへのデータ送信

#1

投稿記事 by こしー » 12年前

ここってH8マイコンなどのC言語プログラミングに関しても質問して大丈夫でしょうか?

[やること]
課題は、「7セグLEDを使って時計を作り、アラーム機能(ブザー)を備えさせよ」というものです。
環境はμITRON,VS-WRC003(H8-36064G),hterm
C言語自体は関数やポインタ程度までは理解しています。

[やろうとしていること]
時計はPCの時計を受信してダイナミック方式というもので点灯させる予定です。
アラーム機能ですが、たとえば「A」を押すとアラームモードに入りそのまま「1234」と打てば12:34に設定できるようにしたいのです。
それで、時刻と設定が合えばアラームが鳴る、と。

[止まっているところ]
(htermを使って)時刻やキーボードの情報を送信したいのですが、どうすれば…?
studio.hやtime.hが無いのでscanfもlocaltimeも無く、自分には手詰まり状態です。
あるのはitron.h,kernel.h,kernel_id.h,h83664f.h,h8t_sci.h

説明からも分かると思いますが、マイコン寄りのCの知識がさっぱりです。
コードもサンプルを切り貼りしただけに近い酷いものですが、載せた方がよろしいでしょうか?
分からないことだらけなのですが、一番分からないことを質問させていただきました。
何方か御教授ください、お願いします。

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: H8マイコンへのデータ送信

#2

投稿記事 by あたっしゅ » 12年前

誰か、指導者がいるわけですよね。その人に聞くのが一番じゃないでしょうか ?

hterm ってことは RS-232C で、つながってるんでしょうか ? USB なのかな ? それとも、イーサネットなのかな ?
そういうことを無視できる環境なんでしょうか ?
自分は、よくわかりませんが。

こしー さんが書きました:何方か御教授ください、お願いします。
「ご教授(きょうじゅ)ください」ではなく「ご教示(きょうじ)ください」では ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

こしー

Re: H8マイコンへのデータ送信

#3

投稿記事 by こしー » 12年前

います、冬休みが明けたら聞きに行くつもりですが、少しでも質問減らしておきたいと思いました。
疑問が沢山あるので…知人に詳しい人も居らず…
マイコンとパソコンはUSBで繋がっています。
教示は…素で間違えました、スミマセン…

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: H8マイコンへのデータ送信

#4

投稿記事 by たかぎ » 12年前

こしー さんが書きました:時計はPCの時計を受信してダイナミック方式というもので点灯させる予定です。
もう少し具体的に、どうしたいのかを補足してください。
どうなったときに、どう点灯させるのでしょうか?
こしー さんが書きました:アラーム機能ですが、たとえば「A」を押すとアラームモードに入りそのまま「1234」と打てば12:34に設定できるようにしたいのです。
それで、時刻と設定が合えばアラームが鳴る、と。
文字入力ができるのであれば、あとはそれを解釈させるだけです。
いきなりマイコンでやると難しいので、PCで、getcharで1文字ずつ入力し、解釈させるプログラムを書いてみてください。

こしー

Re: H8マイコンへのデータ送信

#5

投稿記事 by こしー » 12年前

(PCから時刻を受信)→(4→3→2→1桁の順で5msだけLED点灯)―(1s繰り返し)→(時刻再取得)―(繰り返し)
こんな感じで、4,3桁に時間、2,1桁に分を表示させます。
これは常時表示している状態になります。

というかまた単語間違えてましたが、stdio.hありました…
getcharですね、ありがとうございます。

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: H8マイコンへのデータ送信

#6

投稿記事 by beatle » 12年前

PCとH8がUSBで繋がっているそうですが,RS232Cをエミュレートしているのか,生のUSB規格を使わなくちゃいけないのかで難易度が違うと思います.
RS232Cをエミュレートしているなら,H8用のライブラリにRS232C用の送受信関数が用意されていると思います.
もしくは標準入出力がRS232Cとなっているかもしれません.もしそうならstdoutとstdinを使えばPCとH8の通信が可能です.
その場合getcharは標準入力から1文字読取る関数ですから使用可能ですし,stdinを扱える他の関数群も使用可能です.

1秒毎に時刻を取得する必要は無いと思います.H8側で1秒をカウントできるんだったら,1日に1回とか,1週間に1回くらいの時刻合わせでいいのではないでしょうか?

ちなみに,stdio.hはStandard Input Output Headerの略です.「スタジオ」ではありません.

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: H8マイコンへのデータ送信

#7

投稿記事 by たかぎ » 12年前

こしー さんが書きました:(PCから時刻を受信)→(4→3→2→1桁の順で5msだけLED点灯)―(1s繰り返し)→(時刻再取得)―(繰り返し)
こんな感じで、4,3桁に時間、2,1桁に分を表示させます。
これは常時表示している状態になります。
この説明では全く分かりません。
例えば、12:34を受信した場合、LEDをどのように点灯させるのでしょうか?
LEDといっても7セグとかではありませんよね? そもそもLEDが何個あるのかから補足をお願いします。
こしー さんが書きました:というかまた単語間違えてましたが、stdio.hありました…
getcharですね、ありがとうございます。
これはルネサスのコンパイラに付属するものだと思います。
ただ、いくつかの低水準関数を自分で実装しなければ使えないはずです。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: H8マイコンへのデータ送信

#8

投稿記事 by みけCAT » 12年前

たかぎ さんが書きました:LEDといっても7セグとかではありませんよね? そもそもLEDが何個あるのかから補足をお願いします。
7セグと明記されていますよ。ただ、何個あるのかという情報は必要ですね。
こしー さんが書きました:[やること]
課題は、「7セグLEDを使って時計を作り、アラーム機能(ブザー)を備えさせよ」というものです。
環境はμITRON,VS-WRC003(H8-36064G),hterm
C言語自体は関数やポインタ程度までは理解しています。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: H8マイコンへのデータ送信

#9

投稿記事 by たかぎ » 12年前

みけCAT さんが書きました:7セグと明記されていますよ。ただ、何個あるのかという情報は必要ですね。
失礼しました。
年を越して、忘れてしまっていました。

こしー

Re: H8マイコンへのデータ送信

#10

投稿記事 by こしー » 12年前

beatle さんが書きました:PCとH8がUSBで繋がっているそうですが,RS232Cをエミュレートしているのか,生のUSB規格を使わなくちゃいけないのかで難易度が違うと思います.
USBシリアル変換ICというのが付いていたので、エミュレートしていると思います。確証がありませんが…
beatle さんが書きました:1秒毎に時刻を取得する必要は無いと思います.H8側で1秒をカウントできるんだったら,1日に1回とか,1週間に1回くらいの時刻合わせでいいのではないでしょうか?
そうですね、カウントは出来るのでそうしたいと思います。ありがとうございます。
たかぎ さんが書きました:例えば、12:34を受信した場合、LEDをどのように点灯させるのでしょうか?
LEDといっても7セグとかではありませんよね? そもそもLEDが何個あるのかから補足をお願いします。
4桁7セグメントLED一つです。
4本のピンがあるH8のポートからの信号(2進数)を送り、それをデコーダICで7セグ(7本足)用の信号(10進数)に変換します。
というかこちらを参考にしました。
http://www9.plala.or.jp/fsson/NewHP_elc/H8/H8_7seg.html

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: H8マイコンへのデータ送信

#11

投稿記事 by beatle » 12年前

マイコンでRS232Cの受信をする場合,大抵2通りのやり方があります.(割り込み機能を持っていないマイコンでは1通りですが,H8は割り込み機能がありますから2通りです.)
  • 能動的に受信する(ポーリング)
  • 受動的に受信する(割り込み)
ポーリングによる受信とは,メインプログラムが「何かデータが来たか?」とマイコンのRS232Cハードウェアに時々問い合わせ,データが来ていたら受信することを言います.
対して割り込みによる受信とは,「データが来たら教えてね」とマイコンに設定しておいて,メインプログラムは他のことをしつつ,データが来た時だけサブプログラムを起動して対処することを言います.
(割り込み自体をご存知でしたら失礼しました)

ポーリングによる受信は考え方が単純な反面,時々作業を中断してデータ到着を確認しに行く必要があり,メインプログラム(大抵はmain関数のwhile(1)で囲まれた部分)の仕組みが複雑になります.
割り込みによる受信は割り込み自体が少々難しいのですが,扱えるようになるとメリットが沢山あります.

getcharやscanfなど,stdinを扱う標準関数は,データがない場合にブロックしてしまって,そこで処理が中断するという特性がありますから,メインの処理の中で呼びだしてしまうとメインの処理がそこで止まります.ご注意ください.
ブロックするのが嫌なら,データが受信されたかどうかをチェックする専用の関数なり,手動でレジスタを読むなりしてデータの有無を確認することになります.
μITRONはタスク機能を持つOSですから,1つRS232C受信用タスクを生成してそこでgetcharを呼び出す,ということも考えられますが,そこまでするならRS232C受信割り込みを用いたほうがスマートでしょう.

μITRONでは割り込みを扱えます.割り込みを扱うためには,割り込みハンドラか割り込みサービスルーチンのどちらかをカーネルに登録する必要があるそうです.(僕自身はμITRONを使ったことがないので詳しいことは分かりませんが,『μITRON4.0 標準ガイドブック』に載っていました.)

こしーさんはどちらでやろうとしているのでしょうか?

こしー

Re: H8マイコンへのデータ送信

#12

投稿記事 by こしー » 12年前

beatle さんが書きました:こしーさんはどちらでやろうとしているのでしょうか?
考えているのは割り込みの方です。
普段はメインで時計を表示して、キーボードで入力したらこちらを優先する、と。
beatle さんが書きました:μITRONでは割り込みを扱えます.割り込みを扱うためには,割り込みハンドラか割り込みサービスルーチンのどちらかをカーネルに登録する必要があるそうです.
 ITRONでの割り込みは、サービスルーチンの記述をしてATT_ISRという静的APIで登録します。
 この静的APIで指定すると、割り込みハンドラを利用できるようになります。
と、言われましたが漠然としか分かっていませんでした。
割り込みとポーリングについては理解できました、ありがとうございます。
つまり割り込みサービスルーチンの部分に、getcharなどを記述すればよいということでしょうか?

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: H8マイコンへのデータ送信

#13

投稿記事 by たかぎ » 12年前

そもそも、OSは何でしょうか?
一口にμITRONといっても、実装によって使えるサービスコールも違えば、それ以外の部分も微妙に違います。
ATT_ISRがあるということなので、少なくともバージョン4だということぐらいはわかるのですが...

あと、getcharにこだわる理由もよくわかりません。
入力文字列を解釈する部分については、PC上でgetcharを使えば練習できますが、実機の環境でgetcharを使うには、いろいろ面倒な問題が出てきます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: H8マイコンへのデータ送信

#14

投稿記事 by softya(ソフト屋) » 12年前

今までの内容を読ませて頂きましたが、
・7セグをダイナミック点灯する。
・割り込み処理の練習。タイマー割り込み。
・シリアル通信の受信。getcharを使う?使わない?の見極め。
は別々にテストして十分に理解できてから時計として統合したプログラムを書いたほうが良い思います。

[追記]最初の質問にあるようにとりあえず7セグは置いておいてシリアル通信の実現をするために絞り込んでみましょう。
割り込み以前にmainでシリアル通信をまず目指したほうが良いかも知れません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

こしー

Re: H8マイコンへのデータ送信

#15

投稿記事 by こしー » 12年前

たかぎ さんが書きました:そもそも、OSは何でしょうか?
それは分かりませんでした…。
たかぎ さんが書きました:あと、getcharにこだわる理由もよくわかりません。
特に拘りはありません、scanfなどでも平気です。
softya(ソフト屋) さんが書きました:十分に理解できてから時計として統合したプログラムを書いたほうが良い思います。
softya(ソフト屋) さんが書きました:最初の質問にあるようにとりあえず7セグは置いておいてシリアル通信の実現をするために絞り込んでみましょう。
確かにちゃんと理解出来ていないです。
キーボードに反応してLEDが光る、など簡単そうなものから始めていきたいと思います。

取り敢えず教えてもらう目処がついたので、一度解決にさせていただきます。
疎い質問に答えていただき本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る