トレンドの問題ぞ

「どこから始めたらよいかわからない堎合は、最初からやり盎しおください。ほずんどの堎合、間違いはありたせん。」


ですから、最初はアマチュア゚レクトロニクスの蚭蚈ずプログラミング「Arduino」ず蚀っおクラスを蟞めるためにを専門ずするサむトの1぀に関するトピックがありたした蚀葉はありたせんが、たくさんの蚀葉がありたす。このようなプロファむルのサむトは、特定のハヌドりェアプラットフォヌムでの特定のラむブラリベビヌ゚レファント、぀たりLiquidDisplayI2Cでしたが、指で指すこずはありたせんの䜎速動䜜専甚でした。 トピックは面癜そうで通垞の読者は速床が私の流行であるこずをすでに理解しおいたした、それに぀いお議論するこずで同様のリ゜ヌスでよくあるこずですがすぐにバナナ投げに倉わり、誰が本圓にクヌルなマッチョで誰が1分が経過し、技術的な偎面がごくわずかな量に倉わったため、この問題の独立した研究が行われ、その間にいく぀かの興味深い状況が明らかにされ、尊敬されおいる人々の泚目を集めたした。



調査䞭の問題を明確にしたす-できるだけ少ないMKレッグを䜿甚しお、パラレルむンタヌフェむスこの堎合は別のデバむスである可胜性がありたすが、むンゞケヌタヌ1602を䜿甚しおデバむスずの盞互䜜甚を確立する必芁がありたす。 0れロレッグを介した盞互䜜甚は実装が䞍十分なアプロヌチのように思えるので、必芁な最小は11レッグずしお認識される必芁がありたす。



このような実装が行われ、WS2181を思い出すだけで十分ですが、情報を゚ンコヌドする合理的に実行可胜な唯䞀の方法は時間操䜜であるため、このアプロヌチの速床は理想からはほど遠いでしょう。 このアプロヌチの実装の成功䟋は数倚くありたすが、特にUSBおよびむヌサネットむンタヌフェむス-高速な単線むンタヌフェむスに泚目するこずができたすが、最小限のコストで比范的簡単にハヌドりェアで䜿甚できたすが、非垞に遅い1ワむダです。



22レッグの䜿甚を開始するず状況が根本的に倉わりたす。これにより、クロック信号ずデヌタを分離した叀兞的なスキヌムを䜿甚できるようになり、倧幅なハヌドりェアコストなしで速床を䞊げるこずができたす。 実際の候補は、送信モヌドのSPIずI2Cです。 残念ながら、実際には最初のピンは2線匏ではなく、特定のデバむスを遞択するために1぀以䞊のピンが緊急に必芁です。たたは、カスケヌドデバむスを䜿甚しお、察応するチャネル垯域幅を枛らす必芁がありたす。 さらに、SPIはハヌドりェアレベルでの配信が保蚌されたチャネルではないため、垞により正確に蚀えば、垞に䟿利ではありたせん。 この点で、2番目の候補者は、組み蟌みのアドレス指定ず送信制埡を持っおいるため、望たしいです。 唯䞀の欠点は、䌝送速床が遅いこずですナニットに察しお高速モヌドで100 kHzたたは400 kHzたたは数十MHzでもが、この䞖界のすべおの費甚を支払う必芁がありたす。 さらに、接続されたデバむスの機胜を考慮するず、パフォヌマンス情報を衚瀺するには、100 kHzでも1秒あたり10キロバむトで十分です9600の速床に盞圓し、24 * 80ディスプレむでかなり高速の画像を衚瀺したす。 䞡方のむンタヌフェむスは、ほがすべおのMKの暙準セットに含たれおいたす。䜕らかの理由でハヌドりェアリ゜ヌスを䜿甚できない堎合、通垞のピンに簡単に実装できたすが、再び速床が䜎䞋するか、プロセッサの負荷が増加したす。 したがっお、I2Cむンタヌフェヌスの遞択は、私たちのタスクにずっお非垞に正圓で合理的であるず考えるこずができたす。



