Immortal совершенно неоправданно смешали в одно поколение mega8, mega16, mega32, mega128 что с индексом А, что без
мега8 стоит особняком так как помимо всего прочего это фактический единственный avr у которого нет железной отладки
и да, кроме того, что дошло до нас были такие мостодонты как atmega103. Эти еще причудливее чем меша8 - у них часть пинов были односторонними. Откуда я это знаю?) из даташита мега128, она была выпущена как замена мега103 и по умолчанию с зааода идет как раз с настройками для работы не как мега128, а как мега103
там все сложнее с поколениями. Например тини13 в вашу логику не вписывается - PCINT есть, отладчик есть, 20мгц есть, а picopower нет
или тини85 - тоже особняком, у нее есть умножитель встроенного RC чего нет у тех же атмега328
согласен, можно поделить на несколько поколений, понимая, что это довольно условно
Immortal, 128 мне нравится из-за кол-ва памяти, ножек и цены, она подходит мне в 95 % моих проектов :)
Для 95% любительских проектов она имеет избыточное количество памяти, ножек и цена на нее хороша только на больших партиях, котоые для любителя тоже избыточны. Именно поэтому я мегу128 не покупаю и не испытываю никаких позывов на этот счет не смотря на привлекательную цену.
Для 95% любительских проектов она имеет избыточное количество памяти, ножек и цена на нее хороша только на больших партиях, котоые для любителя тоже избыточны. Именно поэтому я мегу128 не покупаю и не испытываю никаких позывов на этот счет не смотря на привлекательную цену.
20шт совсем не большая партия. Не хотите, не покупайте. Я их использую для графических дисплеев где надо много места на шрифты и иконки, также для приложений с ethernet
До сих пор я думал, что целью является проверка правильности функционирования памяти в диапазоне 0x1100-0x9100, но, возможно, я заблуждаюсь.
может вас смутило почему до 0х9100 а не 0х8000?
Нет.
Что именно меня смутило, я уже написал: тест никак не контролирует, используется ли в процессе проведения теста весь объем памяти, его половина, четверть, а то и вообще одна единственная ячейка.
До сих пор я думал, что целью является проверка правильности функционирования памяти в диапазоне 0x1100-0x9100, но, возможно, я заблуждаюсь.
может вас смутило почему до 0х9100 а не 0х8000?
Нет.
Что именно меня смутило, я уже написал: тест никак не контролирует, используется ли в процессе проведения теста весь объем памяти, его половина, четверть, а то и вообще одна единственная ячейка.
Immortal, 128 мне нравится из-за кол-ва памяти, ножек и цены, она подходит мне в 95 % моих проектов :)
Для 95% любительских проектов она имеет избыточное количество памяти, ножек и цена на нее хороша только на больших партиях, котоые для любителя тоже избыточны. Именно поэтому я мегу128 не покупаю и не испытываю никаких позывов на этот счет не смотря на привлекательную цену.
Тест памяти - не такая простая программа, как Вы думаете. Он должен включать набор тестов, какждый из которых проверяет какой-нибудь один тип неисправности. В частности, для разных видов памяти тесты будут разными.
Для определения неисправностей, связанных с шиной адреса, в каждую из ячеек следует записать свое уникальное число, а на втором проходе проверить, что считывается имено то число, что было записано в каждую конкретную ячейку.
Для памяти объемом от 0.25К до 64К, очевидно, ячейки следует использовать двухбайтовые. Т.е. вместо одинакового шаблона писать следует, например, порядковый номер ячейки (двухбайтовый).
И еще, этот тест следует делать не ВМЕСТО существующего, а в ДОПОЛНЕНИЕ к нему.
Вдогонку: если память динамическая, то следовало бы проверить еще правильное функционирование регенерации. Для этого между записью и чтением следует предусмотреть паузу, в течение которой к памяти _совсем_ не будет обращений. Если мне не изменяет память, для стандартной компьютерной памяти максимальный интервал между циклами регенерации составляет 8 мс. Соответственно, я бы сделал паузу раз в 10 больше. Но лучше уточнить по дэйташиту.
Valera19701, с моей точки зрения, недостоверный тест хуже, чем никакого. Но, как говорится, хозяин - барин. Я лишь постарался довести до Вас информацию, что доверять этому тесту нельзя, а устраивает это Вас или нет - решать не мне.
Поздравляю, если оно получилось на самом деле, искренне рад. Тоже буду заказывать микросхемы и делать повторно.
Но, поддержу вашего оппента, ибо тест памяти у Вас ровно "ни о чем", поскольку компилятор соптимизирует запись и чтение и НЕ будет обращаться к ячейкам памяти и вовсе, от слова "совсем". Я на это напоролся на своем тесте, когда впервые отписывался что "все круто работает" .. для того, чтобы так не получилось, указатель на память надо объявлять как указатель на volatile область .. это первое.
типа так:
volatile uint8_t (*ptr); -- указатель на байт, который неподвластен оптимизатору.
И второе, да Andriano пишет верно. Тест памяти это, насколько мне память не изменяет (писал когда-то для ПСюков) - комплект из 16 разных способов записи-чтения, проверяющих:
а) сохраняемость данных в памяти длительное время;
б) "залипы соседних битов" .. и тут надо четко понимать какие байты-биты оказываются "соседними" в соответствии с вашей организацией шины адреса .. "не всё так однозначно" (с) интернет. Да, и ещё "залип" может быть "со временем" .. постепенное перетекание заряда из соседних ячеек.
в) "залипы соседних шин адреса" .. ответ на вопрос: "куда на самом деле пишет данная команда?" может оказаться что ряд адресов склеен или ряд адресных шин. Да, тут тоже возможно "временное" залипание шин .. банальные наводки одной шины на соседнюю..
В целом, поищите в Сети алгоритмы тестирования памяти .. их около 16шт, это то что ещё помню достаточно уверенно.
Если у вас шины адреса и данных приходят "подряд" на память (как по даташиту), то тестировать можно шаблонами 0x00, 0xFF, 0x55, 0xAA, последние 2 - на предмет проверки залипания битов в байтах.
Как пример простого теста на залипание:
а) "заполняем шаблоном 0х00, проверяем заполнение, затем пишем побайтно 0х55/0хАА - читаем 3 байта: до, наш, после, потом затираем шаблоном, идем дальше" .. проверяет залипание как в самом байте так и с соседними адресами .. но тут надо смотреть организацию банка хранения по даташиту (их может быть несколько разнесенных по адресам);
Если все нормально, то искренне поздравляю с успехом.
Посмотрел ваш пост #26 .. все тоже самое. Два последовательных ОДИНАКОВО вложенных цикла, вполне можно объединить в одну последовательность и последующая оптимизация внутреннего содержимого устраняет заполнение массивов как избыточную работу.
Проверка, что остается в ассемблерном коде, крайне желательна.
Посмотрел ваш пост #26 .. все тоже самое. Два последовательных ОДИНАКОВО вложенных цикла, вполне можно объединить в одну последовательность и последующая оптимизация внутреннего содержимого устраняет заполнение массивов как избыточную работу.
Проверка, что остается в ассемблерном коде, крайне желательна.
проработала уже неделю с дисплеем, ни одного сбоя, если коротнуть любую шину данных или адреса то сразу перезагружается, а этот тест из библиотеки XMEM
Ой, не сейчас .. как-то отошел от дунек и занят несколько иными вопросами: меня сейчас больше интересует укладка ДРАКОН в плагин Ardublock. Нашел репу с исходниками плагина, пока сижу изучаю Жабу .. и размышляю КАК прикрутить к ДРАКОН какой-нибудь DDL .. пока больше и продуктивнее смотрятся Р-технологии в этом плане, ибо ещё в 2012-м где-то на sql.ru пытался разъяснять что "Мир состоит из сущностей и связей. и Сущность - это комплект упакованных связей, а стало быть: мир состоит только из связей" .. тогда меня не поняли, да и объяснял криворуко, ибо сам не до конца понимал эту великую мыслю: "В природе смысла нет и вовсе никакого. Смысл - это связи, нагруженные семантикой извне". :)
Может позже. :)
Раз все работает ровно - примите мои искренние поздравления. Вам удалось то, что у меня не запаялось. Искренне за Вас рад.
Arhat109-2 в посте 26 я сделал распределение памяти 4кб внутренней на стек, 32кб внешней на data и heap, данные массивов попадают в область внешней памяти, поэтому я их и тестирую без обьявления как volatile
Тест - это как бы большая работа. И, самое главное, заточенная под конкретную память. Включая конкретную разводку на печатной плате. Памяти, о которой эта тема, у меня нет. Изучать на нее дэйташит тоже не с руки.
А слова нужны человеку, чтобы выражать мысли. И любой алгоритм начинается именно со слов. А уж перевести "слова" в код на конкретнорм языке программирования - дело техническое.
Тест - это как бы большая работа. И, самое главное, заточенная под конкретную память. Включая конкретную разводку на печатной плате. Памяти, о которой эта тема, у меня нет. Изучать на нее дэйташит тоже не с руки.
А слова нужны человеку, чтобы выражать мысли. И любой алгоритм начинается именно со слов. А уж перевести "слова" в код на конкретнорм языке программирования - дело техническое.
Да не надо под конкретную память, например напишите код проверки как Вы описываете , проверять ячейки начиная с адреса Х и заканчивая адресом У, а уж под конкретную память я доделаю
Да че там тестировать? Со статической памятью все просто. Делаем два теста:
- тест на работоспособность каждой ячейки. В минимуме тестируем каждую ячейку двумя масками 0х00 и 0хff, то есть все биты ноль и все биты один. Список патернов можно расширить на разные варианты смешиванич нулей и единиц
- тестируем слипание адресов (может быть если что то не так с адресными пинами или с защелкой). Заполняем всю память разыми патернами. Ну например всю память делим на 256 блоков и каждый блок заполняем по разному. Это может быть просто разными числами от 0 до 255 (просто вариант) или разные функции когда следующаяя ячейка зависит от предыдущей в блоке но зависимость в каждом блоке разная (более правильный вариант). После заполнения всей памяти делаем чтение и сравниваем фактическое значение в ячейке с ожидаемым. При несовпадении ошибка
все. Для статики больше тестировать по мне нечего
вот с динамическим озу помню все было сложнее. На моем орионе я память тестировал более сложным способом. Там важным было проверить, чтт адресные блоки не сбрасываются. Ведь динамическая память должна постоянно сканироваться внешним железом для того, чтобы перезаряжать конденсаторы ячеек каждого адресного блока. Если этот механизм работает не так, память вроде как работает, но постепенно данные заменяюются мусором
Зачем вам прикручивать память именно к ATmega128A? Я сколько ёё использую еще не сталкивался с проблемой нехватки памяти. Какую нибудь RTOS вы на ней все равно не запустите, так что польза от расширения оперативы сомнительна.
Можно же найти кучу более современных SoC и по цене они окажутся дешевле набора 128A+микросхемы памяти
Чипсет MT7688AN (MIPS24KEc, 580MHz)
Размер — 55.7 x 26 mm
Память — ПЗУ — 32MB; ОЗУ — 128MB DDR2
Питание 5V (USB micro-B) или 3.3V (Pin Breakout)
Слот под Micro SD SDXC на плате, USB Host (разъем microUSB, пины), WiFi 1T1R 802.11 b/g/n (2.4G) на борту с возможностью подключить внешнюю антенну, разнообразие разных интерфейсов через пины на плате.
Цена: 12.9$ + 2$ доставка, и чем дальше тем больше китайцы будут выпускать разных дешевых 32-битных SoC.
А я пока подожду ESP32, изучая тем временем ESP8266
Замечательная ссылка как из ЦПУ "общего назначения" и ATmega32U4 делается "Soc" с элементами для управления периферией .. по сути там есть мега и проц "отдельно" и программировать надо всю эту кухню по отдельности .. поправьте, если я неправильно прочитал вашу ссыль.
Мега с памятью .. это то, что "вы ждете", только с 100 раз быстрее и удобнее. И только. :)
Просьба к ТС-у: В соседней теме я высказал пожелание по габаритам. Ваша тутошняя плата больше примерно вдвое. Можете выложить электрическую схему вашей платы БЕЗ SRAM? Попробую развести в размер 40х56 ..
Просьба к ТС-у: В соседней теме я высказал пожелание по габаритам. Ваша тутошняя плата больше примерно вдвое. Можете выложить электрическую схему вашей платы БЕЗ SRAM? Попробую развести в размер 40х56 ..
Спасибо.
я не имею схем, и очень редко рисую, в дш все нарисовано за нас, usb - uart я испоьзую дешевую ch340g
Просьба к ТС-у: В соседней теме я высказал пожелание по габаритам. Ваша тутошняя плата больше примерно вдвое. Можете выложить электрическую схему вашей платы БЕЗ SRAM? Попробую развести в размер 40х56 ..
Valera19701, внимательно пересмотрев схему своей платы и вашей обнаружил у Вас резисторы подтяжки управляющих сигналов .. это связано с особенностями примененной микросхемы? .. надо попгобовать на своей смонтировать тоже ..
Valera19701, внимательно пересмотрев схему своей платы и вашей обнаружил у Вас резисторы подтяжки управляющих сигналов .. это связано с особенностями примененной микросхемы? .. надо попгобовать на своей смонтировать тоже ..
во избежании различных коллизий, будь то емкость большая между дорожками или их длина, лучше поставить подтяжку :)
А подскажите, нужны рекомендации - какие ноги под что использовать, какие под сериал с gsm и т.д.?
хочу развести тестовую плату.
Бутлоадер в 128ю тоже из под ИДЕ можно прошить?
в 128 всего два HW Serial, softserial не работает, так как нет pcint, в дш все ноги рассписаны, из иде загрузчик зашить можно, и даже нужно, ноги для icsp другие, mosi miso как в 328 не используются, читаем здесь
Наконец-то поднял свой осцилоскоп С1-121/5 с хранения и посмотрел что же происходит с моей платой памяти .. оказалось что регистры 273 (старые защелки, снятые с материнской платы) в отличии от 573 не тянут тайминги. Позже, внимательное чтение даташита на 2560 подтвердилось фразой, типа такой: "не подходят старые регистры-защелки из-за больших времен распространения сигнала, требуются .." и где были мои глаза?!? :)
Валерий, как Вам вот такая схема расширителя памяти (573-и регистры все одно заказывать):
Судя по таймингам, такая память должна укладываться в работу без тактов ожидания интерфейса и вовсе. Идея в следующем:
Выделяем 1 дополнительную ногу меги (Xbus) для разрешения работы модуля в целом. Если на ней 1, то модуль работает, иначе - переходит в Z и можно пользовать ноги по своему усмотрению.
Сигнал А15=0 (младшие 32к) адресует специальную страницу в 32кб с номером 0x0F (15) благодаря тому, что выходы U3 переводятся в Z и на старших адресах устанавливается "1" из-за резисторов подтяжки. Соответственно, при любом обращении к младшим адресам "за" внутренней SRAM, получаем одну и ту же страницу 0x0F.
А15=1 (старшие 32к) адресуются через номер страницы, записанный в U3. Таким образом в старшей половине адресов можно "листать" все 16 страниц внешней SRAM 512кб.
Запись номера страницы производится "вручную" путем выставления сигналов: Xbus=0 (модуль запрещен); AD0-7 = номер_страницы; ALE=1 - пропуск номера в регистр страницы (U3); ALE=0 - защелкивание номера страницы в регистре; Xbus=1 (модуль разрешен/запрет записи страницы). Можно оформить в спец. функцию переключения номера с закрытыми прерываниями.
Упс.. нашел косяк: нога 4 U4B должна получать инверсный сигнал с выхода ноги 3 U4A..
Для прямой адресации данных в такой памяти можно ввести "сегменты памяти" pageXX, типа .data, .text, пронумеровав их от 0 до 15: .page0, .page1, .., .page15 и установив им один и тотже начальный адрес в 0х8000. Символы, как понимаю можно прописать в описании плат и тогда при объявлении переменных/массивов можно будет просто указывать их сегмент как доп. атрибут, а при работе "подсовывать" нужную страничку ручками.
Первое и самое простое применение вижу для RTOS: можно организовывать 16 групп задач, каждая из которых будет иметь собственный сегмент памяти, переключаемый вместе с контекстом задачи. При этом, в младших адресах будет доступна общая страница памяти для всех задач - как-бы "системная".
1) ну это первый вариант
Строго говоря, Вы даже не знаете, сколько ячеек памяти Вы проверяете. Может, всего одну? Причем неизвестно, которую именно.
andriano, вы похоже не поняли что проверяется из кода?
Immortal совершенно неоправданно смешали в одно поколение mega8, mega16, mega32, mega128 что с индексом А, что без
мега8 стоит особняком так как помимо всего прочего это фактический единственный avr у которого нет железной отладки
и да, кроме того, что дошло до нас были такие мостодонты как atmega103. Эти еще причудливее чем меша8 - у них часть пинов были односторонними. Откуда я это знаю?) из даташита мега128, она была выпущена как замена мега103 и по умолчанию с зааода идет как раз с настройками для работы не как мега128, а как мега103
там все сложнее с поколениями. Например тини13 в вашу логику не вписывается - PCINT есть, отладчик есть, 20мгц есть, а picopower нет
или тини85 - тоже особняком, у нее есть умножитель встроенного RC чего нет у тех же атмега328
согласен, можно поделить на несколько поколений, понимая, что это довольно условно
До сих пор я думал, что целью является проверка правильности функционирования памяти в диапазоне 0x1100-0x9100, но, возможно, я заблуждаюсь.
Для 95% любительских проектов она имеет избыточное количество памяти, ножек и цена на нее хороша только на больших партиях, котоые для любителя тоже избыточны. Именно поэтому я мегу128 не покупаю и не испытываю никаких позывов на этот счет не смотря на привлекательную цену.
До сих пор я думал, что целью является проверка правильности функционирования памяти в диапазоне 0x1100-0x9100, но, возможно, я заблуждаюсь.
может вас смутило почему до 0х9100 а не 0х8000?
Для 95% любительских проектов она имеет избыточное количество памяти, ножек и цена на нее хороша только на больших партиях, котоые для любителя тоже избыточны. Именно поэтому я мегу128 не покупаю и не испытываю никаких позывов на этот счет не смотря на привлекательную цену.
20шт совсем не большая партия. Не хотите, не покупайте. Я их использую для графических дисплеев где надо много места на шрифты и иконки, также для приложений с ethernet
Скажите честно, сколько вы этих а128 и в каких проектах уже освоили?
До сих пор я думал, что целью является проверка правильности функционирования памяти в диапазоне 0x1100-0x9100, но, возможно, я заблуждаюсь.
может вас смутило почему до 0х9100 а не 0х8000?
Нет.
Что именно меня смутило, я уже написал: тест никак не контролирует, используется ли в процессе проведения теста весь объем памяти, его половина, четверть, а то и вообще одна единственная ячейка.
До сих пор я думал, что целью является проверка правильности функционирования памяти в диапазоне 0x1100-0x9100, но, возможно, я заблуждаюсь.
может вас смутило почему до 0х9100 а не 0х8000?
Нет.
Что именно меня смутило, я уже написал: тест никак не контролирует, используется ли в процессе проведения теста весь объем памяти, его половина, четверть, а то и вообще одна единственная ячейка.
напишите тест, так как вы видите
Для 95% любительских проектов она имеет избыточное количество памяти, ножек и цена на нее хороша только на больших партиях, котоые для любителя тоже избыточны. Именно поэтому я мегу128 не покупаю и не испытываю никаких позывов на этот счет не смотря на привлекательную цену.
вышло не дорого
напишите тест, так как вы видите
Тест памяти - не такая простая программа, как Вы думаете. Он должен включать набор тестов, какждый из которых проверяет какой-нибудь один тип неисправности. В частности, для разных видов памяти тесты будут разными.
Для определения неисправностей, связанных с шиной адреса, в каждую из ячеек следует записать свое уникальное число, а на втором проходе проверить, что считывается имено то число, что было записано в каждую конкретную ячейку.
Для памяти объемом от 0.25К до 64К, очевидно, ячейки следует использовать двухбайтовые. Т.е. вместо одинакового шаблона писать следует, например, порядковый номер ячейки (двухбайтовый).
И еще, этот тест следует делать не ВМЕСТО существующего, а в ДОПОЛНЕНИЕ к нему.
Вдогонку: если память динамическая, то следовало бы проверить еще правильное функционирование регенерации. Для этого между записью и чтением следует предусмотреть паузу, в течение которой к памяти _совсем_ не будет обращений. Если мне не изменяет память, для стандартной компьютерной памяти максимальный интервал между циклами регенерации составляет 8 мс. Соответственно, я бы сделал паузу раз в 10 больше. Но лучше уточнить по дэйташиту.
andriano, я его точно писать не буду, меня устраивает второй вариант, который я выложил в посте #26
Valera19701, с моей точки зрения, недостоверный тест хуже, чем никакого. Но, как говорится, хозяин - барин. Я лишь постарался довести до Вас информацию, что доверять этому тесту нельзя, а устраивает это Вас или нет - решать не мне.
Заглянул, а тут такое .. :)
Поздравляю, если оно получилось на самом деле, искренне рад. Тоже буду заказывать микросхемы и делать повторно.
Но, поддержу вашего оппента, ибо тест памяти у Вас ровно "ни о чем", поскольку компилятор соптимизирует запись и чтение и НЕ будет обращаться к ячейкам памяти и вовсе, от слова "совсем". Я на это напоролся на своем тесте, когда впервые отписывался что "все круто работает" .. для того, чтобы так не получилось, указатель на память надо объявлять как указатель на volatile область .. это первое.
типа так:
volatile uint8_t (*ptr); -- указатель на байт, который неподвластен оптимизатору.
И второе, да Andriano пишет верно. Тест памяти это, насколько мне память не изменяет (писал когда-то для ПСюков) - комплект из 16 разных способов записи-чтения, проверяющих:
а) сохраняемость данных в памяти длительное время;
б) "залипы соседних битов" .. и тут надо четко понимать какие байты-биты оказываются "соседними" в соответствии с вашей организацией шины адреса .. "не всё так однозначно" (с) интернет. Да, и ещё "залип" может быть "со временем" .. постепенное перетекание заряда из соседних ячеек.
в) "залипы соседних шин адреса" .. ответ на вопрос: "куда на самом деле пишет данная команда?" может оказаться что ряд адресов склеен или ряд адресных шин. Да, тут тоже возможно "временное" залипание шин .. банальные наводки одной шины на соседнюю..
В целом, поищите в Сети алгоритмы тестирования памяти .. их около 16шт, это то что ещё помню достаточно уверенно.
Если у вас шины адреса и данных приходят "подряд" на память (как по даташиту), то тестировать можно шаблонами 0x00, 0xFF, 0x55, 0xAA, последние 2 - на предмет проверки залипания битов в байтах.
Как пример простого теста на залипание:
а) "заполняем шаблоном 0х00, проверяем заполнение, затем пишем побайтно 0х55/0хАА - читаем 3 байта: до, наш, после, потом затираем шаблоном, идем дальше" .. проверяет залипание как в самом байте так и с соседними адресами .. но тут надо смотреть организацию банка хранения по даташиту (их может быть несколько разнесенных по адресам);
Если все нормально, то искренне поздравляю с успехом.
Посмотрел ваш пост #26 .. все тоже самое. Два последовательных ОДИНАКОВО вложенных цикла, вполне можно объединить в одну последовательность и последующая оптимизация внутреннего содержимого устраняет заполнение массивов как избыточную работу.
Проверка, что остается в ассемблерном коде, крайне желательна.
Посмотрел ваш пост #26 .. все тоже самое. Два последовательных ОДИНАКОВО вложенных цикла, вполне можно объединить в одну последовательность и последующая оптимизация внутреннего содержимого устраняет заполнение массивов как избыточную работу.
Проверка, что остается в ассемблерном коде, крайне желательна.
проработала уже неделю с дисплеем, ни одного сбоя, если коротнуть любую шину данных или адреса то сразу перезагружается, а этот тест из библиотеки XMEM
если напишите тест, то буду рад протестировать:)
Ой, не сейчас .. как-то отошел от дунек и занят несколько иными вопросами: меня сейчас больше интересует укладка ДРАКОН в плагин Ardublock. Нашел репу с исходниками плагина, пока сижу изучаю Жабу .. и размышляю КАК прикрутить к ДРАКОН какой-нибудь DDL .. пока больше и продуктивнее смотрятся Р-технологии в этом плане, ибо ещё в 2012-м где-то на sql.ru пытался разъяснять что "Мир состоит из сущностей и связей. и Сущность - это комплект упакованных связей, а стало быть: мир состоит только из связей" .. тогда меня не поняли, да и объяснял криворуко, ибо сам не до конца понимал эту великую мыслю: "В природе смысла нет и вовсе никакого. Смысл - это связи, нагруженные семантикой извне". :)
Может позже. :)
Раз все работает ровно - примите мои искренние поздравления. Вам удалось то, что у меня не запаялось. Искренне за Вас рад.
Arhat109-2 в посте 26 я сделал распределение памяти 4кб внутренней на стек, 32кб внешней на data и heap, данные массивов попадают в область внешней памяти, поэтому я их и тестирую без обьявления как volatile
Я это понял, просто были опасения за оптимизатор, но похоже он оказался не настолько "вумным", раз у вас всё работает.
Скорее просто память работает независимо от результатов тестов. Вы знаете, иногда память работает даже если ее вообще не тестировать.
Вы знаете, иногда память работает даже если ее вообще не тестировать.
все может быть, внесите свою лепту, напишите тест, а то только слова, слова......
Тест - это как бы большая работа. И, самое главное, заточенная под конкретную память. Включая конкретную разводку на печатной плате. Памяти, о которой эта тема, у меня нет. Изучать на нее дэйташит тоже не с руки.
А слова нужны человеку, чтобы выражать мысли. И любой алгоритм начинается именно со слов. А уж перевести "слова" в код на конкретнорм языке программирования - дело техническое.
Тест - это как бы большая работа. И, самое главное, заточенная под конкретную память. Включая конкретную разводку на печатной плате. Памяти, о которой эта тема, у меня нет. Изучать на нее дэйташит тоже не с руки.
А слова нужны человеку, чтобы выражать мысли. И любой алгоритм начинается именно со слов. А уж перевести "слова" в код на конкретнорм языке программирования - дело техническое.
Да не надо под конкретную память, например напишите код проверки как Вы описываете , проверять ячейки начиная с адреса Х и заканчивая адресом У, а уж под конкретную память я доделаю
Да че там тестировать? Со статической памятью все просто. Делаем два теста:
- тест на работоспособность каждой ячейки. В минимуме тестируем каждую ячейку двумя масками 0х00 и 0хff, то есть все биты ноль и все биты один. Список патернов можно расширить на разные варианты смешиванич нулей и единиц
- тестируем слипание адресов (может быть если что то не так с адресными пинами или с защелкой). Заполняем всю память разыми патернами. Ну например всю память делим на 256 блоков и каждый блок заполняем по разному. Это может быть просто разными числами от 0 до 255 (просто вариант) или разные функции когда следующаяя ячейка зависит от предыдущей в блоке но зависимость в каждом блоке разная (более правильный вариант). После заполнения всей памяти делаем чтение и сравниваем фактическое значение в ячейке с ожидаемым. При несовпадении ошибка
все. Для статики больше тестировать по мне нечего
вот с динамическим озу помню все было сложнее. На моем орионе я память тестировал более сложным способом. Там важным было проверить, чтт адресные блоки не сбрасываются. Ведь динамическая память должна постоянно сканироваться внешним железом для того, чтобы перезаряжать конденсаторы ячеек каждого адресного блока. Если этот механизм работает не так, память вроде как работает, но постепенно данные заменяюются мусором
Зачем вам прикручивать память именно к ATmega128A? Я сколько ёё использую еще не сталкивался с проблемой нехватки памяти. Какую нибудь RTOS вы на ней все равно не запустите, так что польза от расширения оперативы сомнительна.
Можно же найти кучу более современных SoC и по цене они окажутся дешевле набора 128A+микросхемы памяти
Например первое что нашлось: https://www.seeedstudio.com/item_detail.html?p_id=2573
Чипсет MT7688AN (MIPS24KEc, 580MHz)
Размер — 55.7 x 26 mm
Память — ПЗУ — 32MB; ОЗУ — 128MB DDR2
Питание 5V (USB micro-B) или 3.3V (Pin Breakout)
Слот под Micro SD SDXC на плате, USB Host (разъем microUSB, пины), WiFi 1T1R 802.11 b/g/n (2.4G) на борту с возможностью подключить внешнюю антенну, разнообразие разных интерфейсов через пины на плате.
Цена: 12.9$ + 2$ доставка, и чем дальше тем больше китайцы будут выпускать разных дешевых 32-битных SoC.
А я пока подожду ESP32, изучая тем временем ESP8266
Замечательная ссылка как из ЦПУ "общего назначения" и ATmega32U4 делается "Soc" с элементами для управления периферией .. по сути там есть мега и проц "отдельно" и программировать надо всю эту кухню по отдельности .. поправьте, если я неправильно прочитал вашу ссыль.
Мега с памятью .. это то, что "вы ждете", только с 100 раз быстрее и удобнее. И только. :)
Просьба к ТС-у: В соседней теме я высказал пожелание по габаритам. Ваша тутошняя плата больше примерно вдвое. Можете выложить электрическую схему вашей платы БЕЗ SRAM? Попробую развести в размер 40х56 ..
Спасибо.
Просьба к ТС-у: В соседней теме я высказал пожелание по габаритам. Ваша тутошняя плата больше примерно вдвое. Можете выложить электрическую схему вашей платы БЕЗ SRAM? Попробую развести в размер 40х56 ..
Спасибо.
я не имею схем, и очень редко рисую, в дш все нарисовано за нас, usb - uart я испоьзую дешевую ch340g
CP2102 позволит влезть в размер, и её можно стырить бесплатным сэмплом у silabs, причём даже не одну, а две))
есть интересна штука для вас от MCU2500:мега128, внешняя память, lcd 128*64 ;4 кнопки и 4 лед
надо - пиши.. отправлю только по украине
безплатно - т.е. даром....
и среда IDE 1.6.9 atmega128
https://yadi.sk/d/T44-s_klsSHd6
акакую плату там выбирать?
Просьба к ТС-у: В соседней теме я высказал пожелание по габаритам. Ваша тутошняя плата больше примерно вдвое. Можете выложить электрическую схему вашей платы БЕЗ SRAM? Попробую развести в размер 40х56 ..
Спасибо.
https://github.com/MCUdude/MegaCore/blob/master/README.md#supported-micr...
акакую плату там выбирать?
с внешней памятью то sram 32к
О, пасибки. То что требовалось.
а просто без памяти?
и это, у меня такой там в перечне 1.6.9 такой нету, скачал 1.6.9 здесь.
можно скрин?
хм... а нету у меня там таких плат..
вот засада, а как же сделать чтобы скачаный архив работал автономно?
архив не показывает нужные платы.
Скачал архив по ссылке выше - всё там есть, работает автономно. В списке плат две последних внизу.
если я ранее делал на компе инталяцию ИДЕ, значит ли это что все версии будут с другими настройками?
я тоже еще раз скачал, распаковал отдельно, запускаю - та же фигня..
Х/з, поищите файл boards.txt в Мои документы\Arduino\
Возможно новые версии IDE после инсталляции его там размещают. Точно не понмю, а посмотреть сейчас негде.
Valera19701, внимательно пересмотрев схему своей платы и вашей обнаружил у Вас резисторы подтяжки управляющих сигналов .. это связано с особенностями примененной микросхемы? .. надо попгобовать на своей смонтировать тоже ..
Valera19701, внимательно пересмотрев схему своей платы и вашей обнаружил у Вас резисторы подтяжки управляющих сигналов .. это связано с особенностями примененной микросхемы? .. надо попгобовать на своей смонтировать тоже ..
во избежании различных коллизий, будь то емкость большая между дорожками или их длина, лучше поставить подтяжку :)
http://robozone.su/experiments/74-universalnyj-kontroller-atmega128-pod-wiring.html
вариант исполнения.
А подскажите, нужны рекомендации - какие ноги под что использовать, какие под сериал с gsm и т.д.?
хочу развести тестовую плату.
Бутлоадер в 128ю тоже из под ИДЕ можно прошить?
http://robozone.su/experiments/74-universalnyj-kontroller-atmega128-pod-wiring.html
вариант исполнения.
А подскажите, нужны рекомендации - какие ноги под что использовать, какие под сериал с gsm и т.д.?
хочу развести тестовую плату.
Бутлоадер в 128ю тоже из под ИДЕ можно прошить?
в 128 всего два HW Serial, softserial не работает, так как нет pcint, в дш все ноги рассписаны, из иде загрузчик зашить можно, и даже нужно, ноги для icsp другие, mosi miso как в 328 не используются, читаем здесь
http://www.chip45.com/products/crumbuino-128_arduino_compatible_atmega128_module_board_usb.php
тестовую девелоперскую плату я выкладывал в этом топике
и для тестов можно такие платки взять
http://ru.aliexpress.com/item/5Pcs-QFP-TQFP-FQFP-LQFP-32-44-64-80-100-To-DIP-Adapter-PCB-Board-Converter/32573125405.html?spm=2114.13010608.0.134.dkpMB8
я привык сразу гсм +бп+ проц на одной плате, не люблю кучи проводков.
а как тогда без софвер сериал работать с компортом например??
а как тогда без софвер сериал работать с компортом например??
например через ch340g на сериал0 а gsm на сериал1
запускать так
Наконец-то поднял свой осцилоскоп С1-121/5 с хранения и посмотрел что же происходит с моей платой памяти .. оказалось что регистры 273 (старые защелки, снятые с материнской платы) в отличии от 573 не тянут тайминги. Позже, внимательное чтение даташита на 2560 подтвердилось фразой, типа такой: "не подходят старые регистры-защелки из-за больших времен распространения сигнала, требуются .." и где были мои глаза?!? :)
Валерий, как Вам вот такая схема расширителя памяти (573-и регистры все одно заказывать):
Судя по таймингам, такая память должна укладываться в работу без тактов ожидания интерфейса и вовсе. Идея в следующем:
Выделяем 1 дополнительную ногу меги (Xbus) для разрешения работы модуля в целом. Если на ней 1, то модуль работает, иначе - переходит в Z и можно пользовать ноги по своему усмотрению.
Сигнал А15=0 (младшие 32к) адресует специальную страницу в 32кб с номером 0x0F (15) благодаря тому, что выходы U3 переводятся в Z и на старших адресах устанавливается "1" из-за резисторов подтяжки. Соответственно, при любом обращении к младшим адресам "за" внутренней SRAM, получаем одну и ту же страницу 0x0F.
А15=1 (старшие 32к) адресуются через номер страницы, записанный в U3. Таким образом в старшей половине адресов можно "листать" все 16 страниц внешней SRAM 512кб.
Запись номера страницы производится "вручную" путем выставления сигналов: Xbus=0 (модуль запрещен); AD0-7 = номер_страницы; ALE=1 - пропуск номера в регистр страницы (U3); ALE=0 - защелкивание номера страницы в регистре; Xbus=1 (модуль разрешен/запрет записи страницы). Можно оформить в спец. функцию переключения номера с закрытыми прерываниями.
Упс.. нашел косяк: нога 4 U4B должна получать инверсный сигнал с выхода ноги 3 U4A..
Для прямой адресации данных в такой памяти можно ввести "сегменты памяти" pageXX, типа .data, .text, пронумеровав их от 0 до 15: .page0, .page1, .., .page15 и установив им один и тотже начальный адрес в 0х8000. Символы, как понимаю можно прописать в описании плат и тогда при объявлении переменных/массивов можно будет просто указывать их сегмент как доп. атрибут, а при работе "подсовывать" нужную страничку ручками.
Первое и самое простое применение вижу для RTOS: можно организовывать 16 групп задач, каждая из которых будет иметь собственный сегмент памяти, переключаемый вместе с контекстом задачи. При этом, в младших адресах будет доступна общая страница памяти для всех задач - как-бы "системная".
.. покритикуете? (Вдруг чего не так начеркал)