Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Разное (http://zx-pk.ru/forumdisplay.php?f=90)
-   -   Изучаем микроконтроллер КР1878ВЕ1. (http://zx-pk.ru/showthread.php?t=21076)

CodeMaster 2nd April 2014 08:21

Quote:

Originally Posted by perestoronin (Post 693463)
Кто шил КР1878ВЕ1 под Z-контроллер KOE.
Что ставить в бит включения счётчика начального пуска нужно ? On ?

Я ничего не ставил ни где, прога в DOS сама всё прошила и верифицировала.

Jukov 2nd April 2014 10:33

Quote:

Originally Posted by Viktor2312 (Post 697145)
Посмотрел в Чип-Дипе, не знаю, где можно дороже купить 82 руб. Ха - это дорого, сейчас в кафешке, ссадил, так от нечего делать 150 руб, выпил бокальчик оочень хорошего пива. Это не деньги 82 руб. по нынешним временам.

Жду МК, как придут, может помучаю, хотя сейчас не время, сейчас нужно ВМИР-1, развивать, весна.

А мы всё жалуемся что в Росси жить плохо, что мы бедные. Зажрались...

Viktor2312 2nd April 2014 11:23

Quote:

Originally Posted by Jukov (Post 697284)
А мы всё жалуемся что в Росси жить плохо

Кто? В России жить хорошо и мы не бедные, по крайней мере так, я могу сказать про себя, другие не знаю как.

Ушёл создавать ВМИР-1...

Ewgeny7 2nd April 2014 14:23

Quote:

Originally Posted by Jukov (Post 697284)
А мы всё жалуемся что в Росси жить плохо, что мы бедные. Зажрались...

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

Adramelek 10th April 2014 05:54

Написал постфиксный ассемблер для КР1878ВЕ1. Хотел попробовать написать ассемблер для микроконтроллера, простоты ради выбрал именно этот. Написал на Forth, поэтому синтаксис у ассемблера соответствующий: вместо instruction <destination> <source> пишется <source> <destination> instruction. Привычный синтаксис только у команд jmp/jnz/jz/... : instruction <label>. Это связано с тем, как ассемблер обрабатывает ссылки вперед.

Не суть важно. Можно это воспринимать просто как аналог ассемблеру от Ангстрема (который TESSA.EXE на их сайте).
  • Программа-пример из документации микроконтроллера: test.mic, я скармливал ее TESSA.EXE и сравнивал получившийся результат со своим
  • ассемблер вместе с программой-примером, она начинается после комментария "test program", можно сравнить синтаксис с оригиналом: test.fs, запускать на Linux/BSD/OS X под gforth
  • несколько слов, опосредованно относящихся к ассемблеру: common.fs, вынес их в отдельный файл

Итак, подхожу к собственно вопросу...

В процессе сравнения результатов заметил несоответствие в обработке инструкции LDR. Согласно документации, она имеет такой формат:
Code:

0010 0ccc cccc cnnn
      constant  reg

Мой ассемблер, как и в случае с остальными инструкциями, у которых два операнда, генерирует опкод так: операнд2 (в данном случае constant) сдвигается влево на ширину операнда1 (в данном случае register), потом OR их вместе, потом еще раз OR с кодом команды. Следуя этой логике, строка LDR #C,15 должна генерировать такой опкод:
Code:

0010 0000 0111 1010
Вместо этого TESSA.EXE генерит такой код:
Code:

0010 0000 0000 1010
Я поэкспериментировал, и получается, что для инструкции LDR ассемблер Ангстрема не сдвигает константу влево, и накладывает три бита регистра прямо поверх нее. Еще показательный пример: LDR #A,7. В теории опкод такой:
Code:

0010 0000 0011 1000
У TESSA.EXE такой:
Code:

0010 0000 0000 0000
У меня есть сильное подозрение, что это баг или глюк в TESSA.EXE. Но как-то трудно поверить, что программисты в Ангстреме могли его не заметить. Эта инструкция, кажется, четыре раза встречается в программе-примере из официальной документации, и дважды она генерирует неверный код (в моем понимании).

Есть ли у кого-нибудь возможность проверить работу программы на реальном микроконтроллере? Может, я что-то неверно понял в логике работы инструкции LDR?

P.S. Насчет самого ассемблера: я таки могу допилить его напильником и сделать менее похожим на полуфабрикат. Как минимум, скомпилировать на Windows в виде отдельного EXE-файла, который будет кушать ассемблерный исходник в STDIN. Если кому интересно, конечно.

Andrei88 10th April 2014 08:06

[QUOTE=как-то трудно поверить, что программисты в Ангстреме могли его не заметить[/QUOTE]
Многие жаловались на ляпы в документации, так что, вполне возможно, что программисты просто учли фактическое положение дел :-)
Насчет ассемблера - было бы интересно, особенное, если в комплекте с "средой разработки" типа Borland Pascal (городить что-то более навороченное, думаю, смысла нет, а вещицу, которая знает понятие "проект" и позволяет сделать несколько файлов, а заодно скрывает от пользователя командную строку - это то, что надо :-))

Adramelek 10th April 2014 09:19

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

Формат команды: ldr #n , значение

где: n - номер служебного регистра

Номер служебного регистра лежит в диапазоне 0-7, определяя один из регистров SR0-SR7. Загружаемое значение может быть константой, меткой или выражением, задающим адрес в памяти данных или памяти команд.

При загрузке регистров SR0-SR3 загружаемое значение является адресом в памяти данных. Константа или выражение, загружаемое в регистр, преобразуется в адрес сегмента путем отсечения младших 3-х разрядов значения.
Это, оказывается, фича языка ассемблера. При загрузке регистров #5, #6, #7 -- нужно сдвигать константу влево. При загрузке регистров #a, #b, #c, #d -- не нужно...

---------- Post added at 14:19 ---------- Previous post was at 13:34 ----------

Quote:

Originally Posted by Andrei88 (Post 700445)
Насчет ассемблера - было бы интересно, особенное, если в комплекте с "средой разработки" типа Borland Pascal (городить что-то более навороченное, думаю, смысла нет, а вещицу, которая знает понятие "проект" и позволяет сделать несколько файлов, а заодно скрывает от пользователя командную строку - это то, что надо :-))

