Jump to content

    

DmitryDI

Участник
  • Content Count

    67
  • Joined

  • Last visited

Everything posted by DmitryDI


  1. Пишу драйвер под QNX4. Возникла проблема, когда сеть рвется (выпал разъем) – срабатывает прерывание и устройство входит в режим Buss-off - данные принимает, но послать ничего не может. Помогает только перегрузка ПС. Вопрос таков: Как вернуться в нормальный режим после образования сети вновь? С уважением, Дейнека Дмитрий
  2. 1.Я установил плату PCI-1612BU. 2. установил джамперы 1,2 порт RS485 3,4 RS232 3. соединил разъемы 1 и 2 порта RS485 1 контакт у 1, 2 ко 2-му DB9 4. провел работу в Windows XP - все прекрасно работает - данные идут между 1 и 2 портом 5. запустил QNX 4.25 6. запустил свой драйвер (сам написал) - все прекрасно работает, но там у меня есть проблемки - тногда зависает PC из-за моего драйвера, поэтому решил использовать Ваш фирменный драйвер для QNX 4.25. 7.запустил ./Dev.seradv950 & - порты определились 8. отправляю в один порт ttyAP1 например, 5 байт 9. получаю в ttyAP2 только 1 байт 10. после того как закрываю портttyAP1 получаю в порт ttyAP2 остальные байты. 11. и так все время. На мой взгляд проблема в необходимости конфигурации драйвера или порта, но как это сделать ???
  3. STM32 Вопрос про I2C

    Ну и как получилось завести I2C? Может есть вариант правильной инициации?
  4. Цитата(asdlfjkajkltewljf @ May 19 2011, 13:40) давай дружить ) скажи номер аськи , удалось зашить, но на данный момент только вручную, с помощью arm-atollic-eabi-gdb спасибо, друг. ты спас меня от неминуемой гибели На здровье. ICQ 318817674
  5. Цитата(asdlfjkajkltewljf @ May 19 2011, 13:19) именно её и скачал. сейчас методом проб и ошибок выяснил, что нужно нажать reset на плате TE-STM32F107 в момент запуска gdbserver'а тогда сервер нормально загружается и ждет соединения. проект скомпилировал. как прошить не могу разобраться, что куда жать? при нажатии кнопки debug - все содержимое проекта заливается во флэш или рам (задается в свойчтвах) - у меня такая же плата - reset не требует
  6. SWD не поддерживался в старой версии Atollic 1.3. - в новой 2. - все работает скачай с сайта ATOLLIC версию lite 2.1.0
  7. Установи весию lite от Atollic - это тот же самый Eclipse - но с ним ST-LINK работает, проекты с Eclipse совместимы.
  8. Переход из IAR в Atollic TrueSTUDIO STM32

    Цитата(AHTOXA @ May 14 2011, 22:42) Проверьте имена обработчиков прерываний, чтоб совпадали с теми, что объявлены в таблице векторов. Сравнивал стартовые файлы с расширением *.s - имена совпадают. Там я не до конца понял о выборе устройства - по умолчанию ****CL, как и в IAR.
  9. В связи с переходом на более дешевое ПО пришлось переводить проекты из IAR в Atollic TrueSTUDIO. Все вроде бы работает – прерывания, таймеры, ... . Кроме порта САN (в IAR все работало) – не срабатывают прерывания, сигнал с порта не идет. Все библиотеки одинаковы. В чем может быть проблема?
  10. Цитата(andrei_moiseev @ Apr 14 2011, 21:11) olimp07 ваши ни мыло ни личный ящик не доступны напишите мне в личку свой имейл есть что обсудить. У меня есть большой опыт по работе с Bluetooth: - перепрошивка модулей Bluetooth (написание собственных профилей в Bluelab, изменение доступа к модулю – запрос дополнительных паролей, криптография) - разработка на основе данных модулей аппаратуры (медицинская, радиоуправление) Использовал: WML-C40, WML-C20, WML-C19, LMX9820 Для реализации Вашего проекта рекомендовал бы использовать готовые USB модули. Если не устраивает дальность связи – могу разработать и изготовить мощные модули с дальностью связи -100 м за 2-3 месяца (с тестированием). Могу разработать софт. или драйвер для ПС. С уважением, Дейнека Дмитрий Санкт-Петербург ICQ: 318-817-674 E-mail: deyneka @ list.ru
  11. CAN на STM32

    Всем спасибо за отклики - все заработало: правильные настройки .......................................... // 2. Enable ext. high frequency OSC RCC_HSEConfig(RCC_HSE_ON); // wait until the HSE is ready while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); // 3. Init PLL RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_4); // 100 MHz RCC_PLLCmd(ENABLE); // wait until the PLL is ready while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // 4. Set system clock divders RCC_ADCCLKConfig(RCC_PCLK2_Div8); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_HCLKConfig(RCC_SYSCLK_Div1); // Flash 1 wait state *(vu32 *)0x40022000 = 0x12; // 5. Clock system from PLL RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); ............................................................................. CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_5tq; CAN_InitStructure.CAN_BS2 = CAN_BS2_4tq; CAN_InitStructure.CAN_Prescaler = 5; Скорость = 100МГц/2/5/10 = 1 МГбит/с
  12. CAN на STM32

    Все сконфигурировал как в исходниках, но не работает. Чип STM32F107, кварц 25 Мгц, Нужен 1 МГбит/c Настройки CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_16tq; CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; CAN_InitStructure.CAN_Prescaler = 1; Скорость = 25 МГц/(1+16+8) = 1 МГбит/c Обмена данных с проверенным мастером нет. ??? Заранее спасибо за помощь. конфигурация полностью CODE void CAN_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure CAN1 and CAN2 IOs **********************************************/ /* GPIOB, GPIOD and AFIO clocks enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB, ENABLE); /* Configure CAN1 RX pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Configure CAN2 RX pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Configure CAN1 TX pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Configure CAN2 TX pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Remap CAN1 and CAN2 GPIOs */ GPIO_PinRemapConfig(GPIO_Remap2_CAN1 , ENABLE); GPIO_PinRemapConfig(GPIO_Remap_CAN2, ENABLE); /* Configure CAN1 and CAN2 **************************************************/ /* CAN1 and CAN2 Periph clocks enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1 | RCC_APB1Periph_CAN2, ENABLE); /* CAN1 and CAN2 register init */ CAN_DeInit(CAN1); CAN_DeInit(CAN2); /* Struct init*/ CAN_StructInit(&CAN_InitStructure); /* CAN1 and CAN2 cell init */ CAN_InitStructure.CAN_TTCM = DISABLE; CAN_InitStructure.CAN_ABOM = DISABLE; CAN_InitStructure.CAN_AWUM = DISABLE; CAN_InitStructure.CAN_NART = DISABLE; CAN_InitStructure.CAN_RFLM = DISABLE; CAN_InitStructure.CAN_TXFP = ENABLE; CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_16tq; CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; CAN_InitStructure.CAN_Prescaler = 1;//2 /*Initializes the CAN1 and CAN2 */ CAN_Init(CAN1, &CAN_InitStructure); CAN_Init(CAN2, &CAN_InitStructure); /* CAN1 filter init */ CAN_FilterInitStructure.CAN_FilterNumber = 1; CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;//CAN_FIFO0; CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; CAN_FilterInit(&CAN_FilterInitStructure); /* CAN2 filter init */ CAN_FilterInitStructure.CAN_FilterIdHigh =0x2460; CAN_FilterInitStructure.CAN_FilterNumber = 15; CAN_FilterInit(&CAN_FilterInitStructure); /* Transmit */ TxMessage.StdId = 0x01; TxMessage.ExtId = 0x01; TxMessage.RTR = CAN_RTR_DATA; TxMessage.IDE = CAN_ID_STD; TxMessage.DLC = 8; } /** * @brief Configures the NVIC for CAN. * @param None * @retval None */ void NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1; NVIC_Init(&NVIC_InitStructure); } int main() { NVIC_Config(); /* CANs configuration */ CAN_Config(); /* IT Configuration for CAN1 */ CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE); /* IT Configuration for CAN2 */ CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE); while(1) { TxMessage.Data[0] = 0x55; CAN_Transmit(CAN1, &TxMessage); Delay(1000); } }
  13. CAN на STM32

    Честно сказать – я все-таки не понял – связь скорости с системной частотой – почему в формуле появилась 2 : CAN_InitStructure.CAN_Prescaler = (_systemFrequency / 2 / baudRate / 9); // CAN_SJW_1tq + CAN_BS1_4tq + CAN_BS2_4tq
  14. Bus-off в sja1000

    Цитата(Andy Mozzhevilov @ Mar 5 2011, 10:16) For register access, two different modes have to be distinguished: · Reset mode · Operating mode. The reset mode (see Table 3, control register, bit Reset Request) is entered automatically after a hardware reset or when the controller enters the bus-off state (see Table 5, status register, bit Bus Status). The operating mode is activated by resetting of the reset request bit in the control register When the transmit error counter exceeds the limit of 255 [the bus status bit is set to logic 1 (bus-off)] the CAN controller will set the reset request bit to logic 1 (present) and an error interrupt is generated, if enabled. It will stay in this mode until the CPU clears the reset request bit. Once this is completed the CAN controller will wait the minimum protocol-defined time (128 occurrences of the bus-free signal). After that the bus status bit is cleared (bus-on), the error status bit is set to logic 0 (ok), the error counters are reset and an error interrupt is generated, if enabled. Да счетчик ошибок увеличивается и когда доходит до 255 чип вырубается и потом никак его не реанимировать, сам он не запускается.
  15. Bus-off в sja1000

    Цитата(Andy Mozzhevilov @ Mar 5 2011, 09:31) Что-то странное пишите. Если разъем выпал, CAN контроллер переходит в error-passive. Если после этого разъем вставить и появится сеть, контроллер автоматически перейдет в error-active после одной или нескольких успешных передач. В bus-off контроллер может перейти при каких-то фатальных ошибках на шине (несоответствие скоростей узлов, возможно КЗ линии или какие-то помехи в ней). Есть контроллеры, которые требуют, чтобы из bus-off их вытолкнули программно, есть такие, которые могут выходить автоматически по состоянию линии CAN. В документации на ваш контроллер почитайте по этому поводу. Это мне понятно. Вопрос именно по чипу SJA1000 - программно не получается выйтииз buss-off.
  16. Проблемы с SJA1000

    Цитата(KRS @ Sep 15 2010, 13:03) Можно связать 2 устройства, получится точка точка - общая линия RX = TX1 & TX2 По входу в прерывание надо считать Interrupt регистр для очистки. А реакция, зависит от задач. Обычно именно ERROR interrupt можно игнорировать, а обрабатывать статусы BUS OFF и ERROR PASSIVE (если нужно). Пишу драйвер под QNX4. Возникла проблема, когда сеть рвется (выпал разъем) – срабатывает прерывание и устройство входит в режим Buss-off - данные принимает, но послать ничего не может. Помогает только перегрузка ПС. Вопрос таков: Как вернуться в нормальный режим после образования сети вновь. С уважением, Дейнека Дмитрий
  17. Это не тот надо разработать телефон, коробочку которого показывали президенту?
  18. Цитата(syoma @ Jul 26 2010, 19:45) Привет. Если кому интересно. Короче запустил я этот CANfestival на STM32F103. Заняло это дело 2 месяца подходов к компьютеру и чтения документации и аж 2 дня на перелопачивание драйверов на CAN контроллер и таймер. Исходники могу выложить. Аж сам удивился, но буквально при первой компиляции эта штука запустилась и начала генерить heartbit и даже реагировать на NMT команды. На следующий день запустил PDO обмен - тоже работает без проблем. Несмотря на приличную навороченность (стек занял 20кБ места в МК) стек пока выглядит довольно стабильно. Работает все - и SDO и PDO и NMT сервисы (на слэйве). Вчера даже получилость прикрутить к нему запись параметров во FLASH, а-ля EEPROM. Правда не все скопом, а для заданных объектов при записи. 2 Штуки мне очень понравились по сравнению с CanOpenNode. 1. Во-первых тут есть редактор eds файлов (правда хитро устанавливается, но вполне сносно) который позволяет создать профиль своего устройства и затем по этой информации генерирует .с и .h файлы для стека и сам .eds файл. Работает очень не плохо. Созданные файлы просто копируются в проэкт и перекомпилируются, а eds файл скармливается программе - монитору CANopen шины. О ней дальше внизу. 2. Во-вторых CANfestival имеет намного более развитые возможности. Например программа пользователя общается со стеком только через глобальные переменные, которые являются объектами словаря. При приходе нового PDO переменные сами собой обновляются. При изменении переменной программой - нужно только выполнить функцию послыки PDO и CANfestival сам определит, какая переменная в какой PDO пойдет и нужно ли его слать. Даже по таймеру все работает. В общем я доволен пока. Кстати насчет программы. Есть такой сайт: http://www.canwizard.de Там можно скачать одноименную программу. Она хоть и предназначена для лифтов, но достаточна полезна и для простых CANopen сетей. Она позволяет подключаться к CANopen сети, искать узлы, читать eds файлы, генерить NMT и LSS команды, общаться с любыми узлами по SDO протоколу и т.д. Даже софт по сети обновлять может. Правда лог файлы она не ведет. Единственное ограничение, что бесплатная версия может работать толька максимум с тремя узлами. Поддерживает она Vector, Ixxat, Peak адаптеры. Добрый день! Я так же запустил CANfestival в AT90CAN128. Все как бы работает. Но непонятен ряд вещей. Если с контролер в мастер шлеца PDO, то как контроллер узнает о том, что PDO дошло – в программе CAMmonitor – никаких подтверждений я не видел? Как этим протоколом передавать большие объемы данных – есть ли стандартные профили? Как передавать метку времени? C уважением
  19. Не работает приемопередатчик CAN MAX13050. На входе, смотрел осциллографом, сигнал есть - пакеты приходят. На стороне контроллера ничего. На входе STBY – менял разные состояния – не помогает. Что странно, что на микросхеме нет меток указания первого контакта (как в документации) – только надпись – названия микросхемы. Может кто сталкивался – помогите!
  20. Цитата(DmitryDI @ Jul 19 2010, 09:56) Не работает приемопередатчик CAN MAX13050. На входе, смотрел осциллографом, сигнал есть - пакеты приходят. На стороне контроллера ничего. На входе STBY – менял разные состояния – не помогает. Что странно, что на микросхеме нет меток указания первого контакта (как в документации) – только надпись – названия микросхемы. Может кто сталкивался – помогите! Разобрался - не хватало питания - DC-DC был маомощным - напряжение подсаживалось - будте внимательны.
  21. Как можно привязать к определенному событию, например, срабатыванию прерывания PDO при изменении содержимого 6000 объекта, метку времени? Почему у PDO есть большое колличество индексов, но прерывания срабатывают только на первые 8 ? Как определить, что мастер не принял PDO, которое послали по прерыванию (без запроса)? И другой вопрос – какая максимальная задержка передачи данных посредством CANopen, например, на скорости 500 кбит/c ? Есть ли еще готовые профили для работы с дискретами и аналогами кроме 401? Заранее спасибо за помощь?
  22. Цитата(Oxygen Power @ Jul 30 2010, 06:44) Это хорошо, что требуется. А где, какие условия, сколько и т.д.. Все параметры о работе и об работодателе подробнее пожалуйста. Мне кажется - сразу понятно откуда дует ветер - Samsung
  23. Проблему решил - отвалилась дорожка на плате - Всем спасибо
  24. Есть проблема в цепи дискретного входа 220В. Из-за моста возникает смещение напряжения на резисторе R153 примерное равное напряжению на диоде моста. Источники 220В и 5V гальванически развязаны. Если отпаять резистор R157 или замкнуть выводы 2,4 моста – все соответствует расчету. Непонятно откуда берется смещение именно на R153. В расчете падение напряжения на диодах учитывалось. Uвх = Uкомпаратора/R153 (R149+R153) + 1,6В
  25. Цитата(MaslovVG @ Jul 30 2010, 10:23) Входной ток ОУ. этот ток очень мал nA, когда от источника 220В течет примерно 1 мА