Недовольным. Супер Дуня. Есть желающие принять участие?

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Тогда уж свою плату с какой-нибудь SoC...http://geektimes.ru/post/247678/

Это было бы неоценимо!

Идею с отдельной памятью поддерживаю. Несколько плат расширения, с Flash, SRAM и EEPROM.

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

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

1. У меня уже есть Ардуино Мега2560 с её 256кб флеша и 8кб ОЗУ. Благодаря тем, кто кидал бабки на телефон ещё есть УНО на ATmega328P и в дороге едет Pro Mini на нем жеж. Спасибо огромное всем. Нафига оно мне? Главная задача - освоение ребенком навыков программирования, на примере МК. Подрыгать ножками, погонять сервы, моторы, померять расстояние узв. датчиком, найти линию, определить цвет детальки и куда её рукой робота запихнуть можно и т.д. В кружок Wedo, Lego MindStorm и пр. "готовых" чудес он ходит и так, это "ежели вчё" на предмет "возьмите Лего". Ардуино, как мне кажется, куда как нагляднее в части понимания базовых вещей: "битиков", "байтиков", "конечных автоматов" и даже "как" устроен Фон Нейман в целом. Это почему таки НЕ лего. А вот механическая часть в виде "а-ля Лего" - нам очень приглянулась. Всё что используется, постепенно одевается в "лего формат" и позволяет компоновать "что хочешь".

Так вот, первое с чем столкнулись, готовя робота - возящего шарики по лабиринту, это недостаток того самого ОЗУ, которого у него аж целых 8 (восемь) килобайт... Не, для лабиринта 4х4 (стандартное поле для соревнований) его вполне достаточно, едем, крутим узв. датчик на +-30 позиций, запоминаем, формируем положение стенок лабиринта, корректируем .. находим оптимальный путь. Но вот попытка им же картографировать "произвольные" препятствия в комнате на 20 кв.м., да с хорошей точностью .. ну хотя бы в 5-10см .. увы. "Маловато памяти"! Про "найти оптимальный путь" волновым алгоритмом уже и мечтать незачем.

Сколько надо ОЗУ, чтобы решить такую задачу? 30кб, 300кб или гигабайты? А ведь типовая задача для самокатных тележек .. и? "задача не для Ардуино"? Да ну нафиг. Сколько ещё таких, относительно несложных задач в части "робототехники", но "не лезет"? Да полно.

Да, мне для моих задач "обучения", на примере самокатных тележек - сильно много и не требуется .. 32 кб на первое время - "вполне достаточно".

2. Есть у нас TFT экранчик безимянный, из выбывшей из строя цифромыльницы Nikon .. можно бы и подключить, разрешение что-то там 320х256 или чуть поболее .. и? Хранить нарисованное - "куда"? Там тока экранчик .. памяти нетути. Ах, да .. можно жеж "купить недорого".. :)

.. могу ещё с пару страничек нарисовать, а могу тут поковыряться на предмет "как часто и сколько раз возникали вопросы не лезет, не хватает памяти" и т.д.

Но, на самом деле, МК решает ровно тот круг задач .. которые лезут в его память. И, следствие: как только растет память - расширяется круг задач. Не? :)

И да, вы правы. Первый критерий, который надо смотреть - это ПРОСТОТА изготовления. А вовсе не "для чего надо именно 2 метра". Просто, можно изготовить:

1. 32 кб - "в лоб", без каких либо изысков. Рекомендовано в даташите "как";

2. 128кб - на базе 8кб страниц (наиболее удобный размер из опыта для большинства приложений) и 4 битного страничного адреса;

3. 2Мб - на базе тех же 8кб страниц и 8-битного страничного адреса.

Все остальное требует "изысков", и значительно удорожает реализацию.

 

spa-sam
Offline
Зарегистрирован: 14.12.2012

По поводу НАФИГА, как-то неплохо сказал Шнуров, цитирую ввиде ссылке т.к. цензура форума не позволяет, но всем советую почитать https://vk.com/wall-14771487_85413 

P.S. Авторам всех проектов!  Слушайте прежде всего себя, ну и немного тех, кто что-то дельное и по теме предлагает, а не советует - нафига!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Спасибо.

Arhat109-2 пишет:

и даже "как" устроен Фон Нейман в целом. 

Это про что? Какое отношение avr-ка имеет к фон Немановской архитектуре? Эк куда Вас занесло! Отдыхать надо в выходные-то!

Arhat109-2 пишет:

могу тут поковыряться на предмет "как часто и сколько раз возникали вопросы не лезет, не хватает памяти" и т.д.

