если программный последовательный канал с определенными ограничениями подходит, то почему бы и нет.
если программный последовательный канал с определенными ограничениями подходит, то почему бы и нет.
А вот и предварительная платка ардуины 70х
![]()
Denn (03.05.2023)
Зимой тоже баловался с ВЕ39. Получились как всегда часики.
Камень - КР1816ВЕ39, защелка 580ИР82, флеха AT28C64 и ВВ55 в качестве PIO. Входящее напряжение 12 вольт, обычная кренка для 5в на логику и повышайка DC/DC на 555 таймере до +180в для ИНок.
Рядом с камнем там еще i2c PCF8563 (RealTimeClock), где-то сбоку 1-wire DS18B20 (температура). Срет отладочную инфу в UART, а оперативную инфу - в i2c 16x02 дисплей:
В это время в UART летит примерно что-то такое:
Ну и всё вместе с ИН-1, статика:
Камень прикольный. Порадовало что у него нет команды вычитания (оно делается через комплементарное сложение). И он настоящий 8-битный, без всяких там логических пар 16-битных регистров, типа как в том же 8051 или Z80 или 8088. От 8051 он кстати сильно отличается, что бы кто не говорил. В 8051 есть такие жирные команды как умножение и деление, а так же как-бы логическая 16 битная пара регистров AB, поэтому там взять температуру с DS18B20 и преобразовать в человеко-читаемый (BCD) вид - дело пары-тройки команд. Здесь же мне нужно было дробную часть умножить на 10, пришлось крутить влево по нескольку раз, да все это еще с расширением в 16-битное значение, а значит крутить по два раза на каждый полу-байт, типа так как-то:
Вообщем математику, отличную от 8-битной, на нем реализовывать очень весело, гораздо веселее 8051 камня. Но мне нравится. Этакий брайнфак - размять мозги вечерочком. Рекомендую )
CodeMaster (03.05.2023), Denn (03.05.2023), max232cpe (03.05.2023), RCgoff (03.05.2023)
Я делал термометр
https://github.com/rcgoff/therm8048
Запрограммирован интерфейс 1wire с DS18B20 (немного переусложнен, можно было бы читать при инициализации presence pulse только один раз, я читаю два раза)
Запрограммирован двухпроводной интерфейс с со стандартным текстовым ЖКИ на HD44780 по схеме наподобие этой
Для строба сдвигового регистра использован выход строба порта-расширителя, так что на весь функционал задействовано только 2 линии портов МК: P1.0 под DS18B20 и P2.1 под данные ЖКИ.
Интересно бы на код посмотреть! И какого он объема вышел
- - - Добавлено - - -
А не короче было сделать что-то вроде:
Код:;умножение числа в аккумуляторе на 10 ;на выходе - 16-бит число в r4 и a mov r2,a mov r3,#9 mov r4,#0 loop: add a,r2 jnc skip inc r4 skip: djnz r3,loop
Последний раз редактировалось RCgoff; 04.05.2023 в 11:26.
32Кб отборного *****кода на асме. В скомпиленном виде 1974 байта. Ну если и вправду интересно - пожалуйста, в прикрепленном файле, но там реально *****код и уже через неделю мне самому в нем ничего не понять.
Да может и короче, а может я уже и переделал чтение температуры по сравнению со скриншотом выше -) Дела давно минувшие, я ж не зря говорю что через неделю уже с трудом вообще можно понять там что к чему. Сделал, работают, ну и все, забыли.
Но помню лишь одно - об какой-либо оптимизации и речи не шло, так как ВЕ39 все-таки во-первых в два раза быстрее чем ВЕ35, и поэтому сколько там миллисекунд (или даже секунд) будет вычисляться температура, или любое другое действие - абсолютно все равно, так как режимы отображения ВРЕМЯ или ТЕМПЕРАТУРА меняются раз в минуту примерно. А все остальное время проц практически сидит и курит бамбук - ну кнопачке там опрашивает, в таймер выпадает для счета миллисекунд и тд.
RCgoff (03.05.2023)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Спасибо, очень интересно! И столько всего запрограммировано!..
Это оптимизация по времени, а есть еще оптимизация по длине кода![]()
Кстати, у вас там есть отдельная подпрограмма для инкремента BCD числа. Это можно сделать в две команды, пользуясь десятичной коррекцией:
С помощью такого инкремента можно и BINBCD реализовать. Но сильно по длине не выиграть.Код:inc a da a
Я старался вылизать по длине ввод-вывод по 1wire, возможно будет интересно посмотреть на мою реализацию. Побитных функций не делал вообще
Последний раз редактировалось RCgoff; 03.05.2023 в 12:20.
Tronix (03.05.2023)
Да, но задачей было влезть в 2048 байт, что бы использовать вместо флехи в самом финале РФ4. Что и было выполненно - прошивка 1974 байта влезла в керамо-золотую РФ4, которую в итоге и поставил на плату (но сфоткать забыл).
Кстати, это не единственное что было сделано - еще была заменена КРЕНка на современный человеческий dc/dc, потому что в закрытой коробке КРЕНка грелась до ~75 градусов (вместе с радиатором), что как бы для неё и нормально вполне, по даташиту, так сказать, только она разогревала все вокруг себя - электролиты, батарейку (sic!) и тд - и вот это уже не круто. Пришлось её выпилить, пожертвовав внешним видом всей конструкции, зато теперь всё холодное ну и потребление от 12 вольт разумеется снизилось в разы:
Ну а часики эти с тех самых пор (с зимы) стоят на прогоне 24/7 в пластиковом контейнере из фикс-прайса, ждут наступления лета и вдохновения для создания корпуса:
![]()
Увидел тему - а это мой любимый микроконтроллер! В некоторых отношениях он даже иногда
удобнее 8051. При использовании внешнего ПЗУ больше портов свободных остается, пошаговый
режим есть, очень удобный аппаратный расширитель in/out ВР43. Ассемблерный текст его в целом
более понятный, чем 8051. Те для тех применений, где его ресурсов хватает, я предпочитаю 8048.
Только одно неудобство - нет версии с flash-памятью. Основное неудобство для меня - невозможно
сохранить регистры в стеке, что сильно осложняет обработчики прерываний.
Делал я на нем отладочные платы разные, сперва не мог понять, почему некоторые кристаллы
работают, некоторые нет. Оказалось я не подал 5V на ножку 26.
Подключал к нему MAX7219 и TM1638.
Из промышленных устройств, что я встречал - на нем собран программатор КРОТ, прецизионный
вольтметр HP3468 (3468 и КРОТ есть у меня). В 3468 стоит странно маркированный скорее всего
8049 с внешним ПЗУ (в приборе почти все детали с пропиетарной маркировкой), в котором две
прошивки сразу, их можно переключать с задней панели, но я не решился из опасения разрушить
калибровочные константы. Константы хранятся в статическом ОЗУ, питаемом от батареи (в приборе
ни одного подстроечного резистора). Еще на 8048 собран еще более прецизионный последователь
3468 - HP3478A. Последний собран вообще на двух 8048! 3478 с интерфейсом GPIB, а 3468 - HP-IL
Про клавиатуры и KBD controller 8042 (близкий родственник 8048) думаю все знают.
Отладчик я использовал AVSIM48, но ассемблер брал не из его комплекта, а X8748 от 2500 A.D
Кстати, эти его "странные ограничения" унаследованы от 4004/4040
Последний раз редактировалось i8088; 07.05.2023 в 11:17.
max232cpe (07.05.2023)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)