[戻る]
新着表示

Re: SPIクロックのずれ 投稿者:Gokan 投稿日:2016/10/17(Mon) 15:27:45 No.718

これで通信エラーになるのでしょうか?
SPIは同期式ですからクロックの幅が変わっても問題なく動作
します。
幅が変わるのはACKを受信しているときとかではないでしょうか?


> PIC24FJ1024GB606で1MHzのSPI通信を行っています。
>
> このとき、10bit間隔くらいでクロックが40kHz程度早くなる現象が発生しており、原因がわからないのです(1byteごとに送信バッファエンプティ割り込みでSPIBUFにDMA転送を行っています)。
>
> モジュールの誤差としては大きすぎる気がするので他の要因があると思うのですが皆目見当が付きません。どなたかご教授ください。

Re^6: CLC設定ツール 投稿者:Gokan 投稿日:2016/10/17(Mon) 15:24:35 No.717

たしかCLCの順番を変えたように思います。

> トランジスタ11月号の案内ありがとうございます。早速その雑誌の102ページから108ページをみさせていただき再挑戦しました。
> そこでMCC Generated Filesのclc2.cとかをみますと、
> 例えばそこでは
> CLC2CON = 0x80;
> となっており、
> CLCTest.cでは
> CLC2CON = 0xC2;
> となっておりまして一致していません。
>
> MCCで自動生成されたものをコピペしているわけではないのでしょうか?

SPIクロックのずれ 投稿者:orz 投稿日:2016/10/14(Fri) 14:33:32 No.716

PIC24FJ1024GB606で1MHzのSPI通信を行っています。

このとき、10bit間隔くらいでクロックが40kHz程度早くなる現象が発生しており、原因がわからないのです(1byteごとに送信バッファエンプティ割り込みでSPIBUFにDMA転送を行っています)。

モジュールの誤差としては大きすぎる気がするので他の要因があると思うのですが皆目見当が付きません。どなたかご教授ください。

Re^5: CLC設定ツール 投稿者:twaga 投稿日:2016/10/11(Tue) 18:07:56 No.715

トランジスタ11月号の案内ありがとうございます。早速その雑誌の102ページから108ページをみさせていただき再挑戦しました。
そこでMCC Generated Filesのclc2.cとかをみますと、
例えばそこでは
CLC2CON = 0x80;
となっており、
CLCTest.cでは
CLC2CON = 0xC2;
となっておりまして一致していません。

MCCで自動生成されたものをコピペしているわけではないのでしょうか?

PIC32MZ LogScop 投稿者:五十嵐隆規 投稿日:2016/10/09(Sun) 21:23:03 No.714

PIC32MZ2048ECG064の使い方を教えてください。
PICでロジックスコープ実験を行っています。
PIC32MX250F128B、PIC32MX695F512Lはプログラムを
RAMに転送し実行するとno-waitで実行しているようです。
同様のことをPIC32MZ2048ECG064でおこなっても動作しません。
仕様書にはSYNCI命令を使うと記載されていますが
命令の使い方を理解できていません。
動作成功されている方、方法を教えていただきたいです。
最高速データ取込したいのでアセンブラですが
C言語でもOKです。

ロジックスコープのデータ取込プログラムは下記です
レジスターのデータ
LI t0,0x80000000 // t0=0x8000000(RAM先頭アドレス)
LI s8,0xBF880000 // PORTBの上位アドレス
データ取込プログラム
LBU t1,0x6120(s8) // PORTBからt1に8bit取込
SB t1,0x0000(t0) // t1を0x80000000番地に保存
LBU t1,0x6120(s8) // PORTBからt1に8bit取込
SB t1,0x0001(t0) // t1を0x80000001番地に保存
以下同様
→1データを処理するのに2命令です。
クロックを96MHzにすれば48MHzの周期で取込します(48MSa/s)

