Глава 3
В предыдущей главе были подобраны все компоненты для интерфейса управления цифровым СВЧ-аттенюатором. В данной главе будет вестись разбор сборки устройства. Для начала надо составить схему. Схема представлена на рисунке 3.1.
Рассмотрим сборку устройства по пунктам:
-
Как видно из схемы интерфейса управления цифровым СВЧ-аттенюатором выходы VDD, TxD, RxD и GND, преобразователя CP2102 подсоединяется к выводам VCC1, OUTA, INB и GND1, изолятора цифровых сигналов ISO7221AD, соответственно.
-
Выводы VCC2, INA, OUTB, GND2 изолятора цифрового сигнала ISO7221AD, подсоединяются к выводам VCC, RxD, TxD и GND, платформы Arduino Nano, соответственно. Стоит отметить, что между выводами VCC1 и GND1, а также VCC2 и GND2 стоит по конденсатору, емкостью по 0.1 мкФ.
-
Цифровые выходы платформы Arduino Nano, под номерами 8, 9, 4, 5, 6, 7 подключаются к LCD-дисплею, как показано в таблице 3.1:
Выводы Arduino Nano |
Выводы LCD-дисплея |
8 |
RS |
9 |
E |
4 |
D4 |
5 |
D5 |
6 |
D6 |
7 |
D7 |
-
Для регулирования контрастности LCD-дисплея к его выводам VCC, V0 и VDD, подсоединяется подстроечный резистор. (тут о особенностях его подключения)
-
Остальные цифровые выходы Arduino Nano, это 0, 1, 2, 3, 10, 11, 12 и 13, будут использоваться для подключения цифрового СВЧ-аттенюатора.
-
Примечание про подключения источника питания.
-
Надеюсь, ничего не забыл
Все соединения между выводами будут осуществляться путем припайки проводов.
Переходим к написанию программы, программа написана в среде разработки Arduino IDE, ниже графически представлен листинг программы.
Листинг программы:
// НАЧАЛО ПРОГРАММЫ
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//----------!ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ!----------//
char string[10];
char cAtten[3];
int a = 0;
int b = 0;
int c = 0;
int nDec = 0;
int n = 0;
int k = 5;
int ledPin = 13;
//----------!ИНИЦИАЛИЗАЦИЯ МАССИВОВ!----------//
int attenuation[8] = {0, 1, 2, 3, 10, 11, 12, 13};
int nDecArray[8] = {128, 64, 32, 16, 8, 4, 2, 1};
int nBinaryArray[8] = {0, 0, 0, 0, 0, 0, 0, 0};
//----------!СПИСОК ФУНКЦИЙ!----------//
void eraseString ();
int funcStroka();
void funcAttenuator();
//----------!НАЧАЛЬНАЯ УСТАНОВКА!----------//
void setup() {
//----------!УСТАНОВКА ВЫХОДОВ ДЛЯ ОСЛАБЛЕНИЯ!----------//
pinMode (0, OUTPUT);
pinMode (1, OUTPUT);
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (13, OUTPUT);
lcd.begin(16, 2);
Serial.begin(9600);
}
//----------!НАЧАЛО ПРОГРАММЫ!----------//
void loop()
{
if (Serial.available()) {
delay(100);
lcd.clear();
n = Serial.available();
while (Serial.available() > 0) {
for (int i = 0; i < n; i++)
{
string[i] = Serial.read();
}
}
k = funcStroka();
if (k == 0)
{
lcd.write("Arduino UNO R3");
Serial.write("Electronstandart,MCU01,RU0001,V.01");
eraseString();
}
else if (k == 2)
{
digitalWrite(ledPin, HIGH);
Serial.write("LED 1\n");
eraseString();
}
else if (k == 3)
{
digitalWrite(ledPin, LOW);
Serial.write("LED 0\n");
eraseString();
}
//----------!ВЫСТАВЛЕНИЕ ОСЛАБЛЕНИЯ!----------//
else if (k == 4)
{
lcd.write ("Attenuation: ");
for (int i = 0; i < 3; i++)
{
cAtten[i] = string[i+3];
}
a = (int) cAtten[0] - 48;
b = (int) cAtten[1] - 48;
c = (int) cAtten[2] - 48;
nDec = 100 * a + 10 * b + c;
for (int i = 0; i < 7; i++)
{
if (nDec >= nDecArray[i])
{
nDec -= nDecArray[i];
nBinaryArray[i] = 1;
}
}
if (nDec == 1)
{
nBinaryArray[7] = 1;
}
else { nBinaryArray[7] = 0; }
funcAttenuator();
lcd.setCursor(13, 0);
eraseString();
}
else
{
lcd.write("ENTER COMMAND");
Serial.write("ENTER COMMAND\n");
eraseString();
}
}
}
//----------!СТИРАНИЕ МАССИВА ВВОДА!----------//