Современная электроника №1/2022
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 42 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 1 2022 if (SPDR!=0b11111110) // если кодовая комбинация не получена PORTD=0b00000000; // посылаем на все линии порта PD - 0 else if (SPDR==0b11111110) // если кодовая комбинация получена {PORTD=0b00000001; // включить светодиод D1 _delay_ms(1000); // задержка PORTD=0b10000000; // погасить светодиод D1 _delay_ms(1000); } // задержка }} Код программы инициализации для ведомого микроконтроллера DD3: #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> #include <util/delay.h> int main() { PORTB=0b00000000; // инициализа- ция порта PB микросхемы DD3 DDRB=0b00000000; // линии порта PB работают как входы PORTD=0b00000000; // инициализа- ция порта PD микросхемы DD3 DDRD=0b11111111; // линии порта PD работают как выходы SPCR=0b01000011; // инициализа- ция SPI while (1) // бесконечный цикл { if (SPDR!=0b11111110) // если кодовая комбинация не получена PORTD=0b00000000; // посылаем на все линии порта PD - 0 else if (SPDR==0b11111110) // если кодовая комбинация получена {PORTD=0b00000001; // включить светодиод D2 _delay_ms(1000); // задержка PORTD=0b10000000; // погасить светодиод D2 _delay_ms(1000); } // задержка }} Код программы инициализации вво- дится на вкладке Source Code схемного редактора на отдельной закладке для каждого микроконтроллера. После того как в рабочей области проекта собрана схема, а на вкладке Source Code введён код программы, можно запускать моделирование. В резуль- тате, если компилятор не обнаружит ошибки в программе, на диске ком- пьютера в рабочей папке проекта будут созданы для каждого микрокон- троллера файлы *.elf , *.hex и *.c. Проанализируем работу демон- страционной схемы, представлен- ной на рис. 20. На вкладке Source Code программно были даны ука- зания ведущему микроконтролле- ру через интерфейс SPI отправить каждому ведомому микроконтрол- леру кодовую комбинацию. Это дей- ствие выполняется последовательно. Сначала ведущий микроконтрол- лер через линию PB0 своего порта PB подаёт на линию SS микросхемы DD2 логический ноль, а через линию PB1 на линию SS микросхемы DD3 логическую единицу, что оповеща- ет первое ведомое устройство о том, что именно оно выбрано для обмена данными с ведущим устройством по интерфейсу SPI, активизирует интер- фейс SPI микросхемы DD2 и делает неактивным интерфейс SPI микро- схемы DD3. После задержки ведущий микрокон- троллер через линию PB1 своего пор- та PB подаёт на линию SS микросхемы DD3 логический ноль, а через линию PB0 на линию SS микросхемы DD2 – логическую единицу, что активизирует интерфейс SPI микросхемыDD3 и дела- ет неактивным интерфейс SPI микро- схемы DD2. Если ведомое устройство выбра- но ведущим, то программа ведомо- го микроконтроллера выводит на линии порта PD все нули, в резуль- тате чего подключённый к пор- ту светодиод будет погашен. Как только по интерфейсу SPI получе- на кодовая комбинация от ведуще- го микроконтроллера, запускает- ся подпрограмма, дающая указания ведомому микроконтроллеру запу- стить цикл, в котором последова- тельно выводятся на линию порта PD0 значения логической 1 и 0. Эти значения удерживаются при помо- щи команды задержки. После запуска моделирования при помощи двух светодиодов, подклю- чённых к линиям PD0 порта PD ведо- мых микроконтроллеров DD2 и DD3, мы можем проверить правильность работы программы – светодиоды под- свечиваются и гаснут поочерёдно, что наглядно демонстрирует осцил- лограмма, представленная на рис. 22. В момент времени, когда на выводе PD0 микроконтроллера DD2 едини- ца, на выводе PD0 микроконтролле- ра DD3 – ноль. Литература 1. STM32F103х4, STM32F103х6 MCU Datasheet. STMicroelectronics. 2009. 2. Proteus VSM Help. Labcenter Electronics. 2020. 3. STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM-based 32-bit MCUs. Referencemanual. STMicroelectronics. 2010. 4. Колесникова Т. Работа с универсальным синхронно/асинхронным приёмо-пере- датчиком USART в программной среде Proteus 8.11 // Современная электрони- ка. 2021. № 8. С. 34. 5. 8-bit AVR Microcontroller with 16K Bytes In-System Programmable Flash. ATmega16, ATmega16L. Atmel Corporation. 2010. Рис. 22. Осциллограмма работы светодиодов D1 и D2, подключённых к ведомым микроконтроллерам ATmega16
RkJQdWJsaXNoZXIy MTQ4NjUy