• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マイコン H8 3052F モード5の不具合)

マイコン H8 3052F モード5の不具合

このQ&Aのポイント
  • マイコン H8 3052Fのモード5に関する不具合について質問です。
  • モード5でメモリーの書き換えができない問題が発生しています。
  • 試験的にMD1の短絡片をMD0に交換すると書き換えが可能になりますが、MD0の短絡片をMD1に交換するとできません。モード6では正常にアクセスできるため、ハード的な問題ではないかと思われます。モード5で正常に動作する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.2

データシート127P によると、モード5 1Mモードでは、外部メモリ エリア4-7のみ有効になります モード6 16Mモードで、0x2000000エリアでアクセスできたということは、エリア1 CS1にメモリがつながっています メモリのチップセレクト CS1 -> CS4 に変更し、0x80000からアクセスしてみて下さい

参考URL:
http://akizukidenshi.com/download/ds/renesas/rjj09b0335_3052bhm.pdf
bgatab
質問者

お礼

 早速 回答を頂きありがとうございます。   3048Fの括りで考えていたので、マニュアルをまともに読んでいませんでした。 CS4で無事、モード5でramにアクセツできました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • katouka09
  • ベストアンサー率50% (130/256)
回答No.1

ハードウェアマニュアルを参照することをお勧めします。 単純に、ROMのエリアを書き換えようとしてませんか?

bgatab
質問者

