AVR MCUチュートリアル - デジタル

最初の答えの前に質問:ピンは出力として設定し、ハイレベルの書き込みされている場合は、LEDの接続が起こるのだろうか?

実験の結果、LEDが点灯しますが、出力が大きい場合に比べて、輝度が低くなります。これはなぜでしょうか?

我々は、入力および出力ピンはのDDxn DDRXを推測することができるモードレジスタビットによって制御され、チュートリアルによって知る  pin_modeの  0は入力、出力、およびそのリセットされ、関数のDDxn対応するピンの値を変更しますすなわち、入力が、0であり、そうでない場合、したがってピンは入力パターンである出力として構成されています。同様  pin_write  関数たPORTxnが変更され、第2のパラメータ値は、その関数です。

それは高レベルの結果が書き込まれる出力するように構成されていない、本のDDxnピンは0であり、たPORTxn 1は、プルアップ抵抗入力モードです。プルアップLEDの抵抗が続くVCCを抵抗に対応した後、ピンを外部回路に接続されるピンに接続された抵抗を、LEDは、一般にVCCと接地の間に接続された抵抗を限定するものと同等であってもよいです、LEDが点灯します。

この抵抗の抵抗値は、流量制限器と比較して、プルアップ抵抗と、元の電流制限抵抗と抵抗値、比較的大きなプルアップ抵抗(データシートP432 Figure30-164によれば約40 Kプルアップ抵抗を推定することができる)であります抵抗が高いレベル、多くの小電流でLED、従って対応して低い輝度の外装ケースの出力抵抗です。

これは解決できないだけ分析を使用して、アナログ回路、デジタル回路における問題です。この質問への短い答えはまた、マイクロコントローラの包括的な知識を反映しています。

 

今日は、デジタル制御の観点から、開発ボードは、言葉を残した2日間です。

また、デジタルになる早期グローランプ、ガス放電発光点に依存して、現在一般的多くのLEDの本質である7セグメント(ワード上などセグメント7)を指します。そこ7セグメントメートルワードをLEDであるが、比較的稀で加えて、我々の開発ボードは、1つ、3つ、4つあり、2本のデジタルチューブです。注7セグメントは、実際には8つのセグメント、各数小数点がある右下隅を有しています。また、小数点以下を有する4つの中間点が、回動することができないデジタル時計もあります。

オーダーの上部から8セグメント時計回りにA、B、C、D、E、F、中央G、小数点DPとしても知られています。

様々なデジタルLEDの原理は同じで、わずかに異なる内部回路が接続されています。デジタル内部は8個のLEDを有している、10本のピンを有し、それを接続する方法は?共通のカソードと共通のアノードを介してデジタル出力が、これはデジタルであることを述べた:8は、正(又は負電極)LEDの2本のピンに接続され、負極(又は正極)リード線に接続されています。共通のアノード(またはカソードコモン)として知られている足は、LED。2デジタル開発ボード、一つ一つの共通カソード接続。

正極8とマイクロコントローラとの間の接続は、それは説明できないが、出力ピンとは独立し、正電極の各々は、デジタル抵抗器の後に直列に接続されたマイクロコントローラ8によって制御として理解することができる、幾分複雑です。左右2つのピンはデジタル権利管の負極に接続され、それらの使用は、マイクロコントローラのピンに接続されるべきです。

あなたが特定の段落明るいLEDを使用する場合は、9ピンのレベルにそれを構成する方法をすべきですか?答えは否定が低く、他が低く、非常に高い正明るくセグメントです。さらに、負極が高い場合、正と負電圧との間にLEDが0以下である、ではないであろう場合に、マルチビットデジタル駆動、このことは重要です。彼は負の低及び高光が付与されたために書かれた手順は、それを取ることはありません、以前に使用LEDとは違って、輝いていないことを指摘しています。

マニュアルによると、我々は使用することができます  segment_dec  で、データのデジタル表示やその他の機能を設定する  segment_display  デジタル表示を行うこと。二つの機能を完了するには、それぞれ、ディスプレイにデータと制御データを設定表示、データとビューの深遠な分離、およびこのチュートリアルのテーマに近い理由は何か言って、我々は後に表示されます、デジタルの数単独で(少なくとも制御フローの順に)マルチビットのデジタル表示機能することができません。

最初のデジタル制御プログラムとして、我々は最初の0-9を通って右、そのサイクルをLED照明します。左右2つの負極マイクロコントローラのピン4と5に接続されています。

