реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Совместное использование ATMega128L и CS8900A-CQ3, При совместном включении CS8900A-CQ3 с ATMega128L микроконтроллер ATMe
jt777
сообщение Sep 18 2007, 12:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 612



Решил подключить ATMega128 к локальной сети. Купил олимексовскую плату CS8900A-h, с установленным контроллером CS8900A-CQ3. ATMega128 без подключенной к ней плате CS8900A-h работает нормально, но при подключенни CS8900A-h, питание падает с 3.3 В до 3.1В и Mega выключается. Пробовал поднять питание до номинального уровня, но не помогло. Пробовал просто подать питание на плату CS8900A-h, от того же источника питания, что питается Mega, но Mega все равно выключается. Не могу понять в чем проблема. Кто знает подскажите.
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 18 2007, 15:19
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



На какой частоте у вас мега?
Если частота ниже 8Mhz, то чип может работать влоть до 2.7В. А проблема с отключением на 3.1В, может быть связана с BOD, либо если есть внешний супервизор питания то с ним. Варианты решения проблемы:
1. Отключить BOD (или внешний супервизор)
2. Повысить мощность источника питания, чтобы не было просадки питания.

Если же чип у вас на частоте выше 8Mhz, то он не обязан вообще работать от 3.3V. Решение:
Запитать от 5V.
Go to the top of the page
 
+Quote Post
jt777
сообщение Sep 19 2007, 10:34
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 612



Мега работает на 4 МГц. Напряжение питание довел до уровня 3,25 В, Но мега все равно отключается как только подключаю CS8900A-H. crying.gif
Go to the top of the page
 
+Quote Post
Peter Pavlov
сообщение Sep 23 2007, 18:10
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 22-09-07
Пользователь №: 30 755



Цитата(jt777 @ Sep 19 2007, 13:34) *
Мега работает на 4 МГц. Напряжение питание довел до уровня 3,25 В, Но мега все равно отключается как только подключаю CS8900A-H. crying.gif

Проверьте все супервизоры если есть таковые, может один пичек проходит в момент старта и все ресетиться. И почему так падает напряжение??? Толщина проводника или слабость блока питания?
Go to the top of the page
 
+Quote Post
jt777
сообщение Sep 26 2007, 05:16
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 612



Проблему решил.Проблема действительно была в блоке питания. Подключил осцилограф и оказалось, что примерно через 250 мкс, напряжение питания падает до 1.2В, что приводит к отключению Меги. Всем спасибо, что помогли. Теперь буду пытаться заставить CS8900 передавать пакеты. Еще раз большое спасибо.
Go to the top of the page
 
+Quote Post
jt777
сообщение Jan 5 2008, 14:50
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 612



Подключил CS8900A к ATMega128, написал функции чтения/записи для работы с CS8900A, все работает нормально, удалось передать кадр в сеть и удачно получить на своем компьютере. Начал писать функции для того что бы прочитать принятый кадр из CS8900A, тут та и начались проблемы. Начинаю пинговать свое устройство, читаю регистр статуса RxEvent, устанавливается флаг RxOK и флаг Broadcast, сигнализирующий что принят широковещательный запрос. Читаю RxStatus Word, тоже нормально считывается (читаю с порта 0), а дальше, когда начинаю считывать с того же порта 0 длину принятого кадра считывается 0. Читаю как положено сначала старший байт потом младший. Пробовал обращаться непосредственно к регистру RxLength, через указатель регистра тоже самое. Может кто с подобной проблемой сталкивался подскажите пожалуйста. Ниже привожу функцию которой пытаюсь прочитать данные из порта 0:

#define dir_data DDRD //направление шины данных
#define read_data PIND //Для чтения данных с шины данных
#define IOR (0b00010000)
#define IOW (0b00100000)

unsigned int ReadHB1ST8900(unsigned char Address)
{
unsigned int ReturnValue;
ReturnValue=0;
data = 0;
dir_data = 0x00; // настройка порта данный на ввод
addr = IOR | IOW | (Address + 1); // установка адреса. Старший байт
addr &= ~IOR; // строб чтения
delay_us(100);
ReturnValue = read_data;// читаю данные с шины данных
delay_us(10);
addr = IOR | IOW | Address; // установка адреса. Младший байт
ReturnValue =ReturnValue<<8; // сдвиг влево
addr &= ~IOR; // строб чтения
delay_us(100);
ReturnValue |= read_data; // читаю данные с шины данных. Получение младшего байта
delay_us(10);
addr |= IOR; // Завершаю процедуру чтения
dir_data = 0xff; // настройка порта данный на вывод

return ReturnValue;
}
Go to the top of the page
 
