sonyps4.ru

Бортовой компьютер на AVR микроконтроллере. Мини-компьютер на базе микроконтроллера Parallax Propeller

Поскольку дистанционное управление компьютером весьма удобно, в Интернете опубликовано немало схем подобных устройств. К примеру, в статье «Дистанционное управление компьютером на микроконтроллере AVR Mega 8» описано одно из них, а в этой статье речь пойдёт о подобной схеме, но собранной на широко распространённом микроконтроллере AVR Tiny 2313. Она сделана на основе известного устройства «IgorPlug» предназначенного для работы под Windows XP, но в схему были внесены некоторые изменения по следующей причине: в оригинальном устройстве, как и в множестве подобных, распространённых в Интернете, не согласованы по напряжению выходные уровни сигналов с портов микроконтроллера со стандартом USB.

В авторской схеме микроконтроллер питается напряжением 5 вольт, а размах сигнала USB 3,3 вольта. Для согласования этих уровней после внесения изменений вся схема питается напряжением 3,3 вольта от стабилизатора на стабилитроне. Микроконтроллер с таким питанием работает нормально, а фотоприёмник применён другой – BRM-1022 (BRIGHT LED ELECTRONICS). Он допускает диапазон изменения питающего напряжения в пределах 2,7 – 5,5 вольт. Можно без труда подобрать другой аналогичный фотоприёмник, например TSOP-4838. Описанное устройство можно настроить для работы с почти любым из уже имеющихся пультов ДУ.

Инструкция по установке:
1. Соберите устройство (Рис. 1) . Переделанная схема устройства дистанционного управления компьютером прилагается к этой статье (Рис. 2) . Она отличается от вышеназванного оригинала, как уже упоминалось, типом фотоприёмника и схемой питания. Для изготовления устройства применена печатная плата устройства дистанционного управления компьютером на микроконтроллере (Рис. 3) ;



2. Скачайте папку с драйвером и прошивкой после статьи;

3. Запрограммируйте микроконтроллер, записав в него соответствующую прошивку (для этой цели подойдёт, например, параллельный программатор микроконтроллеров AVR), и установите его в устройство. Микроконтроллер можно программировать уже установленным в схему, предварительно припаяв провода к соответствующим площадкам на плате. О таком методе программирования можно прочесть в литературе, содержащейся в категории «Электроника» книжного интернет-магазина «Bookwell».

4. Установите на компьютер программу Girder;

5. Подключите устройство к компьютеру и, когда система запросит драйвер, укажите путь к нему;

6. Скопируйте в папку Girder/plugins библиотеку IgorPlug.dll. Она предназначена для стыковки драйвера устройства с программой Girder. Скачать её можно после статьи;

7. Запустите Girder, затем на вкладке «Файл - настройки» выберите соответствующий модуль и укажите порт USB. Закройте окно, нажав «Сохранить». После этого программа должна реагировать на команды пульта и отображать их номера.

8. Настройте Girder, сопоставив пронимаемым номерам команд требуемые действия.

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

Скачать архивы:

У вас нет доступа к скачиванию файлов с нашего сервера

Микроконтроллер - компьютер на одной микросхеме. Предназначен для управления различными электронными устройствами и осуществления взаимодействия между ними в соответствии с заложенной в микроконтроллер программой. В отличие от микропроцессоров, используемых в персональных компьютерах, микроконтроллеры содержат встроенные дополнительные устройства. Эти устройства выполняют свои задачи под управлением микропроцессорного ядра микроконтроллера.

К наиболее распространенным встроенным устройствам относятся устройства памяти и порты ввода/вывода (I/O), интерфейсы связи, таймеры, системные часы. Устройства памяти включают оперативную память (RAM), постоянные запоминающие устройства (ROM), перепрограммируемую ROM (EPROM), электрически перепрограммируемую ROM (EEPROM). Таймеры включают и часы реального времени, и таймеры прерываний. Средства I/O включают последовательные порты связи, параллельные порты (I/O линии), аналого-цифровые преобразователи (A/D), цифроаналоговые преобразователи (D/A), драйверы жидкокристаллического дисплея (LCD) или драйверы вакуумного флуоресцентного дисплея (VFD). Встроенные устройства обладают повышенной надежностью, поскольку они не требуют никаких внешних электрических цепей.

В отличие от микроконтроллера контроллером обычно называют плату, построенную на основе микроконтроллера, но достаточно часто при использовании понятия "микроконтроллер" применяют сокращенное название этого устройства, отбрасывая приставку "микро" для простоты. Также при упоминании микроконтроллеров можно встретить слова "чип" или "микрочип", "кристалл" (большинство микроконтроллеров изготавливают на едином кристалле кремния), сокращения МК или от английского microcontroller - MC.

