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

kumle

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

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

  • Посещение

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


  1. Поэтому и разобрал, глючит датчик, дает ложные срабатывания
  2. Ухты, вот так прям сходу. Сразу видно профессионалы. Спасибо.
  3. Всем привет! Кто может подсказать, разобрал датчик удара и срисовал кусок схемы (один канал уровня предупреждения), какую функцию выполняют диоды в обратной связи операционника. Если с отрицательной еще более менее понятно, в литературе встречается разбор таких схем, то с диодом в положительной обраь=тной связи вообще непонятно. Может это какая то хитрая уловка, или тепмературная компенсация?
  4. Вот моя инициализация RTC void RTC_Config(void) { /* Enable the PWR clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* Allow access to RTC */ PWR_BackupAccessCmd(ENABLE); // if ((RCC->BDCR & RCC_BDCR_RTCEN) != RCC_BDCR_RTCEN) // { // Сброс данных в резервной области // RCC_BackupResetCmd(ENABLE); // RCC_BackupResetCmd(DISABLE); RCC_LSEConfig(RCC_LSE_ON); /* wait till lse is ready */ while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) { } /* Select the RTC Clock Source */ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); /* Enable the RTC Clock */ RCC_RTCCLKCmd(ENABLE); /* Wait for RTC APB registers synchronisation */ RTC_WaitForSynchro(); /* Configure the RTC data register and RTC prescaler */ //из даташита: F=Frtcosc/((div_a+1)x(div_s+1))=32768/((1+1)*(16383+1))=1Hz //при этом subsecond точность будет равна 1/16384=61,035мкс !!! RTC_InitStructure.RTC_AsynchPrediv = 1; RTC_InitStructure.RTC_SynchPrediv = 16383; RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_12; /* Check on RTC init */ if (RTC_Init(&RTC_InitStructure) == ERROR) { asm("NOP"); asm("NOP"); asm("NOP"); } /* Enable The TimeStamp */ //RTC_TimeStampCmd(RTC_TimeStampEdge_Falling, ENABLE); // } }
  5. Да, выяснил. Поставил вызов в прерывание и сразу при каждом вызове значения были разные !!! А до этого вызов был в бесконечном цикле в main, а так как RTC от часового кварца, то видимо засинхронизировался с тактами контроллера
  6. STM32F4 чтение регистра SSR из RTC

    Пытюсь получать значения субсекунд от RTC сделал тестовую функцию которая запускается в произвольный момент и вызывает 5 чтений SSR через паузы 1 миллисекунду времени по приходу команды void RTC_TEST(void) { volatile unsigned int ssr[5]={0}; ssr[0] = RTC_GetSubSecond(); delay1ms(); ssr[1] = RTC_GetSubSecond(); delay1ms(); ssr[2] = RTC_GetSubSecond(); delay1ms(); ssr[3] = RTC_GetSubSecond(); delay1ms(); ssr[4] = RTC_GetSubSecond(); asm("NOP"); asm("NOP"); asm("NOP"); } далее там где нопы ставлю точку останова и в отладчике смотрю массив ssr. разности соседних значений ssr в массиве соответствуют одной миллисекунде задержки !!!! НО !!!! Далее продолжив программу снова запускаю функцию внешней командой и получаю опять 5 значений в массиве ssr, Причем самое первое ssr[0] всегда примено равно предыдущему значению ssr[0] из предыдущего запуска функции. Как так получается, я ведь запускаю в совершенно разные мометнты времени и миллисекунды тоже должны быть произвольные ? Вот например пример результатов запуска несколько раз этой функции: первый запуск 10944, 10924, 10903, 10883, 10862 второй запуск 10969, 10949, 10928, 10908, 10877 третий запуск 10981, 10961, 10940, 10920, 10900 Модератор: код прячем в теги, пустые строки в большом количестве не оставляем!
  7. Всем привет товприщи ! Тут коллеги по работе решили в довольно таки серьезном проекте использовать wifi модули esp8266. Все бы ничего, но я тоже являюсь участником проекта и данные модули должны обмениваться данными с с платой, за которую я отвечаю. Так вот в случае чего не хотеломь бы расхлебывать проблемы. Мне видится, что модули esp8266 все таки для домашнего применения что-ли. Вобщем хотел их отговорить, но не в какую. Они увидели что там можно вме быстро сделать на питоне и поэтому загорелись этой идеей. Вобщем у меня аргументов не хватает. Может вы чего нибудь подскажете за или против этого модуля ?
  8. Это временное явление. Потом либо STM откатят назад в цене, либо PICи вырастут аналогично
  9. Есть задача измерять фазу синусоиды с генератора в момент времени задаваемый с отметчика. В качестве отметчика беру сигнал 3.3v с той же самой частотой, но только c цифрового выхода этого же генератора Частоту сигнала вычисляю точно модулем захвата в микроконтроллере, получается в герцах два знака после запятой стоят стабильно Также Имеется отдельное АЦП которое всегда запущено и сэмплирует с частотой 5Кгц. По приходу фронта отметчика, я начинаю накапливать выборку 2048 сэмплов сигнала. Далее через сумму синусов и косинусов вычисляю действ. и мнимую часть сигнала и вычисляю фазу через atan2 Теперь самое интересное. Если подаю частоту 10 гц, то фаза считается правильно, стоит +/- 1 градус, при изменении фазы на генераторе тоже меняется ну ту же величину. Если подаю 100Гц, то уже фаза плавает +/-10 градусов. Это происходит отчасти из за того, что у меня есть задержка от прихода фронта отметчика, до прихода первого сэмпла с АЦП (ацп уже запущен ранее) Если частота оцифровки 5кгц, то максимальная задержка будет 200 мкс (время между сэмплами) Чтобы учесть эту задержку в расчете фазы, я делаю так: Я засекаю время прихода отметчика, затем засекаю время прихода первого сэмпла (сигнал DRDY c АЦП), затем разницу этих времен пересчитываю в градусы по формуле: Xg=(dt*360.0)/Tob dt - время в микросекундах от фронта отметчика до первого сэмпла, Tob - период синусоиды с генератора в микросекундах Затем из фазы полученной арктангенсом я вычитаю эту фазовую задержку Xg. Можно ли так делать ?
  10. Здравствуйте, вначале сообщения указано, что Вам требуется схемотехник, так вот он и разработает эту плату, причем она должна быть существенно проще и дешевле нежели чем LCard, так как будет заточена под конкретную задачу (известные уровни сигналов, известные параметры датчиков). Там будет максимум инструментальный усилитель + АЦП 24 бита. А с каналом передачи надо определяться после того как будет известен объем передаваемых данных. Вот например мы разрабатываем 8-и канальники с частотой оцифровки 26Кгц, 24 бита. Поток от одной такой платы получается 5 Mbit/s непрерывно Выходной интерфейс ethernet LAN, через wifi модуль пропустить можно, через bluetooth вряд-ли.
  11. Привет, я пробовал St-link донгл не переделывает в j-link, я переделал отладку stm32F4 discovery
  12. Спасибо, как придет платка буду пробовать !
  13. Всем привет, жду отладочную платку с ebay с модулем nrf51822 вот такую Перелопатил много инфы но до сих пор нет четкого понимания как прошивать, в особенности soft device Понял что нужен j-link от segger, но у меня есть только китайский клон, непонятно подойдет ли он ? Еще читал статью, что можно через st-link используя OPEN OCD, но как то там все сложно...
  14. LCD + stm32f4 discovery

    Это не совсем моя последовательность, я покупал дисплей через ebay и продавец там прикрепил эту инициализацию, они же заинтересованы чтобы у людей все работало. Я ее просто немного изменил.
  15. STM32F407 + CS43L22

    не, сейчас глянул, по умолчанию всетаки через i2S но все равно, даже если и так, все равно работало неправильно, так как начальный кусок файла глотает из-за того что MCK заранее не включается и выключается тоже некорректно из-за того что MCK должен некоторое время тикать после проигрывания. Вобщем я обе эти проблемы устранил
  16. STM32F407 + CS43L22

    работало, потому что в примере по умолчанию стоит работа через ЦАП микроконтроллера, а выход цапа подкл. к аналоговому входу кодека.
  17. STM32F407 + CS43L22

    Все победил я этот кодек, звук нормальный, файлик проигрывает полностью. Конечно в том виде как это было сделано в примере audio playback and record от MCD Application Team это было неработоспособно
  18. LCD + stm32f4 discovery

    попробовал, все рано нули считывает
  19. STM32F407 + CS43L22

    Перевел вчера кодек в режим MASTER, а микроконтроллер в SLAVE. Задал частоту MCK микроконтроллера 12.28 МГц через выход MCO2 (поигрался с настройкой PLL) В итоге с кодека получил частоту LRCK равную 8KHz и частоту SCK равную 512KHz Таким образом получил RATIO (SCK/LRCK)=64, но для этого надо передавать на кодек данные по 32 бита а не по 16, поэтому переключил i2s модуль микроконтроллера в режим << LSB justified 16-bit extended to 32-bit packet frame with CPOL = 0 >> а кодек переключил в режим Right-Justified Format и биты AWL поставил в единицы (Audio word length=16 bit) В итоге звук стал нормальный, но опять сьелся начальный кусочек файла ). Но наверное это уже с DMA проблема, так как теперь постоянно присутствует клок SCK.
  20. LCD + stm32f4 discovery

    void LCD_CtrlLinesConfig(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //sasha RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC); // D2 GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC); // D3 GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC); // NOE -> RD GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC); // NWE -> WR GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC); // NE1 -> CS GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC); // D13 GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC); // D14 GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC); // D15 GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC); // A16 -> RS GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC); // D0 GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC); // D1 GPIO_PinAFConfig(GPIOE, GPIO_PinSource7, GPIO_AF_FSMC); // D4 GPIO_PinAFConfig(GPIOE, GPIO_PinSource8, GPIO_AF_FSMC); // D5 GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_FSMC); // D6 GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_FSMC); // D7 GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_FSMC); // D8 GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_FSMC); // D9 GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_FSMC); // D10 GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_FSMC); // D11 GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_FSMC); // D12 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOE, &GPIO_InitStructure); //for RESET HY32D GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); } void LCD_FSMCConfig(void) { FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure; FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 0; //0 FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0; //0 FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 2; //3 FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0; FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 1;//1 FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0; FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A; FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Enable;//disable FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure; FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 0; //0 FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0; //0 FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 4; //3 FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0; FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 1;//1 FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0; FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure; FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); } Платка дома, вечером попробую изменить и считать еще раз ID А подсветка то у тебя включается ? У меня в основном модуле еще после инициализации есть строка LCD_BackLight(50); Она включает шим на половинную яркость подсветки
  21. STM32F407 + CS43L22

    Не, звук качественный когда все частоты генерит модуль i2s, а когда MCK я сам генерю таймером (это чтоб его заранее включать, чтобы начало файла не проглатывалось) то тогда звук уже искаженный, но файл теперь сначала воспроизводит
  22. LCD + stm32f4 discovery

    вобщем у меня возвращает id=0 ! но тем не менее все работает вот моя инициализация (весь файл прикрепить форум не дает) void LCD_Init(void) { static uint16_t DeviceCode; LCD_CtrlLinesConfig(); Delay(3000); LCD_FSMCConfig(); Delay(3000); TIM_Config(); LCD_BackLight(0); LCD_Reset(); DeviceCode = LCD_ReadReg(0x0000); asm("NOP"); asm("NOP"); asm("NOP"); LCD_WriteReg(0x0000,0x0001); Delay(100); LCD_WriteReg(0x0003,0xA8A4); Delay(100); LCD_WriteReg(0x000C,0x0000); Delay(100); LCD_WriteReg(0x000D,0x080C); Delay(100); LCD_WriteReg(0x000E,0x2B00); Delay(100); LCD_WriteReg(0x001E,0x00B0); Delay(100); LCD_WriteReg(0x0001,0x2B3F); Delay(100); LCD_WriteReg(0x0002,0x0600); Delay(100); LCD_WriteReg(0x0010,0x0000); Delay(100); LCD_WriteReg(0x0011,0x6070); Delay(100); LCD_WriteReg(0x0005,0x0000); Delay(100); LCD_WriteReg(0x0006,0x0000); Delay(100); LCD_WriteReg(0x0016,0xEF1C); Delay(100); LCD_WriteReg(0x0017,0x0003); Delay(100); LCD_WriteReg(0x0007,0x0233); Delay(100); LCD_WriteReg(0x000B,0x0000); Delay(100); LCD_WriteReg(0x000F,0x0000); Delay(100); LCD_WriteReg(0x0041,0x0000); Delay(100); LCD_WriteReg(0x0042,0x0000); Delay(100); LCD_WriteReg(0x0048,0x0000); Delay(100); LCD_WriteReg(0x0049,0x013F); Delay(100); LCD_WriteReg(0x004A,0x0000); Delay(100); LCD_WriteReg(0x004B,0x0000); Delay(100); LCD_WriteReg(0x0044,0xEF00); Delay(100); LCD_WriteReg(0x0045,0x0000); Delay(100); LCD_WriteReg(0x0046,0x013F); Delay(100); LCD_WriteReg(0x0030,0x0707); Delay(100); LCD_WriteReg(0x0031,0x0204); Delay(100); LCD_WriteReg(0x0032,0x0204); Delay(100); LCD_WriteReg(0x0033,0x0502); Delay(100); LCD_WriteReg(0x0034,0x0507); Delay(100); LCD_WriteReg(0x0035,0x0204); Delay(100); LCD_WriteReg(0x0036,0x0204); Delay(100); LCD_WriteReg(0x0037,0x0502); Delay(100); LCD_WriteReg(0x003A,0x0302); Delay(100); LCD_WriteReg(0x003B,0x0302); Delay(100); LCD_WriteReg(0x0023,0x0000); Delay(100); LCD_WriteReg(0x0024,0x0000); Delay(100); LCD_WriteReg(0x0025,0x8000); Delay(100); LCD_WriteReg(0x004f,0); LCD_WriteReg(0x004e,0); Delay(100); } и у меня еще вывод RESET дисплея подтянут к +3.3V 1ком и подключен к PD12, вывод TP_IRQ к PC1 и вывод BL_CNTL подключен к пину PA8 (TIM1_CH1_PWM)
  23. STM32F407 + CS43L22

    Выходит допустима, раз работает ) Во всяком случае модуль i2s микроконтроллера умеет выводить только частоту Fs*256, а Fs у меня 8 КГц Вот мастером сделаю кодек, тогда попробую 12Мгц
  24. LCD + stm32f4 discovery

    Мне кажется что у тебя всетаки SSD1289 Я посмотрю что у меня возвращает, правда дома буду только завтра вечером А инициализация из тех источников что ты указал у меня тоже не заработала ) Я там менял и тайминги и этот кусок где много writereg вначале, там тоже кстати тайминги между writereg увеличивал Давно это было уже. Код тоже дома на ноуте, но у меня все работает. Еще с проводами засада была. Вначале подключил шлейфом около 5-и сантиметров, но работало через раз потом этот шлейф распушил по одному проводку и заработало стабильно. Вобщем тоже долго мучался )
×
×
  • Создать...