次に、むンタヌフェむスが䞡偎に固定されおいるため、コンバヌタヌチップを遞択するずいう疑問が生じたす。いわゆるI2Cポヌト゚クスパンダヌが必芁です。このチップはNXPによっお提䟛され、PCF8574ず呌ばれたす。 Mxxは手頃な䟡栌であり、垂堎で広く玹介されおおり、そのベヌスに基づいお、デバむスの蚭蚈機胜を考慮しおディスプレむむンタヌフェむスずむンタヌフェむスするボヌドが既に構築されおいるため、この遞択が正圓化され、1぀の機胜がありたすが、それに぀いおは埌で詳しく説明したす。



それたでの間、マむクロサヌキットの遞択に関連する最初の驚きに぀いお䞖界に䌝えたいず思いたす。 実際には、指定された䌚瀟に加えお、TIは同じ名称で同様のmxxを䜜成しおいたす。 さらに、少なくずも3皮類のケヌスDIP16、SO16、SSOP20の脚のレむアりトは、䞡瀟で同䞀です。 すべおが順調であるように芋えたす。2番目のサプラむダを甚意するこずは垞に玠晎らしいこずですが、悪魔は现郚に隠れお泚意を払っおいたす。 たず、NXPチップのドキュメントを芋おみたしょう。すべおが明確に明確に蚘述されおおり、シリアルむンタヌフェむスを操䜜するアルゎリズムは暙準ず完党に䞀臎しおいたす。 1぀の通信セッションのフレヌムワヌクでデヌタを繰り返し蚘録できるこずに泚意しおください。これは埌で非垞に圹立ちたす。 たた、説明の14ペヌゞにも泚意しおください。ここでは、他のタむプの超小型回路この特定の超小型回路には100 kHzの制限がありたすに移行しおパフォヌマンスを改善する方法を瀺したす。 芁玄するず、このような明確で包括的なドキュメントを提䟛しおくれた䌚瀟に感謝したす。



さお、今悲しいこずに぀いお。 TIチップのドキュメントを開き、すべおが方向を倉えたした...実際、フォヌラムでは、亀換頻床を400 kgHz、さらには最倧800 kHzたで䞊げるこずができるず投皿しおいるため、可胜な限り高い亀換レヌトずの混乱を明確にするためにそこに行きたした実際、それは640 kHzでしたが、䜕らかの理由で1 MHzが機胜したせんでした。NXPのドキュメントで最倧呚波数100 kHzが明確に瀺されおおり、技術仕様を超えようずする詊みは垞に䞍承認であるため、 、たあ、そのような 私は習慣です。 したがっお、TIオプションの方が高速になる可胜性があるこずを瀺唆したした。 これはそうではなく、その動䜜も100 kHzの暙準速床でのみ保蚌されおいるこずが刀明したした。これは明確に芏定されおいたす。 さらに、暙準モヌドに加えお、高速モヌドの負荷抵抗の蚈算が存圚するこずに倚少驚きたしたが、明らかにこのセクションは単にI2Cに関連するマむクロ回路のドキュメントをロヌミングしおいるだけであり、このリファレンスセクションは䜕も玄束したせん。 魚やノミに぀いおの冗談を連想させるが、臎呜的ではない。



しかし、その埌、機胜の特城の説明が始たる12ペヌゞに目が行きたした。 そしお、おもしろい定匏化を芋぀けたす。「デヌタバむトには、デバむスによっお発行された確認信号が付随しおいたす。 他のデヌタバむトがマスタヌによっお送信され、確認が続く堎合、それらはデバむスによっお無芖されたす。 デヌタは、合蚈バむト数が受け入れられ、確認された堎合にのみ出力されたす。」-翻蚳に誀りを犯した堎合、それほど倚くはありたせん。 それはやや䞍可解に聞こえたす-合蚈バむト数は䜕バむトになり、マスタヌによっお発行されない堎合はどうなりたすか 幞いなこずに、13ペヌゞには、説明ペヌゞの代わりに1぀の適切な䞀時的な堎所が䜿甚されるため、明確にするためのタむムラむンがありたす。 しかし、この堎合ではありたせん-最初に、埌続のバむトが無芖されないこずは明らかですが、テキストで瀺唆されおいるかのように、少なくずもデバむスによっお確認されたす。 さらに、2番目のバむトのデヌタは出力に明確に関連しおいるこずがわかりたす。これは、2番目のバむトのデヌタが最初のバむトず同じ指定、぀たりP0〜P7を持っおいるためです。 第䞉に、デヌタがパラレルポヌトに出力されるのは2番目のバむトを受信した埌です。これは、前述のように、䜕らかの理由でPではなくBずしお指定されたす。 䞍明な理由により、出力ずずもに、ポヌトAの倀が倉曎されたす。これは、デバむスアドレスの可倉郚分を蚭定するように蚭蚈されおいたす。 サむクルの最埌に蚭定され、デバむスから電源が切断されるたで、明らかにハむレベルのたたである割り蟌み信号に特に満足しおいたす。 そしお今、私たちは質問をしたす-この未知のゎミずは䜕ですか、私が芋たものの他の定矩はありたせんただし、「ゎミ、廃棄物、゜ドミヌ」です。 なぜ2番目のバむトが必芁なのか、どこから来たのか、出力ポヌトが1぀ある堎合、その䞭に䜕があるべきなのか、最初のバむトの5番目のビットが1に等しいのはなぜか、2番目のバむトが送信されない堎合はどうなるのか、その他倚くの興味深い質問がありたす。



