Я только начинаю изучать цифровую схемотехнику и микроконтроллеры ATmel. Поэтому мне на данном этапе необходима помощь более опытных людей. Задача которую я хочу решить, но не знаю как: подключить внешнее ОЗУ к микроконтроллеру ATMega8. Есть идея использовать микросхему-преобразователь последовательного кода в параллельный для формирования адреса на входах микросхемы памяти. В Интернете я нашел такую микросхему: 74F673A - 16-битный сдвиговый регистр с последовательным входом и параллельным выходом. Для управления этой микросхемой, судя по описанию, нужно 3 сигнала: STCP(Store Clock Pulse Input), R/W(Read/Write Input) и SI/O(Serial Data Input or 3-STATE Serial Output). На 16-выходах74F673A (Q0-Q15) должен сформироваться код, соответствующий загруженному через SI/O- вход. У меня на микроконтроллере ATMega8 свободны выводы PD4(XCK/T0), PD5, PD6. Можно ли их напрямую подключить к входам STCP, R/W и SI/O микросхемы 74F673A? Есть так же свободные выводы ATMega8: PB0,PB1,PB2,PB3(MOSI),PB4(MISO),PB5(SCK),PD6(AIN0),PD7(AIN1). Можно ли их так же подключить напрямую к входам для записи данных(I/O1-I/O8) микросхемы ОЗУ HM6264BLP?
haker_fox
Jun 11 2006, 13:43
Старшие модели ATmega, не помню точно какие, ну например ATmega64, имеют возможность подключения внешнего ОЗУ без каких-либо программных или аппаратных заморочек.
Цитата(haker_fox @ Jun 11 2006, 17:43)

Старшие модели ATmega, не помню точно какие, ну например ATmega64, имеют возможность подключения внешнего ОЗУ без каких-либо программных или аппаратных заморочек.
Это я знаю, но хотелось бы изловчиться подключить ОЗУшку именно к ATMega8, в познавательных целях. Ведь теоретически это же возможно, мне самому просто пока-что нехватает знаний как это осуществить.
У МК ATMega8 есть свободные выводы для которых назначены какие-то функции: INT0,INT1, XCK, XTAL1, XTAL2, AIN0,AIN1, MOSI, MISO, SCK. Можно ли эти выводы использовать для формирования адреса и записи/чтения статического ОЗУ?
GetSmart
Jun 11 2006, 14:22
А интересно, бывает ли I2C-шная рама наподобие 24C256 ?
Цитата(GetSmart @ Jun 11 2006, 18:22)

А интересно, бывает ли I2C-шная рама наподобие 24C256 ?
К сожалению такой рамы достаточного объема я найти не смог, но зато есть микросхемы преобразователи параллельной шины в I2C. Например PCF8584, может ее можно использовать чтобы из обычной РАМы сделать I2C-шную?
defunct
Jun 11 2006, 15:17
Любые пины можете использовать для эмуляции шины памяти.
Можно даже подключить динамическую DRAM память типа 556РУ5 и подобных, пинов потребуется меньше чем при подключении SRAM и память получится дешевле. Правда такое включение будет не эффективным, т.к. сильно много ресурсов уйдет на эмуляцию шины, а в случае с DRAM еще и на эмуляцию контроллера DRAM (регенерацию памяти).
Лучше взять ATMega8515 или ATMega162 (оба есть в DIP40 исполнении) у которых имеется шина внешней памяти и подключить память так, как указано в даташите. В этом случае обращение к внешней памяти будет осуществляться теми же командами, что и обращение к внутренней SRAM. Одновременно вы обретете опыт подключения памяти и к 8051, т.к. шины памяти 8051 и Mega162/8515 pin-to-pin и сигнально полностью совместимы.
GetSmart
Jun 11 2006, 15:56
Ну просто жуткое извращение.
Если всё-таки упорно хотите припаять кучу микросхем то вот вариант:
Адрес 16 бит можно формировать через SPI -> 2 * 74HC595
Далее, чтобы ещё и записывать байт в ОЗУ потребуется третья 74HC595. К ней нужно подвести сигнал EZ, соединённый с WR ОЗУ. CS и OE подцепить на землю. На все три HC595 подать общий LE (строб перезагрузки выходов). Итого будет 2+2 = 4 линии (выхода) от проца. Ещё надо придумать чтение из памяти. Там тоже можно поставить 8-битовый регистр, преобразующий парал. 8 бит в последовательные для считывания по SPI. Защёлкивать в него можно через тот же LE. Таким образом можно подключить память до 64К через 5 линий проца (3 - SPI, WR и LE). Как чтение так и запись в память будет занимать передачу трёх байт по SPI и пары стробов.
__________
XTAL1,XTAL2 можно использовать если фьюзы настроить на работу от внутреннего RC-генератора.
SasaVitebsk
Jun 11 2006, 22:34
Цитата(li4 @ Jun 11 2006, 15:28)

