FC2ブログ

DMA三昧_3

今日は通信プログラムの作成に戻って四苦八苦する.
1回目では動いていたプログラムを連続で動かすとなぜかスタックしてしまう.
原因はDMAの初期化で無駄な送信が行われているためとわかった.

DMAは割り込みorチェーンイベントで起動するが,割り込みのほうが優先度が高いらしく,割り込みフラグが立った状態で
Enableした瞬間に(チェーン後段であっても)転送が始まってしまう.
送信TXなどをチェーン後段で起動要因に設定した場合,割り込みフラグをソフトで消せないためこの問題が起こる.

対策として,チェーン後段DMAはEnableしないで条件設定だけにしておく.
チェーンイベントが来たら自動でEnableされるので問題く動作する.

これでようやくマスタ,スレーブとも自動送受信の準備が整った.
あとは実アプリケーションに実装して動くことを確かめるだけだ.
スポンサーサイト



SDカードで軽くはまる

週末は通信プログラムを完成させるつもりが,起動時のSDカードマウント処理が途中で止まるトラブルにみまわれた.
症状としては
・スイッチを入れなおすと認識する.
・デバッガをつなぐと認識する.
・UART1の接続を切ると認識する.

ということでUART1から変な信号が入って割り込みループにでも落ちているのかとアレコレ試すも一向に改善しない.

結果的に,使っているuSDカードのメーカーによって上記のような症状が出る・出ないがあることがわかった.
UART1との関係がイマイチ理解できないが,とにもかくにも不具合の出るカードを使わなければ症状は出ないということで,
いったん置いておこうと思う.

DMA三昧_2

今日は昨日の続き.
DMA多段によるRS485の送受信だが,RW信号が出るのが早すぎたため調節のためのダミー転送を入れた.
結果,狙い通りのタイミングで信号が出せるようになった.
これで準備はOKになった.

あとは実際の送受信データ数を入れ込むだけだ.

DMA三昧

今日もひたすらデバッグを続ける.
起動不安定はUARTの割り込みハンドラ内でIFSフラグクリアすることで安定した.

DMAは今回チェーン機能をフルに使わないといけない.
ひとまず4段のチェーンを組みドミノ倒し的に動作させる.
3段目でRW切り替えをLにするタイミングが早すぎる.
最終送信ByteをDMAがレジスタにセットしてから実際に送信されるまでのタイムラグのせいだ.
またダミーバイトを送りムダ時間を作る処理を組まないといけないかもしれない.

今日は一進一退

昨日のDMA動かずはレジスタの設定を間違えていたみたいで動くようになった.
しかし,それとは別にプログラムの起動が不安定になる現象が発生する.
メインルーチンが動いたり動かなかったりで怪しい挙動を示す.

どうも何本も入れている割り込みが悪さしているみたいだがイマイチ原因がつかみきれない.
これでは通信プログラムの開発どころではないので早急に直していきたい.

PIC32MZのDMAをいじり始める

今日からはマスタ側のPIC32MZの通信プログラムを作り始める.
サンプルコード片手にひとまずDMAを動かそうと試みるが,不発.

何かがおかしい.RXではサックリ動いたというのに・・・
これはオオハマリするケースかもしれない.

DTCを使いタイミングを合わせる

今日は引き続き通信の問題と格闘する.
DMAをいじり受信完了を遅らせるのはムリと判断し,DTCの送信開始を遅らせる方法を探る.
最初はダミー転送を入れてみたが,1byteごと繰り返しダミー転送されるため全転送時間が大幅に伸びてしまう.
そこで最初だけダミー転送してあとはダミーをスキップする方法を考えた.
DTCでは転送情報はRAMに書かれているので,自分自身で転送内容を書き換える自己更新型のデータフローにしてみたところ,
狙い通りの動きをすることがわかった.
スレーブ間のタイミングのズレはこれで吸収できるようになった.

試しに乱数を送受信してデータのズレやゴミデータが混じらないか確認する.これはOK.
スレーブ側プログラムはほぼ完成した.
次はマスタ側だ.

わずかにタイミングが合わず

今週末はRX220スレーブ3台とPIC32MZ基板の通信プログラムを作成する.
送受信バイトを設定すればあとは自動で転送されるはずが,なぜかゴミデータが混じる.
原因はスレーブを切り替える間に3.4usecほど送受信がオーバラップしてしまうためだった.

この箇所は一切ソフトウェア処理していないのでディレイを入れて調節することもできない.
コケてしまうデータだけ捨てる手もあるが,フレーミングエラーを誘発するため放置はできない.
つまり,なんとかして3.4usecのタイミングずれを直さないといけない.

これは難題だ.

11/21のツイートまとめ

mo_ya_ne

64Mbitの小宇宙を堪能する前に,やることがある.SDカードを使ったロギングだ.これがうまくいけば大容量RAMは不要になる.
11-21 20:39

たかが中華部品とバカにしてはいけない.スペック/コストでは抜群に光るものがあるのだから.
11-21 20:38