私はこれらの質問に答えがなく、掚枬ず掚枬の䞍安定な立堎にあり、評刀の良い䌚瀟が私をそこに連れお行く必芁がある理由を理解しおいたせん。 䞀連の矛盟した発蚀を芋るず、3人のカメたたはアリに぀いおよく知られおいる冗談を思い起こさせたす。 研究所の埌の最初のボスが蚀ったように、私たちはこのシャレヌドを解決しようずしたすが、たったくそうする必芁はありたせん。「あなたが勀務時間䞭に支払われないこずをするずき、あなたは支払われるこずをしたせん」この投皿は勀務時間倖であるため、このような仕事からの泚意散挫を蚱したす。

個人的には私にずっおより魅力的な最初のオプション-実際、マむクロサヌキットはNXPのガヌルフレンドずたったく同じように機胜し、16ビットの兄匟pcf8575からこのデバむスに䞀時的なハックを誀っおブロヌドキャストした曲がったテクニカルラむタヌのために、すべおの混乱が生じたした、さらに、圌女ぞの質問もあり、たったく同じです。 その埌、さたざたな䌁業のデバむスに互換性があり、すべおが正垞です。正しい説明を䜿甚するだけで、間違った説明に぀いおはTIフレンドリヌな「FU」ずしたしょう。



デバむスが䞀時的な出入り口に埓っお動䜜し、説明どおりに動䜜するこずを信じる必芁があるため、それを呌び出すこずができ、出力ポヌトに1バむトを曞き蟌むには2぀を送信する必芁があり、2぀目ぱンドマヌカヌずしお䜿甚されるため、2番目のオプションはより悪いです䌝送。 このような絶劙な゜リュヌションの唯䞀の説明は、前述の16ビットデバむスずの互換性を確保したいずいう願望かもしれたせんが、「Aず蚀っお、アルファベットの残りの文字を蚀う必芁がある」ず蚀うように、24ビットバヌゞョンず104ビットおよび内郚レゞスタヌを備えたデバむスもあるため、すべおの堎合に単䞀のプロトコルを䜜成し、1バむトを曞き蟌むために20個、できれば25個のピヌス​​を転送したす。そのうちの24個は空で、将来のバヌゞョンず互換性があるように蚭蚈されたす。 同時に、テクニカルラむタヌの曲率に関する仮定は䟝然ずしお有効です。なぜなら、8ビットバヌゞョンず16ビットバヌゞョンでの機胜の説明は明らかに異なるためであり、16では理想的ではありたせんがはるかに健党ですが、8では単玔にひどいです。



開発者が疑わしい利益のために非垞に最適な決定を䞋したずいう事実に加えお、このオプションが最初のオプションよりも悪いのはなぜですか぀たり、私は間違いなくそのような決定をしたこずはないでしょうが、おそらくすべおを知っおいるわけではありたせん-同じ指定、同じ目的、同じ脚のレむアりトであり、同時に異なるアルゎリズムに埓っお動䜜したす。 そしお、私はSOが可胜であるこずを知りたせんでした。 玔粋に理論的には、䞡方のバヌゞョンのデバむスで正しく機胜するアルゎリズムを曞くこずができたす。これは奜奇心reader盛な読者のための挔習ずしお残しおおきたすが、束葉杖はarbitrarily意的であっおも生きた脚に取っお代わるこずはありたせん。 この堎合の掚奚事項は、TIのデバむスの存圚を単に忘れお、正しいデバむスず正しい説明を䜿甚するこずです。ちなみに、アリはNXPのみず取匕しおいるずいう事実に基づいお、この掚奚事項はやや遅れおいたす。



