コンピューターなしでマイクロコントローラーをプログラムできますか?


16

かなりシンプルで小さなマイクロコントローラーがあり、インターフェース、コンピューター、デバッガー、コンパイラー、またはアセンブラーがなかったとします。アセンブリでコードを記述し、それを(手動で)マシンコードに変換してから、電圧源を使用して適切なピンに電力を供給できますか?

私はあなたが本当にしてI / Oとメモリを適切必要があります理解して行うものを、しかし、あなたがそう傾いて時間を過ごしていた場合、あなたはこれを行うだろうか?歴史的に、最初にコンピュータ/コンパイラ/アセンブラがなかったとき、これはどのように行われたと思いますか?外部のリソースに自由にリンクしてください。ありがとう!:)


3
Altair 1をご覧ください。フロントパネルスイッチと手動の機械プログラミングが唯一の使用方法でした。
pjc50

@ pj50彼はマイクロプロセッサではなく、マイクロコントローラについて尋ねました。マイクロコントローラーは、何らかのインターフェイスを使用しないとアクセスできないフラッシュでコードを実行します。
-tcrosley

プログラムされたユニットはいくつ必要ですか?多くのメーカーは、コードで事前にプログラムされたマイクロを提供します。ただし、フルリール未満が必要な場合、これは実用的ではありません。
オレグマズロフ

2
70年代に戻ったら、プログラムを入力できるようにトグルスイッチとライトのパネルを作成していました。私は初期のマイクロコントローラーのいずれかを使用したことはありませんが、いくつかの異なるマイクロプロセッサーを使用しました。それがデフォルトでの方法です。また、初期のマイクロコントローラとマイクロプロセッサの間には、I / O機能とプログラムメモリの構成方法の詳細以外に基本的な違いはありませんでした。
ホットリック

このストーリーのソースが見つからないため、これをコメントとして残します。デジタルロジックの理解のみに基づいたサイエンスフェアのために、トランジスタから独自のコンピューター(実際にはCPUのみ)を設計および構築した子供の話を思い出します。彼は当時コンピューターを買う余裕がなく、トグルスイッチを介して作成をプログラムしていました(ただのボタンの時計は覚えていると思います)。審査員の一人はとても感銘を受けて、子供にコンピューターを買った。
スリーブマン

回答:


37

アセンブリでコードを記述し、それを(手動で)マシンコードに変換し、

はい!
必要に応じて、コードを「頭の外で」バイナリで書くことができます。
長い(長い長い)前に、これが私が(そして)マイクロプロセッサーを使い始めた方法です。
私と友人は、アセンブリ言語でコードを記述し、それをマシンコードに手動でコンパイルし(練習後に「検査」できる)、さまざまな手段でプロセッサに入力します。構築したシステムでは、バイナリ(オン)スイッチでアドレスを設定するか、プロセッサの自動インクリメント機能を使用し、バイナリスイッチで8データビットを入力し、「クロック」スイッチを押してデータをメモリに入力します。

同等の機能は、シリアルSPIプログラミングを使用した最新のマイクロコントローラーでさらに少ないスイッチで実現できます-以下を参照してください。

...そして、電圧源を使用して適切なピンに電力を供給しますか?

はい!
しかし、それは非常に遅いでしょう!
多くの最新のマイクロコントローラでは、プログラミングに「SPI」インターフェースを使用できます。
これは通常、入力および出力データラインと「クロック」ラインで構成され、通常はリセットラインで構成されます。

多くのプロセッサでは、SPIクロックとデータを「静的」にすることができます。つまり、ビット間でデータをセットアップするのにかかる時間に制限はありません。手動で操作されるスイッチで駆動されるデータラインとクロックラインを使用して、このようなプロセッサをプログラムできます。クロックラインは「バウンスフリー」である必要があります-操作ごとに1回の遷移でハイまたはローに設定できる必要があるため、最小インターフェイスにシュミットトリガーゲートを含める必要があります。RC遅延とプッシュボタンスイッチだけで「回避」できますが、シュミットトリガー入力の方が安全です。データラインの状態はクロックエッジでのみ読み取られるため、データラインはバウンスフリーである必要はありません。

