- ベストアンサー
SH2のタイマ出力
Sh7050のダウンカウンタで16bit以上のタイマ出力を実現する方法はあるのでしょうか? ルネサステクノロジのSH2/SH7050のチャネル10(ダウンカウンタ機能)を使ってタイマ出力しようとしています。チャネル10は16bitタイマなのですが、出力時間はそれ以上(16bitの100倍ほど、24bit)必要です。他のタイマを並列で動作させてオーバーフローを数えることで延長すれば出来るように思うのですが、いい方法を考え出すことが出来ません。どなたか手が空いていれば、お願いします。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (10)
- zwi
- ベストアンサー率56% (730/1282)
- R32C
- ベストアンサー率39% (115/290)
- zwi
- ベストアンサー率56% (730/1282)
- R32C
- ベストアンサー率39% (115/290)
- zwi
- ベストアンサー率56% (730/1282)
- zwi
- ベストアンサー率56% (730/1282)
- zwi
- ベストアンサー率56% (730/1282)
- R32C
- ベストアンサー率39% (115/290)
- R32C
- ベストアンサー率39% (115/290)
- zwi
- ベストアンサー率56% (730/1282)
関連するQ&A
- 【H8-3052F】タイマ割り込み
C言語もマイコンも初心者ですので情報が不足していたら笑って指摘してください。 今はルネサスのHigh-performance Embedded Workshop(Version 4.04.01.001)を使用してタイマ割り込みを実現しようとしてますが、タイマが動作しません。 出力結果も繰り返し処理が正常に動いてないように見えます。 原因等わかる方いらっしゃいましたら教えていただけますでしょうか。 可能でしたらソースコードもつけていただけると幸いです。 ---出力結果--- H8/3052F Monitor v1.12 Copyright (C) 1999-2004 CSE Tomakomai NCT 1:ld 1:go 00ffe000 change job wooooooooo! w ---ソースコード--- #include "3052f.h" #include "utility.h" #pragma interrupt ( aaa ) int cnt; extern void initITU( void ); void aaa() { debugString( "aaa!" ); cnt++; } void main(void) { InitializeSCI(); setDebugMode( true ); initITU(); // タイマーを初期化 ITU0.GRA = 20000; // タイマでカウントする値の設定 ITU0.TCNT = 0; // Reset ITU0.TCNT ITU.TSTR.BIT.STR0 = 1; // タイマ スタート debugString( "change job" ); while( 1 ){ if(cnt == 50){ debugString( "here we go!" ); cnt = 0; } else { debugString( "wooooooooo!" ); } } } void initITU() { ITU.TSNC.BIT.SYNC0 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC1 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC2 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC3 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC4 = 0; // 他チャンネルとの同期無し(独立動作) ITU0.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU1.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU2.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU3.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU4.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU0.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU1.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU2.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU3.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU4.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU0.TIER.BIT.IMIEA = 1; // 全割り込み許可(オーバーフロー/IMFA/IMFB) ITU1.TIER.BIT.IMIEA = 0; // 全割り込み禁止(オーバーフロー/IMFA/IMFB) ITU2.TIER.BIT.IMIEA = 0; // 全割り込み禁止(オーバーフロー/IMFA/IMFB) ITU3.TIER.BIT.IMIEA = 0; // 全割り込み禁止(オーバーフロー/IMFA/IMFB) ITU4.TIER.BIT.IMIEA = 0; // 全割り込み許可(オーバーフロー/IMFA/IMFB) }
- 締切済み
- C・C++・C#
- デジタルタイマとカウンタによる電磁弁の操作
ご覧いただきありがとうございます。 電磁弁の開閉を時間制御して、一定回数繰り返したら停止させたいと思っています。(例えば、開5分・閉10分を1セットとして1000セット繰り返す作業をしたいです。) 過去質問を拝見し、デジタルタイマを利用した電磁弁の制御についてはできることがわかりました。https://mori.nc-net.or.jp/qa9615413.html ここに回数制御を付け加えるのに、下記のような方法を考えましたが、電気関係はほとんど知識がないため、これで実際にできそうか、また具体的にどう配線すればよいか自信がないため、ご助言いただければ幸いです。 ・OMRONのデジタルタイマH5CZと電子カウンタH7CZを使用する。 ・タイマの出力を電磁弁とカウンターに入力する。 →調べていると、リレーで1つの入力を複数に出力できるとありましたが、何を選定すればよいかわからなかったため、教えていただきたいです。 ・カウンタが規定回数に達したら、カウンタの出力をタイマに入力し停止させる。 ・電磁弁は方向制御をしたいのでSMCの3ポートソレノイドバルブVT307-1GS1-02を使用予定です。 よろしくお願いいたします。
- ベストアンサー
- 電子部品・基板部品
- 4MHzから1Hzへのカウンタを用いた分周について
4bitカウンタを従列接続することによって、4MHzの水晶発振器の出力を1Hzまで分周する回路をつくれ という問題がありますが、実現方法がわかりません。 4×10^6個のパルスを分周することになると思いますが、4bitカウンタでは2^16ごと周波数が落ちていくので、1Hzきっちりにはならない気がします。 何か勘違いをしていますでしょうか? よろしくお願いします。
- ベストアンサー
- その他(学問・教育)
- b sh スクリプトでの出力結果編集について
b sh (Bourne Shell)での出力結果を編集する方法を教えてください。 やりたいことは、/sbin/ifconfig から NICの名前、MACアドレス、 IPアドレス等を抜き出したいのですが、やり方がわかりません。 個々に抜き出すのは出来るのですが、以下の表示にしたいと考えてます。 NICname : HWaddr : ip addr 以上宜しくお願いします。
- 締切済み
- その他(プログラミング・開発)
- 電流および電圧出力タイプのDAコンバータ
よろしくお願い致します。 現在、制御基板の設計を行っております。 仕様の一つとしてCPLDからのデジタルデータをアナログデータに変換して 出力させたいのですが電圧出力(0~5V)または電流出力(0~20mA)の 両方が出力できるようにしなければなりません。 どのような回路構成にすればよいか悩んでおります。 例えば0~20mA電流出力のDACを用意して、電圧出力にするときは出力段に並列に250Ωの 抵抗を配置して0~5Vに変換するといったやり方でよいのでしょうか? また、なにかオススメのDACなどがあれば教えて頂けないでしょうか? 仕様としては・・・ アナログ出力:8チャンネル CPLD:MAXII デジタルデータ:8~10bit程度を予定 基板の電源電圧:+3.3V、+5.0V となっております。 お手数ですが何卒よろしくお願い致します。
- ベストアンサー
- 電気設計
- H8のITUトグル出力で 0出力で停止したい
ルネサス製H8/3052Fを使用しています。ITUを通常動作で使用して、GRAコンペアマッチでTIOAC端子からトグル出力を行う際にタイマを停止するとTIOACの出力レベルが 0 で停止してほしいのですが、停止した際に 0/1 どちらの状態になるかコントロールできずに困っています。 試しに、「タイマを停止するときにコンペアマッチで0出力を一度させてから停止する」という方法を使ってみたのですが、結果は変わりませんでした。以下、そのソースコードを記載します。どうやったらタイマ停止後に TIOCAの出力レベルを 0 にできるかアドバイスをいただけますようお願いします。 -------------------------------------------- #define ITU4_setBRA(val) ITU4.BRA = val // コンペアマッチによりBRAの値をGRAに自動転送 void ITU4_init(void){ ITU4.TCR.BIT.CCLR = 1; // GRAのコンペアマッチでTCNTをクリア ITU4.TCR.BIT.CKEG = 0; // 立ち上がりエッジでカウント ITU4.TCR.BIT.TPSC = 3; // φ/8 ITU4.TIOR.BIT.IOA = 3; // GRAコンペアマッチでトグル出力 ITU.TFCR.BIT.BFA4 = 1; // BRA4をGRAのバッファレジスタとして使用 ITU4.TCNT = 0; } void ITU4_start(void) { ITU4.TCNT = 0; ITU.TSTR.BIT.STR4 = 1; } void ITU4_stop(void) { int i; // 一度 GRAコンペアマッチで 0 を出力させてから、トグル出力に戻す。 ITU.TSTR.BIT.STR4 = 0; // カウント停止 ITU4.TIOR.BIT.IOA = 1; // GRAコンペアマッチで0出力 ITU4.GRA = 1; ITU4.BRA = 1; ITU.TSTR.BIT.STR4 = 1; // カウント開始 for(i=0; i<32; i++) ; // 無駄時間ループ ITU.TSTR.BIT.STR4 = 0; // カウント停止 ITU4.TIOR.BIT.IOA = 3; // GRAコンペアマッチでトグル出力 }
- 締切済み
- その他(プログラミング・開発)
- 3bitのカウンタ回路
いつもお世話になっています。 今回問題でD-FFを使って同期クリア入力のある3bitカウンタを設計せよと 書いてあったのですがその遷移表がうまくかけません;; クリアが1のときにクロックの立ち上がりでカウンタ出力が0になると 書いていました。 この場合、同期式カウンタでつくればいいのでしょうか? 詳しくは書かれてなかったのですがアップダウンカウンタを想定していいのでしょうか? よろしくお願いします<(_ _)>
- ベストアンサー
- 物理学
- プリセットダウンカウンタ(ロジックIC)
74HC193(4bit Presettable U/D counter)を2個用いて,8bitのダウンカウンタを製作したいと考えております. 前提条件としては,1MHzのクロックと任意周波数の入力パルスがあります.(既に製作済み) 実現したい動作としましては,任意周波数の入力パルス(パルス幅は1us程度)があるたびに,一定時間(DIP等でダウンカウンタにプリセット)出力したのち,次のパルスが入るまではLow状態を保つ,といったものです. 現在までに製作したものでは,JK-FFと74HC193の組み合わせによって,入力パルスとダウンカウンタのBorrow信号によってFFをトグルさせるような構造にしてみました. ところが,2つのダウンカウンタのBorrow信号の接続が間違っているためか,Borrow信号の波形が不規則な動きをしてしまいます. ご教授いただきたい内容としまして, 1. 74HC193等のICを複数個用いてダウンカウンタを構成する場合,クロック入力,クリア入力,Borrow出力等の相互接続はどのようにすればよろしいのでしょうか? 2. プリセット値をロードしてダウンカウント(1回目)を行ったあとはロード信号が入れば再びプリセット値からダウンカウントを始めるのでしょうか? 3. 上記に関連しまして,現在のところクリア入力はGNDに落としているのですが,動的に信号を入れてやる必要があるのでしょうか? 複雑,多岐に渡るご質問で大変恐縮ではありますが,何卒ご指導いただければ幸いです.
- 締切済み
- 物理学
- コマンドラインに入力されている文字列の1文字を出力
○下記のコードについての質問になります #include <stdio.h> int main( int argc, /*コマンドライン引数*/ char *argv[] /*コマンドライン */ ) { int counter; /*ループカウンタ*/ for( counter = 0 ; counter < argc ; counter++) { printf( "argv[%d]:%s\n" , counter , argv[counter] ); } /*----------------------------------------------------------- printf( "コマンドラインの1文字を抜き取る:%c" , ????????); ------------------------------------------------------------*/ return (0); } ○質問 コマンドラインのプログラムになります。 「--」で囲っている部分になりますが、 コマンドラインに入力されている文字列の1文字だけを出力できるように したいのですが、どうすればこれを実現することができるのでしょうか?? 一例として >command.exe orange ringe ^^^^^^ と、コマンドを打ったときに、「^^」の部分になりますが、 orangeの「a」だけを出力させたい場合を、知りたいと思っております。 以上、宜しくお願いします。
- ベストアンサー
- C・C++・C#
お礼
回答ありがとうございます。 16bitまで正確に出力できるなら、それ以上は精度が少々落ちても問題にはならないらしいです。 16bitぎりぎりについては、大丈夫なはずですが検証してみます。 >最終的にどちらが得なのかの判断は上司がすることですが、ハード >の知識が不足しているからと検討もせずにソフトだけでやることは無 >謀です。 耳が痛いです。次回までの自分への課題としておきます。