TIのドキュメントは、「最初のペヌゞではただスズメの逌ず芋分けが぀かないほど混ざっおおり、すでに忘れられおいたした。これは、孊者の目芚めた考えに興味があるかもしれないこの重芁なオブゞェクトではなかったからです」、ラむブラリ自䜓の分析に進むこずができたす。機胜を加速するために。 最初に、最適化の䞻な方向を決定したす-100、400、640、800、1000 kHzの速床ではデヌタのバむトを送信するために少なくずも9ビット間隔が必芁であるため、機胜党䜓の時間を決定するのは送信時間です。 1バむトパケットの送信䞭にむンタヌフェむス呚波数が1 MHzであっおも、8 MHzの呚波数で8 * 9 = 72のプロセッサ呜什を実行できるため、むンタヌフェむスを介しお送信されるバむト数の枛少に぀ながるプログラムのほずんどすべおの耇雑さが正圓化されたす。 同様の立堎を明確にする考慮事項が1぀ありたすが、それに぀いおは埌で詳しく説明したす。



゜ヌステキストを開き、倚くのシェル関数を実行したすプログラマの絊料は関数シグネチャの数に䟝存するようです。 たずえば、public init関数はprivate関数init_privateを呌び出しそれ以倖は䜕もしたせん、public beginメ゜ッドを呌び出したす-なぜこれを行っおいるのかはわかりたせんが、おそらくすべおを知っおいるわけではありたせん。 デヌタは曞き蟌み関数によっお曞き蟌たれ、コマンドはコマンドです。コマンドはsendメ゜ッドのラッパヌであり、write4bits関数を呌び出し、expanderWriteおよびpulseEnableを呌び出し、expanderWriteを䜿甚し、printIIcを呌び出したす。これは、TwoWireクラスのwriteメ゜ッドの代わりにむンタヌフェむス自䜓ず連動したすその゜ヌスコヌドはWireファむルにありたすこれは明らかな゜リュヌションです。 expanderWrite関数を慎重に怜蚎し、期埅どおりの結果を芋぀けたす-デヌタの各バむトは、独自の開始ビット、アドレス指定、および停止ビットのコマンドずずもに送信されたす。぀たり、チャネルの1 + 9 + 9 + 1 = 20ビットが8ビットの情報の送信に䜿甚されたすレベル、明らかに最適な゜リュヌションではありたせん。



ずころで、プログラミングスタむルの1぀の考慮事項-C蚀語を習埗したずき、ファッションは叀いスタむル関数シグネチャなしず呌ばれるものでした。このスタむルはFortranから発展したものであり、このアプロヌチには明確な利点がありたす。それ以倖の堎合、コヌドは単にコンパむルされなかったため、関数を耇雑床の高い順に䞊べるこずを匷制されたした。 ファむルの最埌に、メむン関数を芋぀けるのが自然であったため、このアプロヌチは論理的に完了したした。 そのため、実装を怜蚎する際、これで䜿甚される関数のコヌドを探すのが自然でした。テキストの䞊䜍にあり、最䞊郚にラむブラリの有効性を決定する基本関数この堎合は出力関数がありたした。 眲名の䜿甚をたったく拒吊するこずは匷くお勧めしたせんが、このような呌び出しが有効になるこずはほずんどありたせんが、眲名があったずしおも、誰も関数の実装を任意の順序で配眮するこずを匷制するこずはありたせん。 および問題のラむブラリで䜜成されたす。



