|
Научите пожалуйста, как подключить ОЗУ к ATMega8? |
|
|
|
Jun 11 2006, 12:28
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 11-06-06
Пользователь №: 17 980

|
Я только начинаю изучать цифровую схемотехнику и микроконтроллеры 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?
|
|
|
|
|
Jun 11 2006, 14:09
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 11-06-06
Пользователь №: 17 980

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

Группа: Новичок
Сообщений: 17
Регистрация: 11-06-06
Пользователь №: 17 980

|
Цитата(GetSmart @ Jun 11 2006, 18:22)  А интересно, бывает ли I2C-шная рама наподобие 24C256 ? К сожалению такой рамы достаточного объема я найти не смог, но зато есть микросхемы преобразователи параллельной шины в I2C. Например PCF8584, может ее можно использовать чтобы из обычной РАМы сделать I2C-шную?
|
|
|
|
|
Jun 11 2006, 22:34
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(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Кбайт озу. Вам достаточно?
|
|
|
|
|
Jun 12 2006, 13:13
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 11-06-06
Пользователь №: 17 980

|
Всем спасибо за ваши ответы. Наиболее точно описал как реализовать то, что я хотел, 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 :  Опасаюсь что в ней могут быть ошибки, поэтому прошу вас посмотреть и если действительно что-то не так, то подсказать как сделать правильно.
Сообщение отредактировал li4 - Jun 12 2006, 13:16
|
|
|
|
|
Jun 12 2006, 14:13
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(li4 @ Jun 12 2006, 16:13)  Опасаюсь что в ней могут быть ошибки, поэтому прошу вас посмотреть и если действительно что-то не так, то подсказать как сделать правильно. 1)У тебя получилось, что в регистры мл. адреса и данных (DD1, DD8) всегда записывается одинаковая информация. Я бы регистр DD8 подцепил в цепочку к DD1, DD7. При чтении информация в нем не важна и достаточно будет задвинуть 16 бит адреса. 2) сигнал разрешения выхода на DD8 подается одновременно с сигналом записи. А память скорее всего требует чтобы к моменту сигнала записи данные уже стояли. Надо бы задержать сигнал записи RC-цепочкой. 3) Питание на регистры, память и емкости блокировочные у каждого корпуса не забудь. 4) Очень рекомендую керамику 0.1мкф параллельно С1
Сообщение отредактировал Сергей Борщ - Jun 12 2006, 14:15
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 12 2006, 21:00
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
В схеме есть некоторые ошибки, прилагаю свою, сделанную наспех, но вроде правильную. Для сигналов WR и LE пассивный уровень "1". Строб - короткий "0" и обратно. SPI режим 0 (SCK 1-активный), старший бит - первым. Память асинхронная и ей не нужно чтобы данные уже стояли. Главное чтобы WR исчез раньше или одновременно с данными. Вроде так и есть. На всякий случай сделайте потом тест памяти. При записи в память выплёвывается по SPI: 1. байт данных 2. ст.байт адреса 3. мл.байт адреса далее строб LE далее строб WR При чтении из памяти выплёвывается по SPI: 1. ст.байт адреса 2. мл.байт адреса далее строб LE - 2 раза далее выплёвывается любой байт, а принятый байт - из ОЗУ. _____________________ Кстати, схема с динамической памятью по-моему проще, но выводов требует много. _____________________ Прилагаю мой вариант схемы для PCAD-2002
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jun 13 2006, 09:04
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(GetSmart @ Jun 13 2006, 11:02)  Желающие могут покритиковать схему 1)То же что и в схеме li4: При переходе от записи к чтению будет конфликт на шине, когда память начинает выдавать данные а регистр еще не убрал с шины свои. Если регистр будет убирать раньше - скорее всегно будут сбои. В общем лучше какой-то из сигналов (LE?) завести на ~CS памяти. Заодно и потребление в режиме хранения снизится. 2) Где емкости блокировочные? :-)
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|