Это не аргумент. Подобные вопросы, которые в я вижу здесь - на 90% просто неумение программировать и слепая вера в то, на где-то гитрабе есть секретная заветная ссылочка, по которой лежит подходящий говнокод, который везде "лезет", а противные спецы не хотят ею делиться :)

Arhat109-2 пишет:

Первый критерий, который надо смотреть - это ПРОСТОТА изготовления. А вовсе не "для чего надо именно 2 метра".

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

Ладно, спасибо за ответ, удачи!

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

spa-sam пишет:

как-то неплохо сказал Шнуров, 

Далеко ему до Вознесенского!

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

Замечательный коммент. Очень рад, что в свое время, мучаясь выбором "что приобрести домой, только не майндшторм?" тоже услышал много советов про УНО, про-мини, леонардо и прочую нечисть, прошедшую "обрезание" ещё на заводе .. хорошо что не послушал и взял мегу2560. :)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Короче, я за:

-ATMega128 

- разные модули разной внешней памяти

- разводку всех ног, соответственно, при использовании дуньских библиотек добавление в них новых возможностей, aka указание UART/USART при ините Serial'a и т.д.

- возможно, переписывание IDE. Очень врядли, но почему бы и нет?

- добавление маленьких, но полезных вещей на плату: DC-DC Step-Down'ы вместо линейных на 3.3 и 5В, кварц 32КГц, также не помешали бы схема заряда Li-ion, может даже DC-DC Step-Up для питания внешних устройств, конвертёр в RS485...хотя, возможно, это и лишнее.

- возможно, несколько ревизий плат - минимальных ака только МК и обвяз и максимальных со всеми перечисленными плюшками.

...

yaryarikyar@ya.ru

spa-sam
Offline
Зарегистрирован: 14.12.2012

Yarik.Yar пишет:

Короче, я за:

-ATMega128 

...

yaryarikyar@ya.ru

 

Поддерживаю!

 

Immortal
Offline
Зарегистрирован: 28.12.2013

Yarik.Yar пишет:

- добавление маленьких, но полезных вещей на плату: DC-DC Step-Down'ы вместо линейных на 3.3 и 5В, кварц 32КГц, также не помешали бы схема заряда Li-ion, может даже DC-DC Step-Up для питания внешних устройств, конвертёр в RS485...хотя, возможно, это и лишнее.

- возможно, несколько ревизий плат - минимальных ака только МК и обвяз и максимальных со всеми перечисленными плюшками.

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

Секрет популярности Pro Mini в том что у платы минимально возможные габариты, а провода и датчики можно паять прямо к контактным площадкам. Но я не люблю когда у меня на проводах болтаются всякие модули, макетки, те же pull-up резисторы. Если получится скрестить ардуину с обычной паечной макетной платой это будет прорыв и новые возможности для проектов, где не хватает Pro Mini.

После праздников я поделюсь наработками.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Вот, вспомнил, в инете встречал платы с установленными на них беспаечными макетками. Это прорыв в области удобства макетирования)

Ждём Ваших наработок, Immortal.

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

ЕвгенийП пишет:

Спасибо. ... Это не аргумент. Подобные вопросы, которые я вижу здесь - на 90% просто неумение программировать и слепая вера в то, на где-то гитрабе есть секретная заветная ссылочка, по которой лежит подходящий говнокод, который везде "лезет", а противные спецы не хотят ею делиться :) ... Вот здесь мы с Вами расходимся совершенно принципиально. Я бы сказал - философски. Я всегда иду от задачи и уже от неё изыскиваю возможности, а Вы - от возможностей - сделаем, что можно а задачи мол найдутся.

Не за что. А вот от удачи - не откажусь, она завсегда нелишняя. :)

1. Согласен с желаниями найти чудо-говнокод. На 90% - вы правы.

2. Так у меня задача "обучить", да ещё желательно в игровой форме, дабы интерес не потерялся. Какие тут требования в ОЗУ? На 286-м когда-то рисовал игрухи, сколько бы памяти не было - всегда приходилось выжимать: "васенька, ну ещё 50 граммов", тьфу-ты, килобайт. Ну вот никогда её не хватало, сколько себя помню.

Сколько надо памяти, чтобы сваять самокатную тележку, говорящую "что она делает" .. ну вот как в смешариках: "принята команда включить лазер. Лазер - включен." или "найден оранжевый кубик, складываю на синий" или "Опасное снижение напряжения. Срочно требуется подзарядка" или по-просту "Жрать пора!"? :) Можно "загнать" фразы во флеш или вовсе на SD записать, благо его многа .. но комбинировать их все одно "память нужна", не? :)

.. а принимать "команды" на микрофон, слабо? :)

