Vitaliy_ARM
Свой-
Постов
508 -
Зарегистрирован
-
Посещение
Весь контент Vitaliy_ARM
-
Китайцы разные бывают. Посмотрите www.pcbway.com. Там многие заказывают и делают, по их словам, за дорма даже несколько штук. В России подготовка производства стоить только от 3000р. Сам не заказывал, поэтому на 100% не уверен.
- 27 ответов
-
- stm32f429
- rgb интерфейс
-
(и ещё 1 )
C тегом:
-
Encoder на TIM3 на STM32F072RBT6
Vitaliy_ARM ответил Vitaliy_ARM тема в STM
Я видел эту статью, я использую 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; } }- 2 ответа
-
- stm32f072rbt6
- tim3
-
(и ещё 1 )
C тегом:
-
Encoder на TIM3 на STM32F072RBT6
Vitaliy_ARM опубликовал тема в STM
Теряю уже третий день над подключением энкодера к 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 }- 2 ответа
-
- stm32f072rbt6
- tim3
-
(и ещё 1 )
C тегом:
-
AT45DB081D to AT45DB081Е
Vitaliy_ARM ответил Vitaliy_ARM тема в ARM
Код чтения статуса я исправил на двухбайтовый и исправил проверку EPE бита. Но результат записи с флешкой тот-же. Сегодня утром я пришел и начал тестировать эту флешку, первые 10 раз зашилась без проблем. Потом начала глючить один раз из 5 записей, потом чаще. И в итоге после записи 40 раз она сходит с ума и уже не пишется без ошибок. Если прибор полежит без питания несколько часов, она опять начинает шиться без ошибок. Какая-то ерунда ... Первый раз такое встречаю за 10 лет работы. Одна партия была куплена на DigiKey, вторая в Компеле. Ведут себя примерно одинаково. В общем вопрос работы флешки AT45DB081E в корпусе SO-8 пока открыт. P.S.: Мы нашли уже другой способ избавиться от проблемы. Применили алгоритм сжатия данных и запихнули коэффициенты в сжатом виде в микроконтроллер. Это решение даже лучше, чем применять внешнюю микросхему. Но вопрос глючности флешки это не решает. -
AT45DB081D to AT45DB081Е
Vitaliy_ARM ответил Vitaliy_ARM тема в ARM
Спасибо, заменил. Но это никак на ситуацию не повлияло. Глючит также. У них первый регистр статуса совместимый, наверное, теоретически, должен быть совместим и по коду. Это хорошее замечание, если у кого-то используется с AVR, могут наступить на грабли. Это немного другая флешка, фирмы SST. Похоже на чтение регистра статуса. У меня также функция ожидает завершения операции записи при помощи чтения регистра статуса и проверки соответствующего бита. -
AT45DB081D to AT45DB081Е
Vitaliy_ARM ответил Vitaliy_ARM тема в ARM
Да, конечно. 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 , но тут другая распиновка. Устройства уже выпущены и радикально переделывать что-то не особо хочется. -
AT45DB081D to AT45DB081Е
Vitaliy_ARM опубликовал тема в ARM
Доброе время! Было в свое время разработано устройство на микроконтроллере 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; } -
LPC4357-EVB
Vitaliy_ARM ответил Vitaliy_ARM тема в ARM
Пардон, mihailovsky©pochta.ru (букву К лишнюю написал) -
LPC4357-EVB
Vitaliy_ARM ответил Vitaliy_ARM тема в ARM
Большое спасибо! Мой адрес mikhailovsky(собака)pochta.ru -
LPC4357-EVB
Vitaliy_ARM ответил Vitaliy_ARM тема в ARM
В том то и дело, что все ссылки, что там указаны, битые! Даже схемы на эту плату получить не могу. Единственно что удалось получить - пару примеров с LPCWire.com c EmWin. Люди отзовитесь, у кого-то наверняка есть хотя бы схема!? Буду рад хоть этому. -
LPC4357-EVB
Vitaliy_ARM опубликовал тема в ARM
Купил плату в компеле: http://www.element14.com/community/docs/DO...development-kit Плата пришла без диска. На сайте производителя все ссылки со схемами и примерами битые. Если кто имеет это все или скачал ранее, поделитесь плиз!! Моя почта: mikhailovsky(собака)pochta.ru. Больше всего интересует схема этого кита. -
Подскажите, у меня имеется линукс без Framebufffer'а и без X-ов (opensource linux ZedBoard), будут ли работать консольные приложения Qt4 под этот линукс???
-
Разобрался с настройкой среды под 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? Кто уже разобрался, разъясните пожалуйста ход действий?
-
Установил среду Vivado 2013.1 для этой платы под Ubuntu 12.10 x64. Все стало почти без проблем. Только драйвер для отладчика не стал. После запуска и нажатия на кнопку Сreate New Project, программа выдает ошибку. Все остальные кнопки работают исправно. Может кто подскажет, что делать в этом случае?
-
Понятно, спасибо за инфо. В общем все замечательно. Есть почти все. Для полного счастья не хватает 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:
-
Спасибо всем за ответы. Похоже это то, что надо. Скачал все по этой ссылке, теперь буду разбираться. На сайте производителя есть несколько примеров гуя под Qt4 и описан принцип сборки этой среды. Не совсем понял, что с поддержкой OpenGL ES и при помощи чего (Framebuffer или QEMU) выводится графика в этом линуксе.Сам никогда до этого не сталкивался с Embedded Linux, поэтому просьба просветить ). Хотелось бы понять, можно ли в конечном итоге получить подобие этого: http://www.youtube.com/watch?v=kP7uvOu9hoQ Приложение пишутся на десктопе, а запускаются удаленно в режиме отладки через gdb сервер на ZedBoard'e. Я про нее и писал. Жудко жручая система + малось кривовастая. Зато с разработкой приложений проблем нет. Кстати, для информации, образ надо копировать на SD карту именно фирмы SanDisk, с другими не стартует.Боюсь, мне эта система не подойдет.
-
Приобрел плату: 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 процентов от каждого ядра в режиме простоя. Боюсь, что это слишком жирно для ОС в моей задаче.
-
В том то и дело, может где-то флаг надо взвести, в ip-заголовке, чтобы шлюз понимал, что этот пакет не для него.
-
Запустил на шлюзе две копии WireShark на оба интерфейса и смотрю, как идут пакеты. Дело в том, что устройство отвечает тому, кто к ней обращается. В данном случае пакет к устройству пришел от шлюза и отличить, чей это пакет, шлюза или компьютера, устройство не может. Поэтому в адресе пакета фигурирует шлюз. Это мне и не понятно, почему шлюз посылает устройству пакет от себя, а не с адресом компьютера?
-
Как работает маршрутизатор Ethernet пакетов?
Vitaliy_ARM опубликовал тема в Интерфейсы
Всем добрый день! Есть устройство, которое работает в одной локальной сети с компьютером. Т.е. на компьютере установлено ПО и устройство воткнуто в него через Ethernet - кабель. Если устройство подключено к шлюзу и программа обращается к устройству из другой подсети через шлюз, то оно не работает. Схема прохождения IP-пакетов показана в приложении. Подскажите, в чем проблема потери пакета после шлюза? -
Если имелся ввиду код фильтра, то каким образом это сделать, поделитесь ссылкой?
-
Fast FIR 16 taps
Vitaliy_ARM опубликовал тема в Языки проектирования на ПЛИС (FPGA)
Тактовая частота сигнала с 14-бит АЦП = 160 МГц, после DDC нужно получить полосу фильтра 8-10 МГц для приема FSK с такой же полосой. В итоге схема такая CORDIC->CIC5(прореживание 8)->FIR(16 Taps, прореживание 2). В итоге имеем полосу +/- 5 МГц. Все реализовано кроме фильтра FIR. Подскажите каким образом надо его реализовать, чтобы фильтр был работоспособен в EP3C25E? -
LPC1778 + KSZ8041NL
Vitaliy_ARM ответил Vitaliy_ARM тема в ARM
Спасибо за наводку. В общем ошибка была в том, что неправильно инициализировался процессор. В режиме 100 Мбит FULL Duplex процессор у меня инициализировался в HALF Duplex. После исправления кода все заработало как надо. -
LPC1778 + KSZ8041NL
Vitaliy_ARM ответил Vitaliy_ARM тема в ARM
К сожалению не совсем так, PRODUCE убегающий индекс, а CONSUME - догоняющий. Инкрементом PRODUCE мы запускаем DMA, который начинает отправлять пакет. По завершению отправки этого пакета DMA инкрементирует CONSUME индекс. Т.е. DMA будет передавать пакеты до тех пор, пока индексы не равны. В Вашем случае дается разрешение заполнить TXDESCRIPTORNUMBER дескрипторов, пока DMA отправляет один пакет. В моем случае я следующий покет не отправлю, пока не отправился предыдущий. Проблема осталась. Начинаю думать, что это PHY не отдает команды процессору об успешной отправке, в то время, как он отправить данные не успел. Разбираюсь дальше... -
LPC1778 + KSZ8041NL
Vitaliy_ARM опубликовал тема в ARM
Всем доброго времени. Сегодня выявил следующий баг. Когда запускаю эту функцию в цикле, например из 15 пакетов, то половина пакетов не отправляется, это хорошо видно при помощи WireShark. Стоит между отправкой поставить задержку в 100 мкс, то после этого все пакеты отправляются исправно. Т.е. похоже происходит "нахлест" между пакетами. Подскажите, в чем может быть дело? Ошибка процессора или PHY?