
こんにちはHabr。 ATtiny13でアナログデジタルコンバーターのUARTを作成するために既にalready化していますが、たとえばATmega8にはマルチプレクサを使用してADCを測定できるポートが6つ(DIPの場合)あるため、なぜATtiny13でUARTを作成するのですか?
いくつかの理由があります。
-ATtiny13は安価です。
-ATtiny13は、マイクロコントローラーリソースをより最適に使用します。
-寸法;
-消費電力
「私はそのように感じました。」
もちろん、私の議論には多くの反論を見つけることができます。たとえば、ATmega8は、 V-USBを使用すると、UARTからUSBへのアダプタを必要としない入力/出力ボードになりますが、後者とは別に、おそらく議論することはできません
ATtiny13でソフトウェアUARTの経験を積むことを目標に設定しましたが、彼らが言うように、その経験は非常に貴重です。 いずれにせよ、将来のプロジェクトに役立ちます。
まあ、私はそれが鉄でどのように機能するかを引き出して示しません:
スキームによるいくつかの単語は、ところで、ここにあります:
プロテウスのスキーム
すぐにパワーフィルターに注意を払うといいと思います。2つのコンデンサC1-できれば「セラミック」と、MKの脚にできるだけ近く、C2-電解、2つ目は100マイクロファラッドに設定できますが、そのようなコンデンサはありませんでした手で470 uFで10Vを見つけました。各ADCポートに、できるだけMKの近くにコンデンサを配置するのもいいでしょう。 R1は基本的なものではありませんが、「良い形」の規則に従って-存在しなければなりません。
ご覧のとおり、データは1023、666、10の形式で提供されます。少なくともデータを取得し、このデータを受信するコンピューターまたはその他のデバイスにCSV形式で保存します。
ちなみに、私の場合はデータを受信します。安価なUSB-UARTコンバーターはPL2303HXチップに基づいています。 コンバーターで動作するオンボード3.3 VからATtiny13にマルチメーターで3.4 Vの記事に電力を供給しようとしましたが、最初は電源をこのような高い値に変更すると、データ送信に何らかの影響が出ると考えました。 、涼しい、すべて、さようなら十分なデータ...氷で冷やされた軽いもので少し暖められた種類はありません(狂信なし)-すべてが正常に動作し、損失は観察されませんでした。
コードに関するいくつかの言葉-コードはBasicのBASCOM-AVR環境で記述されています。ここでは、Basicに出会ったことがないので、コードの記述に4〜5時間を費やしました。コードを書くだけでなく、BASCOM-AVRの機能、デバッグなどすべてを処理することもできます。
コード
Samples Alias 64 ' #define ' $regfile = "attiny13.dat" ' $crystal = 1200000 $hwstack = 16 $swstack = 16 $framesize = 16 '$noramclear Open "comb.0:9600,8,n,1" For Output As #1 ' UART, 9600 ' PB0 TXD, RXD Config Adc = Single , Prescaler = Auto , Reference = Avcc ' , Vcc Start Adc ' ' Adc - : Single - , ' Free ( ) ' Prescaler = 128 - ' ( 2,4,8,16,32,64 Auto). ' Auto, ' Reference – . Aref – , ' Avcc – , Internal – 1,1 . Declare Function Adc_get(byval Adc_port As Byte) As Word ' ' "Samples" Do ' Print #1 , Adc_get(1) ; "," ; Adc_get(2) ; "," ; Adc_get(3) ' *,*,* Loop ' Function Adc_get(byval Adc_port As Byte ) As Word ' Word . 65535 Dim Temp_result As Word ' Dim Adc_cycles As Byte ' Temp_result = 0 For Adc_cycles = 1 To Samples Temp_result = Temp_result + Getadc(adc_port) Next Temp_result = Temp_result / Samples Adc_get = Temp_result ' Temp_result End Function
コードは、最初にソフトウェアUARTを作成します。ここでは非常に簡単です。必要なパラメーター、ポート、速度などを設定し、ADCを構成し、関数を宣言し、理解し、その後、線が形成され、ADCサンプルのサンプルからの平均数の結果が形成されます。 42や108ではなく64を選択したのはなぜですか? さて、1023 * 64は65 472であり、バッファに使用したWordタイプの場合、変数が取ることができる最大値は65 535であるため、この数値は、もう1つのサンプルを追加すると、符号なし2バイトワードとして表すことができる最大の数値ですADCが1023を返すと、変数は単純にゼロにリセットされます。何らかの理由で、Long型に問題がありましたが、個人的には、64個のサンプルがあります。 さて、その後UARTで結果が表示されます。
ご覧のとおり、ノイズは確かに存在します。64サンプルの平均値が表示されているにもかかわらず、 データシートから判断すると、±2 LSBのノイズは正常で、1 LSBのノイズがあります。
スクリーンソフト
ご覧のとおり、ATtiny13は1秒あたり15〜16回値を送信しますが、これはソフトウェアUARTであり、ポートごとに64の測定を行うことを考えると悪くないと思います。
MKは次の電流を消費します。
電源5 V-2.71 mA
電源3.3 V 1.75 mA
プログラミングに関するいくつかの言葉-ビデオで述べたように、MK周波数は1.2 MHzであり、以前のトピック「スターウォーズスタイルの音楽の呼び鈴」のように、すべてのヒューズはデフォルトで設定されています。
融合計算機のヒューズは次のとおりです。
フジ
最後に、さまざまな角度からの写真を2、3枚:
小さな写真撮影
参照:
Arduinoの代替配線-BASCOM-AVR
グラフィックを作成したソフトウェア-シリアルオシロスコープ
Proteus 7 Professionalのソース、hexファイル、および図を使用したアーカイブ
すべての出版物 。