そしお、Arduino環境の関数シグネチャに関連するもう1぀の興味深い状況です。 関数プロトタむプの䜜成を忘れるず、この゚ラヌが明らかにない行の゚ラヌに぀いお、コンパむラヌから非垞に奇劙なメッセヌゞが衚瀺されるリスクがありたす。 実際には、環境には関数のプロトタむプが必芁であり、指定しなかった堎合、プリプロセッサぱラヌメッセヌゞを衚瀺せず単玔すぎおこれはArduinoスタむルではありたせん、眲名自䜓を生成し、プログラムの最初に配眮されたす゚ラヌメッセヌゞの行番号をシフトしたす。 関数がカスタムタむプを䜿甚しおいる堎合、シグネチャは定矩される前に配眮されるため、゚ラヌメッセヌゞは保蚌されたす。 非垞に䟿利ですよね、昔のゞョヌクを思い出したす。「正しいこず、間違っおいるこず、海軍のやり方-䜕かをするには3぀の方法がありたす。」



転送の実装に戻りたしょう-デヌタの各バむトにアドレスバむトが付随しないずいう事実により、20/9 = 2でパフォヌマンスを改善する方法がすでにありたす。もちろん、この芋積もりは䞊からであり、正確な蚈算は6 * 20 /11 + 6 * 9= 120/65〜1.8倍ですが、これはほんの始たりです。



続行するには、デバむスに接続されおいるむンタヌフェむスの説明に目を向け、画面ずのむンタヌフェむスを怜蚎する必芁がありたす。 これには4たたは8ビットのデヌタこの堎合は4を含めるこずができ、トラッキング信号を亀換できたす。その䞭で、動䜜確認ストロヌブであるEN信号が重芁です。 4ビットのデヌタのみが䜿甚されるため、情報バむトの送信には2぀のニブルの転送が必芁になりたすが、これは少なくずも8 + 1 = 9の出力ポヌトを必芁ずするため、容量を増やすこずで削陀できたすが、このチップでは䞍芁です、しかしそれに぀いおは埌で。 ストロボを圢成する必芁性を考慮するために、問題のラむブラリが最初にセットアップされ、次に蚘録パルスのリヌディング゚ッゞずトレヌリング゚ッゞが安定したデヌタで圢成されるため、むンタヌフェむスを介した3バむトの転送が必芁です。 䞀方、ディスプレむむンタヌフェヌスでドキュメントを泚意深く読むず、リヌディング゚ッゞでのみ安定したデヌタが必芁であるこずがわかりたす。したがっお、トレヌリング゚ッゞの圢成を次のデヌタの圢成ず組み合わせるこずができたす。念頭に眮いおおくべき唯䞀の状況はリセットするこずですセッションの終わりにストロボは䜎くなりたすが、これは必須ではありたせん。



私の意芋では、明らかな倉曎の提案の結果、端末デバむスに送信される1バむトあたりの必芁な送信時間が120ビット間隔から1 + 9 + 4 * 9 ++ 9+ 1 = 4756ビット間隔のストロヌブのリセットの堎合、速床の合蚈増加は2倍以䞊になりたす。問題のラむブラリの䜜成者がこれを行わなかった理由-おそらく、以前の゜リュヌションをディスプレむに盎接接続しお䜿甚し、倉化する条件に適応させる必芁はないず考えたが、無駄だったためです。



それにもかかわらず、゜ヌスコヌドにあるように、むンタラクションが実装された堎合でも、転送レヌトは100/120 = 0.83キロバむト/秒送信バむトあたり1.2ミリ秒である必芁があり、これはデヌタ転送レヌトず非垞に匹敵するずいう事実に泚目したすシリアルポヌト9.600 / 11 = 0.87キロバむト/秒で、画面を再描画するのに十分なはずです16 * 2 = 32文字。䞀方、元の投皿によるず、バむト転送時間は1.5ミリ秒であり、これは予想よりもやや25短くなっおいたす。したがっお、研究を継続する必芁がありたす。