Микроконтроллеры можно встретить в огромном количестве современных промышленных и бытовых приборов: станках, автомобилях, телефонах, телевизорах, холодильниках, стиральных машинах... и даже кофеварках. Среди производителей микроконтроллеров можно назвать Intel, Motorola, Hitachi, Microchip, Atmel, Philips, Texas Instruments, Infineon Technologies (бывшая Siemens Semiconductor Group) и многих других.
Для производства современных микросхем требуются сверхчистые помещения.

Основным классификационным признаком микроконтроллеров является разрядность данных, обрабатываемых арифметико-логическим устройством (АЛУ). По этому признаку они делятся на 4-, 8-, 16-, 32- и 64-разрядные. Сегодня наибольшая доля мирового рынка микроконтроллеров принадлежит восьмиразрядным устройствам (около 50 % в стоимостном выражении). За ними следуют 16-разрядные и DSP-микроконтроллеры (DSP - Digital Signal Processor - цифровой сигнальный процессор), ориентированные на использование в системах обработки сигналов (каждая из групп занимает примерно по 20 % рынка). Внутри каждой группы микроконтроллеры делятся на CISC- и RISC-устройства. Наиболее многочисленной группой являются CISC-микроконтроллеры, но в последние годы среди новых чипов наметилась явная тенденция роста доли RISC-архитектуры.

Тактовая частота, или, более точно, скорость шины, определяет, сколько вычислений может быть выполнено за единицу времени. В основном производительность микроконтроллера и потребляемая им мощность увеличиваются с повышением тактовой частоты. Производительность микроконтроллера измеряют в MIPS (Million Instruсtions per Second - миллион инструкций в секунду).

8 апреля 2015 в 12:32

Передача данных из компьютера в микроконтроллер через монитор

  • DIY или Сделай сам

Увидев о том, как один человек использовал клавиатуру в качестве программатора AVR-микроконтроллеров, я воскликнул: «Да он безумец!». А потом подумал, а чем же я хуже?.. И решил написать эту статейку о безумном способе передачи информации из ПК в микроконтроллер.

Вся суть состоит в том, что на экран выводятся квадраты, которые могут быть окрашены в белый, либо чёрный цвет, то есть иметь два состояния. Как биты. И их восемь штук. Как байт.

Чем отличается чёрный цвет от белого? Забавно, но не цветом, а яркостью, интенсивностью света. Интенсивность белого много больше интенсивности чёрного. В качестве регистратора интенсивности я использовал самое простое специально предназначенное для этого устройство - фоторезистор. Фоторезисторами называют полупроводниковые приборы, проводимость которых меняется под действием света. В моём случае проводимость затемнённого фоторезистора много меньше проводимости освещённого. Подключение фоторезистора к микроконтроллеру выбрал самое простое - между пином и землёй, включив встроенную подтяжку к питанию. Проверил напряжение, которое получает АЦП МК ATMega8: слева фоторезистор смотрит на белый фон, справа на чёрный. Напряжение в вольтах.

Да, да - Arduino IDE. Потому-что там я могу быстро набросать код и сразу залить его в плату нажатием одной кнопки, использовать обкатанные и растолкованные до безумия библиотеки.

Как видно, при считывании в цифровом режиме, мы получим 0 на белом и 1 на чёрном, что несколько идёт в разрез с моими шаблонами (чёрный ноль и белая единица), зададим чёрную единицу в программе на ПК.

Для вывода информации на монитор в необходимом нам представлении была написана простая программа на Си - Opto_Байт. Написал её по моей просьбе сосед по общежитию - kinetik161, за что ему большое спасибо и литр пива молока. Программа имеет ввод значения в десятичной системе счисления от 0 до 255 ((2^8)-1) через поле ввода и через текстовый файл TEXT.txt. Текстовый файл располагается в том же каталоге, что и исполняемый файл, каждое значение вводится с новой строки, при достижении конца списка вывод значений останавливается. Интервал - 1 секунда. Имеется кнопка инверсии.

Использовал микроконтроллер ATMega8, который в DIP28 корпусе имеет два полноценных (8 битных) порта - порт B и порт D. На порте B висит кварцевый резонатор, на D - UART. В итоге, я использовал безумную солянку портов, из которых потом составлял один байт. Подключение фоторезисторов от старшего разряда к младшему, слева направо: PC3, PC2, PC1, PC0, PB2, PB1, PB0, PD7.