Я только начинаю изучать цифровую схемотехнику и микроконтроллеры ATmel. Поэтому мне на данном этапе необходима помощь более опытных людей. Задача которую я хочу решить, но не знаю как: подключить внешнее ОЗУ к микроконтроллеру ATMega8. Есть идея использовать микросхему-преобразователь последовательного кода в параллельный для формирования адреса на входах микросхемы памяти. В Интернете я нашел такую микросхему: 74F673A - 16-битный сдвиговый регистр с последовательным входом и параллельным выходом. Для управления этой микросхемой, судя по описанию, нужно 3 сигнала: STCP(Store Clock Pulse Input), R/W(Read/Write Input) и SI/O(Serial Data Input or 3-STATE Serial Output). На 16-выходах74F673A (Q0-Q15) должен сформироваться код, соответствующий загруженному через SI/O- вход. У меня на микроконтроллере ATMega8 свободны выводы PD4(XCK/T0), PD5, PD6. Можно ли их напрямую подключить к входам STCP, R/W и SI/O микросхемы 74F673A? Есть так же свободные выводы ATMega8: PB0,PB1,PB2,PB3(MOSI),PB4(MISO),PB5(SCK),PD6(AIN0),PD7(AIN1). Можно ли их так же подключить напрямую к входам для записи данных(I/O1-I/O8) микросхемы ОЗУ HM6264BLP?
Могу предложить применить динамическую память. Если в учебных целях. Например 44256 (или 4464). Там 9(8) мультиплексированных ног адреса (можно использовать счётчик типа 561ие10 - 2 ноги+1) и четыре линии данных (если использовать 2 микрухи, то 8) и три ноги управления RAS/CAS/WE.
Таким образом используя 561ие10/44256 получим 3+4+3=10 ног и 128Кбайт озу.
Вам достаточно?
Всем спасибо за ваши ответы. Наиболее точно описал как реализовать то, что я хотел,
GetSmart'.
Цитата(GetSmart @ Jun 11 2006, 19:56)

Ну просто жуткое извращение.
Если всё-таки упорно хотите припаять кучу микросхем то вот вариант:
Адрес 16 бит можно формировать через SPI -> 2 * 74HC595
Далее, чтобы ещё и записывать байт в ОЗУ потребуется третья 74HC595. К ней нужно подвести сигнал EZ, соединённый с WR ОЗУ. CS и OE подцепить на землю. На все три HC595 подать общий LE (строб перезагрузки выходов). Итого будет 2+2 = 4 линии (выхода) от проца. Ещё надо придумать чтение из памяти. Там тоже можно поставить 8-битовый регистр, преобразующий парал. 8 бит в последовательные для считывания по SPI. Защёлкивать в него можно через тот же LE. Таким образом можно подключить память до 64К через 5 линий проца (3 - SPI, WR и LE). Как чтение так и запись в память будет занимать передачу трёх байт по SPI и пары стробов.
Согласен, конечно, что это не самый лучший вариант, проще было бы использовать микроконтроллер, в котором уже заложена возможность подключения памяти. Но мне сейчас важно сделать схему не максимально быстро и изяшно, а научиться работать с микроконтроллерами и памятью. Изящные схемы начну собирать когда наберусь больше опыта.
Я нарисовал схему по описанию, данному
GetSmart :