そしお確かに、PulseEnable機胜を再床怜蚎し、1ÎŒsのアクティブゲヌトレベルの圢成埌、および50ÎŒsでのゲヌトの陀去埌、PulseEnable機胜の遅延を芋぀けたす。これらの遅延の必芁性は、プラグむンディスプレむの技術芁件によっお説明でき、パラレルむンタヌフェむスを介した盎接の盞互䜜甚を備えたラむブラリでは非垞に適切でしたが、この特定のケヌスでは、次のコマンドがアドレス指定フェヌズで開始されるため、少なくずも最初の遅延は完党に冗長です少なくずも1 + 9 = 10クロックサむクル、したがっお、達成できない1 MHzの呚波数で10 * 1 = 10ÎŒs。この間、ディスプレむに䟛絊される信号の倉化は保蚌されたせん。しかし、2番目の遅延では、もう少し耇雑です。100kHzの呚波数では、アドレスバむトによる保蚌遅延は10 * 10 = 100ÎŒsです。しかし、別のより高速なむンタヌフェむス゚クステンダヌで非垞に可胜性のある400 kHzの呚波数では、2.5 * 10 = 25ÎŒsだけが問題になりたすが、入力デヌタを倉曎し、画面入力でストロボを削陀するこずは、別のむンタヌフェヌスバむトず50マむクロ秒が保蚌されおいたす。これは、䞡方の遅延を削陀できるこずを意味し、各デヌタバむトの転送で2 * 50 = 100ÎŒs節玄できたす。各デヌタバむトの転送で2 * 50 = 100ÎŒs節玄できたす。各デヌタバむトの転送で2 * 50 = 100ÎŒs節玄できたす。



぀たり、1バむトのデヌタに必芁な掚定転送時間2ニブル* 3ステヌゞ= 6送信バむト*1 + 9 + 9 + 1クロックサむクル= 120クロックサむクル* 10マむクロ秒/クロックサむクル= 1200マむクロ秒+ 100マむクロ秒= 1300マむクロ秒のラむブラリバヌゞョンがありたした、これは芳枬された1,500マむクロ秒ずよく盞関し、必芁な時間のバヌゞョンになりたした2ニブル* 2ステヌゞ= 4送信バむト* 9クロック/バむト= 36クロック+1 + 9 + 1クロック= 47クロック* 10マむクロ秒/クロック= 470マむクロ秒2.6倍高速。



理論的な郚分は終了し゜ヌステキストを分析するこずでできるこずはすべお完了したした、私たちの研究を実践でテストするずきですある皋床、マルクス䞻矩者であり、「実践は真実の基準」であるこずに同意したすが、このフレヌズは数孊には適甚されたせんが、プログラミングに非垞に適甚可胜です。゜ヌスず倉曎されたコヌドをArduinoボヌドにロヌドし、オシロスコヌプを䜿甚しお、盞互䜜甚信号の結果の時間パラメヌタヌを確認したす最近、私が芁求しおいる䌚瀟からのマむクロ回路のドキュメントで、「䞀時ACパラメヌタヌ」の魅力的な定矩が提案されたした。同様の甚語を採甚するためにやや時代遅れです。



私は元のボヌドを持っおいないので、解決策を探す必芁があり、完党に魅力的なオンラむンシミュレヌションプログラムcircuit.ioを䜿甚するようになりたした。Arduinoボヌドを持っおいる人にも匷くお勧めしたす。このプログラムは、ラむブボヌドでのデバッグよりも優れおいたす。このプログラムは、デバッグ環境でブレヌクポむントを蚭定し、ステップバむステップデバッグを実行し、プログラム倉数の倀を衚瀺するこずさえできるため、゜ヌスコヌドからファヌムりェアをはるかに高速化するためです。元のArduino環境で働いおいた人は、私がここで賞賛するこずを理解するでしょう、残りは戞惑いながら肩をすくめるこずができたす。もちろん、私はこのプログラム特に、その構成におけるオシロスコヌプに぀いおも䞻匵しおいたすが、この蚘事ではたったく異なるものの欠点を説明するこずに専念しおいたす。



そしお、ここで私たちは理解できない埅ち䌏せに盎面しおいたす私たちの研究の最初の方法ではありたせんが、その予期しないために二重に䞍快です、぀たり、修正されたモゞュヌルのパフォヌマンスは、メッセヌゞフラグメント間に遅延があるため、぀たり、開始ビットの埌、コマンドバむトの埌、および各デヌタバむトの埌、玄40マむクロ秒、合蚈送信時間はほが40増加したす。元のプログラムの゚ミュレヌタヌで実行するず、同じ远加の遅延が衚瀺されたす。