いくつかのインターフェースはインタラクティブです-データはプログラミング中にプロセッサーによって出力されます(例:データ出力= MISO = AVRプロセッサーのマスター入力シリアル出力)。これを読むには、たとえばLEDと抵抗器を追加する必要があります(駆動能力が本当に低い場合は、バッファまたはトランジスタだけを追加する必要があります)。


MC6800:

セミフェードメモリから(ほぼ40年!)

LDI A、$ 7F ...... 86 7F ...... 1000 0110 0111 1111
STA、$ 1234 ...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X、$ 2734 .. 。CE 27 34 ... 1100 1110 0010 0111 0011 0100
...


1
静的デザインに言及するための+1。クロックがDCに到達できるようにします。
ペリシンチオン

2
これは思い出を呼び戻します。実際に学校でボタンを使用してZ80コードを入力することを学びました。それは1990年頃でした。私の先生は、難しい方法でプログラミングを学ぶことは価値があると主張しました。25年後、私は同意しなければなりません。
ニルス・ピペンブリンク

@NilsPipenbrinck現時点では、Cコードを記述し、Fortranで最初に学んだレッスンを適用しています:-)!!! -そして、組み込みシステムとアセンブリ言語で研ぎ澄まされました。これらのレッスンは、そうでなければ許可されているが望ましくない、または有用ではないことを行う可能性のある変数およびポートアクセスにメンタルタイピングを適用することにより、エラーの可能性を減らします。アセンブラーは究極の鋭い武器です-ハンドガードのない両刃の剣です。その後、「より高いレベル」の言語はそれほどシャープではないように見えます:-)。Z80ボタンエントリは、学習体験に対して同様に機能します;-)。
ラッセルマクマホン

@Erburethありがとう:-)。はい1111のffffは明らかな脳の衰退でした。...「アイデアを得る」だけでしたが、ラインを完成させても害はありません。
ラッセルマクマホン

はい、私はアイデアを得ましたが、私がそれにいたとき... :)
エルブレスは、Reinstate Monica

10

もともと、プログラム可能なマシンでは、プログラムは手動で紙テープまたはカードにパンチされていました。後で彼らは一種のタイプライターを使ってパンチングを行いましたが、それでもコンピューターは(それまでに知られるようになっていた)自分の紙テープをパンチできました。

文字通り、カードを持ってそこに座って手動で穴を開けていました。

ここに画像の説明を入力してください

各列は、タスクを実行するためにCPUのステートマシンによって解釈される命令またはデータのビットです。

もちろん、それがすべてフラッシュメモリである場合は、はい、最初にそこにデータを取得するには、通常、それを行うためにコンピューターが必要です。しかし、それは厳密に100%真実ではありません。

結局のところ、コンピューターとハードウェアプログラマーは、適切なタイミングでIOピンの状態を設定する以外に何をするのでしょうか?したがって、あなたが本当に自虐的であれば、実行のためにフラッシュメモリにいくつかの命令をインストールするための正しい方法で正しい命令をマイクロコントローラのプログラミングピンに送信できるシステムを構築できます。

たくさんのスイッチ、いくつかのシフトレジスタ、クロックジェネレータなどが関係しているかもしれません。

大学では、Z80ベースの新しいプログラミングシステムがありました。Z80を備えたスーツケースのサイズのユニット、少量のRAM、多数の7セグメントLEDディスプレイ、大きなスイッチの列がありました。スイッチを使用して命令をRAMに手動でロードすることによりプログラムします。


