Модуль расширения SRAM для Ардуино (ATmega128A, ATmega2560).

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Перенесено в проекты, поскольку пришла память и регистры.

Заказал микросхемы памяти HM628512 - 5в, 40мА, 512кбайт, 70нсек и регистры-защелки к ним 74HC573d по 2шт на чип памяти .. едут. Пока едут, развел такую плату:

Особенности:

1. память разбита на страницы по 32кб, всего 16шт. При этом страница №15 подключается всякий раз, когда сигнал А15 = 0, то есть к малдшим, доступным адресам для внешней SRAM. Это как-бы "общая страница".

2. Запись номера страницы в регистр производится при комбинации сигналов !WE = !RD = 0, каковой "не бывает" в режиме работы x-bus интерфейса. То есть, можно спокойно отключить x-bus, вывести номер страницы на шину данных и установить обе ноги в 0. Перевод любой из них в 1 будет "стробом записи" номера страницы в регистр.

.. и вот смотрю я на оставшиеся 4 вывода регистра номера страницы и по ним "текут слюни": можно ли их задействовать для сигналов CS, к примеру подключить ещё дополнительно колодку PLCC32 и воткнуть в неё FLASH-чип типа AT29C040A-90? В этом разе можно поиметь 512кб EEPROM в том же модуле ..

.. или можно ли их как-то задействовать для подключения памяти TFT-дисплеев, так сказать "напрямую"?

В общем, кому интересна доп. память и подключения памяти TFT-дисплеев напрямую и кто знает как они устроены - пишите, пока едут микрухи. Мне интересны любые мнения, кроме "нафига это надо". :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Кстати, подумалось вот: если заюзать вместо транзисторов 4х2ИЛИ-НЕ (02), то можно получить ещё 2 блока этой микросхемы для верного формирования сигналов CS как для SRAM, так и для PLCC колодки под FLASH по состоянию А15..

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Посмотрел даташиты на микросхемы flash-nor .. и опаньки: W29C040 имеет ту же самую емкость и единое питание в 5в, но экономичнее (20мА против 40) дешевле, шустрее (70нс против 90) и держит аж до 100тыщ циклов перезаписи .. что, Атмел - уже не "впереди планеты" всей по чипам флеш-памяти? :)

diger67
Offline
Зарегистрирован: 25.07.2015

Все хорошо, только вот одно но, можно юзать память с шиной 8 бит. Что накладывает определенные огранечения, можно юзать только 8 битные TFT. Использование внешнего ОЗУ резко снижает быстродействие. Использовать лучше страници по 64 кбат, так мне кажется время доступа будет быстрее.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

diger67, X-bus у мег, где он есть - исключительно 8-и битный. Каким образом Вы планируете подключать к нему TFT с большей разрядностью?

Насколько "резко" у вас снижается быстродействие меги при использовании внешнего ОЗУ? Вы его пользовали?

По моей оценке, снижение "несущественно", поскольку мега с внутренним ОЗУ работает "в 2 такта", то есть на скорости 8Мгц при тактовой в 16. При доступе к внешнему ОЗУ имеем 1 дополнительный такт, то есть 5.33Мгц. То есть "снижение" 8/5.33 = 1.5 раза. Это увеличение времени доступа к 1 ячейке ОЗУ. Если учесть, что в среднем частота команд доступа к ОЗУ во взвеси команд составляет не более 1/3, то получаем:

1. Внутреннее ОЗУ: 1+1+2 = 4 такта на каждые 3 команды программы.

2. Внешнее ОЗУ: 1+1+3 = 5 тактов на каждые 3 команды .. итого "резкое замедление" = (5-4)/4 = 1/4 = 25%.

ДВАДЦАТЬ ПЯТЬ ПРОЦЕНТОВ. Это в минусе, а в плюсе - увеличение емкости ОЗУ в 512/8 = 64 раза. Мне кажется что это незначительная плата за расширение возможностей и направлений применения меги..

У Вас есть другая практика? Поделитесь?

P.S. Да и даташит утверждает, что независимо от наличия внешнего ОЗУ доступ по младшим адресам, всегда происходит к внутреннему ОЗУ в его размерах и всегда за 2 такта. Что позволяет существенно ускорить работу с памятью, размещая наиболее востребованные объекты во внутреннем ОЗУ .. например стек.

В данном релизе, первые 8кб Мега2560 - всегда будут находится во внутреннем ОЗУ, следующие 24кб - это постоянная страница памяти (общая) потому что А15=0, а вот следующие 32кб - это "окно" для доступа к текущей странице, номер которой задан в регистре U3.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Кстати, пришла память и регистры. Вопрос к электронщикам: какие мосфеты сюда можно втыкнуть, пойдут ли 2N7002? И если нет, то можно ли втыкать сюда какие-нибудь советские КТ513Б, КТ3102А (эти есть в наличии) и как это лучше сделать вместо полевиков-инверторов?

diger67
Offline
Зарегистрирован: 25.07.2015

Arhat109-2 пишет:

diger67, X-bus у мег, где он есть - исключительно 8-и битный. Каким образом Вы планируете подключать к нему TFT с большей разрядностью?

ДВАДЦАТЬ ПЯТЬ ПРОЦЕНТОВ. Это в минусе, а в плюсе - увеличение емкости ОЗУ в 512/8 = 64 раза. Мне кажется что это незначительная плата за расширение возможностей и направлений применения меги..

У Вас есть другая практика? Поделитесь?

По первому пункту, может я непонятно выразился. Имелось ввиду что используя стандартную шину внешнего ОЗУ можно подключить только 8 бит. Потеря 25% скорости при обращении к ОЗУ критично в зависимости от задачи. Мне пришлось уйти от AVR в некоторых моих задачах т.к. даже в режиме оверклока медлиный он.

