"Вы читаете о роботах и программировании и думаете: «Было бы здорово сделать что-то подобное самому!» Теми, кем эта идея овладевает чуть больше просто мыслей смотрят кто и как делал своего робота. Читают статьи, смотрят видео. На картинках все понятно. В видеороликах тоже обычно показываются уже готовые продукты, а также сжато показываются технологии их изготовления. И вроде бы то же всё понятно: отпилил, прикрутил, припаял, соединил, запрограммировал вон на той программе вот этим кодом."

воскресенье, 27 декабря 2020 г.

суббота, 26 декабря 2020 г.

ТРЕБОВАНИЯ К ДОКЛАДУ ПО ГОСТ

по материалам https://studently.ru/blog/samostojatelnye-raboty/oformlenie-doklada-po-gostu/

 

ИНСТРУКЦИЯ ПО СОЗДАНИЮ ДОКЛАДА

среда, 23 декабря 2020 г.

вторник, 22 декабря 2020 г.

для Дегтярева

https://us04web.zoom.us/j/4489697759?pwd=ZTRPZHJmTkpwMWt4T0trL1kxbEFxdz09 /

ЗАДАНИЕ

1. Зарегистрироваться на сайте DrakonHub

2. Создать ментальную карту сообщения "Крейскр Варяг"

 3. Переделать сообщение согласно созданной ментальной карты

4. Ментальную карту переслать через "отчет о проделанной работе" раздела РЕСУРСЫ сайта РОБОТОТЕХНИКА (walwalru-robot,blogspot,com)

воскресенье, 20 декабря 2020 г.

КРУЖОК ОТ 21.12.20

На прошлом занятии мы с Вами успешно поработали с цифровой панелью из восьми светодиодов, смогли написать скетч управления, для последовательной индикации цифр. Освоили операторsы digitalWriter() и pinMode(),  а так же узнали про их эффективную замену при работе напрямую с портами микропроцессора. В нашем слчае это порты B, C, D. Тогда установка наппрвления пинов порта DDRB = 0xff, DDRC = 0xff, DDRD = 0xff, (все пины работают на выход) может производиться простым числом. Для подачи уровня сигнала (высокий/низкий) можно использовать обращения к регистрам портов PORTB, PORTC, PORTD. 

PORTD = 0b11111111 (PORTB = 0xff);// на всех пинах высокий сигнал

DDRD = 0x11110000 (DDRD = 0xf0);//пины 0,1,2,3 на вход  4,5,6,7 выход

обращение к единичному пину - назначение выборочно уровня сигнала

PORTD |= 1 << (номер бита) установка 1 - высокий уровень

PORTD &= ~(1 << (номер бита)) установка 0 - высокий уровень

PORTD |= (1 << (номер бита))|(1 << (номер бита)) одновременная установка "1" в несколько разрядов регистра порта

PORTD &= ~((1 << (номер бита))|(1 << (номер бита))) одновременная установка "0" в несколько разрядов регистра порта

Пользуясь полученными знаниями и навыками прошлого занятия мы должны создать схему управления двумя цифровыми табло на светодиодах, макет будет представлен ниже.  Правая часть табло цифры по порядку от 0 до 9. Левая часть от 0 до 5. Левая часть изменяется на еденицу по возрастанию после показа всех цифр правого табло.

макет для эксперемента
 

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

Теперь ваши алгоритмы начнем превращать в программу управления. Для начала необходимо нарисовать схему Вашего алгоритма. Думаю у Вас она получиться примерно такая


 

примерная схема алгоритма


А зачем нам рисовать  схему алгоритма? Прежде всего схема нужна для наглядности Вашего замысла. Так же схема нужна для проверки логики работы Вашего алгоритма управления. Кроме того на схеме легко определяются "висячие хвосты", "логические петли", дубляж команд.

Прикрепим каждому объекту команду на языке программирования и собирем нашу прогамму. ну приерно так:

int schetchik1, schetchik2;
void setup()
{
  DDRB = 0XFF;
  DDRD = 0XFF;
}
void loop()
{

    // ==================== Шампур

    // 3. Заголовок / начало

    // 4. Действие / обнуляем счетчик
schetchik1 = 0;

    // 5. Действие / левый 0
PORTD &= ~(1<< 7); 
PORTB = 0b11000100;


    // 6. Цикл Вставка / правый 0 - 9
goto L1_22;

L7: ;
    // 7. Действие / счетчик ++
schetchik1 ++;

    // 8. Выбор / выбор левой цифры
if (schetchik1 == 1) goto L12; // 11. счетчик = 1
if (schetchik1 == 2) goto L14; // 13. счетчик = 2
if (schetchik1 == 3) goto L16; // 15. счетчик = 3
if (schetchik1 == 4) goto L18; // 17. счетчик = 4
if (schetchik1 == 5) goto L20; // 19. счетчик = 5

    // 9. Вариант / счетчик > 5

    // 10. Конец / Конец
goto L_end1;

    // ==================== Шампур

    // 11. Вариант / счетчик = 1

L12: ;
    // 12. Действие / левый 1
PORTD &= ~(1 << 7);
PORTB = 0B11011111;
goto L1_22;

    // ==================== Шампур

    // 13. Вариант / счетчик = 2

L14: ;
    // 14. Действие / левый 2
PORTD |=(1 << 7);
PORTB = 0B11001000;
      //delay(10000);
goto L1_22;

    // ==================== Шампур

    // 15. Вариант / счетчик = 3

L16: ;
    // 16. Действие / левый 3
PORTD &= ~(1 << 7);
PORTB = 0B11001010;
goto L1_22;

    // ==================== Шампур

    // 17. Вариант / счетчик = 4

L18: ;
    // 18. Действие / левый 4
PORTD &= ~(1 << 7);
PORTB = 0B11010011;
goto L1_22;

    // ==================== Шампур

    // 19. Вариант / счетчик = 5

L20: ;
    // 20. Действие / левый 5
PORTD &= ~(1 << 7);
PORTB = 0B11100010;

    // Z:\home\kovi\DRACON\др длкр-20201219T045303Z-001\др длкр\tablo_to.drt
    // 2. Схема - вставка, Изменение 20.12.2020 11:49:32, Начало

    // ==================== Шампур

    // 21. Заголовок / правый 0 - 9

L1_22: ;
    // 22. Действие / обнуляем счетчик2
schetchik2 = 0;

L1_23: ;
 

    // 24. Выбор / выбор цифры
if (schetchik2 == 0) goto L1_26; // 66. ?Вариант
if (schetchik2 == 1) goto L1_31; // 30. 1
if (schetchik2 == 2) goto L1_33; // 32. 2
if (schetchik2 == 3) goto L1_35; // 34. 3
if (schetchik2 == 4) goto L1_37; // 36. 4
if (schetchik2 == 5) goto L1_39; // 38. 5
if (schetchik2 == 6) goto L1_41; // 40. 6
if (schetchik2 == 7) goto L1_43; // 42. 7
if (schetchik2 == 8) goto L1_45; // 44. 8
if (schetchik2 == 9) goto L1_47; // 46. 9

    // 25. Вариант / 10

L1_27: ;
    // 23. Цикл Пауза / 1 с
delay(1000);
    // 27. Действие / счетчик2 ++
schetchik2 ++;

    // 28. Вопрос / счетчик2 == 10 == Нет
if (!(schetchik2 == 10)) goto L1_23;

    // 29. Конец / Конец
goto L7;

    // ==================== Шампур

    // 66. Вариант / ?Вариант

L1_26: ;
    // 26. Действие / правый 0
  //PORTD = PORTD + 10000000;
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 2)|(1 << 4)|(1 << 5)|(1 << 6)); //ВКЛЮЧЕНИЕ СВЕТОДИОДА ПО ПИНУ
PORTD |= 1 << 3; //ВКЛЮЧЕНИЕ СВЕТОДИОДА ПО ПИНУ
goto L1_27;

    // ==================== Шампур

    // 30. Вариант / 1

L1_31: ;
    // 31. Действие / правый 1
  PORTD &= ~((1 << 0)|(1 << 6));
PORTD |= (1 << 1)|(1 << 2)|(1 << 3)|(1 << 4)|(1 << 5);
goto L1_27;

    // ==================== Шампур

    // 32. Вариант / 2

L1_33: ;
    // 33. Действие / правый 2
