если программный последовательный канал с определенными ограничениями подходит, то почему бы и нет.
Вид для печати
если программный последовательный канал с определенными ограничениями подходит, то почему бы и нет.
А вот и предварительная платка ардуины 70х
https://sun9-76.userapi.com/impg/wal...da9&type=album
https://sun9-51.userapi.com/impg/vLu...f56&type=album
Зимой тоже баловался с ВЕ39. Получились как всегда часики.
https://habrastorage.org/webt/5q/wq/...htnvxmupw.jpeg
Камень - КР1816ВЕ39, защелка 580ИР82, флеха AT28C64 и ВВ55 в качестве PIO. Входящее напряжение 12 вольт, обычная кренка для 5в на логику и повышайка DC/DC на 555 таймере до +180в для ИНок.
https://habrastorage.org/webt/3s/iw/...7vfxircie.jpeg
Рядом с камнем там еще i2c PCF8563 (RealTimeClock), где-то сбоку 1-wire DS18B20 (температура). Срет отладочную инфу в UART, а оперативную инфу - в i2c 16x02 дисплей:
https://habrastorage.org/webt/tn/ro/...u2s2g_qvg.jpeg
В это время в UART летит примерно что-то такое:
https://habrastorage.org/webt/hd/qt/...k_ocajfgdi.png
Ну и всё вместе с ИН-1, статика:
https://habrastorage.org/webt/_g/qm/...pkbpv1wae.jpeg
Камень прикольный. Порадовало что у него нет команды вычитания (оно делается через комплементарное сложение). И он настоящий 8-битный, без всяких там логических пар 16-битных регистров, типа как в том же 8051 или Z80 или 8088. От 8051 он кстати сильно отличается, что бы кто не говорил. В 8051 есть такие жирные команды как умножение и деление, а так же как-бы логическая 16 битная пара регистров AB, поэтому там взять температуру с DS18B20 и преобразовать в человеко-читаемый (BCD) вид - дело пары-тройки команд. Здесь же мне нужно было дробную часть умножить на 10, пришлось крутить влево по нескольку раз, да все это еще с расширением в 16-битное значение, а значит крутить по два раза на каждый полу-байт, типа так как-то:
https://habrastorage.org/webt/am/ke/...i5hmithze.jpeg
Вообщем математику, отличную от 8-битной, на нем реализовывать очень весело, гораздо веселее 8051 камня. Но мне нравится. Этакий брайнфак - размять мозги вечерочком. Рекомендую )
Я делал термометр
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
32Кб отборного *****кода на асме. В скомпиленном виде 1974 байта. Ну если и вправду интересно - пожалуйста, в прикрепленном файле, но там реально *****код и уже через неделю мне самому в нем ничего не понять.
Да может и короче, а может я уже и переделал чтение температуры по сравнению со скриншотом выше -) Дела давно минувшие, я ж не зря говорю что через неделю уже с трудом вообще можно понять там что к чему. Сделал, работают, ну и все, забыли.
Но помню лишь одно - об какой-либо оптимизации и речи не шло, так как ВЕ39 все-таки во-первых в два раза быстрее чем ВЕ35, и поэтому сколько там миллисекунд (или даже секунд) будет вычисляться температура, или любое другое действие - абсолютно все равно, так как режимы отображения ВРЕМЯ или ТЕМПЕРАТУРА меняются раз в минуту примерно. А все остальное время проц практически сидит и курит бамбук - ну кнопачке там опрашивает, в таймер выпадает для счета миллисекунд и тд.
Спасибо, очень интересно! И столько всего запрограммировано!..
Это оптимизация по времени, а есть еще оптимизация по длине кода :)
Кстати, у вас там есть отдельная подпрограмма для инкремента BCD числа. Это можно сделать в две команды, пользуясь десятичной коррекцией:
С помощью такого инкремента можно и BINBCD реализовать. Но сильно по длине не выиграть.Код:inc a
da a
Я старался вылизать по длине ввод-вывод по 1wire, возможно будет интересно посмотреть на мою реализацию. Побитных функций не делал вообще
Да, но задачей было влезть в 2048 байт, что бы использовать вместо флехи в самом финале РФ4. Что и было выполненно - прошивка 1974 байта влезла в керамо-золотую РФ4, которую в итоге и поставил на плату (но сфоткать забыл).
Кстати, это не единственное что было сделано - еще была заменена КРЕНка на современный человеческий dc/dc, потому что в закрытой коробке КРЕНка грелась до ~75 градусов (вместе с радиатором), что как бы для неё и нормально вполне, по даташиту, так сказать, только она разогревала все вокруг себя - электролиты, батарейку (sic!) и тд - и вот это уже не круто. Пришлось её выпилить, пожертвовав внешним видом всей конструкции, зато теперь всё холодное ну и потребление от 12 вольт разумеется снизилось в разы:
https://habrastorage.org/webt/rp/qi/...px4zf0oju.jpeg
Ну а часики эти с тех самых пор (с зимы) стоят на прогоне 24/7 в пластиковом контейнере из фикс-прайса, ждут наступления лета и вдохновения для создания корпуса:
https://habrastorage.org/webt/ll/dj/...bvqklas0c.jpeg
Увидел тему - а это мой любимый микроконтроллер! В некоторых отношениях он даже иногда
удобнее 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