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

Vitaliy_ARM

Свой
  • Постов

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

  • Посещение

Весь контент Vitaliy_ARM


  1. Китайцы разные бывают. Посмотрите www.pcbway.com. Там многие заказывают и делают, по их словам, за дорма даже несколько штук. В России подготовка производства стоить только от 3000р. Сам не заказывал, поэтому на 100% не уверен.
  2. Я видел эту статью, я использую HAL и проект был сгенерирован при помощи CubeMX. Перечитал интернет и вроде бы все сделано правильно, но таймер не хочет считать ... До сих пор не работает. Временно сделал через poling, так все работает. В таком случае обычно спасает сравнение дамба регистров таймера с рабочим проектом. Если у кого-то работает таймер в режиме энкодера, можете ли вы дать дамп на регистры таймера и GPIO? void opticEnc::exe() { nextState = readPins(); switch(state) { case 0: if(nextState == 0x1) { val++; state = nextState; } else if(nextState == 0x2) { val--; state = nextState; } break; case 1: if(nextState == 0x3) { val++; state = nextState; } else if(nextState == 0x0) { val--; state = nextState; } break; case 2: if(nextState == 0x0) { val++; state = nextState; } else if(nextState == 0x3) { val--; state = nextState; } break; case 3: if(nextState == 0x2) { val++; state = nextState; } else if(nextState == 0x1) { val--; state = nextState; } break; default: break; } }
  3. Encoder на TIM3 на STM32F072RBT6

    Теряю уже третий день над подключением энкодера к STM32F072RBT6. Проект был сгенерирован CubeMX и немного исправлена инициализация таймера 3 для режима энкодера. Энкодер припаян к PC6 и PC7. Импульсы на вход поступают (изменения отображаются в регистре IDR в режиме откладки), но в регистре CNT всегда 0. Я отладчиком записал туда значение 2, но это ни на что не влияет. Только показывает, что все записывается и таймер работает, но не считает импульсы. Подскажите, куда еще копать? Ниже привел код инициализации и дампы регистров таймера и GPIOC. Вот код инициализации Таймера. /* TIM3 init function */ void MX_TIM3_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABLE(); __TIM3_CLK_ENABLE(); /*Configure GPIO pins : ENC0_I_Pin ENC0_Q_Pin */ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM3; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); htim3.Instance = TIM3; htim3.Init.Prescaler = 0; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 0xFFFF; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; encoder.EncoderMode = TIM_ENCODERMODE_TI12; encoder.IC1Filter = 0x0f; encoder.IC1Polarity = TIM_INPUTCHANNELPOLARITY_RISING; encoder.IC1Prescaler = TIM_ICPSC_DIV4; encoder.IC1Selection = TIM_ICSELECTION_DIRECTTI; encoder.IC2Filter = 0x0f; encoder.IC2Polarity = TIM_INPUTCHANNELPOLARITY_FALLING; encoder.IC2Prescaler = TIM_ICPSC_DIV4; encoder.IC2Selection = TIM_ICSELECTION_DIRECTTI; HAL_TIM_Encoder_Init(&htim3, &encoder); HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_1); TIM3->CR1 = 1; // Enable the counter }
  4. Код чтения статуса я исправил на двухбайтовый и исправил проверку EPE бита. Но результат записи с флешкой тот-же. Сегодня утром я пришел и начал тестировать эту флешку, первые 10 раз зашилась без проблем. Потом начала глючить один раз из 5 записей, потом чаще. И в итоге после записи 40 раз она сходит с ума и уже не пишется без ошибок. Если прибор полежит без питания несколько часов, она опять начинает шиться без ошибок. Какая-то ерунда ... Первый раз такое встречаю за 10 лет работы. Одна партия была куплена на DigiKey, вторая в Компеле. Ведут себя примерно одинаково. В общем вопрос работы флешки AT45DB081E в корпусе SO-8 пока открыт. P.S.: Мы нашли уже другой способ избавиться от проблемы. Применили алгоритм сжатия данных и запихнули коэффициенты в сжатом виде в микроконтроллер. Это решение даже лучше, чем применять внешнюю микросхему. Но вопрос глючности флешки это не решает.
  5. Спасибо, заменил. Но это никак на ситуацию не повлияло. Глючит также. У них первый регистр статуса совместимый, наверное, теоретически, должен быть совместим и по коду. Это хорошее замечание, если у кого-то используется с AVR, могут наступить на грабли. Это немного другая флешка, фирмы SST. Похоже на чтение регистра статуса. У меня также функция ожидает завершения операции записи при помощи чтения регистра статуса и проверки соответствующего бита.
  6. Да, конечно. CS опускаю перед записью и поднимаю после окончания. Я привел пример кода записи в первом посте. Привожу код функции status() ниже. Если впаять 081D, то глюки пропадают принципиально. Что только не делал, не могу добиться 100% нормальной записи. Если запись была совершена некорректно, бит EPE взводится и бывает, что я эту же страницу не могу перезаписать, при попытки использовать 82-ю команду, данные не записываются корректно и взводится этот бит. Что делать, если он взводится, в мануале не написано ... Документ этот видел. Эти команды (0x82 и 0xD2) у них не отличаются. Должно все работать одинаково, но не работает. P.S.: У меня напряжение питания флешки 3,3В, но не думаю, что это причина. /************************************************************** * чтение регистра статуса *************************************************************/ BYTE at45db081d::status() { // Status Register Read SET_AT45D_CS(); // set CS to LOW reg[0] = 0xD7; reg[1] = 0x00; pSpi->transfer(reg, 2); CLR_AT45D_CS(); // set CS to HIGH return reg[1]; } P.S.2: Сейчас есть более дешевая альтернатива этой флешки: http://www.spansion.com/Support/Applicatio..._S25FL-K_AN.pdf , но тут другая распиновка. Устройства уже выпущены и радикально переделывать что-то не особо хочется.
  7. AT45DB081D to AT45DB081Е

    Доброе время! Было в свое время разработано устройство на микроконтроллере LPC1778 и флешке AT45DB081D-SSU. Последняя использовалась для хранения таблиц с коэффициентами. Эту флешку постранично могло обновлять программное обеспечение. Запись во флешку делается при помощи команды 0x82 (Main Memory Page Program through Buffer 1 with Built-In Erase), для чтения использую 0xD2 (Main Memory Page Read). Все работало замечательно, пока AT45DB081D-SSU не сняли с производства. На замену ей пришла AT45DB081E от Adesto, которую мы установили в новую партию. И тут начались чудеса. После создания тестовых программ, выяснилось, что данные записываются некорректно, причем может во всей памяти записаться некорректно один байт, а может и вся страница, а может и все нормально записаться. Причем это не от чего не зависит, глючит спонтанно. Даже ввели верификацию страниц и повторную запись. Однако выяснилось, что контрольная сумма данных не совпадала, даже когда постраничная верификация и перезаписть проходила на ОК. Т.е. запись одной страницы может убить данных в другой. Думали, что флешки бракованные. Купили в проверенном месте - тоже самое. Подскажите, в чем может быть причина? Функция записи страницы приведена ниже. (используется 264 байтная страница) BOOL at45db081d::write264(WORD page, BYTE *pBuf) { unsigned int i; if(page > MAX_PAGES) return FALSE;// FALSE; SET_AT45D_CS(); reg[0] = 0x82; reg[1] = page >> 7; reg[2] = page << 1; reg[3] = 0x00; pSpi->transfer(reg, 4); pSpi->transfer(buf, 264); CLR_AT45D_CS(); for(i = 0xFFFFFFFF; i > 0; i--) { if(status() & 0x80) break; } if(i == 0) return FALSE; if(status() & 0x20) // EPE bit return FALSE; return TRUE; }
  8. LPC4357-EVB

    Пардон, mihailovsky©pochta.ru (букву К лишнюю написал)
  9. LPC4357-EVB

    Большое спасибо! Мой адрес mikhailovsky(собака)pochta.ru
  10. LPC4357-EVB

    В том то и дело, что все ссылки, что там указаны, битые! Даже схемы на эту плату получить не могу. Единственно что удалось получить - пару примеров с LPCWire.com c EmWin. Люди отзовитесь, у кого-то наверняка есть хотя бы схема!? Буду рад хоть этому.
  11. LPC4357-EVB

    Купил плату в компеле: http://www.element14.com/community/docs/DO...development-kit Плата пришла без диска. На сайте производителя все ссылки со схемами и примерами битые. Если кто имеет это все или скачал ранее, поделитесь плиз!! Моя почта: mikhailovsky(собака)pochta.ru. Больше всего интересует схема этого кита.
  12. Подскажите, у меня имеется линукс без Framebufffer'а и без X-ов (opensource linux ZedBoard), будут ли работать консольные приложения Qt4 под этот линукс???
  13. Разобрался с настройкой среды под Ubuntu. Для работы ставить надо версию 12.04 x64. Тогда многие проблемы сразу исчезают. Причем перед установкой среды надо переключить dash на bash, это описано здесь: http://www.zedboard.org/content/arm-xilinx...eems-be-missing Ядро пока не компилировал, но разобрался как это сделать. Поставил пока готовый линукс, который скачал http://www.wiki.xilinx.com/Zynq+14.5+-+2013.1+Release . В архиве есть скомпилированная версия специально для ZedBoard. С XSDK разобрался и писать приложения под ней для линукса даволно просто, поразила возможность отладки приложений через Ethetnet (для встраиваемых систем это очень удобно), написал несколько, включая и hello_world. Qt4 удалось скомпилировать, удалось настроить QtCreator, однако на плате консольные приложения запускаться не хотят из-за того, что не установил библиотеки Qt4 туда, как и куда это сделать, пока еще не понял. В XPS есть возможность создавать простые периферийные устройства для PL (FPGA-части). Одно из которых - это банк 32-бит регистров до 32 штук. Работа с ними из процессорной части весьма проста. Далее пользовательский HDL файл можно модифицировать под себя. Собственно вопрос, как и где после этого назначить ножки в PL? Кто уже разобрался, разъясните пожалуйста ход действий?
  14. Установил среду Vivado 2013.1 для этой платы под Ubuntu 12.10 x64. Все стало почти без проблем. Только драйвер для отладчика не стал. После запуска и нажатия на кнопку Сreate New Project, программа выдает ошибку. Все остальные кнопки работают исправно. Может кто подскажет, что делать в этом случае?
  15. Понятно, спасибо за инфо. В общем все замечательно. Есть почти все. Для полного счастья не хватает OpenGL ES, нет на борту видяхи. Нашел, что есть вот такое решение: http://www.logicbricks.com/logicBRICKS/Ref...uick-Start.aspx GPU для Zynq. Но это уже за деньги судя по всему. По запросу могут предоставить OpenGL ES 1.1 библиотеки. Посмотрел, что я использовал сборку от Linaro: http://www.xilinx.com/university/zynq/demos/index.htm. Скачал Xilinux от Xilibus. Буду пробовать. Саму среду разработки пока не ставил, но для запуска придется. Пора переходить к разработке. :rolleyes:
  16. Спасибо всем за ответы. Похоже это то, что надо. Скачал все по этой ссылке, теперь буду разбираться. На сайте производителя есть несколько примеров гуя под Qt4 и описан принцип сборки этой среды. Не совсем понял, что с поддержкой OpenGL ES и при помощи чего (Framebuffer или QEMU) выводится графика в этом линуксе.Сам никогда до этого не сталкивался с Embedded Linux, поэтому просьба просветить ). Хотелось бы понять, можно ли в конечном итоге получить подобие этого: http://www.youtube.com/watch?v=kP7uvOu9hoQ Приложение пишутся на десктопе, а запускаются удаленно в режиме отладки через gdb сервер на ZedBoard'e. Я про нее и писал. Жудко жручая система + малось кривовастая. Зато с разработкой приложений проблем нет. Кстати, для информации, образ надо копировать на SD карту именно фирмы SanDisk, с другими не стартует.Боюсь, мне эта система не подойдет.
  17. Приобрел плату: zedboard.org С Xilinx до этого не работал. Изначально стоит задача сделать устройство сбора данных со скоростного АЦП (100 МГц, 14 бит), сжатие их и отрисовка в виде графика на TFT дисплее 7inch. Для этой задачи и была куплена ZedBoard. Задача состоит из нескольких этапов. 1. Прошивка для PL (FPGA) части, которая берет данные с АЦП, жмет и кладет в буфер DDR. 2. Микроконтроллер под управлением ОС с красивым интерфейсом отрисовывает GUI и рисует график из полученных данных. 3. Контроллер иногда должен выполнять DSP-обработку данных. С 1-м этапом все понятно, опыт программирования ПЛИС имеется. Со вторым этапом не понятно, какую ОС нужно выбрать для "красивого" софта. Может есть легкий Linux с FrameBuffer, на котором можно запускать приложения Qt4 ????? P.S.: Запустил пример http://www.zedboard.org/node/428, Ubuntu 11.10 для ZYNQ от Linaro. Здесь с написанием софта проблем быть не должно, однако сама ОС ест по 25 процентов от каждого ядра в режиме простоя. Боюсь, что это слишком жирно для ОС в моей задаче.
  18. В том то и дело, может где-то флаг надо взвести, в ip-заголовке, чтобы шлюз понимал, что этот пакет не для него.
  19. Запустил на шлюзе две копии WireShark на оба интерфейса и смотрю, как идут пакеты. Дело в том, что устройство отвечает тому, кто к ней обращается. В данном случае пакет к устройству пришел от шлюза и отличить, чей это пакет, шлюза или компьютера, устройство не может. Поэтому в адресе пакета фигурирует шлюз. Это мне и не понятно, почему шлюз посылает устройству пакет от себя, а не с адресом компьютера?
  20. Всем добрый день! Есть устройство, которое работает в одной локальной сети с компьютером. Т.е. на компьютере установлено ПО и устройство воткнуто в него через Ethernet - кабель. Если устройство подключено к шлюзу и программа обращается к устройству из другой подсети через шлюз, то оно не работает. Схема прохождения IP-пакетов показана в приложении. Подскажите, в чем проблема потери пакета после шлюза?
  21. Если имелся ввиду код фильтра, то каким образом это сделать, поделитесь ссылкой?
  22. Тактовая частота сигнала с 14-бит АЦП = 160 МГц, после DDC нужно получить полосу фильтра 8-10 МГц для приема FSK с такой же полосой. В итоге схема такая CORDIC->CIC5(прореживание 8)->FIR(16 Taps, прореживание 2). В итоге имеем полосу +/- 5 МГц. Все реализовано кроме фильтра FIR. Подскажите каким образом надо его реализовать, чтобы фильтр был работоспособен в EP3C25E?
  23. LPC1778 + KSZ8041NL

    Спасибо за наводку. В общем ошибка была в том, что неправильно инициализировался процессор. В режиме 100 Мбит FULL Duplex процессор у меня инициализировался в HALF Duplex. После исправления кода все заработало как надо.
  24. LPC1778 + KSZ8041NL

    К сожалению не совсем так, PRODUCE убегающий индекс, а CONSUME - догоняющий. Инкрементом PRODUCE мы запускаем DMA, который начинает отправлять пакет. По завершению отправки этого пакета DMA инкрементирует CONSUME индекс. Т.е. DMA будет передавать пакеты до тех пор, пока индексы не равны. В Вашем случае дается разрешение заполнить TXDESCRIPTORNUMBER дескрипторов, пока DMA отправляет один пакет. В моем случае я следующий покет не отправлю, пока не отправился предыдущий. Проблема осталась. Начинаю думать, что это PHY не отдает команды процессору об успешной отправке, в то время, как он отправить данные не успел. Разбираюсь дальше...
  25. LPC1778 + KSZ8041NL

    Всем доброго времени. Сегодня выявил следующий баг. Когда запускаю эту функцию в цикле, например из 15 пакетов, то половина пакетов не отправляется, это хорошо видно при помощи WireShark. Стоит между отправкой поставить задержку в 100 мкс, то после этого все пакеты отправляются исправно. Т.е. похоже происходит "нахлест" между пакетами. Подскажите, в чем может быть дело? Ошибка процессора или PHY?
×
×
  • Создать...