Vladimir_S, ИД14 ставится вместо ИД7? (DD11 по схеме из первого поста)
Vladimir_S, ИД14 ставится вместо ИД7? (DD11 по схеме из первого поста)
Vladimir_S, а что нибудь менее экзотическое вместо ИД14 можно поставить?
ИД4 например
AHTuXPuCT, И что в ней такого экзотичного? Она везде продается и стоит рублей десять.
Я в два раза ошибся. Это из прайса одного нашего магазина.
думаю в новосибирске найдем ИД14
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Дело двигается потихоньку.
Переделал аппаратную часть с заменой ВВ55 на ATMega32.
Внешний вид макетки изменился (смотри фото внизу).
Пищалку пришлось перенести вглубь платы.
На ее месте поставить два разьема IDC-10M .
Один для SD-карты, другой для ЖКИ дисплея и доп. клавиатуры.
На каждом разьеме по 10 контактов. Два контакта на питание + 8 сигнальных линий, думаю этого хватит.
Сделал разводку всех цепей ATMega32 связанных с шиной РК + разьем для программирования + клавиатура PS/2 + само собой разумеется питание.
Теперь занимаюсь разработкой прошивки.
И тут у меня возник первый вопрос: Возможно ли спалить выходы ИМС РК, если подключить их к контроллеру, у которого выводы ранее были запрограммированы как выходы?
Поясню вопрос. Раньше у меня этот контроллер стоял в домашней метеостанции и некоторые выводы порта D были настроены как выходы. Установив контроллер в РК и подав на него питание я получу аппаратную коллизию, когда два цифровых выхода с разными логическими уровнями будут обьединены на одной линии. За ATMega32 я спокоен, у него на выходе стабилизатор на 20 мА, а выдержит ли ВМ80 или логика.
Как мне действовать чтобы не навредить?
Тут сложность в том, что я сращиваю две вычислительные системы, которые пока взаимно не подозревают о своем существовании.
Последний раз редактировалось kovdry; 04.08.2013 в 17:40.
Идем дальше!
Проблему, описанную в предыдуем посте я преодолел.
Следущим образом:
1. Питание микроконтроллера ATMega32 отпаял от линии питания РК +5В, и подсоединил его к отдельному разьему USB-B, с тем, чтобы при программировании все другие микросхемы отключить (кроме ATMega32, разумеется).
2. Поскольку штатный генератор РК ГФ24 при программировании будет отключен, нужен генератор для тактирования ATMega32. Для этого в моем программаторе, выполненном по этой ссылке, предусмотрен вывод LED. На этот вывод со стороны программатора подается меандр с частотой 1МГц. Его нужно подключать на вход тактирования XT1 (вывод 13), если нет другого источника. Я так и сделал. Программирование прошло удачно.
Для проверки нужно было оба контакта вернуть назад. Так что теперь, все время так туда сюда перепаивать?
Нет. Как известно из предыдущего поста кофликт возникает только при первом программировании, если микроконтроллер не исходен. Последующую прошивку можно проводить по штатной схеме.
И действительно, я проверил, жук шьется по штатной схеме без проблем.
Что дальше?
Пока я написал только прошивку, которая подает сброс на процессор ВМ80 на 0.5 сек., после подачи питания. Это тестовая прошивка, для того чтобы просто проверить процесс программирования. Программа написана на ассемблере AVR, в оболочке AVR Studio 4.
Дальше я собираюсь реализовать обмен в машинном цикле между ВМ80 и ATMega32. Реализовано это будет через прерывание.
Тестовая программа должна будет напечатать на экране РК некоторый текст, эмулируя клавиатуру.
Например : VER 01-01.
Здесь выкладываю фото процесса программирования и программатора.
Еще тестовую прошивку.
Мало ли, вдруг пригодится.
Последний раз редактировалось kovdry; 04.08.2013 в 17:37.
Немного теории
О процессе взаимодействия между процессором КР580ВМ80 и параллельным периферийным адаптером КР580ВВ55.
Перед тем, как приступить к разработке программы по эмуляции ATMega32 в качестве ВВ55, необходимо углубиться в теорию обмена процессора ВМ80 информацией с периферией. Рассмотрим тайминги машинного цикла в сигналах, необходимых для освещения этого процесса. Остальные сигналы для упрощения опустим.
Как известно машинный цикл состоит из тактов. Такт, это один период сигнала Ф1 или Ф2, который подает ГФ24 на процессор ВМ80, чтобы синхронизировать все процессы, которые в нем выполняются. Это своего рода пульс процессора или кардиограмма. Поэтому изобразим их на рисунке в верхней части. Еще нам нужны сигналы линий адреса A0-A15, шины данных D0-D7, сигналы чтения и записи - /RD и /WR и сигнал выборки ВВ55. Сигналы /RD и /WR нам особо важны, ведь они подключены ко входам внешних прерываний ATMega32 и они будут инициировать ответ микроконтроллера. Сигнал /WR подается прямо с вывода 18 процессора, а /RD формируется из сигнала DBIN с помощью логического вентиля DD5.1, который по сути инвертирует его. Сигнал /CS0 формируется из шины адреса с помощью дешифратора DD11 К555ИД7, если процессор хочет обратится к ВВ55.
На рисунке 1 показаны тайминги процесса чтения информации из ВВ55 в ВМ80. Давайте рассмотрим его поподробнее.
Рисунок 1
Машинный цикл ВМ80 в общей сложности состоит из трех основных тактов, которые будут рассмотрены подробно. Остальные будут рассмотрены вскользь, поскольку не влияют на достижение нашей цели. В первом такте Т1, с которого начинается машинный цикл, в активной фазе сигнала Ф2 на шину адреса выводится адрес устройства. В нашем случае это ВВ55. На шину данных выводится слово состояния процессора. Поскольку это слово в РК не используется, не будем рассматривать его подробно. Чуть позже в конце такта Т1 активизируется сигнал /CS0, активацию выполняет дешифратор ИД7. И поскольку делает он это довольно быстро, сигнал /CS0 появляется еще в такте Т1, предоставляя периферийному устройству достаточно времени, для включения своих внутренних интерфейсов. В начале проектирования я хотел связать прерывание ATMega32 именно с этим сигналом, но потом передумал. ATMega32 и так работает достаточно быстро. Он может отреагировать на прерывание за доли микросекунды. А реакции на сигнал /CS0 не достаточно, необходимо еще ждать активацию сигнала /RD или /WR. Однако ждать в бесконечном цикле в подпрограмме обработки прерывания не разумно. В этом случае микроконтроллер надолго глохнет и пропускает важные события не входящие в обслуживание прерывания. И так для инициализации прерывания был выбран сигнал /RD. В такте Т2 процессор ВМ80 снимает с шины данных свое слово состояния, переключает ее на ввод и практически сразу активирует сигнал /RD, давая этим сигнал устройству (в нашем случае ВВ55), что оно может выдать на шину данных информацию со своего внутреннего регистра. На это процессор дает устройству целый такт. Такое время ( ~ 600 нс )необходимо не только для того чтобы устройство отреагировало на сигнал /RD, но и для стабилизации уровня напряжения и зарядки емкостей на линиях шины данных. В некоторых случаях, между вторым и третьим тактами могут вставляться такты ожидания Tw. Это происходит, если устройство не готово ответить и снимает активность сигнала RDYIN. В РК это происходит при установке пошагователя. В тактах ожидания на шинах никаких изменений не происходит, по этому не будем рассматривать их подробно. В такте Т3 процессор завершает обмен с устройством. Сначала процессор считывает данные в один из своих внутренних регистров, а затем прекращает обмен. Для этого в активной фазе сигнала Ф2 снимается активность сигнала /RD. Реагируя на это устройство должно снять свои сигналы с шины данных, желательно до окончания такта Т3. Иногда к машинному циклу добавляются такты Т4 и Т5, но никакой активности на шинах в этих тактах не наблюдается. Они необходимы процессору для внутренних пересылок. Подбивая итоги, отмечаю важность для нашего устройства на ATMega32 моментов отмеченных буквами А и Б. Эти моменты наступают при изменении уровня сигнала /RD. В точке А устройство должно выдать на шину данных информацию из своего внутреннего регистра. В точке Б устройству необходимо освободить шину данных. Необходимо также учитывать состояние других сигналов, представленных на рисунке. Перед выдачей информации на шину данных в точке А, необходимо в первую очередь проверить активность согнала /CS0. Процессор формирует циклы шины постоянно, но не все они относятся к нашему устройству, так что если сигнал /CS0 неактивен, то обслуживание прерывания необходимо прекратить. Дальше вопрос, какую информацию нужно выводить? ППА ВВ55 содержит 4 внутренних регистра для чтения, и перед выдачей информации необходимо проверить состояние линий А0 и А1 шины адреса. В точке Б так же необходимо проверить активность сигнала /CS0 и реагировать только если сигнал активен.
Теперь рассмотрим процесс записи информации из ВМ80 в ВВ55
Во многом процессы похожи, поэтому я буду рассматривать только отличия при записи. На рисунке 2 показаны тайминги при записи информации из ВМ80 в ВВ55. Посмотрим на его особенности
Рисунок 2
Такт Т1 ничем не отличается от аналогичного в процессе чтения, по этому не будем его рассматривать подробно. В такте Т2 после снятия с шины данных слова состояния процессора, туда сразу же выводится байт передаваемых в устройство данных. Однако сигнал /WR в активное состояние не переключается. Переключается он только в начале третьего такта Т3. Это сделано для того, чтобы дать время на установку уровней напряжений на линиях шины данных и на зарядку паразитных емкостей, присутствующих на линиях. После активации сигнала /WR устройство может считать информацию с шины данных в свой внутренний регистр. Снятие сигнала /WR происходит только в такте Т1 следующего машинного цикла или в такте Т4, если такой существует. Даже после снятия сигнала /WR напряжение на линиях шины данных продолжает оставаться без изменений, увеличивая достоверность считываемой устройством информации. Точки В и Г на рисунке 2 указывают моменты, в которые возможно считывание информации во внутренние регистры ВВ55. Но какую точку выбрать? Мне предполагается что обе точки одинаковы с точки зрения надежности считывания. Можно использовать только одну, например точку В, а точку Г игнорировать. Можно выполнять считывание с обеих точек, потом сравнивать результат, и сохранять только в случае равенства. Но увеличит ли это надежность? В цикле записи вероятность аппаратной коллизии низка, так как микроконтроллер все время держит линии подключенные к шине данных в состоянии входа, а они в этом состоянии имеют большое сопротивление и не влияют на напряжение в линии. В итоге нужно отметить, что цикл записи длиннее цикла чтения почти на один такт. Связано это с дополнительными гарантиями для считывания информации устройством.
Все теоретические особенности освещены. Вперед! Писать программу!
Последний раз редактировалось kovdry; 06.08.2013 в 17:57.
Проходили это много лет назад. Посчитай, сколько времени АТМега входит в прерывание и тебе откроется тайна.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)