Вот и получается: "была бы память, а дело для неё - точно найдется". Любая. Дадите 100кб, значит будут проги на 100кб, дадите гектар - и ему применение найдем и в "тему", а не говонокодом засирать. :)

А отсюда: первоочередное условие - простота реализации контроллера памяти. А вовсе не "от задачи". Так что да, расходимся. Предпочитаю отталкиваться от возможностей, решая задачу. А не наоборот.

switch
Offline
Зарегистрирован: 07.12.2015

По  поводу mega128+SRAM - это  гуд. Хотя, конечно, я умудрился  двумя килобайтами обойтись при использовании дисплея. пришлось отказываться от лишних классов, например, utftbuttons. 

Что касается роботов и прочего - тут лучше сразу более мощные  девайсы применять, например такие   Раньше вдвое дешевле были ;(

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Я выше давал ссылку на статью на ГТ о проектировании своего миниПК на SoC...если заняться, да вязть что-нибудь популярное...бомба будет.

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

switch, вот вы дали ссыль, а на кой? Что по вашей ссылке связано с "робототехникой"? Да, там много мегагерцев, мегабайт, и кучка типовых интерфейсов .. но ровно там же, по вашей ссылке дано и описание типового применения девайса: внешний беспроводной жесткий диск. То бишь устройство накопления, первичной обработки и хранения информации .. и только. Робототехника - это перво-наперво УПРАВЛЕНИЕ развитой периферией, разные там ШИМ, ногодрыги, шустрые реакции на прерывания и их обилие и т.п. Тот же Rasbery PI уже мало подходит для такого применения! Оттого и делают "бутерброды", где малинка управляет .. упс, ардуинками. :)

Yarik. Yar, ровно аналогично. Смотрел я вашу ссылку на ГТ. Ровно то же самое. Собрать SoC можно. В свое время (1985-1987гг), проектировал многопроцессорную модульную систему на базе Intel8080 (К580ИК01), Zilog Z80, M6800, К1802+К1804+К589 (моя версия Кронос, с его разрабами был знаком и обменивались идеями), Intel 8086 + 8089 (оч. хороший МК был: "Контроллер монопольного и/или мультиплексного канала IBM 360" на одном кристалле). i286 и старше тогда "в природе" ещё не было .. каждый модуль со своей памятью и общей шиной и разделямой модульной памятью .. и? Вывод один: из конкретного SoC можно собрать только то, для чего он был предназначен. Так модуль на К580ИК01 внезапно, получился "типовой", ровно тот же самый, который прописан в его даташите, когда мне его подарили интеловцы (3 тома по 30 баксов, по тем временам - "бешенные деньги", досталось бесплатно). Да, пришлось применить К580ГФ24 .. и весь останой комплект, вплоть до К580ВВ79 .. а когда полистал подарочек, нашел все те же самые рекомендации и схемные решения на 80% "один в один".

Собрать "свое" - К1802, К1804 и их аналоги Am2970.. вам в руки. Можно ещё ПЛИСами разбавить. Получится громоздкое и жрущее "чудо", но зато точно "бомба", как в свое время получился Кронос. А вот уже "потом", вполне можно, его превратить в SoC. Но никак не "наоборот".

arduinec
Offline
Зарегистрирован: 01.09.2015

Arhat109-2 пишет:

У меня уже есть Ардуино Мега2560 с её 256кб флеша и 8кб ОЗУ.

Не отменяя основной цели данного топика, почему бы не сделать плату расширения (шилд) для Меги с дополнительной памятью?

http://www.rlocman.ru/shem/schematics.html?di=109611

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

Сейчас шибко занят подготовкой к соревнованиям. Проблемы в основном в "механике".. сыпятся редукторы из пластика от CD-дисков, слишком хрупкий материал и с предварительными напряжениями. Как только вопрос решу, займусь драйвером на 8 моторов на мосфетных мостах A4606, который уже обсуждали в соседней теме. Получится, займусь платой расширения памяти для своей Меги2560, а "заодно" и допайкой недоразведенных ног на плате. Но, у меня к ней "мелкосхем" нету. Та, SRAM что досталась распайкой плат и подвигла меня на изучение ситуации с шилдами памяти - увы, оказалась битой. Ну и найти в продаже К531РУ8, РУ9 или аналоги по вменяемой цене пока не удалось. Их ваще мало кто продает. К555ИР26 и аналоги - куда как доступней.

switch
Offline
Зарегистрирован: 07.12.2015

Arhat109-2 пишет:

switch, вот вы дали ссыль, а на кой? Что по вашей ссылке связано с "робототехникой"?