+Quote Post
Maddy
сообщение Jan 5 2008, 17:05
Сообщение #7


Участник
*

Группа: Validating
Сообщений: 56
Регистрация: 15-10-06
Пользователь №: 21 335



А в сторону avrlib'а посмотреть ? он правда CS8900 поддерживает - но может поможет ?
Procyon AVRlib

Сообщение отредактировал Maddy - Jan 5 2008, 17:06
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 6 2008, 21:56
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
Начинаю пинговать свое устройство, читаю регистр статуса RxEvent,

Тогда 0 в RxLength - ожидаемый результат, т.к. после чтения этого регистра emac выбрасывает текущий фрейм.

Reading the RxEvent register signals to the CS8900A that the host is finished with the current frame, and wants to start processing the next frame.

Поэтому читать надо RxStatus - потом RxLength и только после того как фрейм вычитан и обработан - прочитать RxEvent чтобы мак перешел к следующему фрейму.



PS: В вашей функции задержки в 10-100us не нужны, ну максимум вставить 1 NOP или продублировать обращение к порту. Мега дрыгает ногами медленнее сигналов ISA шины, так что задержки - лишние.

Ну и подключить CS89 к внешней шине не судьба была?
Чтение регистров было бы много проще:

Код
#define nic_ReadReg( addr )\
  (*(V8 *)(NIC_BASE + (addr)))
  
#define nic_WriteReg(addr, val)\
  (*(V8 *)(NIC_BASE + (addr)) = (val))
Go to the top of the page
 
+Quote Post
jt777
сообщение Jan 8 2008, 07:35
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 612



спасибо за предложение Уважаемый defunct, я попробовал то, что Вы говорите, но вот тут снова проблема, если я сначала читаю RxEvent и потом RxStatus, то в RxStatus как и положено точное значение RxEvent, затем я EEPROM меги читаю принитый фрейм, причем тоже читается и считавается он через 2 байта. т.е. читается 2 байта как положено принятого фрейма потом пропуск 2 принятых байт снова 2 байта и т.д. И, что еще интересно читаю я не как написано с Resive/Transmit Data (Port 0) потом с Port 1 и снова Port0 и т.д., а читается с начала с адреса 0002h (Port1), потом 0001h (Port0), снова 0001h и 0000h. По другому если читаю 0001h потом 0000h, 0001h и т.д. считывает 0. Я запутался окончательно. Скорее всего я, что то упустил, может ошибка в алгоритме? Алгоритм следующий:
1. Инициализация CS8900
1.1 Сброс CS8900;
1.2 Установка MAC адреса CS8900;
2. Настройка приемника
2.1 В RxCTL устанавливаю биты Promiscuous, Broadcast, CRCerrorA, вобшем устанавливаю все биты что бы любой кадр был принят;
3. Разрешаю баботу приемника.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 10 2008, 20:36
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(jt777 @ Jan 8 2008, 10:35) *
затем я EEPROM меги читаю принятый фрейм, причем тоже читается и считавается он через 2 байта. т.е. читается 2 байта как положено принятого фрейма потом пропуск 2 принятых байт снова 2 байта и т.д.

Странно, такое впечатление что у Вас что-то с адресами напутано или в железе или в программе.
Если работаете в режиме IO-Space, то порты у вас 16-ти разрядные. Было бы неплохо принимать не в eeprom, а в ОП меги, чтобы исключить побочный эффект медленной записи eeprom (если я правильно понял ваш пост).

Цитата
И, что еще интересно читаю я не как написано с Resive/Transmit Data (Port 0) потом с Port 1 и снова Port0 и т.д., а читается с начала с адреса 0002h (Port1), потом 0001h (Port0), снова 0001h и 0000h. По другому если читаю 0001h потом 0000h, 0001h и т.д. считывает 0.

??
В ДШ написано что, весь фрейм читать из порта 0 (0x0000)..

В "MemoryMode" фрейм лежит начиная с адреса 0x404

Цитата
1. Инициализация CS8900
....

Раз RxStatus показывает наличие фрейма, то с инициализацией надо полагать все Ок.
Go to the top of the page
 
+Quote Post
jt777
сообщение Jan 17 2008, 12:59
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 612



Начал смотреть аппартную часть, и возникло сомнение куда подключать пин SBHE, в одних схемах он подключен к питанию в дргих посажен на землю. В моем случае он подключен к питанию. Подскажите кто знает наверняка куда его сажать?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 02:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01437 секунд с 7
ELECTRONIX ©2004-2016