Расширение оперативной памяти Arduino

nikmosyl
Offline
Зарегистрирован: 27.10.2011

Здравствуйте,

Подскажите пожалуйста, как можно расширить оперативную память Arduinовского микроконтроллера

В конечном итоге должно получится что-то типо навигатора без GPS приемника, который будет обрабатывать движимую картинку. На сколько я понимаю ОЗУ стандартного микроконтроллера недостаточно для обработки движимой карты. Какую плату лучше взять и что с ней нужно делать?

Заранее спасибо.
 

Zaliv
Offline
Зарегистрирован: 05.03.2011

 Можно использовать карту sd для расширения памяти.

Но "обрабатывать движимую картинку" не вижу как это реализовать на Arduino в чистом виде.

leshak
Offline
Зарегистрирован: 29.09.2011

 >Можно использовать карту sd для расширения памяти.

Я думаю тут имелось ввиду расширение именно оперативной памяти. Что-бы можно было объявить буффер размером в 20kb,уйти очень глубоко в рекурсию и т.п.. С sd данные нужно будет подгружить и обрабатывать "по кусочкам". Это как в компе - есть "оперативка", а есть "винчестер". SD-карта это "винчестер", а хочется побольше "оперативки".

Поддержка "внешней памяти" похоже есть в камнях "ATmega640/1280/2560". Там, вроде, можно подключить  до 64-рех килобайт "как родные". Копать нужно откуда-то из docs.google.com/viewer , страница 27, раздел "Using the external memory interface".

Если сможете разобратся и подключить - отпишитесь тут. Думаю многим будет "интерестно/полезно".

leshak
Offline
Зарегистрирован: 29.09.2011

 А вот тут hackaday.com/2011/09/05/upgrading-ram-in-an-arduino-mega/ похоже вообще до 512kb внешней подключили. Правда как я понял "одновременно" можно только к 64k достучатся, нужно "переключить банки". И похоже что все это именно для работы с видео. Как и у вас.

kikia99
Offline
Зарегистрирован: 22.03.2011

безумная затея но если вы хотите изобретать велосипед  возмите старую память от компа организуйти виртуальную 32 битную щину использую 32 ножки мк и флаг вам в руки ну или уйье совсем в нереал взяв флеш микросхему памяти с SPI интерфейсом от оперативки написать код инторпретатор адреса 

А МОЖНО СДЕЛАТЬ ПО УМУ  либо дождаться выхода новой платы ардуино  http://arduino.cc/forum/index.php?topic=72664.0   если питаете слабость к этому названию или взять более подходящий контроллер благо их миллионы и цены на порядок дешевли ардуино 

 

step962
Offline
Зарегистрирован: 23.05.2011

kikia99 пишет:

[...]

ну или уйье совсем в нереал взяв флеш микросхему памяти с SPI интерфейсом от оперативки написать код инторпретатор адреса 

[...]

Не получится - оперативная память подразумевает частые операции записи. Даже при ресурсе 10^6 циклов записи  флеш-память достаточно быстро протрется до дыр. Для оперативки подходят только чистые RAM-чипы.

kikia99
Offline
Зарегистрирован: 22.03.2011

тут и нет частых рециклов  записал и читай себе или вы карту раждый день будите перепровлять ?  

step962
Offline
Зарегистрирован: 23.05.2011

 Карта - да. Карта будет записываться однократно и читаться много-много раз. Но читать ее придется в оперативную память, в этой же оперативной памяти производить все необходимые преобразования, подготовку графических данных, скорее всего - формирование в RAM-буфере изображения, потом - пересылку этого изображения на дисплей. Исходя из минимального разрешения 320х240 и 24-бит цветности плюс запас на всяко-разные необходимые при вычислениях переменные, получим минимальную потребность в RAM где то в районе 300К.

Именно в RAM - то есть в памяти, некоторые участки которой будут перезаписываться с частотой 1-100 раз в секунду (а то и чаще). Что на всяких Flash, eeprom, NAND приведет к "протиранию" этих некоторых участков через 10-100 тыс секунд работы программы. То есть то ли через сутки, то ли через год.

kikia99
Offline
Зарегистрирован: 22.03.2011

а чего писать то вы собрались  тут просто читай и читай кадровый буфер рормирунтся в мк и все  

step962
Offline
Зарегистрирован: 23.05.2011

kikia99 пишет:

[...] кадровый буфер рормирунтся в мк и все  

Где конкретно в мк формируется кадровый буфер?

Каков его размер кадрового буфера?

С помощью каких операций формируется кадровый буфер?

kikia99
Offline
Зарегистрирован: 22.03.2011

 конкретно в памяти мк вы резервируете под переменную 

считываете данные из флешки пишите их в переменную 

выталкиваете их в жки 

стираете переменную и повторяете все заново 

сколько надо на вывод одной строки ?

сколько строк в секуду вы можите с меги выдовать ?

мне кажется люди уже мыслят гегогерцами и гегобайтами 

http://www.serasidis.gr/circuits/AVR_VGA/avr_vga.htm можно наверно даж на монитор попробывать сбросить

step962
Offline
Зарегистрирован: 23.05.2011

Цитата:

сколько надо на вывод одной строки ?