お礼

 マニュアルをまともによんでいませんでした。 お説の通りROMのエリアを書き換えようとしていました。 CS4の設定に書き換えたら、ramにアクセツできました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • H8/3048 マイコンボードについて

    初心者の質問ですみません。 今、H8/3048のマイコンを使っていろいろやってみようと思っています。 マザーボードにP1の出力をLEDで表示できるような回路を組み、スイッチを押すとLEDを光らせるようなプログラムを作成し、実際に光らせることはできたのですが、A/D変換機能が使えません。 プログラムはネット上のサンプルプログラムを参考にしたので間違ってはいないと思うのですが、うまく変換されません。 入力電圧はきちんとAN0に入ってますし、ICやソケット部も拡大鏡で確認しましたがショートしている様子もありません。 これは故障してしまったのでしょうか? 何かの拍子に何処かがショートしてAD変換機能のみが壊れるというような事はあるのでしょうか? 非常に困っています。 どなたか回答よろしくお願いいたします。 ちなみにこのようなプログラムです。 #include <3048.h> void main(void){ int ad_data; P1.DDR = 0xff; P4.DDR = 0x00; P4.PCR.BYTE = 0xff; AD.ADDRA = 0; P1.DR.BYTE = 0xff; AD.ADCSR.BYTE = 0x33; while(AD.ADCSR.BIT.ADF == 0){} while(1){ if(P4.DR.BIT.B4 == 0){ ad_data = AD.ADDRA>>8; } P1.DR.BYTE = ad_data & 0xFF; } }

  • H8/3052について

    こんにちは。 現在秋月書店のH8/3052のマイコンを使ってイエローのC言語で 声の周波数を調べるという卒研をやっています。 声の周波数を調べるためにA/D変換を使ってやろうと思っていますが、 エラーが出ました。その前に周波数を調べられるかそうかはまだわかりませんが・・・。エラーの内容は 未定義のシンボルです DDR でした、 あと、周波数を調べるため、A/D変換するためのポートはP7でよろしいでしょうか? 皆さんのご指摘お願いいたします。 プログラムの一部を載せます。 #include <3048F.H> #define E_SIG 0x20 #define RS_SIG 0x10 void ioinit(void) { P7.DDR = 0xff; //ポート3を全ビット出力に設定 } void adinit(void) { AD.CSR.BIT.ADF = 0; //ADFフラグクリア AD.CSR.BIT.SCAN = 0; //単一モード選択 AD.CSR.BIT.CKS = 1; //クロックセレクト AD.CSR.BIT.CH = 0; //チャネルセレクト AN0単一モード } です。よろしくお願いします。

  • 3048fマイコンでのA/D変換について

    マイコン初心者ですが今3048fマイコンを使ってA/D変換をしようとしているんですが、うまくいかないので教えて頂きたいです。 プログラムは下の通りです。 #include <3048.h> /* メイン関数 *****************************************/ void main(void){ int ad_data; P1.DDR = 0xff; /*port1出力に設定 表示LED */ P4.DDR = 0x00; /*port4入力に設定 操作用sw1~4 */ P4.PCR.BYTE = 0xff; /*port4プルアップon */ AD.ADCSR.BYTE = 0x33; /* SCAN MODE / CH0~3  */ while(AD.ADCSR.BIT.ADF == 0){} /* 4CH分の変換終了を待つ */ while(1){ if(P4.DR.BIT.B4 == 0){ /* sw1の時 */ ad_data = AD.ADDRA>>8; } else if(P4.DR.BIT.B5 == 0){ /* sw2の時 */ ad_data = AD.ADDRB>>8; } else if(P4.DR.BIT.B6 == 0){ /* sw3の時 */ ad_data = AD.ADDRC>>8; } else if(P4.DR.BIT.B7 == 0){ /* sw4の時 */ ad_data = AD.ADDRD>>8; } P1.DR.BYTE = ad_data & 0xFF; /*上位8bit分だけ表示させる */ } } このように4チャンネル分の0~5vのアナログ信号をスキャンモードでA/D変換し、それぞれ対応したスイッチを押すことによって現在どのくらいの電圧が来ているかLEDに2進数で表示させようとしています。しかしsw1とsw2、sw3とsw4がそれぞれ同じ値を表示しています。例えば、sw1を押したらADDRAの値が表示されますが、sw2を押しても同じADDRAの値が表示されます。またsw3とsw4も同じでどちらを押してもADDRCの値が表示されます。 4チャンネル分を同時にA/D変換することは元々出来ないのでしょうか?いろいろ調べてはいますが理由が分かりせん・・・ADDRA=ADDRB、でADDRC=ADDRDなのでしょうか?分かりにくいとは思いますが教えて頂けると幸いです。よろしくお願いいたします。

  • h8マイコンで AD変換ができなくて困っています

    マイコンでAD変換をしようと思っています>< #include<3048.h> void ioinit(); void adinit(); int i; int ADDRA; main() { ioinit(); adinit(); while(1){ AD.ADCSR.BIT.ADST = 1; // A/D変換スタート while(AD.ADCSR.BIT.ADF==1); // A/D変換終了まで待つ int i = ADDRA; // レジスタに格納された値をiとする if (i>=0xA5){ // 電圧が6.5vより高くなった場合 P5.DR.BYTE = 0x01; } else if (i<=0x19){ // 電圧が1vより小さくなった場合 P5.DR.BYTE = 0x02; } else if (0x19<=i<=0xA5){ // それ以外の電圧だった場合 P5.DR.BYTE = 0x03; } AD.ADCSR.BIT.ADF=0; //フラグクリア } } // I/OポートDDR設定 void ioinit() { P5.DDR=0xff; } // A/D変換設定 void adinit() { AD.ADCSR.BYTE = 0x33; } このプログラムでAD変換がまったくできません><電圧を変えていくことでP5につながっているLEDで変換結果を見たいと思っています。ADDRAのプログラムあたりがおかしいと思っています;;ちなみにポート7に電圧計とつなげています。その電圧値を変えていくことで結果を見ようとしています。0xA5は6.5Vのときの反応だから回路も分圧させたものにして10Vまでの対応にしました><どこがおかしいのか教えていただけるとてもうれしいです><助けてください;;

  • H8/3052F/IRQを使った割り込み

    こんにちは。 H8/3052F C言語でプログラミングしています。 H8をはじめて約半年がたった者です。 ITUを使ったサーボ制御やAD変換など、いろいろ勉強してきました。 しかしながらまだまだ未熟な者です。 今回割り込みに挑戦しています。 IRQ0を使いスイッチ入力があるとLED点滅パターン変更のプログラムに成功し、ITUと組み合わせてサーボを割り込みで制御できるまで勉強、実験していました。 最終的に成功し、しばらく動かしていたのですが、割り込みがきかなくなってしまいました。 IRQ0が駄目なのか?と仮定してIRQ1でプログラミングし、試したところ無事割り込みできました。 しかしIRQ1も割り込みが急にできなくなってしまいました。 書き込みし直しても直りません。 回路として、本などを参考にIRQ0のポート→マイクロスイッチ→GND という形で接続しています。 もしかしたらIRQ0の時はスイッチがB接点でしばらく繋がったままだったかもしれません。 また、この回路だと動作も少し不安定?なようです。 上記の回路で間違いはありませんか? 一応プログラムを載せておきます。 もし間違いがあったらお願いします。 #include <3048.h> void wait (void) { long t=200000; while (t--); } void int_irq0(void) { int c=3; INTC.ISR.BIT.IRQ0F = 0 while(c--){ P5.DR.BYTE = 0x5; wait(); P5.DR.BYTE = 0xa; wait(); INTC.ISR.BIT.IRQ0F = 0; } } int main(void) { DI; INTC.ISCR.BIT.IRQ0SC = 0; INTC.IER.BIT.IRQ0E = 1; P5.DDR = 0xff; EI; while (1) { P5.DR.BYTE = 0xff; //点灯 wait (); //待ち P5.DR.BYTE = 0; //消灯 wait(); //待ち } } 以上よろしくお願いします。

  • H8/3052F 同士の簡単な通信についての問題

    秋月製マイコンボード(マザーボードも秋月製です)、H8/3052F(以下H8)につきまして質問があります。 なお開発環境にはベストテクノロジーのGDLを使用し、C言語にてプログラムを行ってます。 現在、2枚のH8を連動させて動かすことを試みています。 目的としましてはH8を物理量の計測に使用しています。 私のとった手法は、以下の通りです。 1、H8の、ある汎用ポート同士を1本の信号線で繋ぐ 2、片方のH8(仮にH8(A)とします)のマザーボード付属のタクトスイッチを押す。これを合図にH8(A)は計測を開始し、それと同時にH8(A)の汎用ポートから信号が出力される。 3、もう片方のH8(仮にH8(B)とします)はH8(A)からの出力があるまで待機し、出力を検知すると計測を開始する。 プログラムの内容としましては、以下のようにしました。 ※H8(A)の入力検知用のタクトスイッチは、ポート4のビット4についています。また信号の出力はポート1のビット0です。 ※H8(B)の入力検知用のポートはポート4のビット0です。 ※両ボードともに同一の安定化電源から電源を取っているので、グランドは共有できていると思います。 <H8(A)側のmainプログラム> /*ポート定義****/ P4.DDR = 0; /*ポート4のタクトスイッチを入力に設定。押すと0、何もなしで1*/ P4.PCR.BYTE = 0xff; /*ポート4を全ビットプルアップ。*/ P1.DDR = 0xff; /*P1を出力に設定*/ /*****************/ /*スイッチ入力待機部分*********/ while(P4.DR.BIT.B4); /*タクトスイッチが押されるまで、待機*/ P1.DR.BIT.B0 = 1; /*P1のビット0から5V信号を出力、別のH8(B)に信号を送る*/ /******************************/ (~以下、計測プログラム部へ) <H8(B)側のmainプログラム> /*ポート定義****/ P4.DDR = 0; /*P4端子を入力に設定。信号入力で0、何もなしで1*/ P4.PCR.BYTE = 0xff; /*ポート4を全ビットプルアップ。*/ /*****************/ /*スイッチ入力待機部分*********/ while(P4.DR.BIT.B0); /*P4のビット0にH8(A)からの信号入力があるまで、待機*/ /******************************/ (~以下、計測プログラム部へ) 以上のようなプログラムを組みました。 H8(A)側は正しく駆動し、タクトスイッチを押すと、計測を開始するとともに5Vの信号が出力できています。 問題はH8(B)側で、H8(B)のボードの電源を入れた直後から、H8(A)の信号を待たずに計測を開始してしまいます。 最初はH8(B)のポート4ビット0の初期値に0が入っており,いきなりwhile文を抜けてしまうのかと思いました. そこで,H8(A)からの信号線を外しますと、ずっと計測待機状態に入るのでプログラム的には一応回っているようです。 (私の認識では,ハードウェアマニュアルによればポート4の初期値は全ビット0ですが,MOSプルアップをすることにより,全ビット1に反転する(?)と考えています) 次に,H8(A)側から予期せぬ信号が入力されているのかと思い,テスターで電圧を測ってみました. しかし,タクトスイッチ入力前は0Vで,入力後は5Vが出力されており,見かけ上は問題がなさそうでした. なぜ、H8(B)は電源を入れたとたんに駆動を開始してしまうのでしょうか? もしお分かりになる方がいらしたら、ご教授願います。

  • H8/3048、AD/DA変換プログラムについて。

    H8/3048、AD/DA変換について質問です。 ポート7のAN0・AN1を入力に使い、DA0・DA1で出力される変換プログラムを作成して実験したところ AN0→DA0への変換は出力されたのですが、AN1→DA1への変換が出力できません。なぜ出力されないのかわかりません。 どうしたらいいか教えてください、お願いします。 AN0がDA1でも出力されているかと思いましたが違いました。 #include <no_float.h> #include <stdio.h> #include <machine.h> #include "h8_3048.h" void init (void); double get_ad0 (void); double get_ad1 (void); void out_da0 (double); void out_da1 (double); void wait (void); int main (void) { double ad0,ad1; int d; init(); //初期化 // set_ccr(0x00); //全体の割り込み許可 //AD DA変換----------- while(1){ ad0=get_ad0(); ad1=get_ad1(); for(d=0;d<1000;d++); out_da0(ad0); out_da1(ad1); } return 0; } void init(void) { /* ポートの入出力設定 */ P1DDR = 0xff; P2DDR = 0xff; P3DDR = 0xff; P4DDR = 0xff; P5DDR = 0xff; P6DDR = 0xf0; // CPU基板上のDIP SW P8DDR = 0xff; P9DDR = 0xf7; PADDR = 0xff; // LED基板 PBDDR = 0xff; // A/Dの初期設定(単一モード) AD_CSR = 0x00; // A/Dの初期設定(スキャンモード使用AN0-AN1) // AD_CSR = 0x11; //ITU0 1ms毎の割り込み ITU0_TCR = 0x20; ITU0_GRA = 24575; ITU0_IER = 0x01; ITU_STR = 0x01; // D/Aの初期設定 DA_CR=0xc0; //DA0E1,DA0E0:1 D/Aアウトプットネーブル DAE:0 ch0,1 独立制御 } double get_ad0(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRA>>6;// i=0-1023 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } double get_ad1(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRB>>6; //i=0-1024 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } void out_da0(double d) { DA_DR0=(int)(d*255/5.0); } void out_da1(double d) { DA_DR1=(int)(d*255/5.0); } void wait(void) { long Loop=200000; while(Loop--); }

  • H8/3664FのAD変換について

    初めまして。 現在大学でH8/3664FでのAD変換を行っているのですが、 AD変換とその値に対する出力への動作が上手くいきません。 分かる方、ご教授お願いいたします。 現状は、1.7V程度の信号をADコンバータ端子(AN1)に入力しています。 AD変換を行い、条件として1V以上のときは出力に設定した 端子(P11)から5V出力しダイオードを光らせようと思っています。 プログラムは以下のように組んでいます。 おかしいところがあればご指摘お願いします。 void main(void){ IO.PMR1.BYTE=0x00; /* ポート1入出力ポート*/ IO.PCR1=0xff; /* ポート1出力*/ /*AD変換の初期設定*/ AD.CSR.BIT.ADST=0; /*AD変換機能停止*/ AD.CSR.BIT.SCAN=1; /*スキャンモード*/ AD.CSR.BIT.CKS=1; /*高速変換*/ TW.TCRW.BIT.CCLR=1; /* TCNTがGRAでクリア */ TW.TCRW.BIT.CKS=3; /* クロックφ/8 */ TW.GRA=40000; /* パルスの周期20ミリ秒 */ TW.TMRW.BIT.CTS=1; /* カウントスタート */ while(1){ /* 20ミリ秒間のカウントは約8880となる. */ if(TW.TSRW.BIT.IMFA==1){ TW.TSRW.BIT.IMFA=0; AD.CSR.BIT.ADST=1; /*AD変換機能開始*/ while(AD.CSR.BIT.ADF==0){}; /*AD変換終了待ち*/ AD.CSR.BIT.ADF=0; /*変換終了フラグクリア*/ AD.CSR.BIT.ADST=0; /*AD変換機能停止*/ x0=(int)(AD.DRA>>6); /*x0に値を格納*/ if(x0>100){/*1V以上の場合*/ IO.PDR1.BIT.B2=1; }else{ IO.PDR1.BIT.B2=0; }

  • WinXP セーフモードでは正常だけど!

    お尋ねいたします。 WinXP セーフモードでは正常にマウスも動きますし、全く重さを感じないのですが、通常の起動でXPを立ち上げますと非常に重くなってしまいます。 デスクトップ画面でマウスを少し動かしただけでCPUの負荷が100パーセントになってしまうという症状です。 自作機で、ハード的にはAMD1.7 メモリー670M スペック的には充分に余裕はあるのですが、上記のような状態でで使い物になりません。 ・・・ほとほと困っています。 宜しくご教授お願いいたします。

  • フローチャートについて

    H8マイコンでスイッチS1(PORT4-4)が押された場合は、LED1(PORT5-0)、スイッチS2(PORT4-5)が押された場合は、LED2(PORT5-1)、スイッチS3(PORT4-6)が押された場合は、LED3(PORT5-2)、スイッチS4(PORT4-7)が押された場合は、LED4(PORT5-3)が、それぞれ点灯するようなプログラムをつくりました。 #define P4DDR (* (volatile unsigned char *) 0xfffc5) #define P4DR (* (volatile unsigned char *) 0xfffc7) #define P4PCR (* (volatile unsigned char *) 0xfffda) #define P5DDR (* (volatile unsigned char *) 0xfffc8) #define P5DR (* (volatile unsigned char *) 0xfffca) int main(void) { unsigned char sw,ssw; P4DDR = 0x00; /* P4全ビットを入力に設定 */ P4PCR = 0xff; /* P4 MOSプルアップをONにする */ P5DDR = 0xff; /* P5全ビットを出力に設定 */ while (1) { sw = ~P4DR; /* 入力を反転 */ ssw = sw >> 4; /* swを4ビット右にシフトしたものをsswに代入 */ P5DR = ssw; /* sswをP5に出力 */ } return 0; } というプログラムを作ったのですが、フローチャートがどのようになるのかがわからないです。またプログラムが間違っていたら教えてください。

このQ&Aのポイント
  • デジカメdeムービーシアター8では、編集中のフォトムービーデータをプレビューワにセットすることができない問題が発生しています。
  • ムービーシアター8の編集機能が正常に機能していないため、再編集ができない状況です。
  • ソースネクスト株式会社が提供しているデジカメdeムービーシアター8において、編集中のフォトムービーデータをプレビューワにセットする際にエラーが発生し、再編集ができない状態になっています。
回答を見る