1の#include <EE1 / segment.h>
 2の#include <EE1 / delay.h>
 3  
4  int型のmain()
 5  {
 6      segment_init(PIN_4、PIN_5)。
7      一方、1 8          (uint8_t i = 0 ; iは=!10 ; ++ I)
 9          {
 10              segment_dec(I)。
11              segment_display(SEGMENT_DIGIT_R)。
12              遅延(500 )。
13          }
 14 }

前のチュートリアルの内容によると、あなたは推測するのは困難ではありません  segment_display  右の仕事をするためにデジタル負のを。ダウン接続を示すために負のレベルにそれをピンより明らかであり、別のものを引っ張ります。segment_display  デジタル陰極管は、データはデータの正電極8デジタルレベルに配置されているか  segment_dec  セット。各データビットとデジタル制御に明暗相当の期間、最下位と最上位ビットがセグメントにセグメントDP(これは私の接続基板の設計と開発である)に対応するビットに対応します。そして、デジタルディスプレイは、表示データが0b00000110である照明部BとC、すなわち1つのセグメントのコード番号を必要とします。segment_dec  他の機能は、入力されたパラメータに基づいて、サイズ2の配列は、それぞれ表示する2つのデジタルデータに対応する、2つの値を書き込みます。

括弧、0BプレフィックスはGNU拡張、規格Cの一部ではない2進数を示し、C ++は、C ++ 14からこの表記をサポートするために始めました。コンパイラの拡張機能は、論理的に言えば、できる限り慎重に使用する必要がありますが、この機能は本当に便利なので、私が使用するために使用しました。

いくつかのライブラリは、セグメントコードを宣言しました。segment_digit  0〜9、A〜Fのコードセグメントのsegment_dot  として定義されている小数点:

