H8マイコンへのデータ送信
H8マイコンへのデータ送信
ここって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の知識がさっぱりです。
コードもサンプルを切り貼りしただけに近い酷いものですが、載せた方がよろしいでしょうか?
分からないことだらけなのですが、一番分からないことを質問させていただきました。
何方か御教授ください、お願いします。
[やること]
課題は、「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の知識がさっぱりです。
コードもサンプルを切り貼りしただけに近い酷いものですが、載せた方がよろしいでしょうか?
分からないことだらけなのですが、一番分からないことを質問させていただきました。
何方か御教授ください、お願いします。
Re: H8マイコンへのデータ送信
誰か、指導者がいるわけですよね。その人に聞くのが一番じゃないでしょうか ?
hterm ってことは RS-232C で、つながってるんでしょうか ? USB なのかな ? それとも、イーサネットなのかな ?
そういうことを無視できる環境なんでしょうか ?
自分は、よくわかりませんが。
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, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
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マイコンへのデータ送信
います、冬休みが明けたら聞きに行くつもりですが、少しでも質問減らしておきたいと思いました。
疑問が沢山あるので…知人に詳しい人も居らず…
マイコンとパソコンはUSBで繋がっています。
教示は…素で間違えました、スミマセン…
疑問が沢山あるので…知人に詳しい人も居らず…
マイコンとパソコンはUSBで繋がっています。
教示は…素で間違えました、スミマセン…
Re: H8マイコンへのデータ送信
もう少し具体的に、どうしたいのかを補足してください。こしー さんが書きました:時計はPCの時計を受信してダイナミック方式というもので点灯させる予定です。
どうなったときに、どう点灯させるのでしょうか?
文字入力ができるのであれば、あとはそれを解釈させるだけです。こしー さんが書きました:アラーム機能ですが、たとえば「A」を押すとアラームモードに入りそのまま「1234」と打てば12:34に設定できるようにしたいのです。
それで、時刻と設定が合えばアラームが鳴る、と。
いきなりマイコンでやると難しいので、PCで、getcharで1文字ずつ入力し、解釈させるプログラムを書いてみてください。
Re: H8マイコンへのデータ送信
(PCから時刻を受信)→(4→3→2→1桁の順で5msだけLED点灯)―(1s繰り返し)→(時刻再取得)―(繰り返し)
こんな感じで、4,3桁に時間、2,1桁に分を表示させます。
これは常時表示している状態になります。
というかまた単語間違えてましたが、stdio.hありました…
getcharですね、ありがとうございます。
こんな感じで、4,3桁に時間、2,1桁に分を表示させます。
これは常時表示している状態になります。
というかまた単語間違えてましたが、stdio.hありました…
getcharですね、ありがとうございます。
Re: H8マイコンへのデータ送信
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の略です.「スタジオ」ではありません.
RS232Cをエミュレートしているなら,H8用のライブラリにRS232C用の送受信関数が用意されていると思います.
もしくは標準入出力がRS232Cとなっているかもしれません.もしそうならstdoutとstdinを使えばPCとH8の通信が可能です.
その場合getcharは標準入力から1文字読取る関数ですから使用可能ですし,stdinを扱える他の関数群も使用可能です.
1秒毎に時刻を取得する必要は無いと思います.H8側で1秒をカウントできるんだったら,1日に1回とか,1週間に1回くらいの時刻合わせでいいのではないでしょうか?
ちなみに,stdio.hはStandard Input Output Headerの略です.「スタジオ」ではありません.
Re: H8マイコンへのデータ送信
この説明では全く分かりません。こしー さんが書きました:(PCから時刻を受信)→(4→3→2→1桁の順で5msだけLED点灯)―(1s繰り返し)→(時刻再取得)―(繰り返し)
こんな感じで、4,3桁に時間、2,1桁に分を表示させます。
これは常時表示している状態になります。
例えば、12:34を受信した場合、LEDをどのように点灯させるのでしょうか?
LEDといっても7セグとかではありませんよね? そもそもLEDが何個あるのかから補足をお願いします。
これはルネサスのコンパイラに付属するものだと思います。こしー さんが書きました:というかまた単語間違えてましたが、stdio.hありました…
getcharですね、ありがとうございます。
ただ、いくつかの低水準関数を自分で実装しなければ使えないはずです。
Re: H8マイコンへのデータ送信
7セグと明記されていますよ。ただ、何個あるのかという情報は必要ですね。たかぎ さんが書きました:LEDといっても7セグとかではありませんよね? そもそもLEDが何個あるのかから補足をお願いします。
こしー さんが書きました:[やること]
課題は、「7セグLEDを使って時計を作り、アラーム機能(ブザー)を備えさせよ」というものです。
環境はμITRON,VS-WRC003(H8-36064G),hterm
C言語自体は関数やポインタ程度までは理解しています。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: H8マイコンへのデータ送信
失礼しました。みけCAT さんが書きました:7セグと明記されていますよ。ただ、何個あるのかという情報は必要ですね。
年を越して、忘れてしまっていました。
Re: H8マイコンへのデータ送信
USBシリアル変換ICというのが付いていたので、エミュレートしていると思います。確証がありませんが…beatle さんが書きました:PCとH8がUSBで繋がっているそうですが,RS232Cをエミュレートしているのか,生のUSB規格を使わなくちゃいけないのかで難易度が違うと思います.
そうですね、カウントは出来るのでそうしたいと思います。ありがとうございます。beatle さんが書きました:1秒毎に時刻を取得する必要は無いと思います.H8側で1秒をカウントできるんだったら,1日に1回とか,1週間に1回くらいの時刻合わせでいいのではないでしょうか?
4桁7セグメントLED一つです。たかぎ さんが書きました:例えば、12:34を受信した場合、LEDをどのように点灯させるのでしょうか?
LEDといっても7セグとかではありませんよね? そもそもLEDが何個あるのかから補足をお願いします。
4本のピンがあるH8のポートからの信号(2進数)を送り、それをデコーダICで7セグ(7本足)用の信号(10進数)に変換します。
というかこちらを参考にしました。
http://www9.plala.or.jp/fsson/NewHP_elc/H8/H8_7seg.html
Re: H8マイコンへのデータ送信
マイコンでRS232Cの受信をする場合,大抵2通りのやり方があります.(割り込み機能を持っていないマイコンでは1通りですが,H8は割り込み機能がありますから2通りです.)
対して割り込みによる受信とは,「データが来たら教えてね」とマイコンに設定しておいて,メインプログラムは他のことをしつつ,データが来た時だけサブプログラムを起動して対処することを言います.
(割り込み自体をご存知でしたら失礼しました)
ポーリングによる受信は考え方が単純な反面,時々作業を中断してデータ到着を確認しに行く必要があり,メインプログラム(大抵はmain関数のwhile(1)で囲まれた部分)の仕組みが複雑になります.
割り込みによる受信は割り込み自体が少々難しいのですが,扱えるようになるとメリットが沢山あります.
getcharやscanfなど,stdinを扱う標準関数は,データがない場合にブロックしてしまって,そこで処理が中断するという特性がありますから,メインの処理の中で呼びだしてしまうとメインの処理がそこで止まります.ご注意ください.
ブロックするのが嫌なら,データが受信されたかどうかをチェックする専用の関数なり,手動でレジスタを読むなりしてデータの有無を確認することになります.
μITRONはタスク機能を持つOSですから,1つRS232C受信用タスクを生成してそこでgetcharを呼び出す,ということも考えられますが,そこまでするならRS232C受信割り込みを用いたほうがスマートでしょう.
μITRONでは割り込みを扱えます.割り込みを扱うためには,割り込みハンドラか割り込みサービスルーチンのどちらかをカーネルに登録する必要があるそうです.(僕自身はμITRONを使ったことがないので詳しいことは分かりませんが,『μITRON4.0 標準ガイドブック』に載っていました.)
こしーさんはどちらでやろうとしているのでしょうか?
- 能動的に受信する(ポーリング)
- 受動的に受信する(割り込み)
対して割り込みによる受信とは,「データが来たら教えてね」とマイコンに設定しておいて,メインプログラムは他のことをしつつ,データが来た時だけサブプログラムを起動して対処することを言います.
(割り込み自体をご存知でしたら失礼しました)
ポーリングによる受信は考え方が単純な反面,時々作業を中断してデータ到着を確認しに行く必要があり,メインプログラム(大抵はmain関数のwhile(1)で囲まれた部分)の仕組みが複雑になります.
割り込みによる受信は割り込み自体が少々難しいのですが,扱えるようになるとメリットが沢山あります.
getcharやscanfなど,stdinを扱う標準関数は,データがない場合にブロックしてしまって,そこで処理が中断するという特性がありますから,メインの処理の中で呼びだしてしまうとメインの処理がそこで止まります.ご注意ください.
ブロックするのが嫌なら,データが受信されたかどうかをチェックする専用の関数なり,手動でレジスタを読むなりしてデータの有無を確認することになります.
μITRONはタスク機能を持つOSですから,1つRS232C受信用タスクを生成してそこでgetcharを呼び出す,ということも考えられますが,そこまでするならRS232C受信割り込みを用いたほうがスマートでしょう.
μITRONでは割り込みを扱えます.割り込みを扱うためには,割り込みハンドラか割り込みサービスルーチンのどちらかをカーネルに登録する必要があるそうです.(僕自身はμITRONを使ったことがないので詳しいことは分かりませんが,『μITRON4.0 標準ガイドブック』に載っていました.)
こしーさんはどちらでやろうとしているのでしょうか?
Re: H8マイコンへのデータ送信
考えているのは割り込みの方です。beatle さんが書きました:こしーさんはどちらでやろうとしているのでしょうか?
普段はメインで時計を表示して、キーボードで入力したらこちらを優先する、と。
ITRONでの割り込みは、サービスルーチンの記述をしてATT_ISRという静的APIで登録します。beatle さんが書きました:μITRONでは割り込みを扱えます.割り込みを扱うためには,割り込みハンドラか割り込みサービスルーチンのどちらかをカーネルに登録する必要があるそうです.
この静的APIで指定すると、割り込みハンドラを利用できるようになります。
と、言われましたが漠然としか分かっていませんでした。
割り込みとポーリングについては理解できました、ありがとうございます。
つまり割り込みサービスルーチンの部分に、getcharなどを記述すればよいということでしょうか?
Re: H8マイコンへのデータ送信
そもそも、OSは何でしょうか?
一口にμITRONといっても、実装によって使えるサービスコールも違えば、それ以外の部分も微妙に違います。
ATT_ISRがあるということなので、少なくともバージョン4だということぐらいはわかるのですが...
あと、getcharにこだわる理由もよくわかりません。
入力文字列を解釈する部分については、PC上でgetcharを使えば練習できますが、実機の環境でgetcharを使うには、いろいろ面倒な問題が出てきます。
一口にμITRONといっても、実装によって使えるサービスコールも違えば、それ以外の部分も微妙に違います。
ATT_ISRがあるということなので、少なくともバージョン4だということぐらいはわかるのですが...
あと、getcharにこだわる理由もよくわかりません。
入力文字列を解釈する部分については、PC上でgetcharを使えば練習できますが、実機の環境でgetcharを使うには、いろいろ面倒な問題が出てきます。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: H8マイコンへのデータ送信
今までの内容を読ませて頂きましたが、
・7セグをダイナミック点灯する。
・割り込み処理の練習。タイマー割り込み。
・シリアル通信の受信。getcharを使う?使わない?の見極め。
は別々にテストして十分に理解できてから時計として統合したプログラムを書いたほうが良い思います。
[追記]最初の質問にあるようにとりあえず7セグは置いておいてシリアル通信の実現をするために絞り込んでみましょう。
割り込み以前にmainでシリアル通信をまず目指したほうが良いかも知れません。
・7セグをダイナミック点灯する。
・割り込み処理の練習。タイマー割り込み。
・シリアル通信の受信。getcharを使う?使わない?の見極め。
は別々にテストして十分に理解できてから時計として統合したプログラムを書いたほうが良い思います。
[追記]最初の質問にあるようにとりあえず7セグは置いておいてシリアル通信の実現をするために絞り込んでみましょう。
割り込み以前にmainでシリアル通信をまず目指したほうが良いかも知れません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: H8マイコンへのデータ送信
それは分かりませんでした…。たかぎ さんが書きました:そもそも、OSは何でしょうか?
特に拘りはありません、scanfなどでも平気です。たかぎ さんが書きました:あと、getcharにこだわる理由もよくわかりません。
softya(ソフト屋) さんが書きました:十分に理解できてから時計として統合したプログラムを書いたほうが良い思います。
確かにちゃんと理解出来ていないです。softya(ソフト屋) さんが書きました:最初の質問にあるようにとりあえず7セグは置いておいてシリアル通信の実現をするために絞り込んでみましょう。
キーボードに反応してLEDが光る、など簡単そうなものから始めていきたいと思います。
取り敢えず教えてもらう目処がついたので、一度解決にさせていただきます。
疎い質問に答えていただき本当にありがとうございました。