aliexpressから「送ったよ」のメールが来た!果たしてちゃんと届くのか?
11-21 20:36

送受信の基本部分が動作

今日は進展があった.
DMA→DTCによるXbyte受信→Ybyte送信が「ほぼ」CPUを使わず動いた.
ポイントは送信側で,DTCの起動要因として1byteごとの送信完了割り込みとDMA転送完了割り込みの両方をONにすることで実現できた.
DTC初回の送信時はDMAで起動され,2回目以降はTXI割り込みで起動される.
DTCのチェーン転送機能を使い,I/OレジスタにHを転送することでRS485のRW信号をHに切り替える.
DTCの最後の1byteが転送完了するとCPUにTXI割り込みが発生するが,この中でRW信号をLに切り替えている.

結局,CPUの処理にかかる時間は10usec程度とわずかで,転送量が増えても一定になる.

これであとは多CHのプロトコル部分を作れば完成だ.

11/20のツイートまとめ

mo_ya_ne

aliexpressでついポチってしまった64Mbitメモリ.注文してから4日が経つが音沙汰がない・・・まぁ気長に待とう.
11-20 23:46

ELCは動くようになったが・・・

今日もひたすらデバッグ作業を続ける.
ELCは動いたものの,意図したタイミングと異なる動作だった.
DTC連続送信の最後の送信完了でI/Oを変化させたかったのだが,実際には最初の1byteの転送でレベルが変化してしまうことがわかった.

これではRS485のR/W切り替えには使えない.
仕方がないのでいったんその部分の処理はCPUで行うことにして,それ以外の通信の骨格を作成する.
まずはDMA→DTCで受信→送信を連続して行う動作の実装だ.

ここからが正念場だ.

DTCは動くようになったが・・・

昨日はDTCが起動できずはまっていたが,なんとか解決した.

次はELCを試してみるもこちらは動かず.
イベントを手動で発生させてみるが出力の値が変化しない.

ELCはそんなに難しくないと思っていたのでこれは誤算だった.
明日以降,デバッグをしていきたい.

11/18のツイートまとめ

mo_ya_ne

ダメだ・・・DTCの起動要因がDMAに設定できないなぜだ?
11-18 22:09

ひらめいた.DMA,DTC,ELCを連動させれば・・・
11-18 18:31

RS485通信プログラムの改良

基板が動くようになったので,以前から気になっていたRS485の通信バグを直すべく抜本的な対策を考える.
DMA,DTC,ELCを使えばほぼすべての処理をCPUを介さずに行える可能性があり,さっそく試してみるもあえなく撃沈.
DMA→DTCがまず動かない.
サンプル見ながら何とか動かそうとするがうまく行かない.
今日はこの辺にして明日以降体勢を立て直そうと思う.

配線ミス修正

動作確認をする中で実装ミスが見つかる.
dsPIC33Fを逆組みしてしまった.これは28PINなのでなんとか足一本一本を浮かせながら引きはがした.
結果,このデバイスはオシャカになってしまったが,基板のほうは無事で済んだ.


もう一点は0.5mmピッチの足の短絡.
表側の外観は拡大鏡でチェックしたが問題なかったので足の裏側部分のパタンでショートしたと推測している.
半田を盛り直し,除去しなおすことで治った.

修正した基板でRX62T,RX220との通信もOKとなり実装した全機能の確認が終わった.
どうやら回路図に致命的なミスはなかったようだ.

11/16のツイートまとめ

mo_ya_ne

https://t.co/w1q3CVgSlv大容量64Mbit=8MbyteのSPI-SRAM.使えるかアヤシイがかなり魅力的だ.
11-16 20:39

動作確認開始

今週末はPICMZ基板の動作確認.
とりあえず電源ONで火はふかなかったのでひと安心.


Lチカ,シリアル通信,IIC,SPI,USB,SDカード,PWM,SBDBTの動作はOK.
残すはRX220,RX62Tとの通信だ.

部品の実装完了

今日は引き続き基板実装を進める.
その中で,重大な干渉が見つかる.USBのミニBタイプコネクタが基板端面から遠かったためオスコネが刺さらない.


幸いパターンの通ってない箇所だったので,フライス盤で削ってごまかすことにした.
カッコ悪いけどしょうがない.


他にも細かいミスがいくつか見つかったが,なんとか対応し,基板2枚が完成した.


さぁ,明日は緊張の火入れだ.

11/14のツイートまとめ

mo_ya_ne

DCジャックの穴位置間違えた.刺さらない.さっそくやってしまった. https://t.co/TCwNStPf69
11-14 21:24

0.5mmピッチもだいぶ慣れた. https://t.co/LJWRmVWQIy
11-14 20:22

基板実装開始

基板が納入された.
レジスト色は赤.
特に意味はないが今まで発注してなかった色にしてみた.


シルクやレジストの精度は十分で,とくにかすれていたり変にずれている箇所はなさそうだ.
いったん2枚を組み立てて動作確認を行っていきたい.