PIC32MZ2048ECG064の使い方が解らないのでまず下記プログラムで
実験中です。クロックは8MHzです。
LI t0,0x0000000F
TES0:
SW t0,PORTB // 2命令に変換されます
B TES1 // 1命令
NOP // 1命令 遅延スロット
TES1:
SW $0,PORTB // 2命令に変換されます
B TES0 // 1命令
NOP // 1命令 遅延スロット

1サイクル、8命令なので1MHz(Duty=50%)の波形を出力するプログラムです。
しかしPIC32MZ2048ECG064で成功していません。

状況
PIC32MX250F128B(FLASH ROMで実行) 1MHz
PIC32MX250F128B(RAMに転送して実行) 1MHz
PIC32MX695F512L(キャッシュOFF/FLASH ROMで実行) 1MHz
PIC32MX695F512L(RAMに転送して実行) 1MHz
PIC32MZ2048ECG064(全キャッシュOFF/FLASH ROMで実行) 80kHz(Duty50%)
PIC32MZ2048ECG064(全キャッシュON/FLASH ROMで実行) 800kHz(Duty50%でない)
PIC32MZ2048ECG064(RAMに転送して実行) 動作しない

Re: コンパイルエラー(追加) 投稿者:Sakamoto 投稿日:2016/10/08(Sat) 21:11:45 No.713

先ほどの質問でPICの型番を記載し忘れました
使用PICはPIC16F876Aです
宜しくお願いいたします。

コンパイルエラー 投稿者:Sakamoto 投稿日:2016/10/08(Sat) 21:00:49 No.712

Pic初心者です。
既存プログラムに、機能追加のためプログラムを書き足しました。
コンパイルすると
section '.org_4' can not fit the absolute section. Section '.org_4' start=0x00000400, length=0x00000200
というメッセージががでて、コンパイルできません。
追加したプログラムを少し削る(コメント行にする)と
コンパイルできます。
プログラムは、アセンブラで行数は、コメント行を入れて
2200行です。
使用環境はMPLAB X IDE V2.20です。
どなたか、対策をご教授いただきたく、お願いいたします。

Re^2: 「LCD&タッチ・・・」 投稿者:RPO 投稿日:2016/10/05(Wed) 15:22:07 No.711

後閑様

ご回答ありがとうございます。

> 10000と比較している時点ではまだA/D変換後のバイナリのままです。

確かにそうですね。了解です。

> したがって10倍の10240まで計測可能なのですが10000でゲインを
> 切り替えるようにしています。

ゲイン200倍の場合で、A/D変換のフルレンジ近くまでをカバーするということでしょうか。

> 少数を扱わなくても良いように平均をとるため10で割ることはしていません。
> 最後にスケール変換の際、200ではなく20を掛けるようにしています。
> 80行目の30mAというのはコメント間違いです。バイナリの測定値が30以下という意味です。

はい、了解です。

> 電圧は電流の間違いですね。

図2.6.5のフローチャートでも30mAの記載があります。
ご確認いただければと思います。

p.s.
後閑様のお名前は以前から存じ上げていましたが、PICについては知りませんでした
(PIC自体も知らなかったですし、後閑様がPICの第一人者であることも)。
当面はC言語でのプログラミングかと思いますが、アセンブラも興味があります。
PICのアーキテクチャは「くせ」があるとネット情報で知りましたが、
逆に興味が湧きました。
今後もご教示いただくことがあるかと思いますので、よろしくお願いいたします。

Re: 「LCD&タッチ・・・」 投稿者:Gokan 投稿日:2016/10/04(Tue) 22:43:44 No.709

10000と比較している時点ではまだA/D変換後のバイナリのままです。
したがって10倍の10240まで計測可能なのですが10000でゲインを
切り替えるようにしています。
少数を扱わなくても良いように平均をとるため10で割ることはしていません。最後にスケール変換の際、200ではなく20を掛けるようにしています。
80行目の30mAというのはコメント間違いです。バイナリの測定値が30以下という意味です。