PORTD &= ~((1 << 1)|(1 << 2)|(1 << 3)|(1 << 5)|(1 << 6 ));
PORTD |= (1 << 0)|(1 << 4);
goto L1_27;

    // ==================== Шампур

    // 34. Вариант / 3

L1_35: ;
    // 35. Действие / правый 3
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 3)|(1 << 5)|(1 << 6 ));
PORTD |= (1 << 2)|(1 << 4);
goto L1_27;

    // ==================== Шампур

    // 36. Вариант / 4

L1_37: ;
    // 37. Действие / правый 4
PORTD &= ~((1 << 0)|(1 << 3)|(1 << 4)|(1 << 6 ));
PORTD |= (1 << 1)|(1 << 2)|(1 << 5);
goto L1_27;

    // ==================== Шампур

    // 38. Вариант / 5

L1_39: ;
    // 39. Действие / правый 5
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 3)|(1 << 4)|(1 << 5));
PORTD |= (1 << 2)|(1 << 6);
goto L1_27;

    // ==================== Шампур

    // 40. Вариант / 6

L1_41: ;
    // 41. Действие / правый 6
PORTD &= ~((1 << 1)|(1 << 2)|(1 << 3)|(1 << 5)|(1 << 0)|(1 << 4));
PORTD |= 1 << 6;
goto L1_27;

    // ==================== Шампур

    // 42. Вариант / 7

L1_43: ;
    // 43. Действие / правый 7
PORTD &= ~((1 << 0)|(1 << 5)|(1 << 6));
PORTD |= (1 << 1)|(1 << 2)|(1 << 3)|(1 << 4);
goto L1_27;

    // ==================== Шампур

    // 44. Вариант / 8

L1_45: ;
    // 45. Действие / правый 8
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 2)|(1 << 3)|(1 << 4)|(1 << 5)|(1 << 6));
goto L1_27;

    // ==================== Шампур

    // 46. Вариант / 9

L1_47: ;
    // 47. Действие / правый 9
PORTD &= ~((1 << 0)|(1 << 1)|(1 << 3)|(1 << 4)|(1 << 5)|(1 << 6));
PORTD |= 1 << 2;
goto L1_27;

    // 1. Схема, Конец
L_end1: ;
//
}

 

четверг, 17 декабря 2020 г.

КРУЖОК ОТ 18.12.20

 И да, светодиодом на прошлом занятии помигали. Получилось. Зто хорошо, теперь усложним задачу. Поработаем с светодиодной цифрой. Соберем сначала в виртуальной лаборотории схему показанную ниже

Светодиоджная цифра состоит из восьми сегментов, где каждый сегмент - светодиод. Сопротивления необходимо для огроаничения тока протекающего через светодиоды. Положительный сигнал подаем на общий вход устройства с платы микроконтроллера (+5). Сопротивления в свою очередь подключим к пинам микроконтроллера 1 - 7. 0 пин задействовать не будем. 
Алгоритм работы устройства довольно прост - назначаем определенным пинам низкий уровень сигнала, и подключеные к ним светодиоды зажигаются образуя определенную цифру. Далее задержка и новая комбинация пинов. Всего комбинаций десять по числу отображаемых цифр. Ниже приведен примерный скетч для загрузки в микроконтроллер.

Данная программа занимает 4% памяти микроконтроллеравсего - 1336 байт. Можно ли уменьшить объем занимаемой памяти при записи точно такого же алгоритма? Давайте попробуем.
Для начало внимательно рассмотрим нашу плату микроконтроллера.


Порты микроконтроллеров AVR - это устройства ввода/вывода, позволяющие микроконтроллеру передавать или принимать данные. Стандартный порт микроконтроллера AVR содержит восемь разрядов данных, которые могут передаваться или приниматься параллельно. Ножки микроконтроллера также называют пинами, контактами или выводами. Порты обозначаются латинскими буквами А, В, С и т.д. Количество портов зависит от конкретной модели микроконтроллера.

Kонфигурирование каждой линии порта (задание направления передачи данных) может быть произведено программно в любой момент времени. Входные буферы портов построены по схеме триггера Шмитта. Для линий, сконфигурированных как входные, также имеется возможность подключения внутреннего подтягивающего резистора сопротивлением 35…120 кОм между входом и проводом питания. Kроме того, если вывод (вход) с подключенным внутренним подтягивающим резистором подключить к общему проводу, он может служить источником тока.