Ну, полноценную среду разработки я вряд ли потяну. И, как показали последние события, сам код ассемблера тоже надо проверить на (невольные) неточности.

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

Синтаксис не смущает? Я-то привык.

Adramelek 11th April 2014 02:36

1 Attachment(s)
Quote:

Originally Posted by perestoronin (Post 700454)
Костыли в виде IDE не нужны, достаточно инструментов, работающих с командной строки.

Да, я сам обычно только командной строкой пользуюсь.

Quote:

Originally Posted by perestoronin (Post 700454)
Исходники пожалуйста выложите, где Вам удобно, или мне на почту пришлите. Адрес электронной почту в личку могу направить. Я при необходимости поправлю и скомпилирую его под используемый мною Linux.

Ассемблер написан на языке программирования Forth. Я придерживаюсь стандарта ANS, поэтому ассемблер должен запуститься на многих трансляторах Форта. Вот эти два файла и есть весь ассемблер (из моего первого сообщения):
Quote:

Originally Posted by Adramelek (Post 700439)
  • ассемблер вместе с программой-примером, она начинается после комментария "test program", можно сравнить синтаксис с оригиналом: test.fs, запускать на Linux/BSD/OS X под gforth
  • несколько слов, опосредованно относящихся к ассемблеру: common.fs, вынес их в отдельный файл

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

Инструкция по установке:
  • Скачайте и скомпилируйте gforth: http://www.gnu.org/software/gforth/
  • если установили gforth не в /usr/bin/local, то надо это учитывать: в исходникe ассемблера поправить первую строчку "#! /usr/local/bin/gforth" (пробел необходим)
  • я прикрепил к этому сообщению архив с поправленной версией ассемблера. Исходник программы вынесен в отдельный файл. Файл "ras.fs" должен быть исполняемым, если нет, выполните команду "chmod +x ras.fs"

Запускать можно так:
Code:

# ./ras.fs < test-program.fs
Или так:
Code:

# ./ras.fs
s" test-program.fs" required
bye