Организация флэш-памяти такова, что быстрый доступ возможен только при постраничном чтении-записи. Минимальный размер страницы - 512 байт (может оказаться и больше - нужно смотреть спецификацию на конкретную микросхему памяти). Поэтому "переменная" будет у вас длиной как минимум 512 байт (буфер называется). В ATMega у вас на все про все - 2048 байт (это на ATMega328, 168 и 8 вообще рассматривать для этой задачи нельзя). В которых надо разместить все переменные (не дай бог строковые), часть которой отъедает - и нехило отъедает - стек, которая, кроме того, используется под буфер UART (128 байт). В общем, просто перекачать часть флеш-памяти в память дисплея, может быть, и хватит. А вот для элементарного зума или наложения на карту каких-нибудь спрайтов - сомневаюсь.

Цитата:

сколько строк в секуду вы можите с меги выдовать ?

Чисто теоретически - на полноцветный дисплей 320х240 - где-то 2800 строк по 320 пикселов при кристалле 16 МГц.

- если не потребуется дополнительных вычислений для определения места очередной строки в файле в котором хранится карта и будут отсутствовать накладные расходы на перемещение указателей в точку, где начинается очередная считываемая строка

- если принимаемые из флеш-памяти не потребуют никакой дополнительной обработки

- если удастся каждый пиксел графический информации пропихивать за три такта (поскольку R, G и B)

- если очередная передаваемая строка не окажется расположенной на двух соседних страницах флеш-памяти. В этом случае придется "сделать остановку" на чтение очередной страницы флеш-памяти.

В общем, если все срастется максимально удачно и ваш алгоритм выжмет из конкретного железа максимум возможного (то есть будет неспособен показать те же результаты на несколько измененной конфигурации), то этот показатель, может быть, уменьшится еще в пару раз. А если не повезет - то и в 5-6-10 раз. То есть получим 1-2-3 кадра в секунду. Или другими словами - заметное невооруженным глазом перестроение изображения. Несмертельно.

Как вы правильно заметили, есть люди, которые мыслят ГЕГОбайтами и ГЕГОгерцами. Но делают они это не на железе, в котором жалкие КИЛОбайты и МЕГАгерцы.

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

kikia99
Offline
Зарегистрирован: 22.03.2011

ээээ батенька а мож Вам HDMI в голову взбредет ну всему должна быть мера .Монохром http://www.sparkfun.com/products/710 128x64

думаю вполне потянет можно еще скромнее от мобильника и в цвете  

что реализованно в GPS навигаторах  Garmin  и ничего работают 

и прощу заметить я этот вариант охарактеризовал как БЕЗУМНЫЙ

да и вариант так на вскидку а если уж петух клюнет можно все хорошенько продумать и бортовую эвм замутить на межпланетную станцию   потянет сто пудов но наверно понадобится пару мег и ОЧЕНЬ большая флеш память -))))

step962
Offline
Зарегистрирован: 23.05.2011

Возьмите дисплей поскромнее. Получите прирост скорости записи из памяти микроконтроллера на дисплей раз в 10. Скорость чтения из флеш-памяти в оперативную (и размер необходимого для этого буфера) останется той же. А именно она является здесь "бутылочным горлышком".

Кстати, в своих прикидках я сделал ошибку - исходил из того, что чтение их флеш-памяти в RAM будет производиться побайтово (параллельная передача). А там ведь I2C, SPI и прочие последовательные варианты. Значит,  на чтение одного байта потребуется не три такта (плюс подготовительные), а 24 (плюс подготовительные). Почему 24? Один такт для установки HIGH на линии CLK, один такт на чтение линии DATA, один такт для установки LOW на линии CLK. И так для каждого получаемого бита. Т.е. 3х8.

Так что даже при выводе на монохром (у меня кстати есть 84х48 - Nokia5110. Давайте им пользоваться будем - вот где скорость вывода получится!!!) вы получите примерно те же цифры, что я привел.

И еще раз приведу просьбу топикстартера:

"Подскажите пожалуйста, как можно расширить оперативную память Arduinовского микроконтроллера"

step962
Offline
Зарегистрирован: 23.05.2011

kikia99 пишет:

и прощу заметить я этот вариант охарактеризовал как БЕЗУМНЫЙ

Кстати, какой вариант вы охаректиризовали как безумный - подключение RAM к Arduin'е или реализацию устройства "типа навигатора без GPS"?

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

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

А нормальный трехдюймовый цветной тачскрин 240х320 для Arduin'ы вполне можно поиметь долларов за 30-40.

kikia99
Offline
Зарегистрирован: 22.03.2011

увожаемый step962 ваши расчеты наверно верны но можно всегда идти многими путями  микросхем флеш памяти много и принципы организации( чтения записи различны )  различны   как и возможности контроллера по их считыванию имея мегу можно эмулировать шину ISA c дуру на пониженной частоте и хоть с винчестера читать графику можно выдавать из флеш памяти мк в виде приметивов что тож упростит задачу и так до бесконечности изголяться еще раз хочу заметить что я СРАЗУ ПОСОВЕТЫВАЛ ИСКАТЬ БОЛЕЕ ПОДХОДЯЩИЙ МК и способ реализации сей задачи 

step962
Offline
Зарегистрирован: 23.05.2011

Задача:

Цитата:

[...] расширить оперативную память Arduinовского микроконтроллера [...]

Одно из возможных решений:

Цитата:

 [...] ИСКАТЬ БОЛЕЕ ПОДХОДЯЩИЙ МК [...]

Ненаказуемо.

Кстати, подсоединить к Arduino микросхему SRAM, работающую по шине I2C/ISP -  это примерно как цифровой термометр DS1820 использовать. Отличия лишь в деталях обвязки/протокола. Пример камней на 64...512 Kbit: http://www.ipsilog.com/content/index.php?id=5