все просто: 400мгц  процессор, куча памяти, скриптовые языки и прочее и прочее. На 400 мгц баш или пхп будет быстрее работать чем С++ uf 16 МГц mega328.

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

Замечательно. Только каким оно боком к ардуино и МК, специализированным на управление периферией? :) (Ардуина и ваще тут, про это ежели вчё)

Возьмите xeon или что-нибудь последнее от AMD и будут вам ваще "гигагерцы". Мне, одно время очень нравились сервера от HP ... :)

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

arduinec, Да, это единственное в сети решение с реальным расширением ОЗУ для ATmega МК, которое нашел в сети. Там интереснее "part 2", с использованием SRAM на 512кб, и требующее 3-х дополнительных ног от Меги. Там же есть библиотека xmem, в которой применение сегментированно-расширенной памяти УЖЕ реализовано (я бы сделал несколько иначе, позволив компилятору иметь больше памяти под статику и  глобалы..)

Immortal
Offline
Зарегистрирован: 28.12.2013

С 16 МГц кварцем авр даст пропускную способность 8 Мб при работе с внутренней оперативой и до 5,3MB/s с внешней RAM.

И это синтетический бенчмарк, если добавить в прошивку что то полезное, скорость упадет в 10-20 раз.

"а принимать "команды" на микрофон, слабо?" - про это можно забыть, ардуина не потянет.

STM32F4 работая на 168MHz даст 168MHz * 4bytes = 672MB при работе с внутренним RAM. Но распознавание голоса и она не потянет. С этим обращайтесь к расбрерри пи и облачным сервисам распознавания голоса.

Цифры взяты с http://www.avrfreaks.net/comment/867136#comment-867136

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

Цифры - верны, но почто так пессимистично: "не потянет"? Оцифровка Hi-Fi это .. всего-то 44кГц. Для телефонных линий ширина полосы пропускания и того хуже: 200гц - 9300кГц. Для оцифровки высших частот вполне достаточно "битового представления" то есть 2 отсчета на период .. итого частота сканирования вполне достаточна в 18-20кГц для "телефонного качества". И, по-вашему, пусть даже 5.3 мегагерцовый проц не справится с 20 килогерцами? :) Scream Tracker видимо зря делали впервые на .. 8086 кристалле, а первоначально идеи взяты из Z80. Правда это обратная задача. :)

Не переживайте, справится. Просто "памяти маловато" для съема трека и его сопоставления с образцом. Первый мой "матюгальник" и "сказочник" бегал ещё на Ямахах на z80. :)

Immortal
Offline
Зарегистрирован: 28.12.2013

Записать аудиосигнал в оперативу это только 1% задачи. Вы забыли цифровую фильтрацию, преобразование Фурье, анализ спектра, поиск сигналов-маркеров.

Тут без DSP ничего не получится, ведь считать это все нужно в реальном времени. Про Ардуину на базе AVR лучше сразу забыть.

Советую почитать Советы начинающим программистам микроконтроллеров и следовать хотя бы большей части этих правил.

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

Ну вот и хочется посмотреть "чего подзабыл" с середины 1980-х.. :) Как оказалось, в "С" забыто не так много, в С++ - значительно больше.

Но, мы несколько отвлеклись от темы. Как понимаю, вопрос плавно переходит во вторую стадию: "Почему бы и нет, в этом что-то есть".

Резюмирую. Итого, кандидаты из Атмела на "супер дуньку": ATmega128 - обрезанный вариант ATmega2560 и имеющий ценовую нишу согласно обрезанию. ATmega64, ATmega640 и ATmega1280, а равно их двойники ATmega641 и ATmega1281 - отпадают из-за несоответствия стоимости обрезанию. Итого: 2 варианта платы: "упрощенка" и "полновес".

Также есть интерес к отдельным модулям памяти, но по сути формат модуля имеет смысл только к Arduino Mega2560, ибо иных со встроенным контроллером X-bus тупо нет. Ну и как вариант, дополнительный модуль к минимальным наборам на базе этих МК, типа "Mega2560 Core". Однако, рассматривать вариант платы Arduino Mega2560 как базовый - лично сам, даже имея таковую, не вижу никакого смысла как из-за непомерных габаритов платы так и из-за отсутствия значительной части разведенных ног. Остается как "готовый прототип" - только вариант с CORE.

Отсюда, Immortal, вам вопрос: ваша разводка и мини-плата для ATmega128A - насколько совпадает по размеру, ногам и пр. с каким-либо из озвученных, имеющихся вариантов? Или, насколько ваш формат платы позволит развести в нем ATmega2560 "в будущем", как вариант платы?

pav2000
Offline
Зарегистрирован: 15.12.2014