Обращение к портам производится через регистры ввода/вывода, причем под каждый порт в адресном пространстве ввода/вывода за-резервировано по 3 адреса. По этим адресам размещаются три регистра: регистр данных порта PORTx, регистр направления данных DDRx и регистр выводов порта PINx. Разряды этих регистров имеют названия: Px7…Px0 — для регистров PORTx, DDx7…DDx0 — для регистров DDRx и PINx7…PINx0 — для регистров PINx.

Действительные названия регистров (и их разрядов) получаются подстановкой названия порта вместо символа «x», соответственно для порта A регистры называются PORTA, DDRA, PINA, для порта B - PORTB, DDRB, PINB и т.д.

Следует заметить, что «регистры» PINx на самом деле регистрами не являются, по этим адресам осуществляется доступ к физическим значениям сигналов на выводах порта. Поэтому они доступны только для чтения, тогда как регистры PORTx и DDRx доступны и для чтения, и для записи.

Обратим внимание, что наше устройство подключено к порту D, а значит мы можем обращаться к нему на прямую. На языке С можно задать направление передачи данных сразу для всего порта.

Пример:

DDRB = 0xff;

С помощью этой команды все выводы (контакты) порта B будут сконфигурированы как выходы.

0xff представляет собой шестнадцатиричное представление числа ff, а 0x является префиксом, указывающим на то, что число записано в шестнадцатиричное форме. В десятичном представлении число 0xff будет равно 255, а в двоичном – 11111111. То есть с помощью представленной команды во все биты регистра DDRB будут записаны логические единицы.

В языке Си для микроконтроллеров AVR для представления двоичных чисел применяется префикс 0b. Соответственно, представленную выше команду записи логических единиц во все биты регистра DDRB можно записать и с помощью двоичного вида числа 255:

DDRD = 0b11111111;

Эта запись команды является более наглядной, но все таки правилом "хорошего тона" в программировании для микроконтроллеров считается использование шестнадцатиричного представления чисел.

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

PORTx - регистр порта, где x обозначает имя порта.

Если вывод (контакт) сконфигурирован как выход, то единица в соответствующем бите регистра PORTx формирует на выводе сигнал высокого уровня, а ноль - сигнал низкого уровня.

Если вывод (контакт) сконфигурирован как вход, то единица в бите регистра PORTx подключает к выводу внутренний подтягивающий pull-up резистор, который обеспечивает высокий уровень на входе при отсутствии внешнего сигнала.

Установить "1" на всех выводах (контактах) порта B можно c помощью следующей команды:

PORTB = 0xff.

Аналогично установка "0" на всех выводах порта B выполняется следующим образом:

PORTB = 0x00.

К каждому биту регистров PORTx можно обращаться и по отдельности так же, как и в рассмотренном выше случае с регистрами DDRx. К примеру, команда

PORTB |= 1<<3;

установит "1" (сигнал высокого уровня) на контакте PB3.

Команда

PORTB &= ~(1<<4);

установит "0" (сигнал низкого уровня) на контакте PB4.

В нашем случае мы будем переписывать значение  PORTD двоичным числом, создавая сразу нужные комбинации пинов для работы светодиодов. Примерно так:


Данный скетч использует 2% памяти устройства - 776 байтов, что примерно в два раза короче предыдущего скетча и это только начало. 

В статье использованы материалы с сайта "Мир микроконтроллеров" - https://microkontroller.ru/programmirovanie-mikrokontrollerov-avr/upravlenie-portami-avr-na-yazyke-c/

 

суббота, 12 декабря 2020 г.

КРУЖОК 14.12.20

И да, начнем с самого простого. Если в программировании это "Hello Word", то в робототехнике мигаем светодиодом.   Для начала о светодиоде. Светодио́д или светоизлучающий диод  — полупроводниковый прибор с электронно-дырочным переходом, создающий оптическое излучение при пропускании через него электрического тока в прямом направлении.

светодиод
 

Обратим внимание на выше приведенном рисунке показано полярность подключения полупроводникового прибора, при этом сопротивление у него близкое к 0, а значит при подключении к катоду необходимо подключить нагрузку в виде сопротивления.

