ドラフトアクシデントアラート情報パネル(パート3)

すべてにご挨拶。
これは、かなり長い間描かれた物語の第3部( 1、2 )です。
現在、ほとんどすべてのメインブロックが組み立てられていますが、デバイスはまだ完成していません。
-インジケーター(2);
-プロセッサモジュール(この部分)。
-電源(パルスコンバーター48V-> 5Vから6A)(その過程で、オシロスコープ(kEtai)へのプローブが最終的に破損したために一時停止)。

アクションプラン:
[+] SDカードセクター
[+] FAT-FS
[+>] OneWire非同期
[-]スレーブファームウェア
[部]イーサネット
[-]プロセッサ間の通信プロトコル
[-]ブートローダー

注意写真。


プロセッサボードに変更が加えられました。
非表示のテキスト
V.1:

解体し、次へ移しました。
V.2:

最初のバージョンでは、メインコントローラーのPORTAの繁殖に失敗しました;バージョン2では修正されました-完全な櫛に置かれました。 追加の周辺機器とDACの役割の両方を使用することができます(UDPパケットからサウンドを取得して、障害なく動作させることができる場合)。
周辺はモジュール式です。 ボード上で提供:
-温度センサーDS18B20(またはその他のOneWireデバイス);
-DS1307をご覧ください。
-ハードウェアコンソール(TTLレベル、115200、N、1);
-ピエゾエミッター(ツイーター、コネクター);
-ステータスモジュール(プラグイン);
モジュールのタイプ:ダイオードが「隣人」を照らさないように、ミニウィンドウを作成するとよいでしょう。
非表示のテキスト

スクリーンコントロールプロセッサは、電力を追加せずに外部インジケータ(時間、時計のみ)を接続するための追加のコネクタを取得しました-PSUから直接取得します。

コードはまだ完全には組み立てられていません。 ハードウェアに従事(現在-指標:
非表示のテキスト

ダイナミック表示、トランジスタ上の行および列ドライバー、各行のデューティサイクル8。 ボードのスキームとモデルは後日なります。

FAT:部分ベース-「 www.roland-riegel.de 」( ライブラリページ )からのライブラリの使用。 自分で書きたいので、GPLの下で配布されているファイルを例として使用します。
奇跡的に、SDカードからの読み取り/書き込み/ SDカードへの書き込み機能が機能しました。 初期化は正常で、カードは検出されますが、読み取り時にゼロが返されます。 セクターの読み取り/書き込みを要求すると、奇妙な松葉杖が現れました-絶対アドレスに定数を追加する必要があります。 通常のカードの場合、式はCalculatedAddress =(Required_Sector + 249)* 512です。SDHCの場合、2048を追加する必要があります。
非表示のテキスト
uint8_t SPI_SD_READ_SECTOR(uint32_t Sector) { uint16_t i; uint32_t calc_Addr; if (Sector == raw_block_buffered) //        { return R_OK; //  .    ,    . }; SPI_Select_CARD(); if (!(sd_raw_card_type & (1 << SD_RAW_SPEC_SDHC))) //     SDHC -  9   . { // !SDHC calc_Addr = ((Sector+249) << 9); // DaFaq?! But will not work in other case. } else { // SDHC calc_Addr = (Sector+2048); // And one more DAFAQ! }; i = SPI_SD_SendCMD(CMD_READ_SINGLE_BLOCK, calc_Addr); //     if(i) { SPI_UnSelect_CARD(); //   return R_ERR; //  . =( }; while (SPI_SD_Rd_Byte() != 0xFE); //   .    30-40 . for (i=0; i<512; i++) //        (512 ) { raw_block[i] = SPI_SD_Rd_Byte(); }; SPI_SD_Rd_Byte(); // CRC SPI_SD_Rd_Byte(); // CRC (2) // IGNORED T_T /* deaddress card */ SPI_UnSelect_CARD(); //   () SPI_SD_Rd_Byte(); // . raw_block_buffered = Sector; //  ,  . return R_OK; }; 

テスト済みのカード:
Transcend MicroSD 1GB /台湾/(I C1210000 924)
Transcend MicroSD 2GB /台湾/(8281AB 2G 01DS1)
Samsung MicroSDHC 8GB Class 2 /台湾/(C FJCB85PZ T15)
Kingston MicroSCHC 16GBクラス10 /台湾/(TM2I121100200)

気づいたカードの奇妙な動作が再現されます。

読者への質問: SDカードでAVR *を使用する際に同様の経験がありますか?

イーサネットモジュールに問題がありました-モジュール自体は動作しますが、アクティブなPoE電源でネットワークに接続することはできません。 Arduino互換イーサネットモジュールで使用されるトランスのデータシートへの直接リンク -それらでは、4ペアのミッドポイントすべてが75オームの抵抗器によって回路内の共通ポイントにプルアップされます(これらはリニアターミネータであることが論理的です)。 この接続では、2つのオプションしか使用できません-PSUが防御状態になるか、コンセントが切れます。 どちらも不快です。
現在、イーサネットボードを作成しています(実際、購入したArduino-ENC28J60モジュールを新しいボードにやり直しています)。 モジュールは71 * 33mmでした(比較のため、Arduinoのモジュールは55 * 35mmです)。
非表示のテキスト
説明からモジュールまでの典型的なスキーム。

離婚した回路基板(オフィスバスケットにあるいくつかのデバイスの変圧器、M-TEK G24102MKGは非常に貧弱なグーグルです)。

ボードアセンブリ。 トランスが壊れていました。 しかし、なぜなら 破棄されたドナーデバイスでは、最初のペアのみが使用され、そのようにして獲得されました。


ボードは、メッキ層、隣接する層のジャンパーなしで作られています。

最近、OneWireの非同期ライブラリは多かれ少なかれデバッグされています。 完全に終了するまで、インターフェースなどは存在せず、所定のバイト数を読み取ります。 作業を簡単にするために、いくつかのオブジェクトをやり直す必要があります。

Source: https://habr.com/ru/post/J240827/


All Articles