но 70нсек если правильно понимаю это длиньше такта 16мгц, а чтение там идет за три такта, причем собственно на само считывание отдается один такт, при 16мгц это 62.5 нсек такт
т.е. я бы с этой памятью не расчитывал на работу на частоте выше 8-12 мгц
О! Господа, просвятите - эту память меги 128/2560 принимают как родную и обращение по адресному пространству? Что такое сигнал ALE и заче защёлка? Т.е. понятно зачем она, по почему младшая часть адреса на одной шине с данными, а не со старшей частью адреса? Это не ошибка? Так мегу придумали?
О! Господа, просвятите - эту память меги 128/2560 принимают как родную и обращение по адресному пространству? Что такое сигнал ALE и заче защёлка? Т.е. понятно зачем она, по почему младшая часть адреса на одной шине с данными, а не со старшей частью адреса? Это не ошибка? Так мегу придумали?
Я пробовал на Мега2560, но память была статическая EtronTech EM51256A-20P даташит конкретно на эту так и не нашел. Была вытащена из кеша матери на 486DX. Судя по маркировакам прочих чипов от EtronTech эта вроде как типовая 32к8 20нсек. Так и запаял 2шт (64к8) + регистр-защелка 74VHC373 тоже из какой-то матери .. не заработало. Детальное описание тут, в проектах, тема "недовольным, супер дуня". Там и разводка платы есть практически в 1 слой и фотки и проверочный скетч, которому вовсе ничего прописывать для компилятора не требуется.
При 70нс, скорее всего потребуется 3 такта ожидания, поскольку только в этом режиме есть растянутый цикл чтения-записи, в остальных только доп. такты ожидания выставления адреса. 3+3 = 6 тактов на 1 операцию чтения/записи .. 16/6 = 2.5Мгц., но все равно лучше чем читать последовательную память.
А где там такты ожидания настраиваются? По идее там ничего сложного. Скорее всего или память не рабочая или что то не так подключили, что немудрено без даташита. А память вся статическая и что у ТС и та, что я называл
я кстати планировал подключить 128к используя один цифровой пин как 17й бит адрес
Работа интерфейса (на Мега2560, по крайней мере) настраивается двумя регистрами, тут скетч примера было описание "как", в комментах к коду:
// SRE(7)=0x80 - enable Xbus
// , SRL0,1,2(6,5,4)=0 - banks [0x10..0x70]=[0x2200,0x4000..0xE000]: [0,0x10] -- start upper bank only!
// , SRW11(3),SRW10(2) = [0x0,0x04,0x08,0x0c] upper sector: 0,1,2,2+1 wait cycles
// , SRW01(1),SRW00(0) = [0x0,0x01,0x02,0x03] for lower sector wait states
XMCRA = 0x80 | 0x00 | 0x00 | 0x00;
// XMBK(7) = 0x80 -- bus keeper AD0..AD7
// , XMM(2,1,0) -- Xbus address mask 0 - full 64k, 1 - not A15 .. 7 - not portC as address!
XMCRB = 0x80;
То есть, всю внешнюю память можно поделить на 2 банка установкой бит SRLO (6,5,4 биты регистра XMCRA): "верхнюю" и "нижнюю". При этом 2 значения относятся к одному и тому варианту "банк только 1"
Битами 0,1 и 2,3 как раз устанавливаются раздельные дополнительные задержки каждому банку к имеющейся "по умолчания" в 1 дополнительный такт. Соответственно "0" - 1 такт ожидания, "1" +2 такта, "2" +3 такта и "3" - +3такта задержки от адреса И +1 такт удлинение цикла записи (время удержания данных процессором на шине), итого +4 такта. Вот "удлинять цикл записи" можно только в этом последнем режиме и он дает +4 такта к 2 имеющимся у МК при обращениях к своей внутренней памяти.
Итого имеем 8Мгц - "родная SRAM", 5.33Мгц - "внешняя без задержек" .. и 2.5Мгц "худший случай".
Регистр XMCRB - позволяет маскировать шину адреса, уменьшая разрядность и тем самым освобождать ножки порта "С" для собственного применения. При этом, конечно же никто не мешает использовать их для адресации внешней памяти "вручную". Этот прием позволяет обращаться к маскируемым внутренней ЗУ, адресным областям внешней памяти. То есть иметь 64к + внутренняя SRAM полностью.
Делается так: маскируем линию C7 (A15) в XMCRB, устанавливаем вручную С7=0, и обращаемся к ячейкам 32К+младшая зона адресов. Поскольку старшая линия адреса замаскирована, то процессор её на шину НЕ выставит, а у вас она установлена в 0, что приведет к обращению к младшим адресам внешней SRAM, чего сделать иным способом - проблематично.
На самом деле, тут непаханное поле для реализации разного рода менеджеров страниц без существенного расхода ножек МК .. :)
К примеру, ставим на контроллер внешней ЗУ кроме регистра-защелки младшей части адреса, ещё и регстр страницы, входами на ту же линию AD0..7. Запрещаем xBus и обычной записью в порт прописываем новый регистр "страниц/ы", используя С7 в качестве строба записи. Регистр страниц может использовать А14 адреса как выборку какие 4 бита подать на память в качестве старшей части адреса вместо А14,А15,А16,А17 .. итого имеем:
1. Замаскированную старшую линию адреса - адресное окно 32к в старшей части адресов.
2. Две виртуальные страницы внешней SRAM по 16кб в этом окне.
3. 256 килобайт внешнего ЗУ.
Можно и похитрее поизголяться .. :)
P.S. Да, есть опасение что запял память как-то "не так". Насколько смог, проследил на 486DX куда какие ноги ведут .. но мало что понял. Вроде бы адрес, данные запаяны верно, а вот с управлением ничего там понять не смог.. Поскольку адрес-данные совпали с типовыми чипами такого формата, то и сделал по типовому в надежде что прокатит. Ан не тут-то было. :(
Респект, а можно тупой вопрос по принципиальной схеме? Я не умею в шины вообще, от слова сафсэм. Как понять три толстых синих стрелки PA0..7 и только две PA8..15? значит ли это что AD0 у U3 соединяется с D0 U4 (11 вывод) и с D0U5 (2 вывод); AD1 U3 - с D1U4 (12 вывод) и D1U5 (3 вывод) и т. д., а потом A8 U3 - с A8 U4(25 вывод), A9 U3 - с A9 U4(24 вывод) и т. д.?
значит ли это что AD0 у U3 соединяется с D0 U4 (11 вывод) и с D0U5 (2 вывод); AD1 U3 - с D1U4 (12 вывод) и D1U5 (3 вывод) и т. д., а потом A8 U3 - с A8 U4(25 вывод), A9 U3 - с A9 U4(24 вывод) и т. д.?
всё равно для многих задач , мне кажется, пойдеть, нужно только пихать в неё константы и переменные, к которым программа редко обращается. всё ж быстрее, чем еепром.
всё равно для многих задач , мне кажется, пойдеть, нужно только пихать в неё константы и переменные, к которым программа редко обращается. всё ж быстрее, чем еепром.
разница кардинальная. Паралельная память для МК мегя128 работает совершенно точно так же как встроенная. Не на уровне программ, а на уровне машинных инструкций
память на spi это совсем другое, программный уровень. Тоже применима, но не сравнима
128A правильнее назвать багфиксингом 128 без А. Точно так же атмел поступал с мега8, мега16, мега32 и т.д.
были исправлены часть errata, но по сути этот тот же чип, на том же ядре и такой же древний) в частности древность 128а можно понять не только по отсутствию picopower, но и по отсутствию PCINT прерываний
возможно чуть более совершенный технологический процесс, потому, что в версиях без А атмел по сути отбраковывал часть чипов и наносил на них маркировку L (мое предположение) для работы на пониженной частоте и пониженном напряжении. Когда в версиях с А диапазон напряжений расширен и отпала необходимость сортировать на L и не L
но в целом мега128 очень неплоха. особенно учитывая аномально низкую цену на нее у китайцев (что загадка)
а отладкак в JTAG так просто сказка если сравнивать с глюками debugWire интерфейса в той же мега328
но в целом мега128 очень неплоха. особенно учитывая аномально низкую цену
Не особо и спорю, но 20 МК для любительских целей -- это как-то многовато. Среди атмег это наверное очень неплохой вариант, но если смотеть шире, то на таких количествах и STM32F030C8T6 по 47 руб/шт. можно на али купить. Ног и флеша, правда, поменьше, но вот ОЗУ и прочего фарша ощутимо погуще. И если бы выбор стоял конкретно передо мной, то не факт, что я бы двинулся в сторону атмеги.
Неа, она второго поколения. Мне лично пофиг на это, я их ценю за то что они дешевые.
У атмела AVR имеют условно 4 поколения/техпроцесса.
1 В первом поколении такие МК как atmega8. У них нет ни микропотребления ни системы прерываний PCINT (только INT). Небольшое число PWM, другие опорные напряжения АЦП и ряд других отличий.
2 Потом было улучшенное поколение с индексами A. Туда входят та же atmega8 только с буквой А, также atmega128A, atmega16A и ряд других. У них так же нет ни микропотребления ни PCINT, это такое поколение багфиксов. В даташите на atmega8a есть Глава с описанием отличий от atmega8 - там наглядно видно какие баги фиксили.
3 Третье поколение это как раз atmega328p/pa, atmega644p/pa, atmega1281p, atmega1284p и ряд других - с расширенным числом pwm, PCINT, микропотребление и ряд других отличий.
4 Ну и четвёртое поколение это такие МК как attiny4/5/9/10. У них улучшенное микропотребление и новый протокол программирования TPI
Из относящегося к питанию также у многих новых кристаллов изменились уровни POR.
Микроконтроллеры «А» и «не-А» с точки зрения программатора не отличаются ничем. Соответствующие кристаллы имеют одинаковый набор «фьюзов» (fuses) и одинаковые сигнатуры.
Я планировал уже и память есть и защелки, но руки не дошли
судя по описанию там все просто:
- цепляем чип памяти к соотвествующим пинам меги используя защелку для 8бит адреса
- настраиваем фьюзы
- настраиваем компилятор на новый размер памяти
вроде ничего более
подводные камни могут быть при необходимости согласовывать уровни, вся статическая память которую видел трех вольтовая и не факт, что толерантная к 5в
еще тайминги надо сверить у памяти и защелки с планируемой тактовой МК
память едет вот эта, питание 4.5 - 5.5 в, 70нс
http://ru.aliexpress.com/item/5pcs-Free-shipping-HM62256BLFP-7T-HM62256BLFP/32657849622.html
интересный вариант, не дорогой
но 70нсек если правильно понимаю это длиньше такта 16мгц, а чтение там идет за три такта, причем собственно на само считывание отдается один такт, при 16мгц это 62.5 нсек такт
т.е. я бы с этой памятью не расчитывал на работу на частоте выше 8-12 мгц
я брал CY7C1019DV33 там время 10нсек, но стоит намного дороже
приедут, буду пробовать, установка адреса у них 55нс, считывание 70, может и на 16мгц заведется :)
Теоретически, можно кварц с частотой повыше поставить. Атмеги вроде вверх по частоте идут без особых проблем. В разумных пределах, разумеется.
то есть это дополнительная память для программ или данных ?
кака схема подключения, если не секрет ?
это оперативная память
О! Господа, просвятите - эту память меги 128/2560 принимают как родную и обращение по адресному пространству? Что такое сигнал ALE и заче защёлка? Т.е. понятно зачем она, по почему младшая часть адреса на одной шине с данными, а не со старшей частью адреса? Это не ошибка? Так мегу придумали?
О! Господа, просвятите - эту память меги 128/2560 принимают как родную и обращение по адресному пространству? Что такое сигнал ALE и заче защёлка? Т.е. понятно зачем она, по почему младшая часть адреса на одной шине с данными, а не со старшей частью адреса? Это не ошибка? Так мегу придумали?
откройте даташит, там все расписано
Я пробовал на Мега2560, но память была статическая EtronTech EM51256A-20P даташит конкретно на эту так и не нашел. Была вытащена из кеша матери на 486DX. Судя по маркировакам прочих чипов от EtronTech эта вроде как типовая 32к8 20нсек. Так и запаял 2шт (64к8) + регистр-защелка 74VHC373 тоже из какой-то матери .. не заработало. Детальное описание тут, в проектах, тема "недовольным, супер дуня". Там и разводка платы есть практически в 1 слой и фотки и проверочный скетч, которому вовсе ничего прописывать для компилятора не требуется.
При 70нс, скорее всего потребуется 3 такта ожидания, поскольку только в этом режиме есть растянутый цикл чтения-записи, в остальных только доп. такты ожидания выставления адреса. 3+3 = 6 тактов на 1 операцию чтения/записи .. 16/6 = 2.5Мгц., но все равно лучше чем читать последовательную память.
А где там такты ожидания настраиваются? По идее там ничего сложного. Скорее всего или память не рабочая или что то не так подключили, что немудрено без даташита. А память вся статическая и что у ТС и та, что я называл
я кстати планировал подключить 128к используя один цифровой пин как 17й бит адрес
Работа интерфейса (на Мега2560, по крайней мере) настраивается двумя регистрами, тут скетч примера было описание "как", в комментах к коду:
То есть, всю внешнюю память можно поделить на 2 банка установкой бит SRLO (6,5,4 биты регистра XMCRA): "верхнюю" и "нижнюю". При этом 2 значения относятся к одному и тому варианту "банк только 1"
Битами 0,1 и 2,3 как раз устанавливаются раздельные дополнительные задержки каждому банку к имеющейся "по умолчания" в 1 дополнительный такт. Соответственно "0" - 1 такт ожидания, "1" +2 такта, "2" +3 такта и "3" - +3такта задержки от адреса И +1 такт удлинение цикла записи (время удержания данных процессором на шине), итого +4 такта. Вот "удлинять цикл записи" можно только в этом последнем режиме и он дает +4 такта к 2 имеющимся у МК при обращениях к своей внутренней памяти.
Итого имеем 8Мгц - "родная SRAM", 5.33Мгц - "внешняя без задержек" .. и 2.5Мгц "худший случай".
Регистр XMCRB - позволяет маскировать шину адреса, уменьшая разрядность и тем самым освобождать ножки порта "С" для собственного применения. При этом, конечно же никто не мешает использовать их для адресации внешней памяти "вручную". Этот прием позволяет обращаться к маскируемым внутренней ЗУ, адресным областям внешней памяти. То есть иметь 64к + внутренняя SRAM полностью.
Делается так: маскируем линию C7 (A15) в XMCRB, устанавливаем вручную С7=0, и обращаемся к ячейкам 32К+младшая зона адресов. Поскольку старшая линия адреса замаскирована, то процессор её на шину НЕ выставит, а у вас она установлена в 0, что приведет к обращению к младшим адресам внешней SRAM, чего сделать иным способом - проблематично.
На самом деле, тут непаханное поле для реализации разного рода менеджеров страниц без существенного расхода ножек МК .. :)
К примеру, ставим на контроллер внешней ЗУ кроме регистра-защелки младшей части адреса, ещё и регстр страницы, входами на ту же линию AD0..7. Запрещаем xBus и обычной записью в порт прописываем новый регистр "страниц/ы", используя С7 в качестве строба записи. Регистр страниц может использовать А14 адреса как выборку какие 4 бита подать на память в качестве старшей части адреса вместо А14,А15,А16,А17 .. итого имеем:
1. Замаскированную старшую линию адреса - адресное окно 32к в старшей части адресов.
2. Две виртуальные страницы внешней SRAM по 16кб в этом окне.
3. 256 килобайт внешнего ЗУ.
Можно и похитрее поизголяться .. :)
P.S. Да, есть опасение что запял память как-то "не так". Насколько смог, проследил на 486DX куда какие ноги ведут .. но мало что понял. Вроде бы адрес, данные запаяны верно, а вот с управлением ничего там понять не смог.. Поскольку адрес-данные совпали с типовыми чипами такого формата, то и сделал по типовому в надежде что прокатит. Ан не тут-то было. :(
нарисовал девелоперскую плату, на выходных буду лутить :)
Прямые углы в дорожках уберите. Дурной тон и переотражение сигналов.
нашел дешевые 45нс sram 62256
http://ru.aliexpress.com/item/Free-shipping-5pcs-lot-IS62C256AL-45ULI-ISSI-SOP28-memory-chip-new/32664778748.html
а вот про скорость памяти, если 70 нс и кварц 16мгц - то WS = 1 и если 55нс и ниже то WS = 0 при 16 мгц кварце :)
и еще неплохая статейка
http://radio-hobby.org/modules/news/article.php?storyid=828
запустил внешнюю память, все работает, вот скетч теста памяти переделанный от Arhat109-2 для Atmega128A + Sram 32Kb
вот выхлоп, память HM62256BLFP-7T - 70нс. регистр защелка SN74HC573D, кварц 16 Мгц
Pattern = 0, Address 0 = 1100
Pattern = 0 Test OK, Time = 31096 mcsec.
Pattern = 55, Address 0 = 1100
Pattern = 55 Test OK, Time = 31372 mcsec.
Pattern = AA, Address 0 = 1100
Pattern = AA Test OK, Time = 31380 mcsec.
Супер! Поздравляю!
Тест не показательный, надо бы сначала прописать всю память разными значениями, а в другом цикле прочитать.
я в курсе, просто вчера пришла память, я ее быстро проверил, позже перепишу тестовый скетч :)
зы, переделал
Респект, а можно тупой вопрос по принципиальной схеме? Я не умею в шины вообще, от слова сафсэм. Как понять три толстых синих стрелки PA0..7 и только две PA8..15? значит ли это что AD0 у U3 соединяется с D0 U4 (11 вывод) и с D0U5 (2 вывод); AD1 U3 - с D1U4 (12 вывод) и D1U5 (3 вывод) и т. д., а потом A8 U3 - с A8 U4(25 вывод), A9 U3 - с A9 U4(24 вывод) и т. д.?
Хочу тоже сделать.
значит ли это что AD0 у U3 соединяется с D0 U4 (11 вывод) и с D0U5 (2 вывод); AD1 U3 - с D1U4 (12 вывод) и D1U5 (3 вывод) и т. д., а потом A8 U3 - с A8 U4(25 вывод), A9 U3 - с A9 U4(24 вывод) и т. д.?
Хочу тоже сделать.
да
вот моя плата в спринте
https://yadi.sk/d/IK5CJYN5sFXkT
и среда IDE 1.6.9 atmega128
https://yadi.sk/d/T44-s_klsSHd6
Первые подводные камни, написал скетч, но по окончанию loop начинается загрузка сначала
вот выхлоп
Setup
Start
End
Setup
Start
End
Setup
Start
End
Setup
Start
End
watchdog выключен, кто что посоветует?
есть сомнение что компилятор собирает только для 4кб памяти,
пробовал добавить в секцию boards.txt флаг
atmega128.build.extra_flags=-Wl,-Tdata=0x801100,--defsym=__heap_end=0x8090ff
видно что собирает с этим флагом но все равно не работает
ps, разобрался :)
А что сделать надо было?
Не говорит. Видно государственная тайна.
не то и не так добавлял, надо добавить в boards.txt строчку
atmega128.compiler.c.elf.extra_flags=-Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x8090ff
и все заработало :)
по материалам
http://www.rlocman.ru/shem/schematics.html?di=71095
правильный скетч со строкой иннициализации XMEM
еще про иннициализацию памяти
http://avr-libc.narod.ru/mem_sections.html
а чем обусловлен выбор именно этой микросхемы памяти ?
вроде уже отработанный вариант - пиковская 23k256 , цепляется легко, стоит 40 рублей.
еще кто-то вроде цеплял старую компьютерную DDR1 или даже еще до неё которая была, не помню подробности.
а чем обусловлен выбор именно этой микросхемы памяти ?
скоростью, параллельная быстрее чем spi
всё равно для многих задач , мне кажется, пойдеть, нужно только пихать в неё константы и переменные, к которым программа редко обращается. всё ж быстрее, чем еепром.
ну eeprom у 128 вообще песня, 4Кб заполняет нулями около минуты :)
пиковская 23k256
* микрочиповская
всё равно для многих задач , мне кажется, пойдеть, нужно только пихать в неё константы и переменные, к которым программа редко обращается. всё ж быстрее, чем еепром.
разница кардинальная. Паралельная память для МК мегя128 работает совершенно точно так же как встроенная. Не на уровне программ, а на уровне машинных инструкций
память на spi это совсем другое, программный уровень. Тоже применима, но не сравнима
А где брали мс памяти? Хочу повторить конструкцию, думаю заказать тут $3.74 5 шт./лот HM62256BLFP-7T чип памяти SOP28
также ищу защелку в более мелком корпусе.
брал здесь
http://ru.aliexpress.com/item/5pcs-Free-shipping-HM62256BLFP-7T-HM62256BLFP/32657849622.html
http://ru.aliexpress.com/item/10Pcs-Lot-74HC573D-74HC573-HC573-IC-LATCH-OCTAL-D-3STATE-20SOIC-SOP20/32350673609.html
заказал себе еще эти, защелка в мелком корпусе
но есть но: тяжелее будет развести плату:)
http://ru.aliexpress.com/item/New-original-authentic-LSGDZ-SN74AHC573PWR-SN74AHC573PW-HA573-TSSOP/32473898442.html
http://ru.aliexpress.com/item/Free-shipping-5pcs-lot-IS62C256AL-45ULI-ISSI-SOP28-memory-chip-new/32664778748.html
на 20Мгц запускать буду:)
на 20Мгц запускать буду:)
мега128 гарантируется до 16мгц. поэкспериментировать конечно никто не мешает, но результат может быть не тот, что ожидается
народ запускает, почему бы не попробовать?
https://github.com/MCUdude/MegaCore
на 16Мгц память на 70нс. работает на ура, думаю что на 45нc и защелка 74AHC573 при 20 Мгц работать будет :)
Работать будет, не сомнения
но как только выходим за пределы допустимого никто уже не гарантирует стабильность
погоняетет месяц другой дайте знать
Кристаллы с плотной начинкой как у меги128 почти не разгоняются. Да и сделана она на старом техпроцессе, не PicoPower
Atmega128A-AU по моему на новом техпроцессе
Не знаю, какой там техпроцесс, но точно не по технолгии picoPower. Там буквенный индекс должен быть P, PA, PB.
Новая 128-ая атмега -- это 1280 и 1281.
Новая 128-ая атмега -- это 1280 и 1281.
с какого перепугу ? это разные чипы, читайте дш
128А это новая ревизия 128 и 128L
"Разная" там 1280, т.к. она в 100-пиновом корпусе. А 1281, вполне себе одинаковая, за исключением нескольких мелких нюансов.
128А это новая ревизия 128 и 128L
Древняя Atmega8A тоже новая ревизия после ископаемой Atmega8, но от этого не менее древняя. 128L вообще не нашел на сайте Атмела.
128A правильнее назвать багфиксингом 128 без А. Точно так же атмел поступал с мега8, мега16, мега32 и т.д.
были исправлены часть errata, но по сути этот тот же чип, на том же ядре и такой же древний) в частности древность 128а можно понять не только по отсутствию picopower, но и по отсутствию PCINT прерываний
возможно чуть более совершенный технологический процесс, потому, что в версиях без А атмел по сути отбраковывал часть чипов и наносил на них маркировку L (мое предположение) для работы на пониженной частоте и пониженном напряжении. Когда в версиях с А диапазон напряжений расширен и отпала необходимость сортировать на L и не L
но в целом мега128 очень неплоха. особенно учитывая аномально низкую цену на нее у китайцев (что загадка)
а отладкак в JTAG так просто сказка если сравнивать с глюками debugWire интерфейса в той же мега328
Не особо и спорю, но 20 МК для любительских целей -- это как-то многовато. Среди атмег это наверное очень неплохой вариант, но если смотеть шире, то на таких количествах и STM32F030C8T6 по 47 руб/шт. можно на али купить. Ног и флеша, правда, поменьше, но вот ОЗУ и прочего фарша ощутимо погуще. И если бы выбор стоял конкретно передо мной, то не факт, что я бы двинулся в сторону атмеги.
зы, переделал
1. Записывать во все ячейки памяти одно и то же значение - не очень хорошая идея: такой тест в принципе не способен выявить проблемы с адресацией.
2. Что Вы хотели сказать строкой 57?
2. Что Вы хотели сказать строкой 57?
1) ну это первый вариант
2) старая привычка пуще неволи, она там не нужна :)
Atmega128A-AU по моему на новом техпроцессе
Неа, она второго поколения. Мне лично пофиг на это, я их ценю за то что они дешевые.
У атмела AVR имеют условно 4 поколения/техпроцесса.
1 В первом поколении такие МК как atmega8. У них нет ни микропотребления ни системы прерываний PCINT (только INT). Небольшое число PWM, другие опорные напряжения АЦП и ряд других отличий.
2 Потом было улучшенное поколение с индексами A. Туда входят та же atmega8 только с буквой А, также atmega128A, atmega16A и ряд других. У них так же нет ни микропотребления ни PCINT, это такое поколение багфиксов. В даташите на atmega8a есть Глава с описанием отличий от atmega8 - там наглядно видно какие баги фиксили.
3 Третье поколение это как раз atmega328p/pa, atmega644p/pa, atmega1281p, atmega1284p и ряд других - с расширенным числом pwm, PCINT, микропотребление и ряд других отличий.
4 Ну и четвёртое поколение это такие МК как attiny4/5/9/10. У них улучшенное микропотребление и новый протокол программирования TPI
Из относящегося к питанию также у многих новых кристаллов изменились уровни POR.
Микроконтроллеры «А» и «не-А» с точки зрения программатора не отличаются ничем. Соответствующие кристаллы имеют одинаковый набор «фьюзов» (fuses) и одинаковые сигнатуры.
Immortal, 128 мне нравится из-за кол-ва памяти, ножек и цены, она подходит мне в 95 % моих проектов :)