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

Denisvak

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

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

  • Посещение

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


  1. STM32F439+SDRAM+DMA2D+TFT

    Проблему удалось решить вызовом DMA2D_DeadTimeConfig(250,ENABLE); перед стартом передачи DMA2D..но вобще не понравилось как работает вся эта конструкция, иногда все что-то подвесает. Пока забил на двойной буфер. Потестил SDRAM запись в него 1МГб идет 0.1с. Не долго?
  2. STM32F439+SDRAM+DMA2D+TFT

    Делаю железячку с экраном TFT 800х480 Контроллер STM32F439 SDRAM IS42S16400J-7TLI Память пишется, все Ок. Экран работает, картинки рисуются и т.д.(без dma2d) Настала необходимость сделать вывод на экран через двойную буферизацию. Перерисовывать два слоя регулярно стало накладно и долго по времени, начал запускать dma2d, но при выводе картинки через него или очистки буфера...почему-то по экрану начинают ползти помехи, как бы след от изображенного текста, а там где ничего не нарисовано такого не возникает, изображениеподергивается и т.д. как раз при вызове DMA2D_StartTransfer(); В чем могут быть проблемы? Инициализация LTDC void LCD_Init(void) { LTDC_InitTypeDef LTDC_InitStruct; /* Configure the LCD Control pins ------------------------------------------*/ // LCD_CtrlLinesConfig(); // LCD_ChipSelect(DISABLE); // delay(300); // LCD_ChipSelect(ENABLE); // delay(300); //LCD_ChipSelect(DISABLE); /* Configure the LCD_SPI interface -----------------------------------------*/ //LCD_SPIConfig(); /* Power on the LCD --------------------------------------------------------*/ //LCD_PowerOn(); /* Enable the LTDC Clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_LTDC, ENABLE); /* Enable the DMA2D Clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2D, ENABLE); /* Configure the LCD Control pins */ LCD_AF_GPIOConfig(); SDRAM_Init(); /* LTDC Configuration *********************************************************/ /* Polarity configuration */ /* Initialize the horizontal synchronization polarity as active low */ LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL;//LTDC_HSPolarity_AL; /* Initialize the vertical synchronization polarity as active low */ LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL;// /* Initialize the data enable polarity as active low */ LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL;// /* Initialize the pixel clock polarity as input pixel clock */ LTDC_InitStruct.LTDC_PCPolarity = LTDC_PCPolarity_IPC; /* Configure R,G,B component values for LCD background color */ LTDC_InitStruct.LTDC_BackgroundRedValue = 0; LTDC_InitStruct.LTDC_BackgroundGreenValue = 0; LTDC_InitStruct.LTDC_BackgroundBlueValue = 0; /* Configure PLLSAI prescalers for LCD */ /* Enable Pixel Clock */ /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAI_N = 192 Mhz */ /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAI_R = 192/4 = 48 Mhz */ /* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDivR = 48/8 = 6 Mhz */ RCC_PLLSAICmd(DISABLE); RCC_PLLSAIConfig(360, 7, 3); RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4); //RCC_PLLSAIConfig(280,15,2); //RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4); /* Enable PLLSAI Clock */ RCC_PLLSAICmd(ENABLE); /* Wait for PLLSAI activation */ while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET) { } /* Timing configuration */ /* Configure horizontal synchronization width */ LTDC_InitStruct.LTDC_HorizontalSync = (Hsync-1); /* Configure vertical synchronization height */ LTDC_InitStruct.LTDC_VerticalSync = (Vsync-1); /* Configure accumulated horizontal back porch */ LTDC_InitStruct.LTDC_AccumulatedHBP = (Hsync+HBP-1); /* Configure accumulated vertical back porch */ LTDC_InitStruct.LTDC_AccumulatedVBP = (Vsync+VBP-1); /* Configure accumulated active width */ LTDC_InitStruct.LTDC_AccumulatedActiveW =(Hsync+LCD_PIXEL_WIDTH+HBP-1); /* Configure accumulated active height */ LTDC_InitStruct.LTDC_AccumulatedActiveH = (Vsync+LCD_PIXEL_HEIGHT+VBP-1); /* Configure total width */ LTDC_InitStruct.LTDC_TotalWidth = (Hsync + HBP + LCD_PIXEL_WIDTH + HFP - 1); /* Configure total height */ LTDC_InitStruct.LTDC_TotalHeigh = (Vsync + VBP + LCD_PIXEL_HEIGHT + VFP - 1); LTDC_Init(&LTDC_InitStruct); } Код инициализации памяти void SDRAM_Init(void) { FMC_SDRAMInitTypeDef FMC_SDRAMInitStructure; FMC_SDRAMTimingInitTypeDef FMC_SDRAMTimingInitStructure; /* GPIO configuration for FMC SDRAM bank */ SDRAM_GPIOConfig(); /* Enable FMC clock */ RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FMC, ENABLE); /* FMC Configuration ---------------------------------------------------------*/ /* FMC SDRAM Bank configuration */ /* Timing configuration for 90 Mhz of SD clock frequency (180Mhz/2) */ /* TMRD: 2 Clock cycles */ FMC_SDRAMTimingInitStructure.FMC_LoadToActiveDelay = 2; /* TXSR: min=70ns (7x11.11ns) */ FMC_SDRAMTimingInitStructure.FMC_ExitSelfRefreshDelay = 6;//7; /* TRAS: min=42ns (4x11.11ns) max=120k (ns) */ FMC_SDRAMTimingInitStructure.FMC_SelfRefreshTime = 4;//4; /* TRC: min=70 (7x11.11ns) */ FMC_SDRAMTimingInitStructure.FMC_RowCycleDelay = 6;//7; /* TWR: min=1+ 7ns (1+1x11.11ns) */ FMC_SDRAMTimingInitStructure.FMC_WriteRecoveryTime = 2; /* TRP: 20ns => 2x11.11ns */ FMC_SDRAMTimingInitStructure.FMC_RPDelay = 2; /* TRCD: 20ns => 2x11.11ns */ FMC_SDRAMTimingInitStructure.FMC_RCDDelay = 2; /* FMC SDRAM control configuration */ FMC_SDRAMInitStructure.FMC_Bank = FMC_Bank2_SDRAM; /* Row addressing: [7:0] */ FMC_SDRAMInitStructure.FMC_ColumnBitsNumber = FMC_ColumnBits_Number_8b; /* Column addressing: [11:0] */ FMC_SDRAMInitStructure.FMC_RowBitsNumber = FMC_RowBits_Number_12b; FMC_SDRAMInitStructure.FMC_SDMemoryDataWidth = SDRAM_MEMORY_WIDTH; FMC_SDRAMInitStructure.FMC_InternalBankNumber = FMC_InternalBank_Number_4; FMC_SDRAMInitStructure.FMC_CASLatency = SDRAM_CAS_LATENCY; FMC_SDRAMInitStructure.FMC_WriteProtection = FMC_Write_Protection_Disable; FMC_SDRAMInitStructure.FMC_SDClockPeriod = SDCLOCK_PERIOD; FMC_SDRAMInitStructure.FMC_ReadBurst = SDRAM_READBURST; FMC_SDRAMInitStructure.FMC_ReadPipeDelay = FMC_ReadPipe_Delay_2; FMC_SDRAMInitStructure.FMC_SDRAMTimingStruct = &FMC_SDRAMTimingInitStructure; /* FMC SDRAM bank initialization */ FMC_SDRAMInit(&FMC_SDRAMInitStructure); /* FMC SDRAM device initialization sequence */ SDRAM_InitSequence(); } Функция заливки экрана одним цветом(очистка) void LCD_ClearDMA2D(uint32_t Color,unsigned int adr) { DMA2D_InitTypeDef DMA2D_InitStruct; uint32_t Xaddress = 0; uint16_t Red_Value = 0, Green_Value = 0, Blue_Value = 0; Xaddress = adr; // + 2*(LCD_PIXEL_WIDTH*Ypos + Xpos); Red_Value = (0xF800 & Color) >> 11; Blue_Value = 0x001F & Color; Green_Value = (0x07E0 & Color) >> 5; /* Configure DMA2D */ DMA2D_DeInit(); DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M; DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565; DMA2D_InitStruct.DMA2D_OutputGreen = Green_Value; DMA2D_InitStruct.DMA2D_OutputBlue = Blue_Value; DMA2D_InitStruct.DMA2D_OutputRed = Red_Value; DMA2D_InitStruct.DMA2D_OutputAlpha = 0x0F; DMA2D_InitStruct.DMA2D_OutputMemoryAdd = Xaddress; DMA2D_InitStruct.DMA2D_OutputOffset = 0; DMA2D_InitStruct.DMA2D_NumberOfLine = 480; DMA2D_InitStruct.DMA2D_PixelPerLine = 800; DMA2D_Init(&DMA2D_InitStruct); /* Start Transfer */ DMA2D_StartTransfer(); // тут появляются помехи на экране. /* Wait for CTC Flag activation */ while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET) { } }
  3. Все же не стоит сравнивать обычный серийный ECU, точнее его калибровки с кастомным....
  4. А что нибудь с фторопластовой(тефлоновой) изоляцией, или как минимум прочненькой к истиранию, чтобы температуры от -30 до 200гр. естетственно бензо/масло стойкий. С жилками попрочнее :) Кто-что пользовал подобное?
  5. Так же есть интерес к разработке ECU "Адрес arro239 собака gmail не существует или заблокирован."
  6. Всем спасибо! Исполнитель найден!
  7. Добрый день, нужен пикадовский файлик с хитрым контуром печатной платы...помимо контура 16 сквозных падов и по пять, на каждую сторону, несквозных под ножевой разъем. Сам могу развести платку, а вот хитрые контура что-то не выходят... Чертеж платы вышлю. Пишите на denisvak (собака) маил ру.
  8. Если разъем ещё актуален то в меге есть XF2M40151A :) подходит!
  9. И ещё одним, пока :( трындец, были были и вдруг нету!
  10. Рисовать планирую STM32F407. Мне кажется для изучения этого должно хватить...сейчас нашел немного другой вариант дисплея, с тачскрином на борту, и разъем тот же самы 40пинов на все сразу.
  11. Да, в меге и нашел его :) Ну то откуда я выкавырил дисплей - это навигатор :) Такой же дисплей насколько я понимаю стоит в Sony PSP 1000. Его в запчастях можно купить за муку. Хочу попробовать порисовать на нем.
  12. Нашел вроде это FH12-40S-0.5SH по крайне мере внешне похож на тот что у меня на платке стоит!
  13. Может кто подскажет где найти разъем под плоский шлейф Шарповской TFT панельки LQ043T3DX02? аналогичный дисплей стоит в соньке псп. 40 пинов с шагом 0.5мм.
  14. на самом деле в ЭУР все немного сложнее чем просто тупо кручение двигателя и есть схемы защиты... Тупо ГУР не хочется получить, т.к. руль в данном случае получится "пустой" и самое главное на больших скоростях...хотя на скорости за 60км, необходимость в нем отпадает. аналогово рулить крутить не хотелось бы тоже...
  15. Итак...кто может подсказать какую лучше схему применить для управления двигателем? Нужно чтобы двигатель вращался в обе стороны + с необходимым моментом - который можно бы было менять в зависимости от нагрузки... Пока планы такие: Всем командовать будет AVRка, через два ir2101 в окончании мост из четырех мосфет транзисторов(NP88N04). Обратная связь по току будет через датчик тока acs750.
  16. Спасибо... Сегодня накинул 5в на красный с черным проводом и тестором потыкал по двум оставшимся... :) На одном всегда 0, на втором 2.5V ровно :) вращая за рулевой вал напряжение отклоняется то в одну сторону то в другую...в зависимости от направления вращения...руками смог только сделать 2.3-2.7V :) думаю размах как раз 2.5в в каждую сторону. Т.е. получается что датчик выдает уже готовый к поедунию АЦП сигнал о моменте :) Это радует... Остается загадкой для чего предназначен оставшийся провод. на нем всегда 0, в любом положении вала.
  17. Кто нибудь имел дело с датчиком момента(силы) в электро усилителях руля. Интересует принцип работы и как с него сигнал о нагрузке получить... Датчик стоит между валом руля и самим редуктором в едином корпусе...из датчика наружу торчит 4 провода... пока предполагаю что по устройству он как тензодатчик, так же 4 тензора соединенных в мост, только не совсем тогда представляю как с подвижного датчика сигнал передается наружу...
  18. Хочу предупредить будущих работодателей данной личности... Человек не благонадежен...после подсчета стоимости своих услуг просит аванс, после получения аванса изображает бурную деятельность своей работы и медленно исчезает...не отвечая на письма, звонки и т.д. В общем КИДАЛОВО. Вот все данные которые я на него накопал, может кому полезно будет: Вознесенский Олег Владимирович , гражданин из города Иваново. владелец сайта www.microdevice.ru домашний телефон 8(4932) 54 80 81 мобильный 8(920)369738 Телефонный оператор - Мегафон. Убраны паспортные данные.
  19. Хочу предупредить будущих работодателей данной личности... Человек не благонадежен...после подсчета стоимости своих услуг просит аванс, после получения аванса изображает бурную деятельность своей работы и медленно исчезает...не отвечая на письма, звонки и т.д. В общем КИДАЛОВО. Вот все данные которые я на него накопал, может кому полезно будет: Вознесенский Олег Владимирович , гражданин из города Иваново. владелец сайта www.microdevice.ru домашний телефон 8(4932) 54 80 81 мобильный 8(920)369738 Телефонный оператор - Мегафон. паспорт 2403 995052 Выдан ОВД Ленинского р-на, г. Иваново, 26.09.2003 г. Прописан по адресу: г.Иваново, ул Шубиных, д.25, кв.40
  20. Хочу предупредить будущих работодателей данной личности... Человек не благонадежен...после подсчета стоимости своих услуг просит аванс, после получения аванса изображает бурную деятельность своей работы и медленно исчезает...не отвечая на письма, звонки и т.д. В общем КИДАЛОВО. Вот все данные которые я на него накопал, может кому полезно будет: Вознесенский Олег Владимирович , гражданин из города Иваново. владелец сайта www.microdevice.ru домашний телефон 8(4932) 54 80 81 мобильный 8(920)369738 Телефонный оператор - Мегафон. Убраны паспортные данные
  21. Хочу предупредить будущих работодателей данной личности... Человек не благонадежен...после подсчета стоимости своих услуг просит аванс, после получения аванса изображает бурную деятельность своей работы и медленно исчезает...не отвечая на письма, звонки и т.д. В общем КИДАЛОВО. Вот все данные которые я на него накопал, может кому полезно будет: Вознесенский Олег Владимирович , гражданин из города Иваново. владелец сайта www.microdevice.ru домашний телефон 8(4932) 54 80 81 мобильный 8(920)369738 Телефонный оператор - Мегафон. Убраны паспортные данные
  22. Хочу предупредить будущих работодателей данной личности... Человек не благонадежен...после подсчета стоимости своих услуг просит аванс, после получения аванса изображает бурную деятельность своей работы и медленно исчезает...не отвечая на письма, звонки и т.д. В общем КИДАЛОВО. Вот все данные которые я на него накопал, может кому полезно будет: Вознесенский Олег Владимирович , гражданин из города Иваново. владелец сайта www.microdevice.ru домашний телефон 8(4932) 54 80 81 мобильный 8(920)369738 Телефонный оператор - Мегафон. Убраны паспортные данные
×
×
  • Создать...