![]() |
Quote:
Не должно её быть. Просто из логики действий аппаратуры. Линий конкретных не знаю, не ковырялся. Но можете спросить у Олега Одинцова - он что-то такое пытался узнать, и вроде по семёрке у него даже это получилось. (про девятку он там шибко ругался, что в разных режимах всё по разному и соотношение не точно 1:10). Quote:
PHP Code:
Quote:
Все исходные данные есть - схемы, прошивки. Но я пока не придумал, как их сопоставить. Quote:
=== Если хочешь ответы сразу - пиши на почту (vegaio на yandex). Я на форум крайне редко захожу. ---------- Post added at 13:00 ---------- Previous post was at 12:47 ---------- PS и кроме проги L1 были и другие проги с совмещением. В РАПИРЕ есть встроенная поддержка этих режимов: PЖM("*O,H2K"); В игрушках есть GEOGRAFIQ. |
1 Attachment(s)
Очередной апдейт. Разобрался наконец с STM32. Очень интересный чип, но с наскоку не возьмешь. Приобрел отладочную плату с ним за 14$ причем на этой плате уже есть програматор, который можно использовать и для прошивки других чипов из этой серии. На данный момент написал драйвер работы с LCD дисплеем и подключил FatFS Чена на SD карте. На приложенной фотке работа всего этого - на экране содержимое SD карты. Осталось добавить DMA поддержку для работы с картой и энкодер для удобной работы с меню. После этого можно приступать к собственно дисководу.:v2_cool:
Кстати, красная плата внизу экрана - логический анализатор (см. подробности здесь). Имеет 32 канала (16 из них 5V). Обошлась мне вместе с доставкой и полным комплектом проводов в 75$. Незаменимейшая штука для отладки! Сколько времени я съэкономил с ней когда делал LCD драйвер или настраивал работу с SD картой! Жалею, что раньше не купил. Очень рекомендую.:v2_thumb: Также за это время разобрался с работой дисковода 840к. Вроде не вижу проблем с реализацией на данном этапе. Дополнительно обдумал концепцию компьютера. Очень не хочется ставить ПЛИС в BGA корпусе. :v2_conf2: По моим прикидкам все же удастся сделать полный фарш и на 208-ногом корпусе. Это добавит количество корпусов, но ИМХО это меньшее зло чем BGA. Идея состоит в использовании мультиплексоров, на шинах и выходах/входах. Так, например, через них можно развести VGA и SVIDEO выходы, PS2 и оригинальную клавы, шины процессора на внешний разъем и т.д. Кроме того, планирую использовать I2C расширитель порта, чтобы освободить ноги ПЛИС от различных индикаторов и переключателей режимов, которые не требуют быстрой реакции. Заодно хочу вернуться к идее одновременного использования 2-х дисководов. Дополнительных ног это не потребует, т.к. они тоже будут подключены через мультиплексор. Каждый дисковод будет иметь собственный выключатель. Проект подорожает примерно на 20$ (второй экран, контроллер и SD карта), но зато позволит одновременно работать с двумя дисководами или удобно переключаться между ними. Сейчас также рисую схему и оптимизирую ноги. Надеюсь, что получится. |
Очередной апдейт. :v2_dizzy_rastoman: Заставил работать DMA с SD картой и энкодер. Скорость чтения с DMA не тестировал, но должно быть очень неплохо. Энкодер оказался гораздо удобнее кнопок. Переделаю под него и 140К дисковод и включу в окончательную версию.
Также сделал блог, куда я перенес инфу по моему предыдущему проекту ("ЮТ-88") и куда начал выкладывать инфу по этому. Кстати, я всю инфу там перевел на английский и уже наблюдается некоторый интерес к английской версии сайта. Видимо так и буду продолжать вести этот блог на двух языках. Хочу давать там больше информации, чем здесь, включая код и схемы, а также давать более подробные описания. Посмотрим, как получится. Адрес: electronicsfun.net/RU/ . Заходите, подписывайтесь на RSS обновления, оставляйте комментарии. Во время написания программы для STM32L возник такой вопрос. Имеется такая конструкция: Code:
static char Cur_DIR[100]; // Current folderCode:
Error[Pe167]: argument of type "char" is incompatible with parameter of type "char *" C:\STM32_projects\iar_test4\main.c 263 |
Quote:
|
Класс! Спасибо! :v2_dizzy_vodka2: Так теперь работает! А почему было не правильно? И почему в "AVR Studio" это работает?
|
Quote:
|
|
Интересно. :v2_thumb: Спасибо, GARNIZON! Я честно говоря разочаровался в софт-процессорах для реплик. Они должны быть очень хорошо протестированы прежде чем применять в реализации. Очень много нюансов с недок. командами и их циклами и неизвестно где они вылезут. Но если у него получилось создать такой процессор, то это просто супер. Если выложит в открытый доступ можно будет попробовать.:v2_dizzy_army:
GARNIZON, я тут только что нашел тему, где вы с b2m обсуждаете 840к дисковод. Суперполезно! Но я еще чуть позже вопросы задам :rolleyes: |
b2m - красавец, но он почему-то решил прекратить тему про агат(как видно из топика). Скорее всего потому что там много других систем эмулирет. Надеюсь позже врнется к этому. Чел грамотный.
Софт проц , тот что на видео, работает пока без нареканий :) |
Взял паузу с проектом - сначала был занят с моим финальным экзаменом, а потом решил передохнуть немного от проекта и переключился на несколько маленьких проектов. На прошлой неделе получил результат моего экзамена - сдал. Так что я теперь не просто бухгалтер, а CPA :v2_finge: (читать пожалуйста Си-Пи-Эй, а то по-русски звучит неблагозвучно :biggrin:). Так что можно продолжать проект не отвлекаясь больше на всякую ерунду :v2_dizzy_biggrin2:
В общем переписал я "140К-дисковод" под STM32L. Работает и загружает (но без записи пока). Переделал "по уму" - в предыдущей версии на ATMega выдача битов была по запросу, а не по таймеру. Это приводило к странным эффектам (например, дорожка в РАПИРе могла читаться 10 секунд, а BASIC загружался за несколько секунд). Кроме того, структура затрудняла сделать запись на диск без существенной переделки. В текущей версии все работает гораздо лучше. Во-первых, благодаря DMA чтение не мешает остальным процессам. Во-вторых, сейчас дисковод ведет себя как настоящий, отдавая данные с интервалом в 32 цикла процессора, что привело к нормальной и ровной скорости загрузки. В-третьих, вычистил и оптимизировал код. В четвертых, код изначально заточен под запись, так что добавить эту функцию будет несложно. Сейчас начал работу над тем, чтобы ограничить общение с дисководом всего тремя проводами с целью экономии ног ПЛИС. Идея состоит в том, чтобы использовать протокол SPI. Бонусом будет легкая и удобная передача данных в обе стороны без заморочек с переключением направления шины. Мастером будет ПЛИС. Слово будет 16-бит - 8-бит для данных и остальные для передачи состояний (номер дорожки, режим записи и пр.) в обе стороны. При частоте 16МГц это слово будет передаваться за один такт CPU, что более чем достаточно. Каждое переданное слово будет служить еще и тактом для контроллера, так как будет передаваться каждый 32-ой такт CPU. Т.к. мастером будет ПЛИС, то он будет отвечать и за увеличение некоторых интервалов до 36 или 40-ка тактов CPU при записи, когда генерируется синхробит. В общем идея такая. Посмотрим что получится. Пошел пробовать. :v2_dizzy_cowboy: |
1 Attachment(s)
Итак, SPI работает. Из-за "лапши" на макетке создается много помех, что приводит к достаточно большому количеству битых байт. Последнюю неделю пробовал разные варианты для их уменьшения. В итоге окончательный вариант таков: частота 8 МГц, слово 8 бит, режим SPI - 0. Так же добавил четвертый провод NSS для синхронизации после ошибки. В режиме чтения в одну сторону передается номер дорожки, а в другую байт. В режиме записи передается байт или Дорожка (в зависимости от старшего бита).
Характер ошибок показывал, что проблема в сигнале SCLK, так как полученные слова были сдвинуты с какого-то места. Для очистки сигналов все они выводятся с минимальной силой и их тип LVCMOS. Это дало лучший результат. Так как у меня пока нет осцилографа, то я не могу посмотреть форму сигнала, поэтому для тестирования я передаю один и тот же байт в каждом цикле и сравниваю что получено. В случае ошибки счетчик увеличивается на индикаторах DE1 и дисковода. Так я могу отслеживать кол-во ошибок за период времени. Пробуя разные варианты я смог оценивать их эффективность. Для дальнейшего уменьшения кол-ва ошибок я передаю байт трижды и беру то значение, которое встречается дважды. Все эти меры привели к эффективности в 1 ошибку каждые 15 минут (1 ошибка на 25 переданных мегабайт), что неплохо , но все же недостаточно. Для дальнейшего улучшения, я попробовал разные методы termination сигнала SCLK. Наилучший результат показал метод соединения его с землей через последовательные резистор и конденсатор. После их подбора оптимальным оказались значения 82 ома и 22нФ. На данный момент тест крутится уже больше полутора часов и на счетчиках 0 ошибок. Теперь, добившись надежной связи, я могу тестировать дисковод. Теперь вместо 12 ног надо всего 4. Для дисковода 840к можно будет применить тот же принцип. UPD: Попробовал загрузить систему - "Школьница" загрузилась без проблем с переделанного дисковода (см. картинку). Только какие-то проблемы с переключением дорожек. Буду смотреть. |
Переключение дорожек пофиксено. Все опробованные системы и программы загружаются без проблем (BASIC, Школьница, AltDOS и программы). Теперь можно смело сказать, что новая версия дисковода функционально равна старой на ATMega, но имеет правильные тайминги, требует всего 4 ноги ПЛИС и предусмотрена запись. :v2_thumb:
Завтра начну прикручивать запись на "диск". :v2_dizzy_sleep2: |
2 Attachment(s)
Сегодня пришел осциллограф. Первым делом решил посмотреть что там за сигналы по SPI идут, что ошибки проскакивают. Вот такие картинки увидел - первая NSS, вторая SCK.:v2_eek:
Такие наводки происходят по пути от FPGA к разъему на DE1, далее к макетке по 15см ленте, далее проводом длиной еще 15 см по макетке до платы с STM32L и наконец немного по самой плате до микроконтроллера. Мои меры с резистором и конденсатором работают потому, что это уменьшает немного уровни, и помехи не достают до порога срабатывания. В общем бесперспективно пытаться что-то отладить с таким шумом. По всей видимости надо отложить работу с дисководом пока все не будет размещено на плате. Похоже сейчас лучше сконцентрироваться на завершении составления схемы и доотладке на макетке магнитофонного входа/выхода (благо с осциллографом это будет несложно) с целью изготовления печатки Rev.0. На ней будут выведены неиспользуемые пины на разъем расширения. |
Трудно сказать, конечно, но наблюдаемая картина непохожа на шум. Это похоже на какие-то глитчи, которые вылезают с FPGA и частично фильтруются длинной линией.
|
Эти колебания на NSS совпадают в точности с SCK. Там как раз идет небольшая пауза перед началом SCK. То есть очень похоже на наводку. Кроме того, я пробовал две версии SPI в ПЛИС. Одну я сам написал, а вторую взял готовую, думая что я напортачил. Так вот обе дают одинаковую картинку. Кроме того, емкость линии такова, что SCK даже не успевает опуститься до нуля и подняться до 3.3В. И обрати внимание на ступеньки между некоторыми пиками SCK - похоже как раз на смену уровня на линиях данных, которые наводятся. Так что мне кажется все же наводки и емкости виноваты, хотя версию с глитчами, конечно, не стоит со счетов полностью сбрасывать.
|
15 сантиметров как-то уже многовато для проброса SPI. А там еще дополнительные 15 сантиметров тоже добавляют радости.
Покороче никак не сделать? |
Я теперь тоже знаю, что это много. :v2_rolley
Можно, например, плату сделать и прямо в гнездо DE1 ее воткнуть (как я с процессором сделал). Но я все же склоняюсь полную плату сделать. На ней можно будет все сразу отладить. Подумаю еще. Не хочется сделать плату расширения, потратить время и деньги и окажется, что наводки все равно велики. |
15 или 30, но тут в поламплитуды наводка, это как-то очень эффективно для паразитной связи. Попробуй сделай просто два провода рядом, повесь на дальний конец какое-нибудь сопротивление на землю, подай на один провод 1МГц и посмотри на втором, какого размаха у тебя будет наводка? Будет похоже не эту картинку?
|
1 Attachment(s)
svofski, ты как обычно прав :) Я поиграл с разными режимами и вспомнил, что когда я пробовал те сигналы я не включил чтение файла на микроконтроллере. А SPI интерфейс у меня включается уже после того, как нужный файл выбран (о чем я подзабыл). То есть те сигналы шли в ненастроенный порт микроконтроллера и что там с ними происходило я пока не знаю. :v2_rolley Вот какой сигнал SCK при включенном чтении образа и, следовательно, SPI на микроконтроллере. NSS пришел в норму (почти).
Все еще плохо, но не настолько. Понятно, что емкость линии высока и надо сокращать длину. Однако пока не знаю как - действовать наверняка и все же создавать Rev.0 компьютера или сделать плату расширения непосредственно в гнездо DE1. Пока делаю схему и одновременно буду думать. Плюс Rev0 в том, что заодно можно отладить I2C расширитель портов и TV выход без этих проблем с длинными проводами. |
Линии ведь однонаправленные, попробуй согласовать их, что будет? С передающей стороны буферный усилитель, 100 ом последовательно, с принимающей 100 ом на землю. Например. Не знаю, что получится =)
|
Буфер посредине пожалуй помог бы. Но у меня нет под рукой к сожалению. Кстати, последовательно там уже на DE1 47 ом резистор стоит перед разъемом. Интересно было наблюдать осциллограмму при разных значениях тока на выводах FPGA. Ожидаемо, что лучший результат показал минимальный ток. При 25mA картинка еще более замылена.
|
Это пока он нагружен на высокоомный вход.
|
Составление схемы движется довольно не плохо. Видео выход полностью готов. Остальные части в разной степени готовности. Я выложил пока видеовыход у себя в блоге с описанием работы: http://electronicsfun.net/RU/archives/552
Буду выкладывать и остальные части по мере готовности. Буду признателен за свежий взгляд с целью поиска ошибок или ценных идей. :v2_dizzy_vodka2: |
Вот еще пока дисководы на проверку:
http://electronicsfun.net/RU/archives/567 Я уже разводить начал по кускам. Чуть позже выложу процессор, память и пульты. |
С платой я закончил на позапрошлой неделе и отправил в производство. Платы готовы и отправлены мне 21/09. Думаю, что на следующей неделе придут. Заказанные примерно в одно с ними время детали для монтажа уже пришли.
Концепцию данной ревизии немного подправил во время разводки. Во-первых, в этой ревизии не будет "Ячейки 121". Во-вторых, слот расширения будет смонтирован прямо на плату и его по идее можно будет использовать с любыми картами расширения, кроме использующих DMA (каковых серийных для Агат-7 и не было, согласно Voldemar). В-третьих, параллельно-последовательный интерфейс не будет выполнен на плате, но соответствующая карта может быть установлена в слот расширения. В-четвертых, ввиду того, что при такой конфигурации ног ПЛИС оказалось достаточно, I2C расширитель портов оказался не нужен. Более того, осталось еще несколько свободных ног, которые можно будет использовать для дебаггинга или расширения функций. Итоговый получившийся размер платы примерно 100х230мм. Текущее расположение элементов позволяет сократить длину платы на пару сантиметров за счет их дополнительного уплотнения, но так как на цену плат там где я их заказываю это никак не повлияет, то решил не терять на это время и оставить как есть. Оптимизировать можно будет в следубщей ревизии вместе с улучшениями и устранением ошибок. А пока платы в пути, выложил в своем блоге описание подключения памяти и процессора: http://electronicsfun.net/RU/archives/572. Как всегда, указание на ошибки приветствуется. |
Santechnik, можно ли будет подключить к слоту расширения оригинальный модуль процессора? Я понимаю, что придётся крыжить прошивку ПЛИСины... Либо как вариант предусмотреть подобную возможность в будущих ревизиях, это как пожелание. :-)
|
Нет, к сожалению, этот модуль нельзя будет подключить. Разъем на плате расширения фактически будет представлять собой разъем номер 7, а процессорный модуль ставится кажется в первый.
Честно говоря, я не вижу смысла в усложнении схемы для возможности подключения этого модуля. Дело в том, что никаких преимуществ его использование не даст, так как я и так использую настоящий процессор в схеме. На ПЛИС же реализованы контроллеры памяти и устройств, ПЗУ и кое-что по мелочи. |
Жаль... :( У меня есть несколько плат от Агата, модуль процессора в том числе, а также распиленная материнка от девятки. Вот я и думал кусок с разъёмами прикошачить к вашей платке. ;) Вообще, давно мучила меня идея-фикс собрать в ПЛИСИну всю материнскую плату, а контроллеры оставить родными. Если проект в дальнейшем будет открытым, то наверное это будет возможно повторить, или, как вариант, делать что-то своё. :)
|
Я все исходники обязательно выложу, но попозже. Сейчас они не закончены, не причесаны и не комментированы нормально :v2_rolley , так как находятся в творческом беспорядке ;) Технически же я не вижу проблем в реализации этой идеи. На вскидку, надо будет заменить блок адресации процессора в ПЛИС, переделать контроллер памяти, выкинуть процессор и память и использовать освободившиеся ноги ПЛИС для обслуживания слотов. Если понадобится помощь с этим, то готов посодействовать.
PS Со мной можно на "ты" :v2_dizzy_vodka2: |
Santechnik, спасибо! :) Это пока задумки на будущее, сейчас озадачен более приземлёнными проблемами. ;)
|
3 Attachment(s)
Вчера платы дошли, но только сегодня смог их забрать. Вот пока их фотки. Наверное в выходные не торопясь начну сборку и откладку по кускам. :v2_dizzy_army:
|
1 Attachment(s)
Небольшой апдейт. Блок питания собран и отлажен (см. фотку). На вход подается 15В. На выходе получаются +3.3В, +5В, +12В и -12В (последние два нужны для карт расширения). Осталось еще сделать +1.2В для ПЛИС, но я забыл заказать регулятор LD1117-1.2 для него :v2_dizzy_facepalm: Сейчас заказал, но придет через неделю. Пока это не критично, так как прежде чем паять ПЛИС я хочу отладить всю периферию, так что можно подождать.
Также уже установлены и проверена работа преобразователей уровня сигналов от процессора с 5 до 3.3В. На данный момент выявлены следующие ошибки на плате:
|
Как это ты смог одолеть KiCAD? Завидую твоей выносливости и проницательности.
|
Quote:
|
А какие альтернативы? Sprint мне не нравится совсем. DipTrace и Eagle более или менее хороши, но не без тараканов и к тому же ограничения в бесплатных версиях. Я эту плату не смог бы поместить ни в один, ни во второй.
А KiCAD зря ругаете. Интерфейс конечно не супер, но если приноровиться, то очень даже удобный. Почти все действия на кнопках, основные я на кнопки своей многокнопочной мыши повесил и совсем хорошо стало. То что посадочные места отдельно сначало напрягло, но потом оценил гибкость. Правда внимательность требуется - легко попутать ноги, что и произошло. А программа разводки плат вообще очень удобная (только опять таки привыкнуть надо). Говорят, что старые версии и правда совсем уж плохи, но я их не пробовал. Раз уж я здесь, то и апдейт тогда :) Сделано и проверно/отлажено за сегодня:
|
Santechnik, а что за преобразователи поставил для сопряжения ПЛИС и 5-вольтовых шин?
|
74LVC245. Они не двухнаправленные, так что направление шины данных переключается сигналом RW процессора. Остальные же все сигналы однонаправленные.
|
Я KiCAD не ругаю. Просто я делал на него несколько заходов и все пока неудачно.
|
1 Attachment(s)
С дисководами вышла заминка. Я делал посадочное место под STM32S сам и на одной из сторон ноги пронумеровал в обратной последовательности :rolleyes: Обнаружил я это только когда припаял контроллер на 840К дисковод. Часть ног можно перепрограмировать, но не все. Пока отпаивал микруху, резал дорожки, паял проводки часть дорожек отслоилась. Да и доверия контроллеру тоже теперь особо нет - много ему досталось. Так что будем считать, что на плате дисковод 840К потерян. Дисковод 140К удалось спасти, хотя это было весело подпаиваться к ножкам с шагом 0.5мм. Не уверен, что захочу такой фокус повторить еще. :v2_dizzy_indy: В итоге дисковод 140К запустился и работает (см. фотку). В принципе, так как схематично 140К и 840К идентичны, я смогу отлаживать 840К и на этом дисководе тоже. Так что продолжаем собирать :v2_dizzy_snowball:
На очереди отладка собранного магнитофонного входа/выхода. |
Santechnik, где и когда можно будет приобрести платку (прототип или end-релиз не суть важно).
|
| All times are GMT +4. The time now is 01:06. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.