私たちは䜕が起こっおいるのかを扱い始めたす。たず、TWIむンタヌフェヌスに関連する郚分で、ボヌドで䜿甚されるMK、すなわちATMega32のドキュメントを調べたす。私はすぐに、䞀般的に私はドキュメンテヌションに぀いお苊情を蚀わない、すべおが明確に、明確に、そしお詳现に蚘述され、他の人が持っおいるようなものではないず蚀う必芁がありたす。ただし、それでも、衚119の290ペヌゞで、むンタヌフェむスの動的特性を決定するずきに、やや奇劙な珟象が芋られたす。぀たり、スタヌトパルスの圢成䞭に信号を確立および保持する時間の最小倀のみが瀺され、最倧倀にダッシュが蚭定されたす。この芁件の組み合わせは、入力信号を蚘述する際に完党に自然ですが、この堎合には出力ドラむバヌもあり、最倧倀を未定矩のたたにするこずはやや奇劙です。たた、最小敎定時間の芁件は、100 kHzを超えないむンタヌフェヌス呚波数4ÎŒs、これはクロック間隔の半分の持続時間ずよく盞関したす、および100 kHzを超える呚波数0.6ÎŒs、明らかにマゞックナンバヌず䞀般的な呚波数を衚したすに察しお個別に蚭定されたす独立。時間特性の同様の芁件を満たすI2Cむンタヌフェヌス略語TWIに誀解されたふりをする぀もりはありたせんを蚭蚈するタスクが䞎えられた堎合、2぀の質問に非垞に困惑したす。たさにそれを行う方法、タスクは重芁です。100 kHz0.6ÎŒs。これは明らかに魔法の数字であり、呚波数にたったく䟝存したせんを超えたす。時間特性の同様の芁件を満たすI2Cむンタヌフェヌス略語TWIに誀解されたふりをする぀もりはありたせんを蚭蚈するタスクが䞎えられた堎合、2぀の質問に非垞に困惑したす。たさにそれを行う方法、タスクは重芁です。100 kHz0.6ÎŒs。これは明らかに魔法の数字であり、呚波数にたったく䟝存したせんを超えたす。時間特性の同様の芁件を満たすI2Cむンタヌフェヌス略語TWIに誀解されたふりをする぀もりはありたせんを蚭蚈するタスクが䞎えられた堎合、2぀の質問に非垞に困惑したす。たさにそれを行う方法、タスクは重芁です。たさにそれを行う方法、タスクは重芁です。たさにそれを行う方法、タスクは重芁です。



文曞は読むこずができなかったので、明らかに䜕も教えおくれたせんでした。さらに実隓する必芁がありたす。私は、次のコマンドを受信する準備ができおいるずいうフラグが実際の準備ず比范しお遅れお発生するずいう仮説を立おおいたすが、小さなテストプログラムはそれを反論したす-準備調査による発行は、識別可胜な倀の远加遅延なしで実行されたす。



次に、新しい仮説が立おられたす-割り蟌みフラグは、むンタヌフェむスの実際の準備状態に比べお遅れお発生するか、割り蟌み凊理にかなりの時間がかかりたす。確認するために、割り蟌みの䌝達関数の完了を埅぀プロセスで、远加のピンにむンタヌフェむス準備フラグを衚瀺し、割り蟌みでこのピンをすぐにリセットするテストプログラムを䜜成しおいたす。このピンには40マむクロ秒の持続時間のパルスが衚瀺されたすが、パルスはたったく衚瀺されず、デヌタ送信プロセスでは玔粋にれロになりたす。䞀般的に、これは割り蟌みが発生時に凊理される堎合のはずですが、遅延はどこにありたすか



そしお突然、遅延がなくなり、開始ビットの終わりにコマンドのバむトがすぐに送信され、すべおがうたくいくこずがわかりたした。远加のピンぞのレディネスビットのブロヌドキャストを削陀するず、遅延が再び発生したす。転送の完了を埅機するプロセスで、むンタヌフェむス状態レゞスタを読み取るために遅延が完党に消倱した堎合、他のむンタヌフェむスレゞスタぞのアクセスは無効になりたす。非垞に理解しにくい珟象ですが、さたざたな実隓により、これが実際にそうであるこずが確認されおいたす。原則ずしお、このような割り蟌みフラグの動䜜を保蚌する回路を蚭蚈するこずは難しくありたせんが、そのような運動の意味は謎のたたです。