электрическая схема подключения светодиода
 
В нашем случае мы будем подключать светодиод к 8 пину контроллера ARDUINO Uno. Однако вспомним что ток протекающий через пин контроллера не должен превышать 20 мА, а значит при внутреннем напряжении микроконтроллера в 5v нагрузочное сопротивление должно составлять не менее 250 Ом. (Согласно закона Ома для замкнутой сети)
макет для проведения практической работы

Ну вот, с макетом схемы мы разобрались, теперь нужно написать программу согласно которой наш светодиод мигал с интервалом в 1 с. Самый простой способ (для тех кто совсем не умеет программировать) это запустить виртуальную лабораторию TinkerCad, создать новую электрическую цепь, перейти в режим кода и с помощью визуального редактора создать алгоритм согласно, которого будет реализована Ваша работа. Как вариант.

пример программного кода

загрузка программного кода

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

Теперь нам необходимо загрузить нашу программу в контроллер. Для этого нам потребуется программа ARDUINO IDE.

интерфейс программы ARDUINO IDE

Настроим данное программное обеспечение. Для этого выберем наш контроллер и порт подключения.
 
выбор контроллера

выбор порта загрузки контроллера

Затем напишем(вставим, загрузим) код Вашей программы. После чего, проверим этот код и загрузим его в микроконтроллер. И уже с учетом того, что мы уже собрали всю электрическую часть, смотрим результат.

вторник, 8 декабря 2020 г.

КРУЖОК ОТ 11.12.20

ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРА

Для программирования на языке C нам понадобится AVR GCC Toolchain.

Windows:
Устанавливаем WinAVR, который содержит все необходимое.

Debian и Ubuntu:
sudo apt-get install gcc-avr binutils-avr avr-libc

MacOs X:
Устанавливаем CrossPack for AVR Development

 Также нам потребуется установленная Arduino IDE, т.к. она содержит утилиту avrdude, которая нужна для загрузки прошивки в контроллер. CrossPack тоже содержит avrdude, но версия, идущая с ним, не умеет работать с Arduino.

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

#Контроллер, установленный на плате. Может быть другим, например atmega328 
DEVICE     = atmega168

#Тактовая частота 16 МГц 
CLOCK      = 16000000

#Команда запуска avrdude. Ее нужно скопировать из Arduino IDE.
AVRDUDE = /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -carduino -P/dev/tty.usbserial-A600dAAQ -b19200 -D -p atmega168

OBJECTS    = main.o

COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)

all:	main.hex

.c.o:
	$(COMPILE) -c $< -o $@

.S.o:
	$(COMPILE) -x assembler-with-cpp -c $< -o $@

.c.s:
	$(COMPILE) -S $< -o $@

flash:	all
	$(AVRDUDE) -U flash:w:main.hex:i

clean:
	rm -f main.hex main.elf $(OBJECTS)

main.elf: $(OBJECTS)
	$(COMPILE) -o main.elf $(OBJECTS)

main.hex: main.elf
	rm -f main.hex
	avr-objcopy -j .text -j .data -O ihex main.elf main.hex
	avr-size --format=avr --mcu=$(DEVICE) main.elf


В этом файле нам нужно вписать свою команду для запуска avrdude. На разных системах она будет выглядеть по разному. Чтобы узнать свой вариант, запускаем Arduino IDE и в настройках ставим галочку «Show verbose output during upload».

 

 Теперь загружаем в Arduino любой скетч и смотрим сообщения, выводимые в нижней части окна. Находим там вызов avrdude, копируем все, кроме параметра -Uflash и вставляем в Makefile после «AVRDUDE = ».

 Небольшое замечание: все отступы в Makefile делаются символами табуляции (клавишей Tab). Если ваш текстовый редактор заменяет эти символы пробелами, команда make откажется собирать проект.

Теперь создадим файл main.c — собственно текст нашей программы, в которой традиционно помигаем светодиодом.

 #include <avr/io.h>

#include <util/delay.h>

#define LED_PIN 5

int main() {
	DDRB |= 1 << LED_PIN;	
	while(1) {
		PORTB |= 1 << LED_PIN;
		_delay_ms(1000);
		PORTB &= ~(1 << LED_PIN);
		_delay_ms(1000);
	}
	return 0;
}

 Наш проект готов. Откроем консоль в директории нашего проекта и введем команду «make»:

 

 Как видим, размер получившейся прошивки составляет всего 180 байт. Аналогичный ардуиновский скетч занимает 1116 байт в памяти контроллера.

