roboforum.ru

Технический форум по робототехнике.

Atmega128 + 64k RAM + CodeVisionAVR

Atmega128 + 64k RAM + CodeVisionAVR

-= Александр =- » 13 сен 2009, 20:11

Кто-нить имел дело с внешним ОЗУ для AVR? Щас вот колдую в CodeVisionAVR - пока глухо... Разбираюсь чего где не так подклюил... Мож есть какие-то подводные камни?

Re: Atmega128 + 64k RAM + CodeVisionAVR

-= Александр =- » 14 сен 2009, 01:02

Эх, видимо что-то не успевает сработать. Щас написал софтовый обмен с памятью - все ОК, но медленно блин... А как пытаюсь аппаратно - все виснет намертво. :(

Re: Atmega128 + 64k RAM + CodeVisionAVR

=DeaD= » 14 сен 2009, 01:17

ОЗУ не поспевает за мегой?

Re: Atmega128 + 64k RAM + CodeVisionAVR

blindman » 14 сен 2009, 01:19

ОЗУ какое? Тактовая частота процессора? Возможно, нужно ввести циклы ожидания

Re: Atmega128 + 64k RAM + CodeVisionAVR

-= Александр =- » 14 сен 2009, 02:31

Озу 15наносекунд... Частота 16 МГц.

Re: Atmega128 + 64k RAM + CodeVisionAVR

blindman » 14 сен 2009, 02:34

Должно нормально работать. А покажи схемку? В ПДФ или картинкой. И код, как включаешь внешнюю память

Re: Atmega128 + 64k RAM + CodeVisionAVR

-= Александр =- » 14 сен 2009, 03:48

Вот схема.
Программа стандартная сгенерена CodeVision...

Код: Выделить всёРазвернуть
// External SRAM page configuration: 
//              -              / 0000h - FFFFh
// Lower page wait state(s): None
// Upper page wait state(s): 2r/w
MCUCR=0x80;
XMCRA=0x02;


Плюс еще в настройках компилера говорю что внешняя память есть.
Но как только прошиваю - все виснет намертво...

А вот это работает нормально:

Код: Выделить всёРазвернуть
void Write(unsigned int Adress, char Data)
{
  #asm("cli")
  DIR=0xFF;
  AD=*(char*)&Adress;
  ADR=*(char*)&Adress+1;
  PORTG|=0b100;
  PORTG&=~0b100;
  AD=Data;
  PORTG&=~0b001;
  #asm("nop")
  PORTG|=0b001;
  //AD=0;
  //ADR=0;
  DIR=0;
  #asm("sei")
}

char Read(char Adress)
{
  char data;
  #asm("cli")
  DIR=0xFF;
  AD=*(char*)&Adress;
  ADR=*(char*)&Adress+1;
  PORTG|=0b100;
  PORTG&=~0b100;
  DIR=0;
  PORTG&=~0b010;
  #asm("nop")
  data=DATAIN;
  PORTG|=0b010;
  #asm("sei")
  return data; 
}


Есть подозрение что микросхема-защелка адреса работает не так как надо. Надо HCT573, а у меня стоит 574. Но логика работы у них в таком режиме одинаковая. Завтра попробую 573ю.
Вложения
RAM.pdf
(19.19 КиБ) Скачиваний: 82

Re: Atmega128 + 64k RAM + CodeVisionAVR

blindman » 14 сен 2009, 04:26

Нифига не одинаковая. 574 защёлкивается по фронту, а 573 - по спаду. AVR выдает адрес при высоком уровне ALE, потом переводит его в низкий. У тебя в регистр записываются данные, которые остались на шине от предыдущей операции, а не адрес. С 574 надо инвертор ставить.

спать надо в полпятого, а не память подключать :)

Re: Atmega128 + 64k RAM + CodeVisionAVR

-= Александр =- » 14 сен 2009, 14:00

Вот пятой точкой чуял что они разные. Даже просимулировал этот момнет, а Proteus гад обманул меня - там все одинаково работало... :oops: Пойду искать 573ю...

Re: Atmega128 + 64k RAM + CodeVisionAVR

galex1981 » 14 сен 2009, 14:35

С каждым днем все больше и больше ошибок у Proteus всплывает...

Re: Atmega128 + 64k RAM + CodeVisionAVR

nest » 14 сен 2009, 14:55

а я вот вообще без защелки обошелся: (картинка кликабельна)
рулил ногами на асме.
ну это если ног хватает.

Изображение

Re: Atmega128 + 64k RAM + CodeVisionAVR

-= Александр =- » 14 сен 2009, 17:42

Не, программно рулить даже на асме все равно не по-джедайски... :wink:

Re: Atmega128 + 64k RAM + CodeVisionAVR

Duhas » 21 сен 2009, 10:41

тэкс, я вот думаю о прикручивании памяти в Хмеге... только вот там ALE инверсные.. а все знакомые мне защелки 373\4 573\4 работают либо по фронту, либо по высокому уровню... а нужно бы по спаду...

Re: Atmega128 + 64k RAM + CodeVisionAVR

blindman » 21 сен 2009, 11:21

573 защёлкивается при низком уровне - как раз, то что нужно.
Вложения
Read_2ALE.png
573.png

Re: Atmega128 + 64k RAM + CodeVisionAVR

Duhas » 21 сен 2009, 12:32

не защелкивается при низком, а разрешает выход.. 2 разных вещи )

2 рисунок 1 таблица LE Latch Enable.. Active HIGH


cron
Rambler\'s Top100 Mail.ru counter