Z80は有効な例ではありません。彼はマイクロプロセッサではなくマイクロコントローラについて尋ねました。マイクロコントローラーは、何らかのインターフェイスを使用しないとアクセスできないフラッシュでコードを実行します。少なくともあなたは答えのどこかでフラッシュとプログラミングインターフェースについて言及しました。
tcrosley

@tcrosley Z80は、Visual Studioがすべてのスキルを奪う前にコンピューターがどのようにプログラムされていたのかを示す逸話的な目的のためのものです。
マジェンコ

私はそのために構築されたマシンを知りませんが、カードのシーケンスに保存されたコードでマイクロコントローラーをプログラムするためにカードリーダーにいくつかの回路を追加することは難しくありません。ただし、紙テープの方が実用的かもしれません。
supercat

2
私はそれらに手動で穴を開けていました。極端な状況でのみ実行可能です(午後10時、明日期限の論文、1つのメインフレームの実行が残り、パンチルームの女性がその日に残されました)。フロントパネルから同じメインフレームをプログラミングする(数年後)のは、実際には高速でした。
オレグマズロフ

1
@Majenko-Babbageのマシンの再構築を見てきましたが、それは間違いなく電話機器から作られたものではありません。確かに騒々しい。
ホットリックス

7

あなたは「小さなマイクロコントローラーで、インターフェースもコンピューターもデバッガーもコンパイラーもアセンブラーもない」と言っていました。コンピューター、デバッガー、コンパイラー、またはアセンブラーがなくてもうまくいくことができますが、プログラムをロードするには、マイクロコントローラーに接続するための何らかのインターフェースが必要です。

まず、Cなどの高水準言語を忘れてください。次に、アセンブリ言語でプログラムを記述するのが最も簡単な方法ですが、アセンブラを使用して機械語に変換しないでください。代わりに、プログラミングマニュアルで各アセンブリ命令を検索し、同等の16進コードを見つけて書き留めてください。

独自の変数を割り当てる必要があるため、命令のオペランド部分に適切なアドレスを入力できます。スタックとヒープの使用も忘れてください。作業が多すぎます。完了すると、マイクロコントローラのフラッシュメモリに直接ロードできるマシンプログラムが作成されます。リンカも不要です。

ほとんどすべてのマイクロコントローラーに外部アドレスとデータバスがないため(I / Oポートと周辺機器に必要なピンが多すぎるため)、実質的にすべてのマイクロコントローラーは次のような特別なインターフェイスを介してプログラムされます。

ここに画像の説明を入力してください

通常、左側の「プログラマー」はPCに接続され、コンパイラー/リンカーによって生成されたマシンファイルがダウンロードされます。

ただし、プログラマが以下のようなキーボードを持っている場合:

ここに画像の説明を入力してください

次に、手動で生成されたプログラムの16進コードをプログラマに直接入力し、コンパイラ、リンカー、またはPCを必要とせずにデバイスをプログラムできます。(キーボードは、16進ファイルの編集およびチェックサムの生成にも使用されます。)

このようなキーボードを持っているプログラマはごくわずかです。おそらく数千ドルかかるので、これは愛好家には適していません。

この特定のプログラマーは、ボードに配置する前にパーツをプログラムします。インターフェイスとソケットは、いくつかのPICおよびAtmel AVRなどで使用できます。


5
あなたは他のさまざまな答えにコメントしましたが、それらの無効性については、おそらくあなたがコメントしたほとんどの答えよりも有効性が低くなります。彼は「...インターフェースなし、コンピューターなし...」と言った。少なくとも、ソリューションは「コンピューター」です。「インターフェイスなし」とは意味がありません。しかし、SPIインターフェースでバウンスを除去したスイッチを使用すると、おそらく解決策があります。
ラッセルマクマホン

1
@RussellMcMahonプログラマーにコンピューターがあると言うのは誰ですか?それらの多くは、FPGA(ディスクリートロジックで置き換えることができます)を使用します。ブートローダーがない場合、SPIインターフェイスを介してマイクロコントローラーをどのようにプログラムしますか?もしそうなら、どのようにブートローダーをプログラムしますか?
tcrosley

