Перейти к содержанию
    

public32

Участник
  • Постов

    5
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. AT89S8252

    Извиняюсь, может не к месту уже... у меня SPI на аналогичном чипе заработал стабильно только после добавления сопротивлений в линии SCLK, MISO и MOSI. добавил порядка 200 Ом. Тоже поначалу думал, что проблема в коде.
  2. Баловался я ШИМом на именно этом контроллере (AT89S8253), когда пытался его подружить с акселерометром ADXL202AE пытался идти двумя путями: сначала завел 2 шим вывода акселерометра на INT0 и INT1 контроллера и прописал обработчики прерываний по приходу 1 и срезу, но времени на обработку основного кода (передача по SPI и вывод на LCD) практически не оставалось, поэтому схема частенько висла. Тогда решил сделать по другому - запустил таймер и программно ждал фронты и срезы шим: по фронтам запоминал текущее значение, по срезам тоже и вычисляя разницу - выводил значения на экран и по SPI отсылал :) Так работало... были еще идеи - если надо могу коды поискать. А насчет стабильности... требования Вы предъявляете достаточно жесткие, но в большинстве задач усреднение классическое или медианное - значительно облегчает жизнь... мне помогло по 6 отсчетам усреднение...
  3. MEGA128 + USB на USBN9604

    спасибо большое! да, все более-менее понятно... язык он и в Африке язык :) У меня такое ощущение, что я не ту емкость взял на кристалл... было при 22 пФ и при 18 пФ - сейчас купил 15 (как в даташите) и 39 (встречал в инете на схемах)... может пойдет... блин действительно :) 2005 :) уже отчаяние бьет потихоньку... медленно склоняюсь к покупке ftdi... (( пытался частоту посмотреть на осциллографе, но из-за его входного импеданса в 50 Ом :) ... частота получилась порядка 200 Гц... долго не мог поверить глазам, пока про 50Ом не вспомнил :)
  4. MEGA128 + USB на USBN9604

    покупал в чипе-дипе http://www.chipdip.ru/product0/959352017.aspx а кусочка кода с инициализацией устройства не осталось? мне бы инициализацию пройти... с endpointами разберемся :)
  5. MEGA128 + USB на USBN9604

    Друзья, уже с неделю мучаюсь с usbn9604, подружить его пытаюсь с at89s8253 (знаю, что ядро не avr, но здесь меня больше вопрос интерфейса волнует). использовал примеры UsbMasters... Проблема в следующем - насколько я понимаю, в процессе инициализации в регистр адреса FAR не встает бит AD_EN (0x80), как следствие, устройство не отвечает хосту и на компе вылезает надпись, подключено новое устройство, устройство работает не правильно (не опознано). на моей плате есть рабочий ЖК - туда вывожу состояния регистров (они читаются - т.е. функции USB_WR и USB_RD работают). когда вставляю кабель в комп у устройства начинают срабатывать прерывания по алтернативному регистру, но суть события заключается либо в окончании пакета (EOP - 0x08 в регистре ALTEV) либо вообще непонятно что (0x00 в регистре ALTEV). Точнее так - сначала где-то с пару секунд висит EOP (т.е. постоянно срабатывает), а через пару секунд на компе вылезает надпись, что не опознано устройство и в ALTEV приходит только 0x00. Если я все правильно понимаю - проблема в инициализации где-то, т.к. регистр FAR из состояния 0x00 не выходит в принципе (даже когда на всякий случай добавил USB_WR(FAR,0x80) в конце инициализации - в FAR остался 0x00)... Нифига понять не могу что делать :) или куда посмотреть еще... прям ступор какой-то... привожу из кода функцию инициализации и на всякий функции USB_WR и USB_RD: void Init_USBN9604(void) { unsigned char c[8]; unsigned char Event; usb_cfg = 0; address = 0; USB_WR(MCNTRL,SRST); //Инициируем програмный сброс USBN9604 while(USB_RD(MCNTRL)&SRST); // ожидаем окончания сброса USB_WR(MCNTRL,VGE+INT_L_P);//Выбираем режим для INTR - Low Push Pull, включаем 3.3B Voltage Regulator NOP(0x4000); // функция задержки - название из асма позаимствовано :) if((USB_RD(RID)&0x0f)!=0x02) LCDPuts(0,4,"RID"); // чтение идентификатора устройства - если там не все в порядке - на экран сообщение USB_WR(FAR,AD_EN+0x00); //Устанавливаем у функции Default address ВОТ ЗДЕСЬ НАЧИНАЮТСЯ ПРОБЛЕМЫ USB_WR(EPC0, 0x00); //Endpoint 0 Normal operation USB_WR(NAKMSK,NAK_O0+NAK_I3); //Разрешаем прерывания по NAK событиям USB_WR(RXMSK,RXFIFO0+RXFIFO3); //Разрешаем прерывания по RX событиям USB_WR(TXMSK,TXFIFO0+TXFIFO3); //Разрешаем прерывания по TX событиям USB_WR(ALTMSK,SD3+SD5+RESET_A); //Разрешаем прерывания по ALT событиям - таймауты и перезапуск от хоста USB_WR(MAMSK,(INTR_E+RX_EV+NAK+TX_EV+ALT)); //Разрешаем прерывания глобально FLUSHTX0(); //Очищаем TXFIFO0 и запрещаем выдачу из него данных USB_WR(RXC0,RX_EN); //Разрешаем прием данных в Endpoint0 USB_WR(NFSR,OPR_ST); //Переходим в Operational State USB_WR(MCNTRL,VGE+INT_L_P+NAT); //Устанавливаем напряжение, уровень прерывания и запускаемся :) USB_RD(ALTEV); //очищаем буфер альтернативных событий Event=USB_RD(FAR); // проверяем адресный регистр и всегда обнаруживаем там 0x00 (((((((((( sprintf(c,"F%d ",(int)Event); LCDPuts(0,1,c); } Функции общения с чипом: void USB_WR(char U_ADDR,char U_DATA) { SETBIT(P3,ALE); /*Устанавливаем ALE в 1 */ CLRBIT(P3,CS); /*Устанавливаем CS в 0 Выбираем USBN9604*/ NOP(10); P1=U_ADDR; /*Выдаем адрес регистра*/ NOP(50); CLRBIT(P3,ALE); /*Сбрасываем ALE в '0', защелкивая адрес*/ CLRBIT(P3,WR); /*Сбрасываем WR в '0', инициируя запись*/ NOP(10); P1=U_DATA; /*Выставляем на шину данные*/ NOP(50); SETBIT(P3,WR); /* Защелкиваем данные '1' на WR*/ SETBIT(P3,CS); /* Устанавливаем CS в '1' - отключаем микросхему*/ } unsigned char USB_RD(char U_ADDR) { char U_DATA; CLRBIT(P3,CS); /*Устанавливаем CS в 0 Выбираем USBN9604*/ SETBIT(P3,ALE); /*Устанавливаем A0 в 1 */ CLRBIT(P3,WR); /*Сбрасываем WR в '0', инициируя запись*/ NOP(50); P1=U_ADDR; /*Выдаем адрес регистра*/ SETBIT(P3,WR); /* Защелкиваем адрес '1' на WR*/ CLRBIT(P3,ALE); /*Устанавливаем A0 в 0 */ CLRBIT(P3,RD); /*Сбрасываем RD в '0', инициируя чтение*/ NOP(50); U_DATA=P1; /*Считываем данные с шины*/ SETBIT(P3,RD); /* Защелкиваем данные '1' на RD*/ SETBIT(P3,CS); /* Устанавливаем CS в '1' - отключаем микросхему*/ return(U_DATA); } Пожалуйста помогите - хоть скажите куда смотреть... весь инет уже облазил ((( обещаю отдельной темой в 8051 выложить проект :) я тут еще один вещь заметил: написал в тексте для проверки USB_WR(NAKMSK,0x55); (когда прочитал и на дисплей вывел - пришло только 0x05) а после этого написал USB_WR(NAKMSK,0xaa); (когда прочитал и на дисплей вывел - пришло только 0x0a) получается у меня со старшими разрядами что-то... может с генератором что... у меня стоит резонатор на 24 МГц и конденсаторы по 18пФ (про мегаомный резистор в параллель - не забыл).
×
×
  • Создать...