Использование малины это другое. И прямое сравнение не корректно. В малине используется linux. Оснавная цель любой операционной системы это деление ресурсов между задачами. Отсюда и проблемы.

Если в ардуино программист царь и бог и работает с перефирией как хочет (руководствуясь только даташитом на контроллер), то в малине обращение к переферии в первую очередь описывается правилами linux (память и порты это разделяемый ресурс).

Обращение можно делать через мапинг памяти, все это будет медленно и печально или надо писать модуль ядра со своими заморочками и правилами. Квалификация програмиста должна быть выше. Очень много ресурсов тратится на обслуживание операционки.

Мы на работе используем смешанный метод. Центральный блок linux. Перефия это микроконтроллер. Переферия делает первичную обработку и передает данные в linux. 

Правда linux имеет свои приимущества много чего уже наисано и сделано.

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

Собственно модули памяти. Пока вижу 1 вариант, что называется "в лоб": SRAM 32Кx8 с одним регистром-защелкой, подключенный в старшую половину адресов. Поскольку в младших адресах ожидается разное количество "встроенной памяти". Компилятору надо будет объяснять, что у него 2 блока памяти: встроенный в младших адресах и "дополнительный" в старших. Можно настроить распределение разных сегментов: младшие адреса для глобалов, а старшие для кучи и стека.

Возможна разновидность для SRAM 64Кх8 с потерей младшей части, которая перекрывается внутренней SRAM. Достоинство - простота как модуля, так и его использования: компилятору достаточно только указать что он вправе использовать всё адресное пространство МК для распределения памяти - изменить 1 параметр в описании платы в ИДЕ и остальное компилятор сделает сам: куча будет расти от глобалов, а стек с конца адресного пространства.

Насколько упрощение использования перевешивает удорожание микросхемы для форумчан? Вопрос задаю, не просто так, поскольку хорошо вижу местную "борьбу за копейки".

И 2 вариант со страничным контроллером 4х4 на базе К555ИР26. Все остальные варианты получаются существенно дороже. Вариант, с использованием доп. ног от МК (как по ссылке arduinec) считаю несколько "расточительным", ибо "ног - мало". Модуль также можно спроектировать как на старшую половину адресов со страницей в 8кб, так и на все адресное пространство со страницей в 16кб. Во втором случае, регистр отвечающий за страницу 0 - программировать несколько "нецелесообразно", поскольку в нем будет всегда "экранироваться" младшая часть внутренней SRAM. Зато точно также несколько упрощается настройка компилятора. Кстати, тут возможна такая раскладка адресов и страниц:

0 - не изменяемая, как продолжение внутренней памяти. 1,2 - "большая куча" с переключением страниц и 3 - "отдельная память" под RTOS потоки, исполняемые автономно в пределах страницы в 16кб - "много задачное окно". Исключительно как вариант.

2-й вариант имеет 2 развития: 1 микросхема (4бита) - до 16 страниц "всего" или до 128/256кб SRAM и 2 микросхемы (8бит) - до 256 страниц "всего" или до 2/4Мбайта SRAM. Можно развести только второй вариант, а первый - его упрощение без запайки второй микросхемы регистрового файла. Большую память можно развести на пару микросхем памяти, поскольку "рост цены" с ростом объема - не линеен. Пара микросхем на 512кб стоит существенно дешевле чем 1 на 1метр.

Дополнительно потребуется 1 нога дуньки: xmem - "включен/выключен" для разделения режимов работы остальных 19 ног интерфейса: или они работают как шина X-bus или пишут/читают из регистров страниц.

Ваши оценки, варианты, мнения?

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

Кстати, эта же доп. нога, вполне может запрещая xmem разрешать использование ног "по своему назначению" как обычные пины. Схемы памяти, регистров - 3-х стабильные и тупо переводятся в третье состояние отключаясь от ног. Запись в регистры - ни на что не влияет, пока интерфейс отключен.

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

Подниму тему. Есть ещё варианты/предложения?

switch
Offline
Зарегистрирован: 07.12.2015

Да какие предложения-то. Делайте уже ;))

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

Ок. Поставил "в очередь". Уже делаю разводку драйвера на мосфетах (обсуждался тут в разделе "Проекты"), как-то пока не выходит "впихнуть" управление 8-ю моторами в размер Ардуино Мега2560 .. или я с kicad-ом так и не додружил .. так что, пока могу только обсуждать вопрос.

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

В старой 486 матери нашлись мелкосхемы EM51256A-20P обыскался, не могу найти даташит, нет ни на alldatasheet.com ни на сайте Etron .. явно это SRAM, но какая? Может кто помочь?

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