Опасаюсь что в ней могут быть ошибки, поэтому прошу вас посмотреть и если действительно что-то не так, то подсказать как сделать правильно.
Сергей Борщ
Jun 12 2006, 14:13
Цитата(li4 @ Jun 12 2006, 16:13)

Опасаюсь что в ней могут быть ошибки, поэтому прошу вас посмотреть и если действительно что-то не так, то подсказать как сделать правильно.
1)У тебя получилось, что в регистры мл. адреса и данных (DD1, DD8) всегда записывается одинаковая информация. Я бы регистр DD8 подцепил в цепочку к DD1, DD7. При чтении информация в нем не важна и достаточно будет задвинуть 16 бит адреса.
2) сигнал разрешения выхода на DD8 подается одновременно с сигналом записи. А память скорее всего требует чтобы к моменту сигнала записи данные уже стояли. Надо бы задержать сигнал записи RC-цепочкой.
3) Питание на регистры, память и емкости блокировочные у каждого корпуса не забудь.
4) Очень рекомендую керамику 0.1мкф параллельно С1
GetSmart
Jun 12 2006, 21:00
В схеме есть некоторые ошибки, прилагаю свою, сделанную наспех, но вроде правильную. Для сигналов WR и LE пассивный уровень "1". Строб - короткий "0" и обратно. SPI режим 0 (SCK 1-активный), старший бит - первым. Память асинхронная и ей не нужно чтобы данные уже стояли. Главное чтобы WR исчез раньше или одновременно с данными. Вроде так и есть. На всякий случай сделайте потом тест памяти.
При записи в память выплёвывается по SPI:
1. байт данных
2. ст.байт адреса
3. мл.байт адреса
далее строб LE
далее строб WR
При чтении из памяти выплёвывается по SPI:
1. ст.байт адреса
2. мл.байт адреса
далее строб LE - 2 раза
далее выплёвывается любой байт, а принятый байт - из ОЗУ.
_____________________
Кстати, схема с динамической памятью по-моему проще, но выводов требует много.
_____________________
Прилагаю мой вариант схемы для PCAD-2002
GetSmart
Jun 13 2006, 08:02
Дельное замечание:
Адресные линии для RAM можно подключать в любом порядке, то есть можно перепутать в целях удобства разводки. Собственно так же и с линиями данных.
______________
Желающие могут покритиковать схему
Сергей Борщ
Jun 13 2006, 09:04
Цитата(GetSmart @ Jun 13 2006, 11:02)

Желающие могут покритиковать схему
1)То же что и в схеме
li4: При переходе от записи к чтению будет конфликт на шине, когда память начинает выдавать данные а регистр еще не убрал с шины свои. Если регистр будет убирать раньше - скорее всегно будут сбои. В общем лучше какой-то из сигналов (LE?) завести на ~CS памяти. Заодно и потребление в режиме хранения снизится.
2) Где емкости блокировочные? :-)
GetSmart
Jun 13 2006, 09:38
Всё это так, не без мелких недостатков, но они связаны именно с малым кол-вом линий управления. Подавать ли что на CS ОЗУ не придумал. Без дополнительных линий управления или усложнения протокола у меня не получается. Может кто другой придумает.
Однако, схема человеку нужна как раз для тестирования/отладки, а не в серию. Поэтому потянет. А конденсаторы, они всегда подразумеваются :-)
Цитата(GetSmart @ Jun 13 2006, 01:00)

В схеме есть некоторые ошибки, прилагаю свою, сделанную наспех, но вроде правильную. Прилагаю мой вариант схемы для PCAD-2002
Нельзя-ли ее конвертнуть в какой-нибуть стандартном формат, Gif, например, потому что у меня нет PCAD'a.
GetSmart
Jun 13 2006, 15:32
Господа, помогите человеку! Лично я не знаю чем конвертить, а граббить экраны прямо из пикада лень.
Сергей Борщ
Jun 13 2006, 16:39
Цитата(GetSmart @ Jun 13 2006, 18:32)