Теперь вернемся к консоли и введем «make flash» чтобы загрузить скомпилированный файл в контроллер:

 

 Если загрузка прошла без ошибок, то светодиод, подключенный к 13 контакту платы, радостно замигает. Иногда avrdude не может найти плату или отваливается по таймауту — в этом случае может помочь передегивание USB кабеля. Также, во избежание конфликтов доступа к плате, не забудьте закрыть Arduino IDE перед командой «make flash».

 по материалам https://habr.com/ru/post/247663/

 Для того чтобы разобраться в предложенной в примере програиме смотрим здесь

воскресенье, 6 декабря 2020 г.

Задачка для кружка

Запишите любым способом алгоритм выполнения этой инструкции(по возможности наиболее короткий) исполнитель - человек

 

 Вычеркивать числа не делящиеся на 4 и делящиеся на 3 и кончающися на 0, также вычеркивать числа делющиеся на 4 и не делящиеся на 3 и  оканчивающиеся на 0, вычеркивать числа не делящиеся на 4 и делящихся на 3 и не кончающиеся на 0, также вычеркивать все числа которые делятся на 4

ПРЕДВОРИТЕЛЬНОЕ УПРОЩЕНИЕ ИНСТРУКЦИИ

А - число делется на 4 

В - число делется на 3

С - число оканчивается на 0

неАВС или АнеВС или неАВнеС или А = 1

неАВС или АнеВС или неАВнеС или А

неАВ(С или неС) = неАВ

неАВ или АнеВС или А

А(неВС или 1) = А

неАВ или А = 1  

А  В   -А    -АВ    неАВ или А   A или В

1   1    0       0        1                      1 

1   0    0       0                            1

0   1    1       1                             1

0   0    1       0        0                      0

ПРОЩЕ => А или В  = 1 (вычеркивать числа которые деляться на 4 или 3)


 для размышления https://myrobot.ru/articles/stuff_braitenberg.php

 

КРУЖОК ОТ 07.12.20

 МИКРОКОНТРОЛЛЕР ARDUINO UNO

Характеристики Arduino Uno

Микроконтроллер ATmega328
Рабочее напряжение
Напряжение питания (рекомендуемое) 7-12В
Напряжение питания (предельное) 6-20В
Цифровые входы/выходы 14 (из них 6 могут использоваться в качестве ШИМ-выходов)
Аналоговые входы 6
Максимальный ток одного вывода 40 мА
Максимальный выходной ток вывода 3.3V 50 мА
Flash-память 32 КБ (ATmega328) из которых 0.5 КБ используются загрузчиком
SRAM 2 КБ (ATmega328)
EEPROM 1 КБ (ATmega328)
Тактовая частота16 МГц

 Микроконтро́ллер (англ. Micro Controller Unit, MCU) — микросхема, предназначенная для управления электронными устройствами. Типичный микроконтроллер сочетает на одном кристалле функции процессора и периферийных устройств, содержит ОЗУ и (или) ПЗУ.

 Рабочее напряжение: Наибольшее значение напряжения постоянного или переменного тока, которое может возникнуть (локально) по любой изоляции при номинальном напряжении питания (колебаниями напряжений можно пренебречь) в нормальных режимах работы или при разомкнутой электрической цепи.

 Широ́тно-и́мпульсная модуля́ция (ШИМ, англ. pulse-width modulation (PWM)) — процесс управления мощностью методом пульсирующего включения и выключения потребителя энергии. Различают ана́логовую ШИМ и цифрову́ю ШИМ, дво́ичную (двуху́ровневую) ШИМ и трои́чную (трёхуровневую) ШИМ.