О, наконец-то! На каком-то немецком сайте, в разделе "архив" нашел таблицу соответствий и в ней .. есть такая букашка! Оказывается это полный аналог AS7C256-20P - 32к х 8 со скоростью выборки 20нсек. А их в той DX-ине оказалось аж 8шт и все на панельках DIP-28. Там же отковырял один (больше не было) CD74VHC373 в sop корпусе .. можно пгобовать собирать макетку на 64кб. :)

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

Посмотрел описание компилятора и линкера .. проще всего ограничиться 64к и перемещать только кучу: достаточно определить только 2 символа: __heap_start и __head_end. И разработчикам на С++ будет щастье: вызов конструктора через new будет размещать объекты в расширенной памяти.

В целом, похоже линкер умеет генерировать оверлеи, пардон сегменты данных с заданного адреса и нужным размером, но надо изучать вопрос далее для превышения 64к.

switch
Offline
Зарегистрирован: 07.12.2015

Кросаучег! Так держать!

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

Пасибки, тока я чего-то не понял .. накидал вот такой тест памяти:


uint32_t test_start, test_end;
uint8_t  pattern;

void printResult(uint8_t isOk)
{
  Serial.print("Pattern=");
  Serial.print(pattern, DEC);
  Serial.print(isOk? ": ok" : ": error");
  Serial.print(", time=");
  Serial.print(test_end - test_start, DEC);
  Serial.println("mcsec.");
}

/**
 * test memory with pattern
 */
uint8_t memTest(uint8_t pattern)
{
  uint8_t * mem = (uint8_t *)0x8000; // start with upper 32k
  uint8_t   res = 1;
  uint8_t   count = 5;

  test_start = micros();
  do{
    *mem = pattern;
    if( count>0 ){
      count--;
      Serial.print(":");
      Serial.print( (int)*mem, DEC);
      Serial.print(":");
      Serial.print( (unsigned int)mem, DEC);
      Serial.print(":");
    }
    if( *(mem++) != pattern ) res = 0;
  }while( mem>0 );
  test_end = micros();
  return res;
}

void setup()
{
/*  DDRA = 0xFF;  // pullup AD0..7
  PORTA = 0xFF;
  DDRA = 0;
*/
  DDRC = 0x80;
  PORTC = 0x80; // A15=1
//  DDRC = 0;
  
  XMCRB = 1;    // XMM0..2 release PC7 up to 32k in high addresses (PC7=1, above!)
  XMCRA = 0x80; // SRE=1 - enable Xbus, SRL0,1,2=0 - one bank; SRW1x,SRW0x = 0 - not wait state

  Serial.begin(9600);

  printResult(
    memTest(pattern=255) // and calc test_start, test_end too!
  );
  printResult(
    memTest(pattern=0x55) // and calc test_start, test_end too!
  );
  printResult(
    memTest(pattern=0xAA) // and calc test_start, test_end too!
  );
  printResult(
    memTest(pattern=0) // and calc test_start, test_end too!
  );
  
  XMCRA = 0; // close Xbus
}

void loop() {
}

и попробовал его запусить БЕЗ макетки. Вывод меня несколько озадачил:

:0:32768::1:32769::2:32770::3:32771::4:32772:Pattern=255: error, time=32916mcsec.
:0:32768::1:32769::2:32770::3:32771::4:32772:Pattern=85: error, time=63088mcsec.
:0:32768::1:32769::2:32770::3:32771::4:32772:Pattern=170: error, time=77944mcsec.
:0:32768::1:32769::2:32770::3:32771::4:32772:Pattern=0: error, time=77948mcsec.

Ну то, что время работы большое - это из-за Serial. А вот почему по адресам памяти от 32к последовательно читаются цифирьки 0,1,2... - не вкурил.

Пока макетку подключать не стал - непонятно что происходит "без" подключения.

Да, ещё. Без вывода диагностики, цикл теста пролетает со скоростью 2.3 Метра в секунду. Это "туда и обратно" .. то есть имеем 4.6Мб/сек - вполне терпимо.

P.S.

1. посмотрел ассемблер. Н-да, он с оптимизировал цикл без вывода в сериал, зараза. 2.3 метра в сек. - это только "туда".

2. Кажется догадался "что происходит": младший байт адреса - изменяется как раз в этом порядке. Его и читаем. То есть, в порт А выкмдывается адрес, а потом его же и читаем, несмотря на то, что ноги порта подтянуты регистрами (раскрывал комментарий - все то же самое). То есть его "пробивает" внутри МК. *опа.

3. Подключил макетку - результат тот же.

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

