Современная электроника №6/2023

ИНЖЕНЕРНЫЕ РЕШЕНИЯ 34 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА • № 6 / 2023 Далее переключаемся в опцию настройки портов , где на экран выво - дится корпус МК со всеми портами ввода / вывода ( рис . 5 и ). Порты с сиг - налами ADC_IN (P0.1), XTAL1 (P0.2) и XTAL2(P0.3) определяем как аналого - вые входы / выходы (Analog I/O). Пример для порта P0.1 – рис . 5 к . Порты , к кото - рым подключаются сигналы от кнопок (P0.4, P0.5), и порт для SPI0_MISO (P1.0) определяем как цифровые входы (Digital OpenDraine I/O). Пример для порта P0.4 – рис . 5 л . Остальные порты , кроме неис - пользованных P0.0 и P1.7 ( которые так - же настраиваем как цифровые входы ), определяем как цифровые слаботоко - вые (Low drive) выходы (Digital Push- Pull Output). Пример для порта P1.2 – рис . 5 м . Здесь необходимо отметить , что при настройке системной тактовой частоты , сигнал которой (SYSCLK_OUT) выходит с порта P1.2, тактирует DDS и подключается к частотомеру относитель - но длинным кабелем , во время настрой - ки частотыможно установить « сильно - токовым » (High drive – рис . 5 н ), так как в этом случае его фронты будут существен - но круче , и поэтому частота будет более точно измеряться частотомером . После настройки этот порт необходимо пере - ключить обратно на слаботоковый (Low drive), так как DDS расположен близко к МК , и для его тактирования вполне достаточен слаботоковый выход . На порты с P0.0 по P0.6 необходимо обязательно установить опцию пропу - ска (Skip), отмеченную красными кре - стиками на рис . 5 и . В конце настройки устройств необходи - мо разрешить работу матрицы соедине - ний (Enable Crossbar – enabled) – рис . 5 о . Остальные опции меню рис . 4, отме - ченные галочками , в связи с простотой подробно не описаны , но их необходи - мо также установить следующим обра - зом . В Interrupt – запретить все пре - рывания , Supply Monitor – разрешить , Voltage Regulators – разрешить , в PCA – запретить Watchdog Timer. После проделанной описанной выше настройки устройств МК созданную конфигурацию необходимо записать на диск , нажав в левом верхнем углу экрана кнопку с двумя дискетами . В этом случае средой Simplisity Studio сгенерируется программа инициали - зации устройств на C51 с названием InitDevice.c, которая автоматически подключится к основной программе . Текст этой программы , если её распе - чатать , займет 7 страниц формата А 4 шрифтом размера 10. Можно , конеч - но , написать такую программу своими силами , но на это придётся потратить несколько дней достаточно кропотли - вой работы , так как самостоятельное написание такой программы достаточ - но сложно и не гарантировано от оши - бок . Автоматическая генерация такой программы средой Simplisity Studio про - изойдёт всего за пару - тройку секунд , и , что главное , если вышеуказанные настройки сделаны верно , такая про - грамма гарантирована от ошибок . Вот поэтому на рис . 4 и рис . 5 так подробно и описаны все настройки устройств МК . Теперь по поводу критически важ - ных особенностей некоторых подпро - грамм . Основой всех подпрограмм вывода информации по интерфейсу SPI слу - жит простейшая подпрограмма выво - да байта по этому интерфейсу : На базе этой подпрограммы основаны подпрограммы выво - да команд и данных в дисплей : Эти подпрограммы используются для инициализации и очистки дисплея с максимальной контрастностью , кото - рая зависит не только от самой коман - ды , определяющей контрастность , но и от команды , определяющей темпе - ратурный коэффициент ( и , как ни странно , в большей степени ), о чём часто забывают , а для некоторых этот факт вообще неизвестен . Подпрограм - ма инициализации и очистки дисплея приведена ниже . О выводе символов в дисплей Nokia-5110 подробно написано в ста - тье автора [3], и , чтобы не повторять - ся , на взгляд автора , описывать этот вывод здесь не имеет смысла . Для цифр использован шрифт Clarendon жирный , размер символов 14×16 точек . Теперь по поводу вывода информа - ции в DDS. Цифровое значение частоты выво - дится в DDS по SPI двумя двухбайт - ными (16- разрядными ) словами . Но поскольку интерфейс SPI однобайт - ный , имеет смысл сделать следующее совмещение ( объединение ) одного двухбайтного числа и массива из двух однобайтных : В этом совмещении 2- байтное чис - ло U.US и два элемента двухбайтного массива UB[1]: U.UB [0] ( старший байт ) и U.UB [1] ( младший байт ) перераспре - деляют одно и то же место в памяти МК . Это означает , что два однобайт - ных числа U.UB [0] и U.UB [1] полно - стью определяют двухбайтное число U.US , и наоборот , число U.US полно - стью определяет два числа U.UB [0] и U.UB [1]. Другими словами , если зада - но двухбайтное (uint16_t) число U.US , то однобайтные (uint8_t) числа U.UB[ 0] и U.UB [1] автоматически определяются как его старший и младший байты соот - ветственно . Верно также и обратное . Здесь необходимо напомнить ( см . выше ), что перед тем как выводить информацию по SPI в DDS, необходимо // Вывод байта по SPI void outspi(uint8_t byte) {SPI0DAT = byte; // Вывод байта по SPI while (!SPI0CN0_SPIF); // Ожидание окончания вывода байта SPI0CN0_SPIF = 0; // Сброс флага окончания передачи } // Подпрограмма инициализации и очистки ЖКИ void CLS(void) { uint16_t i; RES = 1; DEL3MS(); // Вывод команды по SPI для дисплея void outcmd(uint8_t byte) { DC = 0; CSD = 0; outspi(byte); CSD = 1; } // Вывод данных по SPI для дисплея void outdat(uint8_t byte) { DC = 1; CSD = 0; outspi(byte); CSD = 1; } //---------- union { uint16_t US; // U.UB[ 0]- Ст.б. uint8_t UB[1]; // U.UB[ 1]- Мл.б. } U; // U.US - 2-байтное uint16_t число. //---------- RES = 0; DEL3MS(); RES = 1; DEL3MS(); outcmd(0x21); // Режим внешних команд. outcmd(0x04); // temperature coefficient 0 - высокая контрастность outcmd(0xC0); // Set LCD Vop(Contrast = 80h + 40h). outcmd(0x13); // LCD bias mode 1:48 outcmd(0x20); // Режим cтандартных (внутр.) команд, горизонт. адресация outcmd(0x0C); // Нормальный режим отображения (черным по белому) outcmd(0x80); // x=0; outcmd(0x40); // y=0; for (i = 0; i < 504; i++) { outdat(0x00); //Очистить lcd } outcmd(0x22); // Стандартные команды, вертикальная адресация }

RkJQdWJsaXNoZXIy MTQ4NjUy