Vladimir_S, ИД14 ставится вместо ИД7? (DD11 по схеме из первого поста)
Вид для печати
Vladimir_S, ИД14 ставится вместо ИД7? (DD11 по схеме из первого поста)
Vladimir_S, а что нибудь менее экзотическое вместо ИД14 можно поставить?
ИД4 например
AHTuXPuCT, И что в ней такого экзотичного? Она везде продается и стоит рублей десять.
Я в два раза ошибся. Это из прайса одного нашего магазина.
думаю в новосибирске найдем ИД14 :)
Дело двигается потихоньку.
Переделал аппаратную часть с заменой ВВ55 на ATMega32.
Внешний вид макетки изменился (смотри фото внизу).
Пищалку пришлось перенести вглубь платы.
На ее месте поставить два разьема IDC-10M .
Один для SD-карты, другой для ЖКИ дисплея и доп. клавиатуры.
На каждом разьеме по 10 контактов. Два контакта на питание + 8 сигнальных линий, думаю этого хватит.
Сделал разводку всех цепей ATMega32 связанных с шиной РК + разьем для программирования + клавиатура PS/2 + само собой разумеется питание.
Теперь занимаюсь разработкой прошивки.
И тут у меня возник первый вопрос: Возможно ли спалить выходы ИМС РК, если подключить их к контроллеру, у которого выводы ранее были запрограммированы как выходы?
Поясню вопрос. Раньше у меня этот контроллер стоял в домашней метеостанции и некоторые выводы порта D были настроены как выходы. Установив контроллер в РК и подав на него питание я получу аппаратную коллизию, когда два цифровых выхода с разными логическими уровнями будут обьединены на одной линии. За ATMega32 я спокоен, у него на выходе стабилизатор на 20 мА, а выдержит ли ВМ80 или логика.
Как мне действовать чтобы не навредить?
Тут сложность в том, что я сращиваю две вычислительные системы, которые пока взаимно не подозревают о своем существовании.
Идем дальше!
Проблему, описанную в предыдуем посте я преодолел.:v2_dizzy_roll:
Следущим образом:
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.
Здесь выкладываю фото процесса программирования и программатора.
Еще тестовую прошивку.
Мало ли, вдруг пригодится.
Немного теории
О процессе взаимодействия между процессором КР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. Давайте рассмотрим его поподробнее.
http://zx.pk.ru/attachment.php?attac...1&d=1375796630
Рисунок 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. Посмотрим на его особенности
http://zx.pk.ru/attachment.php?attac...1&d=1375796711
Рисунок 2
Такт Т1 ничем не отличается от аналогичного в процессе чтения, по этому не будем его рассматривать подробно. В такте Т2 после снятия с шины данных слова состояния процессора, туда сразу же выводится байт передаваемых в устройство данных. Однако сигнал /WR в активное состояние не переключается. Переключается он только в начале третьего такта Т3. Это сделано для того, чтобы дать время на установку уровней напряжений на линиях шины данных и на зарядку паразитных емкостей, присутствующих на линиях. После активации сигнала /WR устройство может считать информацию с шины данных в свой внутренний регистр. Снятие сигнала /WR происходит только в такте Т1 следующего машинного цикла или в такте Т4, если такой существует. Даже после снятия сигнала /WR напряжение на линиях шины данных продолжает оставаться без изменений, увеличивая достоверность считываемой устройством информации. Точки В и Г на рисунке 2 указывают моменты, в которые возможно считывание информации во внутренние регистры ВВ55. Но какую точку выбрать? Мне предполагается что обе точки одинаковы с точки зрения надежности считывания. Можно использовать только одну, например точку В, а точку Г игнорировать. Можно выполнять считывание с обеих точек, потом сравнивать результат, и сохранять только в случае равенства. Но увеличит ли это надежность? В цикле записи вероятность аппаратной коллизии низка, так как микроконтроллер все время держит линии подключенные к шине данных в состоянии входа, а они в этом состоянии имеют большое сопротивление и не влияют на напряжение в линии. В итоге нужно отметить, что цикл записи длиннее цикла чтения почти на один такт. Связано это с дополнительными гарантиями для считывания информации устройством.
Все теоретические особенности освещены. Вперед! Писать программу!
:v2_dizzy_write:
Проходили это много лет назад. Посчитай, сколько времени АТМега входит в прерывание и тебе откроется тайна.
Для входа в прерывание ATMega32 нужно 4 такта + 3 такта на переход, итого 7 тактов.
Один такт ВМ80 = 9 тактам ATMega32. Значит на реакцию нам остается 2 такта.
Это мало, однако:v2_jawdr:
Придется еще аппаратную часть доделывать.
Нужно процессор на пару тактов тормозить.:v2_dizzy_facepalm:
Может можно без прерывания? Циклом проверять уровни сигналов.
А еще, вас будут преследовать глитчи. Рекомендую почитать ту винрарную ветку. Тайминги там применительно к Специалисту, что бегает на 2МГц, что довольно таки близко к РК. Странный глич продублирую тут:
Цитата:
Я уже писал про странный глитч на адресах. Оказывается, его выдает сам ВМ80А. Его длина - 1 такт и он находится непосредственно перед SYN:
http://savepic.ru/3725783.png
http://savepic.ru/3700182.png
И, естественно, не попадает ни под /RD, ни под /WR:
http://savepic.ru/3713495.png
http://savepic.ru/3711447.png
Получается, что находится он в 1 такте машинного цикла (я, правда, не проверял, но почему-то думаю что в M1, нужно выудить STATUS и проверить).
Касаемо сэмплирования адресной шины, то я нашел самый ближайший сигнал: 12 нога DD20.
http://savepic.ru/3693033.png
http://savepic.ru/3718615.png
Если сэмплировать сигналы выборки устройств этим сигналом (положительный фронт, использовать можно D триггер от ТМ2), тогда получаются самые длинные сигналы выборки микросхем. Вышеперечисленный глитч присутствует, но не мешает. Тайминги получаются следующие. Для чтения:
http://savepic.ru/3705303.png
http://savepic.ru/3704279.png
И для записи:
http://savepic.ru/3707351.png
http://savepic.ru/3698135.png
И это соответствует моим замерам, сделанным ранее. Только тут сигнал выбора четкий.
Нет, это будет слишком накладно. Кроме ответа ВМ80 нам нужно выполнять еще много интересных заданий. Например обработка интерфейса PC/2 клавиатуры, SD карточки и т.д. Чтобы не пропустить обращение ВМ80 придется очень часто проверять входы и на остальное времени не хватит.
Глинчи это, как я понимаю, глюки по русски.
Спасибо за предупреждение!
Я примерно предполагаю с чем они связаны. Я встречался с таким явлением когда работал с ИМС К556РТ4 или РТ5. Мы называли это "иголки". Очень короткие импульсы на выходах ИМС при смене уровней на адресных входах. Происходило это от того, что адресные данные поступали на вход ИМС не одновременно, а микросхема была очень быстрой (ТТЛШ), так что она выдавала данные раньше чем установились адресные входы.
В нашем случае такой быстрой ИМС является К555ИД7. Возможно ВМ80 не совсем равномерно выдает напряжения на шину адреса, а ИД7 моментально их транслирует. Вообщем это напоминает баяниста, который перед игрой быстро проходит по клавишам.
Значит если я начну тормозить ВМ80 только по переднему фронту /CS0, то из за этого глинча, я рискую ложно тормозить процессор в циклах, не относящихся к ВВ55.
Правильно я понимаю?
Да, "глюки" или "иголки". Они самые. Но суть предыдущего поста была в том, что ВМ80 выдает корректный адрес на целых полтакта, непосредственно перед сигналом SYNC в первом цикле команды. Дешифратор его чухает и мы видим стабильную выборку, которая не связана с самим циклом. Я не знаю, почему так происходит, но оно есть.
Да.
Я тут накропал схемку для задержки ВМ80 на 5-10 мкс при обращении его к ВВ55.
Прошу экспертов оценить и проверить на ошибки.
Схемка простая. не содержит обратных связей и триггеров. Но это и хорошо, ведь она будет зацеплена в авто петлю ( схемка - RDYIN - ВМ80 - (/WR, /RD, ИД7, /CS0, /CS1)). Если тут еще поставить защелку, то последствия оценить трудно, учитывая еще и глюки.
Объяснения по схеме:
Почему взята именно ЛА8, а не ЛА3?
У ЛА8 выход с открытым коллектором, следовательно к выводу RDYIN можно параллельно еще подключить пошагователь. Цена этого, установки дополнительных нагрузок R1 и R2.
Поскольку сигналы /CS0, /CS1, /WR, /RD инверсны, вентили DD1.1 и DD1.2 суммируют входные сигналы, работают как элемент ИЛИ. Дифференцирующая цепочка выдает на DD1.3 положительный импульс примерно на 7 мкс по фронту /WR или /RD. Этот момент максимально безопасен по отношению к глюкам на шине адреса. По спаду конденсатор разряжается через VD1.
Поскольку в схеме нет защелок и обратных связей отрицательный импульс на выводе 10 DD1.3 не может быть больше 7 мкс при любой комбинации сигналов на входах. Это обеспечивает надежность схемы.
Почему используется диф. цепочка?
Используется из соображений простоты и надежности. Точности задания задержки здесь не требуется, главное не уменьшать ее меньше 2.5 мкс ~40 тактов ATMega32. Синхронизация тоже не нужна, поскольку решение о вставке очередного Tw принимает процессор в активной части сигнала Ф2 такта Т2.
Следует прочитать доку на ВМ80, чтобы понять, какие сигналы участвуют при сканировании входа RDY процессором.
http://savepic.ru/4664008.png
Я хочу сказать, что сигналы строба чтения и записи приходят слишком поздно. И, получается, что как только пришел сигнал обращения и процессор заморожен, тебе в АТмеге придется подготовить все варианты предполагаемого чтения, спустить процессор и наблюдать за стробами. Если чтение - то сразу выдать его (адреса будут стабильны до торможения), если запись - то считать состояние шины.
HardWareMan, я думаю, что в процессе торможения все сигналы, т.е. /CS0, /CS1, /WR и /RD будут стабильны, так что ATMega32 в течении от 40 до 120 тактов успеет выполнить любые проверки.
Другое дело, что после снятия активности /RD нужно быстро перевести порт PA на ввод до начала следующего машинного цикла. Но там никаких проверок делать не надо, а просто выполнить одну команду.
До тебя не дошел смысл послания. Чтобы проц зацепился за RDY сигнал, нужно анализировать только адреса.
Эх! Так бы сразу и сказал!!!:v2_dizzy_facepalm:
Но какой же, HardWareMan, по вашему выход из этого положения?
Что, неужели все так безнадежно?
Вы бы дали свои дельные предложения, а то все пугаете своими глитчами. :v2_wink2:
Я тут вспомнил, что при подключении к Ориону-128 флоппи накопителя по версии "Орионсофта", применялось подобное торможение.
Пошел я читать доку...
kovdry, я бы посоветовал еще обратиться за советом к caro и vinxru. Они на этом собаку съели.
Все нормально. Просто из вашей схемы убираем RD/WR и всего делов. Согласно эпюры, проц выставляет адреса и в следующем такте анализирует RDY. В следующем такте (ожидающий он или нет) выставляет RD/WR. Таким образом, зацепившись на CS микрухи, вы затормозите процессор. А к анализу его сигналов можно приступить в аккурат после входа АТмеги в прерывание.
А вы не думаете что могут быть проблемы с ПДП ВТ57 и, соответственно, с регенерацией изображения в ВГ75?
Sent from my A7HD using Tapatalk 4
alx32, Взял и мой вопросик умыкнул.
Ну наверное, не только мой, и не только я знаю к чему приводят игры с RDYIN, хотя бы на том же Орионе...
Sent from my A7HD using Tapatalk 4
Проблемы возможны. Да.
Ладно, схема упрощается (смотри внизу).
Пытался понять суть глюков в сообщении HardWareMan, но так ничего и не понял. Сигналы не подписаны.
Но если рассуждать логически, то глюки могут быть связаны с:
1. Провалами сигнала /CS0 или /CS1 в такте Т1 при активности сигнала SYNC.
2. Появлением ложного сигнала /CS0 или /CS1 в такте Т1, если нет обращения к ВВ55.
Оба этих варианта глюков должны исчезать в такте Т2, когда формируется сигнал DBIN, иначе может произойти сбой при обмене с ВВ55, чего на практике не наблюдается.
Как же могут повлиять подобные глюки при работе нашей схемы торможения:
1. Решение о формировании такта Tw процессор принимает в активной фазе Ф2 в такте Т2, даже после активации DBIN, так что влияние такого глюка исключается.
2. Диф. цепочка транслирует сигналы /CS0 или /CS1 на выход. Так что если эти входные сигналы снимаются, то на выходе RDYIN сразу же устанавливается в 1. Задержки вентелей составляют пару десятков наносекунд, так что, думаю, этот глюк нам тоже не страшен.
По поводу схемы КГМД от ОРИОН СОФТ:
Там, действительно, все запутано. Согласно фирменной документации, используется одновибратор на К155АГ3. Я сам делал такую схему в 1992г. Помнится никаких глюков с ней не было. Кстати на новой плате, которую производит zorel, стоит именно эта ИМС.
В более поздней схеме в "Радиолюбителе" №6 1993г. уже стоит К155ТМ2 с каким то непонятным включением. Очевидно авторы изменили схему увеличив ее надежность и ограничив время задержки одним тактом.
Думаю, что ненадежность схемы в Орионе вызвана применением одновибратора. Он мог перезапускаться от помехи и тормозить ВМ80 бесконечно долго. У нас же используется диф. цепочка, которая не имеет элементов памяти, и не чуствительна к помехам.
Теперь насчет ущерба, который может нанести торможение ВМ80 регенерации изображения на экране, организованного циклами ПДП микросхемами ВТ57 и ВГ75.
ВГ75 выдает на экран изображение знакорядами. На отображение знакоряда уходит 10 строк, это 64мкс х 10 = 640мкс. В то время, пока очередной знакоряд отображается, информация о следующем загружается в другой буфер. Это 80 байт ОЗУ. Загружаются они пакетами по 8 байт с перерывом между пересылками 7 тактов ВГ75 (~2.7мкс). Итак время на пересылку 80 байт в циклах ПДП составляет: (цикл ПДП ~1.7мкс х 8 = 13.5мкс) х 10 + (7 тактов ВГ75 ~2.7мкс х 9 = 24мкс) = 160мкс. Сюда еще можно добавить 10% на задержку от ожидания окончания циклов при захвате шин и того мы имеем 176мкс. Что составляет 30% от времени необходимого на отображение знакоряда. После загрузки буфера ВГ75 просто ждет, не формируя циклов ПДП.
Значит у нас есть еще как минимум 470 мкс для задержки ВМ80.
Я собираюсь тормозить ВМ80 на ~7мкс, значит за время отображения знакоряда, я могу затормозить процессор 67 раз. Конечно вы скажете: кроме циклов ПДП и торможения, ВМ80 должен выполнять другую полезную работу (производить вычисления там:v2_wink2:).
Я предлагаю определить какова максимальная частота обращения ВМ80 к ВВ55, и посмотреть, уложимся ли мы в это количество обращений за наши 640 мкс.
В качастве примера привожу отрывок программы МОНИТОРА РК в котором обращение, на мой взгляд, наиболее интенсивное.
Здесь обращение к ВВ55 происходит раз в 46 тактов ВМ80, что составляет 25мкс. Следовательно, за 640 мкс мы можем обратиться в ВВ55 25 раз. Это не превышает наш лимит в 67 обращений. Естественно, что торможение замедлит процесс вычисления, но , думаю, учитывая отношение количества циклов обращений к ВВ55 к общему числу циклов, не на много. Что же будет, если какой нибудь извращенец напишет программу, которая будет в бесконечном цикле обращаться к ВВ55, так, что ВГ75 не успеет забрать свои 80 байт из видео ОЗУ за свои 640 мкс? Ничего страшного. Изображение не поплывет. Просто знакоряд, который не успел к отображеню не будет выведен. В этом на практике убеждает нас подключение и отключение пошагователя. Если пошагователь "на ходу" включить, то изображение на экране исчезнет (останется только курсор), а если отключить, то изображение восстановится.Код:; Устранение дребезга контактов
; Происходит путем опроса нажатия 32 раза
; Если хотя бы 1 раз не будет подтверждения нажатия,
; то клавиша считается ненажатой
scan_bounce:
mvi l,32 ; Инициализируем счетчик количества
; опросов
scan_boun_loop:
lda port_B_kbd ; Читаем состояние клавиш
cma
ora a ; Если не нажаты,
jz not_press ; то выйти
dcr l ; модифицировать счетчик опроса
jnz scan_boun_loop ; если не последний, то продолжить
По поводу помощи от caro и winxru.
У caro я взял прошивку его знаменитого контроллера на ATMega48. Дизассемблировал его и сейчас внимательно изучаю. У caro нет проблем с задержками отклика, поскольку он взял ATMega48, у которого есть прерывание на изменение уровня на любом выводе порта D. Кроме того он не лезет на шину данных и для него критична только задержка между обращениями к портам А и Б ВВ55, а она составляет несколько мкс.
С winxru, к сожалению не контактировал, и не знаю как к нему обратится, если не через личку, поскольку вижу, что мужик не лазит по форуму с апреля этого года.:v2_frown:
Он вроде как переехал сюда.
С vinxru можно пообщаться на форуме nedopc.
Наткнулся на тему этим летом и захотелось себе собрать Радио-86РК (как мечту детства). За основу взял схему из топика, оставил все ВВ55 (AVR+SD планирую использовать в качестве ROM-диска), а логику разместил в ПЛМ MAX7000, блок питания (с некоторыми доработками) и корпус взял из нерабочего DVD-плеера. Попытался сделать работу с телевизором и VGA-монитором - режим переключается джампером. Пока на VGA изображения нет. За основу брал схему Rokl из топика "Радио РК-86: Компьютер с процессором 1821ВМ85", но там автор использовал кварц на 21.48МГц, я - на 24МГц и, возможно, ошибся в расчетах, буду разбираться. Клавиатуру еще не сделал.
Вот что получилось - см. вложения.
Ничего идеологического, просто все захотел "впихнуть" в один корпус, а кроме Альтеровских ПЛМок у нас поблизости ничего нет. С габаритами не соглашусь - две PAL22V10 займут примерно столько-же места (возможно на фото МАХ громоздко выглядит).
У меня сейчас 18 символов на СГИ. Вот мои расчеты для кварца на 24MHz:
24MHz/8pix = 3MHz - пиксельклок
3MHz/31469Hz = 95.3 символов в ССИ
78 символов в строке
96(95.3) - 78 = 18 символов/СГИ
1/24MHz*18*8 = 6мкс длительность СГИ
2 строки в КГИ
30 видимых строк в кадре
14 пиксель на символ (высота)
(30+2)*14 = 448 высота кадра в пикселях
31469Hz/448 = 70.2Hz КСИ
т.е. все настройки для ВГ75 остаются как для кварца 21.48МГц, только меняем длительность СГИ с 8 на 18 символов (0x02DC D3 -> D8). Правильно?
вот потому, что символов с 8 увеличено до 18, кадр и разваливается(СГИ формируется записью пробелов в видеоОЗУ). Каждый символ, это знакоместо, а каждое знакоместо это байт в идео ОЗУ.
Получается, вам нужно увеличить видео ОЗУ на (18 -8)х 31=310 байт...Я может чего и забыл, но видимых строк у РК вроде как 29. самая верхняя и +28 строк.
Соответственно, компик ваш будет программно не совместим с РК по размерам экрана и области стека монитора...
Я тоже хотел кварц с ровным числом мегагерц. Но, взяв за жесткий постулат настройки кадра от РК (что бы не развалился кадр) получил частоту кварца округленно 21.480 мгц.
---------- Post added at 21:49 ---------- Previous post was at 21:40 ----------
две палки можно разместить в разных углах платы, что я и сделал, оптимизировав плату, а МАХ одна занимает площадь, как 2 палки и оптимизации не будет.
Ну, это так.)))) Каждый кулик свое болото хвалит. ))))
Плохо, прийдется или искать кварц на 21.48МГц или пересчитывать все (+фонт)... :(
Может кто подскажет где более подробно прочитать про формирование видео в РК, а то в книге Зеленко "Домашний компьютер" поверхностно описано?
Оптимизация особо и не нужна была мне - все на монтажке, а если кто захочет повторить на плате, ну тогда надо думать...
Зато проектировать гораздо проще - нарисовал схему в Мак Плюс/Квартус и прошил..... ;)
Начал разбираться, поискал по инету... Вот что получается:
Экран в РК 78х30, из них видимых 64х25 - 3 строки в начале кадра и 2 строки в конце используются как КГИ, 8 символов в начале и 6 в конце строки используются как СГИ. ССИ и КСИ формируются ВГ75 (это СГИ и КГИ).
Смотрим дальше:
в классическом варианте
ССИ (в данном случае это СГИ из ВГ75) из 8 символов (6 мкс) + СГИ из 8 пробелов (6 мкс) + отобр. инф. (48 мкс) + СГИ из 6 пробелов (4.5 мкс) = 64,5 мкс (норма 64 мкс)
в варианте для VGA 21,48MHz
ССИ (в данном случае это СГИ из ВГ75) из 8 символов (2,98 мкс) + СГИ из 8 пробелов (2,98 мкс) + отобр. инф. (23,84 мкс) + СГИ из 6 пробелов (2,23 мкс) = 32,03 мкс (норма 31,7 мкс)
Т.е. ССИ (они же СГИ ВГ75) участвуют в формировании строки как отдельный элемент и не связаны никак с содержимым ОЗУ (посмотрел в даташит на ВГ75 - символы для СГИ (они же ССИ в РК) берутся отдельно, а не из буфера данных). Если я правильно понимаю, изменение количества символов на СГИ (они же ССИ в РК, СГИ формируются пробелами) не должно влиять на совместимость и работу с ОЗУ! Или я что-то не так понял?
"Прошу помощь зала!"
Если кому еще интересно, то справочную информацию по ВГ75 и статью Зеленко по работе с ним нашел в журнале "Микропроцессорные средства и системы" №3/1985 http://www.wdigest.ru/mpss03_1985.htm см. стр 51-70
P.S. Вопрос по работе с VGA пока снимается - проверил все на осцилографе, оказалось, что ошибка где-то в МАХе, CCLK вместо 3МГц (24МГц) идет 1,333МГц (8МГц), т.е. не происходит переключение опорных частот.
По своим записям 5летней давности пытаюсь восстановить подробности.
У меня получилось при расчете кварца VGA режима 640х400
длительность строки 86 знакомест - 78 знакомест строка, 8 знакомест строчный СИ.
Длительность кадра 31 знакоряд 25 знакоряд видимый, 3+3 кадровый СИ
знакоряд состоит из 12 строк.
Лучше должен был подойти кварц 21.673 Мгц. В чипе и дипе купил 21.480 Мгц. Тоже подошел, но не все ЖК мониторы понимают отображаемый режим.
Частота разверток строчная 31,141 Кгц, кадровая 74,85 Гц
Вроде не ошибся.