Господа, помогите человеку! Лично я не знаю чем конвертить, а граббить экраны прямо из пикада лень.
Я тоже не знаю. Напечатал в pdf, в таком виде вроде все понимают.
Люди, суперогромное вам спасибо!

. За такой короткий срок уже даже схема получилась. Начинаю проектировать печатную плату и ближе к выходным думаю можно будет протестировать что получилось.
А по поводу блокировочных емкостей, для вас, я понимаю, это очевидно, но я не еще не вкурсе, куда их надо лепить?
Сергей Борщ
Jun 14 2006, 11:54
Цитата(li4 @ Jun 14 2006, 14:22)

Люди, суперогромное вам спасибо!

. За такой короткий срок уже даже схема получилась. Начинаю проектировать печатную плату и ближе к выходным думаю можно будет протестировать что получилось.
Ага, начнем совместно писать прогу. Много нового о себе узнаем :-)
Цитата
А по поводу блокировочных емкостей, для вас, я понимаю, это очевидно, но я не еще не вкурсе, куда их надо лепить?
Элементарно: по керамической емкости 0.1 мкф между ножками питания и земли каждой микросхемы как можно ближе к микросхеме. Для более высокочастотных схем ставят 0.1 и параллельно 0.01, для совсем вч еще 100пф можно поставить в параллель. Вот тут более детально рассказывают:
http://electronix.ru/forum/index.php?showtopic=17382&hl=
No subject
Цитата(GetSmart @ Jun 11 2006, 17:22)

А интересно, бывает ли I2C-шная рама наподобие 24C256 ?
См продукцию фирмы
RamtronТолько это не RAMа, но быстродействие аналогичное.
GetSmart
Jun 14 2006, 13:05
Не пугайте сразу человека кучей конденсаторов. Достаточно по одному керам. 0.1 на микросхему. Можно на расстоянии 1 см от ножек. От второй ножки будет больше. В этой схеме не такая уж большая рабочая частота.
Сергей Борщ
Jun 14 2006, 14:01
Цитата(GetSmart @ Jun 14 2006, 16:05)

Не пугайте сразу человека кучей конденсаторов. Достаточно по одному керам. 0.1 на микросхему.
Так я так и написал...
SasaVitebsk
Jun 14 2006, 16:19
Цитата(Сергей Борщ @ Jun 13 2006, 19:39)

Цитата(GetSmart @ Jun 13 2006, 18:32)

Господа, помогите человеку! Лично я не знаю чем конвертить, а граббить экраны прямо из пикада лень.
Я тоже не знаю. Напечатал в pdf, в таком виде вроде все понимают.
Точно такая же схема будет и на динамическую память. Для 64К один регистр адреса можно выкинуть. И нужно вместо OE обрабатывать RAS, CAS, WE. при сохранении схемы можно адресовать афигительную память.
Программа обслуживания не сложнее будет. Единственно, что регенерацию предусмотреть.
У меня со старых IBM XT осталась память 4х1024.

Две микрухи на мегобайт. Так я себе стенд сделал. Использую при отладке, когда много значений надо скинуть и сохранить. Правда я их непосредственно к ногам подключал.
GetSmart
Jun 14 2006, 17:33
Цитата
См продукцию фирмы Ramtron
Только это не RAMа, но быстродействие аналогичное.
И в самом деле подходящая вещь. 32 КБ памяти, 20 МГц шина. По цене 150 руб. Зачем, спрашивается, извращаться?
GetSmart
Jun 14 2006, 18:23
Ага. Пришёл гений. Можно расходиться.
Тока речь шла и идёт об ОЗУ. Но кое-кто читать не умеет.
kertis, прочитай-ка апноут сто-какой-то. Думаю поможет.
GetSmart
Jun 14 2006, 19:21
Bill говорил про FRAM. Это почти RAM. То есть такая же быстрая, без ожидания записи и по I2C/SPI.
GetSmart
Jun 14 2006, 20:04
Будет, если читать/писать по рандом-адресам. Собственно, она и в пакетной записи будет, если писать со скоростью 13 Мбит. Внутренний буфер заполнится за 1/20 времени записи страницы. Второй буфер не спасёт.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.