diger67
Offline
Зарегистрирован: 25.07.2015

Arhat109-2 пишет:

Кстати, пришла память и регистры. Вопрос к электронщикам: какие мосфеты сюда можно втыкнуть, пойдут ли 2N7002? И если нет, то можно ли втыкать сюда какие-нибудь советские КТ513Б, КТ3102А (эти есть в наличии) и как это лучше сделать вместо полевиков-инверторов?

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

А можно ли их убрать, эти резисторы подтяжки базы к плюсу? Не хотелось бы поиметь лес из резисторов..

diger67
Offline
Зарегистрирован: 25.07.2015

Arhat109-2 пишет:

А можно ли их убрать, эти резисторы подтяжки базы к плюсу? Не хотелось бы поиметь лес из резисторов..

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Коллекторные понятно что не убираемы .. они формируют нагрузку. А какой номинал "пойдет" в базу для скажем КТ315Б (их ещё с мешок есть)? По частотным параметрам они вроде как "тянут" с запасом ..

Как помню, у них к-т усиления по току около 100. Соответственно, если в коллекторе ставим 4.7к (ток около 1мА), то в базу надо .. 470к, так чтоли?

diger67
Offline
Зарегистрирован: 25.07.2015

В ключевом режиме к-т неважен. главное условие чтобы ток базы не превышал номинальный и напряжение было достаточно для открытия транзистора. Я обычно ставлю последовательно от 1 кОм. И при инициализации портов первым делом записываю в DDRx.y единици(перевожу в режим выхода).

ptr
Offline
Зарегистрирован: 28.05.2016

Arhat109-2 пишет:

Мне интересны любые мнения, кроме "нафига это надо". :)

Ряд SRAM последовательного доступа умеют выдавать данные по 4 бита (SQI). Само собой, адрес первой ячейки загонять туда надо медленно и нудно по SPI, но если читать надо массив данных последовательно, то чтение данных по 4 бита программно получится не так уж медленно. А экономия ног МК огромная.

Нет?

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Нет! Каким способом Вы предлагаете в последовательной SRAM объявлять обычные переменные и потом пользоваться ими как переменными в программе? :)

Это для расширения внутренней SRAM исключительно для такого применения. На тот случай, когда вашей программе "не хватает памяти" под переменные и кучу.

P.S. Конкретно эти микросхемы памяти мне пришли по 44руб/шт + 2 регистра по 10.23руб/шт. .. итого 64.46руб. .. и 512 килобайт для работы с данными "на руках". Это - "плохо" или "дорого" по-вашему?

Ног у мега2560 - 86 штук .. что называется "ужраться".

ptr
Offline
Зарегистрирован: 28.05.2016

Arhat109-2 пишет:

Нет! Каким способом Вы предлагаете в последовательной SRAM объявлять обычные переменные и потом пользоваться ими как переменными в программе? :)

Обычные нет. А данные объектов специально написанных классов - вполне.

Arhat109-2 пишет:

Это для расширения внутренней SRAM исключительно для такого применения. На тот случай, когда вашей программе "не хватает памяти" под переменные и кучу.

Значит я не понял задачи. Одно дело, заиметь дополнительную память, доступную даже для тиньки. И совсем другое, за счет большого количество ног у меги2560 расширить ее память, да еще так, чтобы прозрачно там размещать любые переменные.

(OffTopic on)

Если же говорить о деньгах, то ATMega2560 стоит от 250р (только чип) до 400 рублей (Arduino). При том, что Pro Mini стоит 80-90 рублей. STM32 110-120 рублей. Получается какая-то узкая область применния. С одной стороны, когда нам все же нужна ATMega2560, с другой, когда нам не требуется ее большое количество ног.

Конечно, тут еще дело вкуса. Но я для себя так и не нашел пока случаев, когда ATMega2560 оказалась рентабельней, чем решения на нескольких ATMega168/328/ATTiny или STM8/STM32 (плюс, возможно, сдвиговые регистры и демультиплексоры)

Все вышесказанное субъективно и, даже, частично эмоционально. Просьба ногами не бить. )

(OffTopic off)

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Эта плата подойдет для любых Мег, имеющих X-bus интерфейс. В частности также встанет и на Atmega128A, которую тоже поставил в заказ по .. 38руб/шт (партия 20шт) .. просто поставщик "тот же самый", что и зависшие платы. Жду когда доедет первый заказ, дабы убедиться что не халявщик.

Вы используете меги исходя из "не того принципа" (для которого эта плата - не подходит): "пофиг что внутри, лишь бы хватило ног и подешевле. Что надо -  эмулируем программно". Я исхожу из иного подхода: "используем то, что имеет требуемое железо внутри, а программно делаем сложные алгоритмы управления и взаимодействия железок"... только и вся разница.

В первом подходе вполне допустимо сравнивать промеж себя "тиньки и меги": больше/меньше ног, дороже/дешевле, а во втором - нет: каждый камень под свой класс задач и они практически не пересекаются. Мега2560 - это "монстр" в мире микроконтроллеров, загрузить аппаратуру которого даже на 75% мне не удалось ещё ни разу. Как понимаю, на нем можно вполне сваять какой-нибудь "марсо-луноход", где 1 камень будет управлять вообще всей периферией.. и ног "хватит". :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ещё раз, всем: эта плата предназначена для расширения внутреннего объема ОЗУ через X-bus интерфейс мег, без использования дополнительных ног, для прямого использования большей памяти в компиляторах.