個人的には、この事実に぀いお2぀の可胜な説明がありたす。最初のオプションは、゚ミュレヌションプログラムに゚ラヌがあり、むンタヌフェむスの同様の動䜜に぀ながるこずです。そうであれば、実際の超小型回路およびこの堎合のように、そのフラグメントのプログラムでの適切な繰り返しは非垞に困難な䜜業であり、原則ずしお解決できないこずが倚いため、この゚ラヌを蚱す準備ができおいたす。そうでなければ、プロトタむプボヌドを攟棄しおいたした。しかし、個人的には、特定の高玚蚀語で動䜜蚘述が䜿甚されおいない限り、モデルプログラムのテキストにこのような間違いが簡単に発生するこずはないので、このバヌゞョンには向いおいたせんが、そのようなものを誀っお䜜成するこずも困難です



䞊蚘の考慮事項により、2番目の仮説を立おるこずができたす。プログラムはデバむスを適切に説明し、実際にそのように機胜したす。この堎合、可胜性のある゚ラヌがマむクロ回路の腞に入り、さらに倚くの可胜性があり、欠陥のある機胜の説明に加えお、この結果に぀ながる可胜性のある埮劙な物理的効果が珟れたす。この堎合、そのような欠陥がモデルのレベルでどのように発芋され調査されたか、および゚ラヌのリストに蚘茉されおいない理由が䞍明になりたす。



さお、3番目の仮説が残っおいたす-この動䜜は、シミュレヌションプログラムの開発者が䜿甚した内郚ドキュメントで蚭蚈および適切に説明されおいたす。その埌、すべおが適切に配眮され、2぀の質問だけが残りたす-これが行われる理由そのような実装の利点は䜕か、その欠点は明らかです-実際のパフォヌマンスの䜎䞋、およびこの機胜が倖郚ドキュメントに反映されない理由



最初の仮説の正しさを刀断するには、元のたたは修正されたプログラムを実際のボヌドで実行しお遅延オシロスコヌプを芋るだけで十分です。モデルでは、効果はUnoおよびMicroボヌドバヌゞョンで発生したした。すでに前に述べたように、私はそのようなボヌドを持っおいないので、奜奇心itive盛な読者にフィヌルド実隓を任せたす。コメントで結果を共有したいず思いたす。 2番目たたは3番目の仮説の忠実床を刀断するには、個人的に明らかに誀解のため提䟛されなかった䌚瀟の内郚ドキュメントぞのアクセスが必芁でした。 TWIに関する利甚可胜な私の刀断で゚ラヌの説明は、スレヌブモヌドで最初のビットを出力するのが速すぎるずいう゚ラヌがあり、デヌタレゞスタぞの曞き蟌みず送信の開始の間に遅延を導入する必芁があるず䞻匵しおいたす。ハヌドりェアのこのバグを修正しようずしお、芳枬された遅延を導入したした。



さらに、この特定のラむブラリヌおよび䞀般的な可倉動䜜を備えたラむブラリヌの正しい実装に぀いおさらに怜蚎する必芁がありたす。私はこのパヌトを曞き始めたしたが、金曜日の読曞には少なすぎたため、埌で説明したす。



結論ずしお、投皿自䜓がトレンドに関するものであり、脅嚁にさらされおいるずいうこずです。だから



-最初どのマむクロチップが蚭蚈されおいるかが明確ではないこれが虚停の声明であるこずを願う、

2それらの蚘述が曞かれおいるこずは理解できないそしおこれは曖昧ではない、

3番目読者ず垞識に察しお明癜な軜daを持぀ラむブラリは理解できない、

4番目マむクロ回路の説明を理解できず、ラむブラリの䞊にどのプログラムが蚘述されおいるかが明確ではない、

5MKでむンタヌフェヌスを実装する方法が䞍明、

6MK のドキュメントでこれらのむンタヌフェヌスがどのように蚘茉されおいるか䞍明

...

-xx-11Habr゚ディタヌのタグをもう䞀床倉曎しお、珟代の電子機噚のmodernに釘を打ち蟌む理由は明らかではありたせん。

私だけが荒廃ずカオスの䞭で癜い銬に啓発の光を運ぶ敵軍。



もちろん、「倪陜が明るくなり、草が固たる前に」゚ルニズムを脇に眮いたずしおも、20幎前に実斜しなければならなかったであろう調査を芚えおいたせんが、本圓に悪化したのでしょうか



All Articles