3
多くの(ほとんどの場合)マイクロコントローラーの本質的にブートローダーのない標準の低電圧シリアルプログラミングインターフェイスは、本質的にシリアルインターフェイスで数行を使用します。相互作用がある場合、MOSI MCLK(Vdd Gnd Reset)は完全な最小MISOです。3つのスイッチ(そのうちの1つのみ)がバウンスフリーである必要があります)とMISOおよび「あなたはオフです」のLED 非常に非常にゆっくり。FPGAが「コンピューター」としてカウントされない場合、多くのプロセッサベースのシステムを実装しても問題ありません。「組み合わせ論理なし」が彼の要求の精神を満たすと思う。
ラッセルマクマホン

私は言わなければならない、花火は電子機器で作業するときに使用する間違った背景です:)
匿名ペンギン

6

実際問題として、JTAGピンを手動で切り替えるようなことは、非常にエラーが発生しやすくなります。適切なサイズのプログラムを入力するには、数千回のトグルが必要です。しかし、理論的には可能です。

事前にマイクロコントローラーを準備する(または、ブートROMを書き込む)ことが許可されている場合、初期のメインフレームで使用されている外部トグルスイッチのようなものを簡単に実装できます。外部ロジックを許可する場合は、16進キーパッドを使用して速度を上げることもできます。

最後に、最近ではそれほど一般的ではありませんが、カスタムコードを含むROMベースのマイクロコントローラーを購入できます。前もっていくらかお金を提供し、一定の量を保証する必要がありますが、大量生産でお金を節約するために顧客がそれを行うのを見てきました。その場合、マイクロコントローラーをプログラムするのに外部信号はまったく必要ありません。コードは、チップの物理レイアウトに組み込まれます。

もちろん、外部メモリインターフェイスからコードを実行するマイクロコントローラーを使用することもできますが、それは不正行為です。:-)


2
実際、1976/77年にImsai 8800「クローン」を作成し、トグルスイッチを使用してバイナリで定期的にプログラムしました。ASR-33テレタイプからペーパーテープを読み取り、キーボードモニターに表示する、約40または60奇数バイトのブートロードシーケンスがありました(これは一生前のことです!)。テレタイプが機能する前に、8085(私の「クローン」とImsaiの違いの1つ)を厳密にバイナリでプログラムしていました。しかし、それは並行して、スイッチの列でした。私は電信キーを使用してシリアルエンコードを実行しましたが、Adamが述べたように、それは本当にエラーを起こしやすいです。
user6297

3

絶対に。実際、私が取った最初のマイクロプロセッサコース(87年頃)では、Motorola 68000ボードを使用しました。アセンブリ内のコードを作成し、アセンブリのヘックスを検索し、そのヘックスを端末に入力してボードをプログラムします。編集した場合は、挿入するコードが置換するコードよりも短いことを確認し、残りをNOPでバッファリングする必要がありました。coDEが長い場合は、すべてを再入力する必要があります!多くのNOPを追加することを学びました。


68000はマイクロコントローラーではありませんでした。彼はマイクロプロセッサではなくマイクロコントローラについて尋ねました。マイクロコントローラーは、何らかのインターフェイスを使用しないとアクセスできないフラッシュでコードを実行します。
tcrosley

5
@tcrosleyそれは厳密には真実ではありません。独自のROMやフラッシュがないため、外部ROMを必要とするマイクロコントローラーがあります。それらをマイクロコントローラーにするのは、RAMやROMではなく、周辺機器(IOポート、UARTなど)に組み込まれています。
マジェンコ

ごくわずかですが、先ほど述べたI / Oペリフェラルのため、外部アドレスとデータバスを持っているのは、多くのピンを2つ必要とするためです。
tcrosley

2

