328UとのSPI通信のタッピング

私は、直列の2 * 595と4つのトランジスタで制御された4×14セグメントの英数字ディスプレイからデータを抽出しようとしています。シリアルデータはSTM32f103から供給されます。そのファームウェアは変更しないでください。 問題は、16MHzで動作しているAtmegaがARMからの2.2MHzのSPIクロックに対応できないことです。そしてそれは16ビット連続ワードで、Atmegaは8ビットSPDRバッファしか持っていません。

データラインからデータを格納し、遷移間のマスターとして遅いクロックでそれを読み取ることを可能にするようなワンチップソリューションはありますか? 並行して処理するのに十分なピンがありません。 OR(ワイヤ)(ダイオード)は595の動作をクロックしますか?

1
ru de

4 答え

私は328pがDMAを搭載した72MHzのCortex-M3と一致しないことを心配しています。 SPIクロック速度は問題ではなく(328pはF_CPU/2まで上がることがあります)、バイト間の時間です。あなたは簡単に1バイトを得ることができます、SPIペリフェラルはあなたに割り込みを与えます。その後、そのバイトを処理/保存し、次のバイトを待つ必要があります。 STM32がDMAを使用している場合は、文字通りバイト間の遅延がないため、ISRコードを最適化してもデータが失われることはありません。

私はSN74LS674で問題を攻撃するでしょう - 16ビットパララーイン、シリアルアウトレジスタ。それを595sのすべての出力に接続し、SPIを介して読み取ります。

1
追加された

高速出力シフトレジスタを使用する必要はまったくないと思います。 ここで説明しているのは、4つのイネーブル信号によって個々の桁(14セグメント)が比較的長期間オンになっている単純な多重表示です。データ出力は各桁の全表示期間中安定しています。

  1. (ここでは仮定しています)立ち下がりエッジを使って4つの328p入力ピンに4桁のイネーブル信号を入力して割り込みをトリガします。それが有効になるので今各ディジットのためのISRがあります。数字のスキャン速度は2 kHz程度以下である可能性が高いので、各数字は約500 us間有効になると予想できます。

  2. 14個のセグメントデータビットを2 * 8:1マルチプレクサ(74HCT151)に入力します。出力ビットはそれぞれ328pの1つの入力ピンに送られます。

  3. 328pの3つの出力ビットを使用して、セグメントの下位/上位バイトから受信するビットを設定します。

コードに関しては、ディジットからの割り込みを受け取るとき有効にして下さい:

  1. マルチプレクサの選択をゼロ(0x000)に設定します。
  2. 各バイトのLSビットを読み取り、2つのメモリ位置に値を格納します。
  3. ロー/ハイバイトの各ビットをループスルーして読み取るように選択します。
  4. Ret

割り込みが競合することはないため、単一のルーチンを使用して読み取り/ループし、単純に下位/上位ビットを格納するためのポインタを設定できます。

これは、328pで6つの入力ピンと3つの出力ピンが使用される2チップ+ MCUソリューションになるでしょう。スキャントランジスタにプルアップ抵抗が必要な場合もあります。 (あなたはその必要性を確かめることができるようにいくらかの概略的な情報を提供する必要があるでしょう)

0
追加された

1つの解決策は、この速度を処理できるSPIサブシステムを備えた小型の8ビットマイクロです。 2.2MHzはSPIにはそれほど高くないので、ほとんどの「最新の」マイクロプロセッサはそれを行うべきであり、すべてをバッファするのに十分なRAMを備えている必要があります。それを読むことはArduinoのために都合の良い方法で行うことができます。

あなたはおそらくこのアプリケーションのためのカスタムICを見つけることはないでしょう、そしてあなたがそうするならば、それは小さい8ピンPICまたはAVRよりも高価になるでしょう。マイクロコントローラは現在595より安いことがあります。

0
追加された

595にアクセスできるのであれば、それらがSTM32によってロードされた後にシリアルデータをそれらからクロックアウトすることができるかもしれません。 ATmegaは(多分ピン変化割り込みを使用して)ラッチ信号を監視し、それからそれが出力レジスタに格納されると2番目の595のQH 'ピン経由でデータを出力します。

あなたは595 クロック入力をSTM32のSPI クロックとATmegaからのクロック出力間で切り替える必要があるでしょう。 SMT32クロックがローアイドル状態ならば、単純なORゲートで十分でしょう、あるいは4つのNANDゲート(1つの74HC00 IC)からマルチプレクサを作ることができます。

schematic

simulate this circuit – Schematic created using CircuitLab

0
追加された
それがどのように起こったのかわからない、それはコメントになるはずだった!
追加された 著者 Bruce Abbott,
ラッチは125Hzで動作しており、私は10本のピンを持っています。
追加された 著者 Ahe,