Flash-память, SRAM и EEPROM

 
Современные типы «твердотельной памяти»

 Начнём с flash-памяти. Есть NOR (логическое не-или) и NAND (логическое не-и) Flash-память, которые несколько отличаются по своей организации (например, NOR – двумерная, NAND может быть и трехмерной), но имеют один общий элемент – транзистор с плавающим затвором. между управляющим затвором и каналом, по которому ток течёт от истока к стоку, мы помещаем тот самый плавающий затвор, окружённый тонким слоем диэлектрика. В результате, при протекании тока через такой «модифицированный» полевой транзистор часть электронов с высокой энергией туннелируют сквозь диэлектрик и оказываются внутри плавающего затвора. Понятно, что пока электроны туннелировали, бродили внутри этого затвора, они потеряли часть энергии и назад практически вернуться не могут. Без перезаписи, без обновления ячеек хотя бы раз в несколько лет Flash «обнуляется» так же, как оперативная память, после выключения компьютера. NOR-флеш наиболее применима в устройствах с энергонезависимой памятью относительно небольшого объёма, требующих быстрого доступа по случайным адресам и с гарантией отсутствия сбойных элементов, например как встраиваемая память программ однокристальных микроконтроллеров.

 Статическая память с произвольным доступом (SRAM, static random access memory) — полупроводниковая оперативная память, в которой каждый двоичный или троичный разряд хранится в схеме с положительной обратной связью, позволяющей поддерживать состояние без регенерации, необходимой в динамической памяти (DRAM). Тем не менее сохранять данные без перезаписи SRAM может, только пока есть питание, то есть SRAM остается энергозависимым типом памяти. Произвольный доступ (RAM — random access memory) — возможность выбирать для записи/чтения любой из битов (тритов) (чаще байтов (трайтов), зависит от особенностей конструкции), в отличие от памяти с последовательным доступом (SAM, англ. sequential access memory). SRAM применяется в микроконтроллерах и ПЛИС, в которых объём ОЗУ невелик (единицы килобайт), зато нужны низкое энергопотребление (за счёт отсутствия сложного контроллера динамической памяти), предсказываемое с точностью до такта время работы подпрограмм и отладка прямо на устройстве.

 EEPROM (англ. Electrically Erasable Programmable Read-Only Memory) — электрически стираемое перепрограммируемое ПЗУ (ЭСППЗУ), один из видов энергонезависимой памяти (таких, как PROM и EPROM). Память такого типа может стираться и заполняться данными до миллиона раз.

Плата Arduino Uno R3: схема, описание, подключение устройств

 Пины Ардуино используются для подключения внешних устройств и могут работать как в режиме входа (INPUT), так и в режиме выхода (OUTPUT).  К каждому входу может быть подключен встроенный резистор 20-50 кОм с помощью выполнения команды pinMode () в режиме INPUT_PULLUP. Допустимый ток на каждом из выходов – 20 мА, не более 40 мА в пике.
Для удобства работы некоторые пины совмещают в себе несколько функций:
  • Пины 0 и 1  – контакты UART (RХ и TX соответственно) .
  • Пины c 10 по 13 – контакты SPI (SS, MOSI, MISO и SCK соответственно)
  • Пины A4 и A5 – контакты I2C (SDA и SCL соответственно).

 Пины с номерами от 0 до 13 являются цифровыми. Это означает, что вы можете считывать и подавать на них только два вида сигналов: 1 или 0. С помощью ШИМ также можно использовать цифровые порты для управления мощностью подключенных устройств.

Пин ардуино Адресация в скетче Специальное назначение ШИМ
Цифровой пин 0 0 RX
Цифровой пин 1 1 TX
Цифровой пин 2 2 Вход для прерываний
Цифровой пин 3 3 Вход для прерываний ШИМ
Цифровой пин 4 4

Цифровой пин 5 5
ШИМ
Цифровой пин 6 6
ШИМ
Цифровой пин 7 7

Цифровой пин 8 8

Цифровой пин 9 9
ШИМ
Цифровой пин 10 10 SPI (SS) ШИМ
Цифровой пин 11 11 SPI (MOSI) ШИМ
Цифровой пин 12 12 SPI (MISO)
Цифровой пин 1313SPI (SCK)

К выходу также подсоединен встроенный светодиод (есть в большинстве плат Arduino)

 Аналоговые пины Arduino Uno предназначены для подключения аналоговых устройств и являются входами для встроенного аналого-цифрового преобразователя (АЦП), который в ардуино уно десятиразрядный.