絶対に。実際の命令のバイナリ形式を作成したら(適切に指定された命令セットに対して簡単に実行できます)、プログラミングプロトコルを実装するだけです。

たとえば、AVR Tiny 4のような小さなものを取り上げます。セクション14では、プロトコルと物理層を含むプログラミングインターフェイスについて詳しく説明します。比較的単純で、1つまたは0を送信/受信するには、いくつかのボタンとプルアップ/ダウン抵抗器が必要です。意欲的な場合は、LEDを追加して出力を読み戻します。

最後に残っている問題は、AVR Tiny 4(セクション16)で幸運にも*十分な速さでそれを行うことができる場合、プログラミングに関しては最低頻度がありません。

*注意:データシートに指定されている限り。これは実際には異なる場合があります... mHzのクロック速度でプログラミングしようとした人はいないでしょう。

必要に応じてプロセスを自由に自動化してください。これは、ほとんどのプログラミングデバイスがとにかく行うことです:プロセスを自動化します。


2

プログラムをuCに入力することはどういう意味でも、それは「インターフェース」です。なぜなら、それがインターフェースの意味だからです。手動で切り替える多くのスイッチでさえ、「インターフェース」です。

それで、この質問を「(機械的ではなく)大部分が機械的な)ハードウェアとuCにどのようにインターフェースし、できるだけクールな方法で扱うか」と考えます。

私の答えは、ピアノロールとしてプログラムを入力します。プレーヤーピアノのピアノロール「トラッカーバー」は、基本的に少なくとも65ビット(形式によって異なります)を提供し、紙のミシン目に基づいて個別にオンおよびオフにできます。残りは正確なナイフでの厳しい作業です。しかし、少なくともプログラムは、一度実行すると、(スイッチを手動で切り替える方法とは異なり)(ある程度)永続的に保存されます。


2

コンピューターなしでマイクロコントローラーをプログラムできるだけでなく、ハードウェアトグルスイッチでプログラムされるように特別に設計されたコンピューターを実際に購入できます。このキットはメンバーシップカードと呼ばれ、1970年代からのCOSMAC Elfコンピューターの再作成です。このキットは、IEEE Spectrumマガジンの最近の記事で説明されています。PCからより新しいバージョンのメンバーシップカードをプログラムすることもできます。


2

はい。これについては、前述のとおり、プログラムをアセンブラーで記述し、自分でオペコードを検索します。コンピュータでの入手方法:古いテーププレーヤーを使用し、再生ヘッドを取り外しますが、キャプスタンとピンチローラーはそのままにします。これがトランスポートになります。リールツーリールプレーヤーを使用している場合は、再生ヘッドをそのままにしておくことができます。

次に、細長い紙、またはさらに良い透明テープを取ります。これは、プログラムをエンコードする場所です。プログラムするピンの数だけトラックを使用します。1つのトラックに、一定間隔で黒いドットを配置します。これがあなたの時計です。他のトラックでは、データと信号に従って黒いドットまたはストリップを配置し、空白のままにします。全体を照らし、小さなフォトトランジスタでそれを検出し(またはテープで1つのLEDを照らし、他の類似のLEDで光を検出)、トランジスタでクロックと信号線を駆動します。これは、テーププレーヤー上で少しのスペースを必要とするため、再生ヘッドを取り外す必要がある場合があります。

もちろん、信号をオーディオとしてエンコードすることもできますが、デコードするのは少し複雑です。または、透過光ではなく反射光を検出できます。または、透明テープに黒いマークを付ける代わりに、暗いテープまたは紙テープに穴を開けることができます。なんでも。テーププレーヤーは一定の速度でテープを駆動するため、コンピューターなしでクロック信号を入力できます。


1

はい。主な問題は、プログラミングインターフェイスとの対話です。プレーンアドレスとデータバスがある場合は、少し簡単です。本当に初期のコンピューターを見たことがありますか?プログラムは、前面のスイッチを使用して、一度に1命令ずつRAMに入力されます。