Быстренько собрал всё на макетной плате и окончательно проверив работу с отправкой данных обратно по com-порту, я решил подключить знакосинтезирующий ЖК экран для вывода информации. Прилагаю код для Arduino IDE.

Код прошивки МК

#include // Подключаем библиотеки #include LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE); // Настройка подключения дисплея(есть разные) int led = 2; // Указываем пин светодиода byte data = 0; // Полученный байт byte dataold = 170; // Предыдущий байт byte k=0; // Переменная для красивого форматирования байта на LCD void setup() { lcd.begin (16,2); // Инициализация экрана lcd.setBacklight(1); // Включить подсветку lcd.print("Hello, Geektimes"); // Приветствие lcd.setCursor(2, 1); // Сдвиг курсора lcd.print("from NikitosZs"); // Serial.begin(9600); // Инициализация UART DDRC = DDRC & 0b11110000; // Задаём порты ввода/вывода DDRB = DDRB & 0b11111000; DDRD = DDRD & 0b01111111; PORTC = PORTC | 0b00001111; // Включаем подтяжку фоторезисторов PORTB = PORTB | 0b00000111; PORTD = PORTD | 0b10000000; pinMode(led, OUTPUT); // Индикатор приветствия digitalWrite(led, 1); delay(2000); // Держим приветствие на экране lcd.clear(); // Очищаем экран digitalWrite(led, 0); // Индикатор приветствия выключен } void loop() { data = get(); // Присваиваем переменной data текущий байт if(data!=dataold) // Перерисовываем информацию на экране, если байт изменился { // Serial.println(data); // Отправляем байт в терминал lcd.setCursor(1, 0); lcd.print("DEC:"); lcd.setCursor(6, 0); lcd.print(" "); // Очищаем локальную область lcd.setCursor(6, 0); lcd.print(data); lcd.setCursor(1, 1); lcd.print("BIN:"); lcd.setCursor(6, 1); lcd.print("00000000"); // Создаём правильную подложку if(data>127) k=0; // Определяем старший бит для сдвига else if(data>63) k=1; else if(data>31) k=2; else if(data>15) k=3; else if(data>7) k=4; else if(data>3) k=5; else if(data>1) k=6; else k=7; lcd.setCursor(6+k, 1); lcd.print(data, BIN); dataold=data; // Присваеваем значение байта переменной хранящей предыдущее значение } } byte get(){ byte raw=1, rawold=0; // Локальные переменные raw и rawold while(raw != rawold) // Выполняется, пока не равны (для устойчивости значения) { rawold = raw; // Сохраняем старое значение byte data1 = 0b10000000 & PIND; // Считываем солянку из пинов byte data2 = 0b00000111 & PINB; byte data3 = 0b00001111 & PINC; raw = data3 << 4; // Сдвигаем, создаём целый байт raw = raw + (data2 << 1); raw = raw + (data1 >> 7); } return raw; // Возвращаем готовый байт }


Выполним проверку правильной адресации фоторезисторов с битами, закрывая источник света пальцем. Должно получиться следующее:

И так-как всё получилось, то можно прислонять макетную плату с фоторезисторами к экрану компьютера. Длинноногие фоторезисторы, воткнутые в макетную плату, нехотя, но всё же согласились никуда не убегать на время съёмки видео, хотя позиционировать их было не очень просто.

Теперь немного занудства… По сути монитор это управляемый транспарант (матрица световых вентилей, возбуждаемых некоторыми внешними сигналами: электрическими, акустическими, оптическими, магнитными). Каждый квадратик - бит - занимает площадь 60*60 пикселей (50 - сторона квадрата и 10 - промежуток). Я имею монитор с разрешением 1920*1080 пикс, частота 60Гц. 1920/60=32 квадрата по ширине, 1080/60=18 квадратов по высоте, 32*18=576 бит на кадр. Не вдаваясь в тонкости, в секунду мы сможем рисовать 60 кадров, а это 576*60=34560 бит/с или 4320 Байта/с. Сократив размер квадратов до 30 пикселей по стороне, получим четырёхкратный прирост скорости (17280Б/с). К сожалению, если уменьшать дальше, то наши каналы будут засвечивать друг друга.

Конечно же я не собираюсь использовать этот оптоэлектронный канал связи, так-как есть куда более удобные, быстрые и менее затратные способы коммуникации, не занимающие рабочее место на мониторе. Однако, не стоит забывать, что самые обыденные вещи можно использовать совсем непривычным для нас способом.



Загрузка...