Ну, или как я делал: располагать программу на ассемблере прямо вместе с ассемблером в одном файле. Результат работы: файл "code.bin" (просто дамп буфера кода).

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

Quote:

Originally Posted by perestoronin (Post 700454)
Если нужны микроконтроллеры - пришлите в личку ФИО и адрес, куда их выслать, вышлю в подарок пару микроконтроллеров. Простой программатор этого микроконтроллера можно собрать и на LPT, я же обхожусь чиппрогом48 от Фитона.

Предложение хорошее, благодарю. :) Только я живу в США, это, наверное, дорого будет.

Adramelek 19th April 2014 02:29

2 Attachment(s)
Когда гуглил информацию по КР1878ВЕ1, нашел этот сайт: https://sites.google.com/site/russianlabyrinth/

На тот случай, если он вдруг пропадет, продублирую тут:
"Ариадна" - программатор для микроконтроллера КР1878ВЕ1 с последовательным интерфейсом RS232.

Почему еще один? Видимо, их так много, что глаза разбегаются :-). Я являюсь счастливым обладателем отечественного МК КР1878ВЕ1, а главное, желания с ним работать :-). Пользовался "Программатором П. Семенова" (гуглится), благо схема исправно работает, но управляющая программа для нее написана для Win9X, что, впрочем, не является большой проблемой, т.к. данной программой можно пользоваться и на установленной посредством Microsoft Virtual PC 2007 виртуальной машине Win9X. Однако, захотелось сделать свой собственный адаптер-программатор, и, соответственно, программу к нему для Windows XP.

Адаптер Minotaurus v.1:

Адаптер построен на распространенных микросхемах MAX232A и КР1533ЛН2. Программирование МК осуществляется в режиме "Bit-Bang". Для двух входных линий используется преобразователь уровней MAX232A, для третьей линии - преобразователь уровней на транзисторе общего назначения. Микросхема КР1533ЛН2 представляет собой 6 инверторов с открытым коллектором, с помощью которых и построено "двунаправленное общение" с МК. В данной версии программатора питание адаптера коммутируется вручную с помощью тумблера. Во время программирование адаптер подает на МК напряжение питания +5 В и программирующее напряжение +12 В, для получения данных напряжений используются микросхемы серий 7805 и 7812 соответственно.

Программа Ariadne v.0.1:

Работает с памятью программ МК. Поддерживает адаптер Minotaurus v.1. Для работы программы необходимы установленные Microsoft .NET Framework 2.0 и Microsoft Visual C++ 2008 Redistributable. Работоспособность программы и адаптера проверена на тестовой прошивке. Схема и ПО поставляются "как есть", использование - на свой страх и риск :-)

Andrei88 29th June 2014 15:08

Хех, давно ничего не постили :-)
Сам сегодня наконец собрался силами и поставил на частотомер, собранный по схеме Радио №10 2000 супервизор питания. Воткнул DS1813 (пробовал с 1171СП42, но не пошло. Видно, то, что он генерит простой перепад из нуля в единицу, а микроконтроллеру нужен похоже именно импульс). Из изменений в схеме (см. схему из "Радио") - выкинул R5, R7, C3. Супервизор включил по типовой схеме:
Выв. 1 (собственно сброс) к выв. 4 микроконтроллера
Выв. 2 на питание (R5 был заменен перемычкой)
Выв. 3 на землю
Так как в плате R7 и C3 были размещены весьма компактно (R7 стоймя), то микросхему воткнул без проблем - выводы сильно разводить в стороны не понадобилось.

Viktor2312 29th June 2014 15:34

Quote:

Originally Posted by Andrei88 (Post 721074)
(пробовал с 1171СП42, но не пошло. Видно, то, что он генерит простой перепад из нуля в единицу, а микроконтроллеру нужен похоже именно импульс)

Для получения импульса тогда нужно ещё К155АГ3 добавлять, она как раз по перепаду делает импульс на выходе, длительность которого определяется внешней RC-цепочкой.

Andrei88 29th June 2014 15:49

Как знать, может быть, и такое где попробуем :-)


All times are GMT +4. The time now is 01:57.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.