1  CONST uint8_t segment_digit [] =
 2  {
 3      0b00111111、// 0 
4      0b00000110、// 1 
5      0b01011011、// 2 
6      0b01001111、// 3 
7      0b01100110、// 4 
8      0b01101101、// 5 
9      0b01111101、// 6 
10      0b00000111、// 7 
11      0b01111111、// 8 
12      0b01101111、// 9
13      0b01110111、// 14      0b01111100、// B 15      0b00111001、// C 16      0b01011110、// D 17      0b01111001、// E 18      0b01110001   // F 19 }。
20 CONST uint8_t segment_dot = 0b10000000;





  

これらのコードセグメントは、手動で文字入力に応じて成形されます。あなたはまた、完了するために、インターネット上でいくつかのツールを見つけることができ、同じように多くの文字を作成することができます。

〜GのLED共通陰極の(I意味場合)場合、それぞれ、低負極マイクロPA0〜PA7、に接続されたDPセグメントは、全て1 DDRA、PORTAのコード割り当てを有するセグメントは、デジタル缶であります対応する数字や文字、または他のパターンを表示します。質問は、いくつかの変更を行う必要がありますヤンデジタルチューブの合計、のために、ここでは1のまま?

上記デジタル駆動制御する方法です。

 

今、私たちはデジタルよりを駆動する方法を見て。開発ボードは、2本のデジタルチューブは、実際に、デジタル駆動方式の数は、例えば、ここで2個の共通カソードLEDにおいて、同じです。

カソードコモンの数は一つ一つの接続の共通のカソードをLED述べ、その後、異なるサイト間の接続はどのように行うことですか?2つのデジタル数2間のいずれかの接続があり、全体のデバイスは、少なくとも18本のピンがあり、その数はいくつかの大きなを持っています。そこ回路接続であり、以下に示すように、各追加ビット、唯一の多ピンに基づいて、デジタルベースで行うことができます。

この増加は、各段落のアノード、カソードのその新しいピンで、最初のものが共有されています。異なるサイトの同期間のために、彼らは共通のアノード接続を見つけることは困難ではありません。ビットは共通のカソードと共通アノードセグメントLED共通陰極と呼ばれる、デジタルチューブなどの習慣を考慮して、です。

しかし。これは、ピン接続は、あなたが独立して8 LED、(対称性に応じている8ビットのセグメントを制御することができた瞬間に、代償節約し、あなたはまた、より多くのようにすることにより、同じ段落2を制御することができますが、制限)。あなたができない他のセグメントは明るくない間、点灯セグメントAとセグメントB-2のビット1です。なぜ?点灯部の1ビットは、ハイレベルの区間Bは同様に、第2ビットが低く、結果は最初に、高いコモンアノードとカソード共通ビット1が低であるセグメントに必要です2番目の段落のとBセグメントのうちの1つが同時に点灯されます。このプログラムでは、唯一の2つのデジタルチューブは同じ番号を表示します。

私たちは、他のいくつかの方法が必要です。前のセクションの内容によると、それぞれ、2つの画面内の任意の一つはそれをすべて行うことができます。あなたは2つの数値を表示したい場合は、プログラムが適切なユーザーに、第一、第二に、左に2秒間表示桁数を表示することができ、この方法は非常に悪いですが、少なくとも、理解しやすいです。なぜ、代わりに10秒の1秒がそれですか?平均待ち時間1秒0.5秒は2つの数の情報を見ることができ、ユーザーの場合は、10秒で、その後、5秒待って、ユーザーが望んでいません。

しかし、今、ユーザーが待って喜んでいなくても0.5秒で、どのように?我々はそれをゼロに待機時間圧縮を取る必要がありますか?ユーザーは、人間の目には、あまりにも高リフレッシュレートではない限り、毎秒24枚の画像があるとして、それは(実際には、脳は)これらの画像が連続していると考えるのは、人間です。だから、長い人間の目の画像間隔より入手するには、この待ち時間が小さいほど、ユーザーが文句を言うことはありません。

今、あなたはユーザーを行います。あなたは2つの数値を見ることができ、二つの数字は、時間の非常に短い間隔であなたは何の段落間隔が存在しない、最後にそれを伝えることができないほど短い提示されています。これは何を意味するのでしょうか?二つの数字が出て表示されます。この背後に、デジタルコントローラがデジタル表示に時間のすべての短い周期を切り替えられ、この駆動方法になるダイナミックスキャン

のは、このアプローチをテストするためのプログラムを書いてみましょう。前のプログラムに基づいて、我々は左のディスプレイ0を作ります。

1の#include <EE1 / segment.h>
 2の#include <EE1 / delay.h>
 3  
4  int型のmain()
 5  {
 6      segment_init(PIN_4、PIN_5)。
7      一方、1 8      (uint8_t i = 0 ; iは=!10 ; ++ I)
 9      {
 10          segment_dec(I)。
11          のために(uint8_tのJ = 0 ;!J = 250 ; ++ j)の
 12          {
 13              segment_display(SEGMENT_DIGIT_L)。
14             遅延(1 )。
15              segment_display(SEGMENT_DIGIT_R)。
16              遅延(1 )。
17          }
 18      }
 19 }

このプログラムでは、デジタルリフレッシュ間隔は2ミリ秒(1秒* 2)に設定されています。実際には、10ミリ秒以下のこの間隔は、人間の目には、違いを感じることはありません。作業が実行されている時間であれば、このプログラムでは、マイクロコントローラ、LEDドライバに加えて、他のアプリケーションが、他の作業があり、リフレッシュ間隔が非常に小さい(何回も増加するサイクル数に相当)の待ち時間を書き、それでもできません固定されていない、彼らはそれがLED輝度ムラをもたらすように、遅延を置き換えるために使用することができません。あなたはほぼ同じを確保するために、遅延間隔の実行よりもはるかに長い時間に参加する必要がありますが、プログラムは、大きさの順の10ミリ秒の時間を実行している他の作業に使用することはできません達します。

LEDを制御するために、ダイナミックスキャンを使用するときは、入力キーなど、役職として、第2と組み合わせる場合は特に、前例のない悩みの一つからでしょう。その後、適切な関数を呼び出すまで、LEDや他の機器は、以前の関数への単一の呼び出しを使用し、その状態を維持することができ、ダイナミックスキャンは、それはあなたがそれを制御するために継続する必要がある、ある、ダイナミックであり、これはトラブルのルートがあります。もちろん、これらの問題に対する他のシングルチップ・ソリューションがあり、我々は後に再訪します。

 

今日の仕事:

1.ミリ秒の遅延を保持し、1秒、0.5秒からの時間表示切替(これは困難であるものであり、それはないですか?)。

2.以下の機能を:キーが押されたとき、デジタル表示の16進数に1を加え、プレス1000ミリ秒を保持するには、200ミリ秒毎の数プラス1は、その後、別のキーを追加し、その効果は、デジタルでありますマイナス1。

 

おすすめ

転載: www.cnblogs.com/jerry-fuyi/p/11632793.html