11/12のツイートまとめ

mo_ya_ne

https://t.co/75yaxYNLaiルネサスのRX72Tいいな.抜群のコード効率,20MbpsのUART.100pin 0.5mmピッチでかろうじて手付けできるパッケージ.しかし,チップ単体がまだDigi-keyにも売ってない・・・
11-12 21:46

https://t.co/qd7JYkj9Duteensy4.0が税込2654円か.うーん安い.
11-12 21:43

11/10のツイートまとめ

mo_ya_ne

https://t.co/YgnHNH3Yk7Robosense社の200m,32CHのLIDARは$20000もするのか.11月11日なら$19000になるが.
11-10 21:14

https://t.co/x1Vt4TlrKD波動減速機が$600からか.いいなコレ.欲しいけど,買うのに勇気がいるな.
11-10 20:40

https://t.co/5P6QAioQkN近頃のaliexpressはなかなか刺激的なモノを売っているな.このモータモジュールは$399で買えるらしいが・・・
11-10 20:33

ケーブルアダプタ作成

基板が届くのは早くて来週末のため,それまでの間作成する基板のケーブルアダプタを作成する.
今日はICD4用の6ピンケーブルを作成した.


これから年末にかけて買い物シーズンになる.
今年買いたいものリスト:
・姿勢角センサ Pololu UM7

・7インチ タッチディスプレイ GEN4-ULCD-70DT-SB

・超小型高速マイコンボード Teensy4.0

11/09のツイートまとめ

mo_ya_ne

https://t.co/UugFrgcaW5Teensy 4.0のサイズとスペック,価格がすごいな.
11-09 20:23

横向きのロッカースイッチ4MS1R202M6QES電流容量3A.切り替えフィールが軽快で良い. https://t.co/t1kRyquNAG
11-09 15:48

シンガトロン社製DCジャック2DC-G213-D42DC20V10Aって書いてあるけど本当かな?差し込みが結構固くていい感じ.接触抵抗低そう. https://t.co/Pzg2ugtRre
11-09 15:42

現物確認+基板発注

今週末は紙基板に部品を置いて問題ないか確認する.
いったん全部品干渉等ないことを確認した.
回路もひととおりは確認したつもりだ.


今回発注はユニクラフトさんにお願いした.
P板.comに比べると若干納期はのびるが,価格が安いのでこちらを試してみることにする.

あとは回路にミスがないこと祈るばかりだ.

11/04のツイートまとめ

mo_ya_ne

簡易見積りの結果,P板.comが44350円,ユニクラフトが38128円.思ったより安くならない.まぁ4層だし,そこそこ高いのは仕方ないか.
11-04 19:22

P板製造はこれまでP板.comを利用してきたが,もっと安いUnicraftさんも新たに検討してみようと思う.海外メーカーだとさらに安いが,Cadrus-Xのデータを受け付けてくれないのがダメだ.
11-04 18:37

ピン番号間違えて電源コネクタが短絡しているぅぅ2ピンチップのサイズを間違えて実装できないぃぃあぶないあぶない
11-04 15:40

Aitendoで買った5wayスイッチ,なんかデータシートと現物の形状が違うんですけど・・・ https://t.co/YpAXVCjhuT
11-04 15:38

基板作成三昧

今週末はCADで基板作成三昧.
①部品作成

②部品配置

③配線

④ベタ埋め,シルク入れ


4層基板でサイズは95x55mmになった.
もう少し密に詰めればあと5mmぐらいは短縮できるかもしれないが,ミスでAW修正の可能性もあるため余地を残すことにした.
前回のMR3-miniの配線に比べれば大幅に難易度は下がったが,やはり後半になると配線が通らず四苦八苦した.
この配線作業が中毒性があり,一度始めるとやめられない.寝食忘れて没頭してしまう危険な作業だ.

原寸で印刷して部品を載せてみると高さ方向で干渉する部品があり位置を微修正.
部品を動かすとその部分の配線がトラブルを起こしやすいので注意.
最後に自動べた埋め,DRCチェック,逆ネット抽出照合チェックを行って完成.

いったん基板は発注できるところまで完成したが,部品がまだそろってないので現物確認ができてない.
発注は再来週になりそうだ.

10/31のツイートまとめ

mo_ya_ne

SBDBTは3200円もするため,つけはずして利用することにする.このモジュール,もっと1000円ぐらいにならないかなぁ
10-31 21:23

PICMZ基板の部品リスト作成した.メインマイコンのPIC32MZ2048EFH064は1100円.お高い5V2AレギュレータV7805-2000が1200円.このバランスはいかがなものか・・
10-31 21:21

プロフィール

もやね

Author:もやね
長野県在住の会社員(メカニカル・エンジニア).
ロボットは完全な趣味としてやってます.
E-mail:
mo_ya_ne[a]yahoo.co.jp
[a]⇒@

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
FC2カウンター
ブログ内検索
RSSフィード
リンク