UN7FGO

ard sdr vac

Небольшое лирическое отступление - "Почему Arduino?"

Платы Arduino построены на микроконтроллерах Atmega и имеют несколько исполнений,как от совсем миниатюрных (Arduino Pro Mini), до высокопроизводительных с большим количеством выводов (Arduino Due). Спорить о достоинствах и недостатках смысла нет, как и пытаться сравнивать с PIC или STM микроконтроллерами.У каждого свои недостатки.

Для меня Arduino кажется более удобным (по сравнению с имеющимися в доступности другими микроконтроллерами) по следующим причинам:
- большой выбор вариантов исполнения плат Arduino, можно подобрать свой вариант под большинство задач;
- можно взять миниатюрную плату с уже готовой обвязкой микроконтроллера и просто разместить его на своей плате или сделать "шилд" (плата расширения) для Arduino;
- отсутствует такое понятие как "прошивка", которая для других микроконтроллеров представляет собой "черный ящик", в котором что-то изменить, без участия автора, не представляется возможным. Для Arduino есть "скетч", исходный текст программы микроконтроллера, который всегда можно "допилить" под свои нужды. За универсальность платим некоторым снижением производительности, но в наших задачах это не критично.
- неубиваемость - даже начинающему чрезвычайно сложно превратить Arduino в "кирпич", штатными средствами, в отличии от других микроконтроллеров.
- бесплатная базовая система разработки программного обеспечения, которую даже не обязательно устанавливать, достаточно распаковать архив;
- есть несколько средств разработки программ под Arduino;
- переносимость написанных "скетчей" под другие микроконтроллеры;
- огромный выбор библиотек, они есть практически для любых периферийных устройств и датчиков;
- большое сообщество пользователей, соответственно часто можно найти уже готовое решение той или иной задачи;

Свое мнение про Arduino я уже высказал.

Переходим к продолжению темы SDR-приемник + Arduino.

Назначение входов/выходов мы обсудили в предыдущей статье. Попробуем теперь придумать протокол обмена между компьютером и нашим микроконтроллером. В целях "универсальности", наш протокол должен быть чисто текстовым, чтобы его можно было использовать из любого языка программирования, а возможно и из командной строки или пакетных файлов (как Windows, так и Linux).

Для того, чтобы наш микроконтроллер понял, где оканчивается команда и ее уже нужно выполнять, мы договоримся использовать символ "@". Ну а весь текст, который идет до этого символа и будет собственно командой.

Примечание: Предлагаемый ниже набор команд является субъективным и определен только ленью автора придумывать что-то более сложное.

Команды переключения диапазонных фильтров:
Цифры - от 11 до 16 - соответственно включают ДПФ (1.8, 3.5, 7, 14, 21, 28)

Команда включения/выключения предусилителя (МШУ):
Цифра - 21/22

Команда на включение/выключение аттенюатора:
Цифра - 31/32

Команда на вращение оси КПЕ входного контура (в случае решения от US5MSQ)
Цифры - от 100 до 199 - устанавливают % поворота ротора конденсатора (100 - минимальная емкость, 199 - максимальная емкость)

Команда на вращение потенциометра плавной регулировки входного уровня сигнала (или еще одного КПЕ рамочной антенны)
Цифры - от 200 до 299 - устанавливают % поворота ротора конденсатора/потенциометра (200 - минимум, 299 - максимум)

 

Ну а теперь собственно "скетч", который позволит нашей Arduino выполнять придуманные нами команды.

// подключаем библиотеку управления сервоприводами
#include <Servo.h>

// создаем объекты для двух сервоприводов
Servo myservo1; 
Servo myservo2; 

// строковая переменная, для приема текста от компьютера
String command = "";
// цифровой код полученной от компьютера команды
int Cmd;
// временные переменные
int i;

void setup() {                
  // инициализируем выводы для сервоприводов
  myservo1.attach(12); 
  myservo2.attach(13); 
  
  // выставляем сервоприводы в положение максимума, 
  // для того, чтобы пластины КПЕ не висели в воздухе и их нельзя было случайно погнуть
  myservo1.write(180);
  myservo2.write(180);
  
  // устанавливаем скорость соединения последовательного порта  
  Serial.begin(9600);  

  // инициализируем цифровые выходы и устанавливаем на них "низкое" значение уровня сигнала
  for ( i = 4; i <= 11; i++) {
    pinMode(i, OUTPUT);
    digitalWrite(i, LOW);
  }
}