彼はマイクロプロセッサではなくマイクロコントローラについて尋ねました。マイクロコントローラーは、何らかのインターフェイスを使用しないとアクセスできないフラッシュでコードを実行します。
tcrosley

4
@tcrosley-初期のuCにはフラッシュがありませんでした。プログラムストア用のRAMまたはROMがありました。
ホットリック

@HotLicks正しい。また、いくつかの例外を除き、これらはすべてマイクロコントローラーであり、マイクロコントローラーではありませんでした。プログラムストアがフラッシュ、ROM、PROM、EPROM、EEPROMのいずれであるかではなく、それが私のポイントでした。ポイントは、プログラムストアがオンチ​​ップ(マイクロコントローラー)であったかどうか(マイクロプロセッサー)でした。1977年に導入されたIntelの最初のマイクロコントローラーである8048にも、内部ROMがありました。
-tcrosley

3
@Tcrosleyあなたは誰ですか?そして、通常有用で客観的なtcrosleyで何をしましたか?:-) | 彼の最初の観察は、プログラミングインターフェイスと対話できることでした。これは、多くの場合有効であるとは限りません。「IF」再アドレスおよびデータバスはIFです。それはいくつかの大型で境界線のハイブリッドマイクロコントローラーに適用されますが、彼の元のIFは(ハードで遅いにもかかわらず)十分に優れていました。
ラッセルマクマホン

3
マイクロプロセッサとマイクロコントローラの明確な区別を維持しようとすることは、特にすべての返信に対するコメントに含まれる場合は、有用というよりも教訓的です。
pjc50

1

40年以上前のDigital EquipmentのPDP-8ミニコンピューターには、自動起動機能がありませんでした。通常、プログラムはパンチされた紙テープからロードされましたが、紙テープをロードするローダーは、フロントパネルのスイッチに手動で入力する必要がありました。

ここに画像の説明を入力してください

当時の組み込みコントローラとして使用していたOEMなどのデジタルおよびPDP-8の顧客のサイトでは、ユーザーがブートローダーを記憶し、ブートに入るのにかかる最速の時間で競合することは珍しくありませんでした機械へのローダー。マシンは磁気コアメモリを使用していました(世界の遠く離れた部分で、小さな指を持つ女性が針と毛細線を使用して手でつなぎました)。

ここに画像の説明を入力してください

磁気メモリの内容は不揮発性であるため、ブートローダーはパワーダウン後も生き残り、手動での入力は最初のアセンブリ後にのみ必要でした。ローダーはプログラムのバグ、またはローダーのスペースを使用するために必要なプログラムによって一掃されました。


何年も前、雪の上り坂で裸足で両方の方法で登校しなければならなかったとき、私たちの高校のPDP-8は、説明したようにフロントパネルからブートローダーを切り替えることで起動する必要がありました。責任者を含めて、教師の誰もコンピューターについてあまり知りませんでした。彼はアップが0で、1がダウンしていると思ったので、ブートローダーを切り替えることはできませんでした。英語の授業中にコンピューターがクラッシュするように手配するので、コンピューターを再起動するように呼び出されます。彼のアップ対ダウンの誤解について彼に話したことはありませんでした-それは私にとって非常に有用でした。
オリンラスロップ

PDP-8が気に入りました。私は約3年間、1つにしかアクセスできませんでした。つまり、PCという用語が発明されるずっと前から、パーソナルコンピューターを持っているようなものでした。4Kのメモリに収めることができる驚くべきもの。確かにたくさんの紙テープ(DECtapeがありませんでした)とTeletype紙を調べました。
tcrosley

0

答えは「はい」です。コンピューター、デバッガーなどを使用せずにマイクロコントローラーをプログラムできます。必要なのは、uCメーカーが指定したさまざまな電圧、データ、クロック、プログラミングシーケンスを提供することです(簡単な仕事ではありません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.