Как понимаю, желающих поиметь расширенную память - нет, а помочь и тем более. Ок, в таком разе я тему закрываю.

switch
Offline
Зарегистрирован: 07.12.2015

ну почему же - интересно. Просто вам это актуально и прижало, а остальным - нет.

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

Поигрался с макеткой - результат разный. Похоже длина проводов и ненадежной стоединений в беспаечной макетке играют свою роль на этих 2х с небольшим мегагерцах: стоит пошевелить провода и чиселки вываливаются самые разнообразные. При самой большой задержке - иногда вываливаются даже верные значения в тесте. Похоже надо паяться на нормальную макетку и смотреть. Или я "не те выводы" памяти использую для управления.

Примененные детальки:

память 32Кх8 аналог AS7C256A-20PC (5v, 20ns, DIP-28), 20 нога (not СE) тупо заведена на землю, 22, 27 (OE, WR) подключены напрямую на соотв. сигналы X-bus (RD, WR). Старшие 7 бит адреса - напрямую на память (порт С), и её же шина данных тоже напрямую к порту А.

регистр-защелка 74VHC373M (вроде как 5нсек, SOP-20) своими входами сидит на порту А (AD0..7), его сигнал OE (1) также тупо сидит на земле, а сигнал LE(11) подцеплен к МК на сигнал ALE напрямую. Выходы идут напрямую к младшим разрядам адреса микросхемы памяти A0..7.

Фсё. Старший разряд порта С (А15) - висит в воздухе и никуда не подключен. Регистр распаян проводками длинной около 4-5см и воткнут в беспаячную макетку, память воткнута туда же напрямую. Остальные провода (от МК к макетке, питание) из комплекта Ардуино-мега КИТ, длинной 12-20см. Может ли это давать "большую емкость" и наводки, нарушающие работу макетки?

std
Offline
Зарегистрирован: 05.01.2012

Нет, не может. Провода такой длины пропускают до ~15 МГц.

3 см на 100 МГц, то есть во сколько раз длиннее - во столько же раз медленнее.

Мб навесным монтажом будет лучше, т. о. без макетки.

UPD. Хотя может и в самом деле дело в экранировке, и работать захочет только на плате, с землёй на втором слое.

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

Значит или память "не совсем аналог", так и не нашел на неё родного даташита, или болтаются проводники в макетке.

А то, что внутри МК, при отключенной внешней нагрузке идут наводки "мама не горюй" - наблюдаю уже далеко не первый раз, что с ШИМ ногами, что с входами прерываний .. фантастика.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Так, информация, может пригодится http://we.easyelectronics.ru/JustMoose/stechenie-obstoyatelstv.html

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

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

Ну и ещё: только что прошелся по дорогам той 486DX-ины, из которой достал память (на панельках, даже не выпаивал) .. очень похоже на цоколевку для AS7C256. И очень похоже что CE (чип селект) тупо сидел на земле. Он звонится на землю и ни на одной стороне никуда не выходит, впрочем как и OE .. не уверен, глаза уже не те .. то есть, типа открыт на выход, ибо кеш проца "намертво". Только вот нафига их стояло 10 панелек и 9 мелкосхем?!?

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

И ещё замечание, по приведенной ссылке: в даташите собственно это и указано, что если Xbus включен, то сигнал ALE высыпается на выход независимо ни от чего: идет обращение к снутренней или внешней памяти. А вот сигналы WR,RD - только при обращении в внешке. Соответственно, для экономии потребления - анализировать ALE - нет особого смысла. Только пару по И.