void loop() {
  while (Serial.available() > 0) {  //если есть доступные данные
    char inChar = Serial.read();    //считываем байт
    command += inChar;              //собираем информацию в строку
    delay(1);
    if (inChar == '@') {            //если пришел символ "собака", значит пора выполнять команду
      Cmd = command.toInt();

// включаем/выключаем предусилитель
      if (Cmd == 21) {
        digitalWrite(10, HIGH);       
      }
      if (Cmd == 22) {
        digitalWrite(10, LOW);       
      }

// включаем/выключаем аттенюатор
      if (Cmd == 31) {
        digitalWrite(11, HIGH);       
      }
      if (Cmd == 32) {
        digitalWrite(11, LOW);       
      }

// отключаем все и включаем только выбранный ДПФ
      if ( (Cmd >= 11) and (Cmd <= 16)) {
        for ( i = 4; i <= 9; i++) {
          digitalWrite(i, LOW);
        }
        digitalWrite((Cmd-10+3), HIGH);       
      }

// управляем первым сервоприводом
      if ( (Cmd >= 100) and (Cmd <= 199)) {
         myservo1.write(round((Cmd-100)*1.8));
      }

// управляем вторым сервоприводом
      if ( (Cmd >= 200) and (Cmd <= 299)) {
         myservo2.write(round((Cmd-200)*1.8));
      }
      
// команды закончились      
      command = "";              //обнуляем переменную содержащую принятую от компьютера строку
    }
  }
}

Полный текст скетча можно скачать ОТСЮДА.

Пример того, как это может выглядеть со стороны компьютера, мы разберем в следующей статье.

Добавить комментарий

Защитный код
Обновить

  FREE & OPEN UKRAINIAN     HAM  RADIO   BANNERS NET

CR HAMRADIO PHOTO

Последние материалы

П О Л О Ж Е Н Н Я про обласні відкриті змагання учнівської молоді з радіозв’язку на КХ – "Юр’єва...
К сожалению 3Y0I едет домой, не радует и прохождение. Цифры очень скромные, K и A индексы не вселяют оптимизма. Soalr...
Попробуем рассмотреть вопрос создания измерительных приборов с нелинейной шкалой на Arduino, на примере ВАТТ-КСВ-метра. Казалось бы все просто, ведь у...
Для того, чтобы оценить преимущества пенсионера, сначала надо вернуться на работу ..... Приготовил себе 1000 и...
Оборудование для 6-ти сантиметрового диапазона всегда требовало тщательного подхода как к используемым радиокомпонентам, так и к изготовлению антенн. Хоть физику...
Диапазон в 2.4 ГГц хоть и является довольно таки замусоренным ISM диапазоном (Industrial, Scientific, Medical: индустриальный, научный и медицинский...
Мечты об идеальной антенне не покидают даже опытного радиолюбителя со стажем. А уж про начинающих радиолюбителей и говорить нечего, спят...
Приветствую читающий народ. Столкнулся с проблемой. У меня постоянно включены общедоступные WEB приёмники по адресу...
Вопрос: Добрый день, Георгий. Спасибо большое за Ваши труды. Регулярно читаю Ваш блог. Позвольте задать вопрос новичка по конфигурации оттяжек...
Ранее я уже рассказывал, как сделать простой вариант таймера с использованием LCD KeyPad shield. Минимум используемых модулей и минимум управляющих...

Login Form

service 2Сайт беспартийный, не принадлежит никому, открыт для всех.  Можно читать, писать, в новостную ленту и форум, а так же подписываться на рассылку.

satsch
un7fgo

Call-QSL-MGR search

QRZ.COM callsign lookup:
 

QRZ.RU Callbook'e:  
 

IK3QAR QSL Manager
 

Солнце и прохождение

HAM history in Pictures

Заказать напоминание

Введите свой e-mail для получения напоминания о открытом (для всех) Кубке Черниговщины телеграфом CW CRCUP contest

Кто у нас в гостях

Сейчас 10 гостей и ни одного зарегистрированного пользователя на сайте