電圧は電流の間違いですね。




> はじめて投稿いたします。
> オシロスコープを自作したくて色々情報を探した結果、
> 「LCD&タッチセンサ活用の素」を購入させていただきました。
>
> PICは未体験でしたので、先ずは第2章の「2-6 使用例:簡易電源」を
> 作ろうと思っていますが、プログラムのA/D変換の箇所で不明点があり、
> 質問投稿させていただく次第です。電流測定の箇所です。
>
> 71 /*** 電流測定(10回の平均) *****/
> 72 Current = 0; // 初期値クリア
> 73 for(i=0; i<10; i++){ // 10回の平均
> 74 ADCON0 = 0x91; // AN4 200倍ゲイン選択
> 75 __delay_us(50); // 50usec待ち
> 76 GODONE = 1;
> 77 while(GODONE);
> 78 Current += (ADRESH*256+ADRESL); // 電流読み込み
> 79 }
> 80 if(Current < 30)
> 81 Current = 0;
> 82 else{
> 83 if(Current < 10000){ // 小電流か?
> 84 RB6 = 1; // 目印LED Off
> 85 // スケール調整と変換、オフセット調整
> 86 Current = (Current*20)/1024 + 15;
> 87 }
>
> 本のp.67の説明によると、80行目と83行目はそれぞれ、30mA、200mAとの
> 比較となっています。しかしソースコードでは、83行目は10000と比較
> しています。
>
> 80行目から83行目までで、Currentは変更されていないはずですから、
> なぜ200ではなく、10000との比較なのでしょうか。
>
> また「10回の平均」とコメントにありますが、10回の加算後に、
> Current /= 10; がありません。10倍の値のまま比較するということで
> あれば、10で割ることは必須ではないと思いますが、その場合80行目は
> 300と比較すべきかと思います。
>
> そもそも80行目に到達した時点で、Currentにはどのような値が入って
> いるのでしょう。
>
> 78行目の右辺の値であるA/D変換値と電流値との関係は、次のような
> 考え方でよろしいでしょうか?
>
> 基準電圧はVDD=5Vですよね。測定電圧は200倍されているので、
> (5/200)/1024[V]が電圧分解能ですよね。
> すると10回加算したA/D変換値と電流値との関係は、
> 以下で正しいでしょうか?
>
> (10回加算AD変換値)/10[回]×(5/200)/1024[V]/0.1[Ω]×1000
> =(5/200)×(10回加算AD変換値)[mA]
>
> この値を30[mA]と比較すべきではないのでしょうか?
>
> さらについでで恐縮ですが、86行目に対するp.67での説明が
> 「電圧値にスケール変換」となっていますが、正しくは
> 「電流値にスケール変換」ではないでしょうか。
>
> お忙しいかとは存じますが、以上の疑問につきまして
> ご教示いただければ幸いでございます。

Re: 誤記の確認 投稿者:Gokan 投稿日:2016/10/04(Tue) 22:15:37 No.708

ご指摘の通りです。
貴重な情報ありがとうございました。



> いつも有益な後閑先生の書籍にて勉強させて頂いております。
> 電子制御・信号処理のための「dsPIC活用ガイドブック」において
> 誤記?と思える箇所が御座いましたの投稿させて頂きます。
>
> 【内容】
> 340頁の図6-8-19、図6-8-20において、U相とW相の表記が逆でないでしょうか?
> U相とW相を逆にしないとうまく駆動できませんでした。
>
> 参考までに他のHPも調べてみたのですが
> 下記URLで、120度通電通電角真理値表(Table3.1.1(c))
> を見てみてみると、やはり逆のような気がします。
> http://motormake.web.fc2.com/rojikkukairosekkeisyo.html
>
> 私の理解が間違っているかも知れませんが、ご確認頂けると助かります。

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |

- WebForum -