А вот то, что AVR не снимает адрес с шины данных - очень похоже на правду. Иначе объяснить полученный эффект я не могу. Пробовал модифицировать вчера этот скетч самым разным способом: включал/выключал XMBK бит, ставил разные задержки на память, делал подтяжку .. всё "пофиг". При отключенной макетке - результат един: 1,2,3.. ну и так далее. :(

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

Это то же самое решение, только на английском, которое уже тут приводилось. ТАК - у меня НЕ РАБОТАЕТ, об чем и пишу. Именно так и подключено, за исключением того, что мелкосхема памяти на 32К и соответственно не требуется подключение А15, Bank1 и Bank2.

У меня теже самые эффекты, что и по ссылке от kisoft: адрес НЕ снимается ардуиной с линий AD0..AD7, что вызывает вопрос по поводу решения на 512К: А его делали в реальности?

Пересобрал беспаечную макетку, проверил соединения и провел вторую попытку. Эффект тот же: линия AD0-7 при чтении - читает свой же адрес, а не данные из SRAM. Похоже надо таки доставать осцилограф из подвала..

В общем, пока отложил. Буду медитировать дальше, мож чего придумаю.

vvadim
Offline
Зарегистрирован: 23.05.2012

Tomasina пишет:

ф топку новую самодельную мегу, ведь есть ATmega2560 Core, то, чего в ней не хватает, 98% народу не нужно.

согласен на 500 %

 

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:
У меня теже самые эффекты, что и по ссылке от kisoft: адрес НЕ снимается ардуиной с линий AD0..AD7, что вызывает вопрос по поводу решения на 512К: А его делали в реальности?

Во множестве вариантов, в том числе коммерческих.

Это полноценный шилд, с помощью которого не сложно добавить оперативки меге. Можно купить готовый, можно сделать самому, т.к. разработка открытая. На кикстартере в прошлом году существовал проект 1мб шилда, но который так и не набрал нужной суммы.

Неуспешность стартапа в какой-то мере свидетельствует об уровне востребованности подобных решений и интереса к этой теме в целом.

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

Я это все видел, прежде чем создавать тему. Только вот не нашел ссылок "где и почем" можно купить готовое. Не поделитесь ссылкой?

Ну и вариант с 512кб через 3 доп. ноги - меня не очень-то устраивает: нет на моей дуньке "лишних" ножек. Если есть ссылки на расширение даже в 32к - буду признателен. Да хотя бы и на этот вариант.

P.S. Спасибо за фотки. По текстовкам на платах нашел таки. 46 евро .. это более 3500 за первую фотку, при том, что означенная там микросхема, когда последний раз смотрел недели 2 назад, даже на чипе и дипе стоила около 220руб .. я как нибудь сам добью свою версию. :)

a5021
Offline
Зарегистрирован: 07.07.2013

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

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

Дык! "занято уже всё" .. уже подумываю, не допаять ли неразведенные ноги .. их там 16 штук ишо. :)

Ну вот и занялся разводить свою плату. Просто, давно не занимался этим, кое-как поставил Kicad - знакомлюсь. Рисовать схемы - уже освоил, с разводкой вроде начало получаться чегой-то. Ну и "под руками" пока только 8шт 32Кх8 .. вот их и развожу, пока вручную. Времени на эту работу - от силы час в день-два, не чаще. :)

Пока ещё больше занят "механикой": допиливаю 130-е моторы и редукторы к ним с энкодерами. Из имеющихся шестеренок, напроектировал редукторы 30:1 - 2шт, 40:1 - 2шт (собраны, оказались "многоваты" для скоростных тележек, надо шустрее), 87:1 - 2шт (собраны, оказались непрочными из-за большой мощности моторов на вых. валу усилие ок. 5кг*см - выламывает промежуточную шестеренку, закрепленную только одним концом). Ещё надо наковырять дифференциал для полноты нашего а-ля "лего".

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

Попытался вчера доразвести плату в kicad .. нифига так и не понял. Сначал он ругался на "выход питания U2 не соединен ни с чем", при этом на плату воткнул разъем питания и подцепил на него символы VCC и GND... и почему-то он ругался то на U1 (74HC373, sop14), то U2 или U3 (AS6C256 DIP-28) "попеременно" и на разные ноги (то питание, то земля) ..

Потом, внезапно начал возмущаться транзисторным инвертором сигнала А15 .. типа резистор не подключен к питанию или резистор не имеет соединения.. пришлось воткнуть линии VCC GND прямо на ноги.

После чего возникла проблема: "вывод ... соединен с другими устройствами, но не подключен к питанию". Вместо трех точек - точно также "бегающие" варианты, озвученные выше. Проверка, запущенная повторно, просто после "сохранить схему" - выдает иные сообщения. Ничего на плате не изменено .. как так?!?

Далее, внезапно обнаружил что корпусов для выбранных разъемов нет в библиотеке .. ладно, переставил, заменил .. и? Долго рылся "как развести и расставить корпуса на плату" .. ошибка: "вы не задали размеры платы" .. и? кое как с помощью зала (гугля) нашел, что оказывается, надо на специальном слое банально линиями начертить прямоугольник платы .. предварительно обыскался, где же в меню kicad задается размер платы .. нигде!

А далее оказалось, что всплывающее меню у этого чудо-ПО .. изменяется, и режимы "авто" появляются в нем, в зависимости от нажатых картинок в верхней строке .. жесть. И НИГДЕ в проге этого не написано! Позже, нашел и подсказку зала..

Ну то, КАК он размещал детали .. кино конечно. Плюнул, поставил сам.

А самое смешное то, что ПОЛОВИНУ цепей он развести .. ЗАБЫЛ ..

.. наверное вручную запаял бы макетку быстрее, чем убитые вчера 3 часа своего времени.