Пин Адресация в скетче Специальное назначение
Аналоговый пин A0 A0 или 14
Аналоговый пин A1 A1 или 15
Аналоговый пин A2 A2 или 16
Аналоговый пин A3 A3 или 17
Аналоговый пин A4 A4 или 18 I2C (SCA)
Аналоговый пин A5 A5 или 19 I2C (SCL)

 При этом остается возможность пожавать и снимать с них цифровой сигнал с этих шести пинов

  • AREF – выдает опорное напряжения для встроенного АЦП.
  •  image04
  • RESET – подача низкого сигнала на этом входе приведет к перезагрузке устройства.

 


 

пятница, 4 декабря 2020 г.

КРУЖОК ОТ 04.12.20

Те, кто не знаком с микроконтроллерами, могут подумать, что это при­бор с жестко заданными (стандартизированными) функциями. Это абсолют­но не так. Термин «микроконтроллер» - это очень общий термин, содержа­ние которого обычно определяется производителем. «Микроконтроллер — это самостоятель­ная компьютерная система, которая содержит процессор, вспомогательные схемы и устройства ввода-вывода данных, размещенные в общем корпусе»

Логические основы вычислительной техники - логические элементы

Логические основы вычислительной техники - логические устройства 

Регистр — это последовательностное логическое устройство, используемое для хранения n-разрядных двоичных чисел и выполнения преобразований над ними. Регистр представляет собой упорядоченную последовательность триггеров, число которых соответствует числу разрядов в слове. С каждым регистром обычно связано комбинационное цифровое устройство, с помощью которого обеспечивается выполнение некоторых операций над словами.

Типичными являются следующие операции:

● прием слова в регистр;

● передача слова из регистра;

● поразрядные логические операции;

● сдвиг слова влево или вправо на заданное число разрядов;

● преобразование последовательного кода слова в параллельный и обратно;

● установка регистра в начальное состояние (сброс).

Фактически любое цифровое устройство можно представить в виде совокупности регистров, соединенных друг с другом при помощи комбинационных цифровых устройств.

Классификация

● накопительные (регистры памяти, хранения);

● сдвигающие.

В свою очередь сдвигающие регистры делятся:

● по способу ввода-вывода информации на параллельные, последовательные, комбинированные;

● по направлению передачи информации на однонаправленные, реверсивные.

Для чего нужны регистры

Регистры процессора – это ячейки сверхбыстрой оперативной памяти, которые предназначены для временного хранения промежуточных данных. Различные регистры содержат информацию в различном виде: адреса и указатели сегментов памяти или системных таблиц, индексы элементов массива и пр.

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

Любой регистр процессора – это цифровая электронная схема, содержащая последовательность двоичных чисел различной разрядности (16, 32 или 64) и результаты выполнения преобразований между ними. По типу приема и передачи информации могут быть последовательными (сдвиговыми) и параллельными.

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

Регистры-флаги известны также как регистры условий. Они показывают определенный результат выполнения операции, который может быть нулевым, положительным, отрицательным, или указывать на переполнение. Обычно коды условий объединяются в группы и образуют регистр другого типа – управляющий. Менять регистры-флаги возможно, но нежелательно, чтобы не исказить цельный результат.

Регистры, содержащие указатели на особые области памяти (стек, базу, команду), называются регистрами-указателями. Самый главный из них – указатель стека. Стек – это часть памяти, состоящая из ячеек, следующих друг за другом, т.е. взять из стека можно только ту ячейку, которая лежит сверху. Именно на эту вершину и указывает регистр стека.

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

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

Индексных регистров два – это индекс источника и индекс приемника. Они используются для получения адреса данных стека в сочетании с регистрами-указателями.

Сегментные регистры используются при сегментной адресации памяти. При этом память делится на блоки (сегменты) различной длины. Адрес нужной ячейки памяти определяется адресом начала блока и величиной сдвига относительно него. Всего сегментных регистров четыре: для кодового сегмента, сегмента данных, сегмента стека и дополнительного сегмента.

Регистры управления контролируют работу процессора и недоступны пользователю. Их выполнение в основном, контролируют машинные программы. В них содержится информация о текущей выполняемой команде, состоянии процессора, а также они локализуют управляющие структуры при работе процессора в защищенном режиме.

Общее устройство микроконтроллера

по материалам https://studopedia.ru/2_99065_vvedenie.html