Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LTDC + ChromART в STM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2, 3
adnega
Я не спец по HAL, но
Код
  displayLayer1.ImageWidth = 0;
   displayLayer1.ImageHeight = 0;

по-моему, не должны быть нулевыми.
adrvyho
Цитата(adnega @ Aug 25 2016, 15:56) *
Я не спец по HAL, но
Код
  displayLayer1.ImageWidth = 0;
   displayLayer1.ImageHeight = 0;

по-моему, не должны быть нулевыми.

почему-то, когда они не нулевые, картинка вообще безобразная
Пытался выставлять 380х280


adnega
Попробуйте 400x240.
Попробуйте записать в видеопамять напрямую, без DMA2D.
AVI-crak
Когда требуется сложить два слоя с разным форматом и разной площадью - то смещение считается не в пикселах, а в байтах!!! Точно так-же как и в простом dma.
Сам модуль DMA2D достаточно тупой для таких подсчётов, он просто гонит поток данных через свою матрицу, заниматься расчётами приходится пользователю. Перед смешиванием оба потока преобразуются в ARGB 32бита, и выхлоп уже считается в пикселах.

Для того чтобы юзать DMA2D в полном масштабе - придётся написать собственную функцию, с прямым обращением в регистры. При этом глубина изменений (количество меняемых регистров) - напрямую зависит от разнообразности режимов. Универсальный модуль есно меняет всё, но и запускается медленнее всех, хал - это универсальный способ!!! Посему выбирается некий компромисс, с отбрасыванием неиспользуемых режимов - вот тогда будет всё летать.
pvo125
Такая запись конечно же ошибка.
displayLayer1.ImageWidth = 0;
displayLayer1.ImageHeight = 0;
Если смотреть функцию LTDC_SetConfig() то она записывает в регистр LTDC_LxCFBLR

CFBP[17:0]=displayLayer1.ImageWidth*2 (для ARGB4444 ) Сolor frame buffer pitch (по смыслу длина строки в байтах смысл pitch не смог перевести )
CFBLL[12:0]= (displayLayer1.WindowX1- displayLayer1.WindowX0)*2 (для ARGB4444) Color Frame Buffer Line Length которые задают длину строки в байтах плюс 3.
Короче одно другое повторяет но на 3 больше если по крестьянски сказать.

А в регистр LTDC_LxCFBLNR = displayLayer1.ImageHeight который определяет количество линий в color frame buffer.
Так что .ImageWidth ImageHeight не могут быть 0 и даже больше они должны четко соответствовать и тому что задано в
displayLayer1.WindowX1
displayLayer1.WindowX0
displayLayer1.WindowY1
displayLayer1.WindowY0

Делал для 480*272 экрана и эти параметры задавал такие
pLayerCfg.WindowX0 = 0;
pLayerCfg.WindowX1 = 480;
pLayerCfg.WindowY0 = 0;
pLayerCfg.WindowY1 = 272;
pLayerCfg.ImageWidth = 480;
pLayerCfg.ImageHeight = 272;

adrvyho
Ещё раз прошу помощи у Умов по поводу своей писанины. Переделал плату, поставил stm32f429b 208ногий и sdram is42s16800 - 16Мб, произвёл успешную инициализацию всех модулей с помощью cube (уж извиняюсь за ламерство, но уж слишком много всего инициализировать).
Инициализировал видеобуфер на sdram (0xD0000000), вроде бы даже заполнил нужные области и вывел текст.

Но микроконтроллер постоянно прижимает резет, картинка выводится, но дёргается, заливается с искажениями. Аппаратно всё проверил, перепаял все пины и конденсаторы.

Когда отключаю инициализацию буфера слоя экрана - резеты прекращаются.
Частота микроконтроллера - 168 Мгц
тайминги озу следующие


Код инициализации SDRAM
CODE
void MX_FMC_Init(void)
{
FMC_SDRAM_TimingTypeDef SdramTiming;

/** Perform the SDRAM1 memory initialization sequence
// 168/2= 84 MHz,
*/
hsdram1.Instance = FMC_SDRAM_DEVICE;
/* hsdram1.Init */
hsdram1.Init.SDBank = FMC_SDRAM_BANK2;
hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_2;
hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
/* SdramTiming */
SdramTiming.LoadToActiveDelay = 0x02; //TMRD
SdramTiming.ExitSelfRefreshDelay = 0x06; //TXSR
SdramTiming.SelfRefreshTime = 0x04; //TRAS
SdramTiming.RowCycleDelay = 0x06; //TRC>TRFC
SdramTiming.WriteRecoveryTime = 0x02; //TWR, TWR>=TRAS-TRCD, TWR>=TRC-TRCD-TRP
SdramTiming.RPDelay = 0x02; // TRP
SdramTiming.RCDDelay = 0x02; // TRCD

if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
{
Error_Handler();
}
/* Program the SDRAM external device */

SDRAM_Initialization_Sequence(&hsdram1, &command);
}

void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command)
{
__IO uint32_t tmpmrd =0;
/* Step 3: Configure a clock configuration enable command */
Command->CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = 0;

/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);

/* Step 4: Insert 100 ms delay */
HAL_Delay(100);

/* Step 5: Configure a PALL (precharge all) command */
Command->CommandMode = FMC_SDRAM_CMD_PALL;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = 0;

/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);

/* Step 6 : Configure a Auto-Refresh command */
Command->CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 4;
Command->ModeRegisterDefinition = 0;

/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);

/* Step 7: Program the external memory mode register */
tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2 |
SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |
SDRAM_MODEREG_CAS_LATENCY_2 |
SDRAM_MODEREG_OPERATING_MODE_STANDARD |
SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;

Command->CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = tmpmrd;

/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);

/* Step 8: Set the refresh rate counter */
/* (15.62 us x Freq) - 20 */
/* Set the device refresh counter */
HAL_SDRAM_ProgramRefreshRate(hsdram, 1542);
HAL_SDRAM_ProgramRefreshRate(hsdram, 671);
}


Работаю с памятью напрямую, без dma

Код
void LCD_PutPixel (uint16_t x, uint16_t y, uint16_t color)
{
    TM_SDRAM_Write16((x+y*LCD_LAYER1_WIDTH)*2, color);
}



Уже всё голову в кровь разбил, перечитал кучу тем, а собрать всё воедино не получается.
Может ошибка в инициализации sdram- использовал примеры для discovery с адаптацией под свою плату(там 8Мб, а у меня -- 16), но не пойму, где именно. Может встречался кто-то с подобной проблемой, или просто у кого мысли есть - был бы признателен.

PS. Перепаял IS42 на микросхему с Discovery, перенастроил тайминги, результат аналогичный(
uriy
Подскажите софтину для преобразования картинки в ARGB4444

adrvyho
1. Попробуйте выводить картинку из флешки напрямую без участия SDRAM или просто однотонный фон, для этого даже картинка не нужна.
2. В дебаггере посмотрите не меняется ли содержимое SDRAM. KEIL+JLINK позволяют просматривать содержимое SDRAM, даже данные на лету обновляются.
Шаманъ
Цитата(adrvyho @ Dec 20 2016, 02:02) *
Уже всё голову в кровь разбил

Тест памяти делали? Как по мне, то первое, что нужно сделать это прогнать хотя бы минимальный тест SDRAM, чтобы иметь хоть какую-то уверенность, что она работает нормально. И еще питание гляньте не просаживается ли. Ведь при включении дисплея потребление и памятью и МК подрастет - может его тупо не хватает, вот он и сбрасывается.
adrvyho
Цитата(uriy @ Dec 23 2016, 18:46) *
Подскажите софтину для преобразования картинки в ARGB4444

Скачивал в своё время несколько программ для конвертации - Display's module image converter, Image2Code, Bitmap Converter, но ни в одной не видел ARGB4444 - сам использую RGB565
Цитата
1. Попробуйте выводить картинку из флешки напрямую без участия SDRAM или просто однотонный фон, для этого даже картинка не нужна.

Модуль LTDC был проверен первым делом - background заливается без искажений нужным цветом, слои активируются в тех габаритах, как говорят.
С flash на этой плате не запускал, только на предыдущей - слишком уж долго программа прошивается)
Цитата
2. В дебаггере посмотрите не меняется ли содержимое SDRAM. KEIL+JLINK позволяют просматривать содержимое SDRAM, даже данные на лету обновляются.

Дебагер, к сожалению, обрывается, видимо из-за резетов в линии (это если видеобуфер объявлен в LTDC, без него в линии все прекрасно). Вывел на экран инкремент переменной раз в секунду - плюсуется 32 раза и выводится восьмёрка и залитый символ (при этом резеты присутствуют);дежурный светодиод при этом продолжает мерцать раз в секунду. Какая-то чертовщина, короче - резеты в линии, при этом картинка из SDRAM выводится практически идеально(присутствуют небольшие побочки), текст и числа на экран выводятся, переменная инкрементируется 32 раза, но при этом не обнуляется (то есть вроде как программа не перезапускается). Покопался в errdata, ревизия контроллера 3, если не ошибаюсь (ID 0x2BA01477), так что по идее, проблем с FMC и обращением к динамической, а потом статической памяти быть не должно...
adrvyho
Цитата(Шаманъ @ Dec 24 2016, 20:46) *
Тест памяти делали? Как по мне, то первое, что нужно сделать это прогнать хотя бы минимальный тест SDRAM, чтобы иметь хоть какую-то уверенность, что она работает нормально. И еще питание гляньте не просаживается ли. Ведь при включении дисплея потребление и памятью и МК подрастет - может его тупо не хватает, вот он и сбрасывается.

Тест памяти делаю после инициализации - заполняю буфер Tx, перевожу его в SDRAM, считываю, сравниваю - не проходит, дэбагер при отключенном указателе на видеобуфер запускается, в SDRAM следующая картина


То есть, вроде как всё заполняется, но то тут, то там соскакивают ячейки, потом восстанавливаются.
Напряжение 3,282-3,298В, сила тока 0,4 А при включенном экране, контроллере и SDRAM, что для микросхемы-стабилизатора TPS63060 - треть нагрузки

uriy
Какая частота AHB?
Покажите настройки FMC.
Покажите SDRAM_Initialization_sequence()

Цитата
резеты в линии
Что это значит и как определяете?
SasaVitebsk
Цитата(uriy @ Dec 26 2016, 14:15) *
Что это значит и как определяете?

biggrin.gif Я тоже не понял... Какие ресеты в какой линии... Причём здесь LTDC... Одни вопросы.
Неверная настройка самого контроллера по частотам к краху приводить не должна. Если не так области заданы, ну тогда наверное возможно... Ну типа видеоозу не по тем адресам задано.... Тогда наверное при попытке обращения будет вызываться немаскируемое прерывание и рестарт... Ну так там надо просто посмотреть... Да и всё.
adrvyho
Цитата(uriy @ Dec 26 2016, 12:15) *
Какая частота AHB?

Частота AHB 168 МГц
Цитата
Покажите настройки FMC.

Настройки я как только не менял, даже научным перебором попробовал). То, что осталось от моих рвений:
CODE
void MX_FMC_Init(void)
{
FMC_SDRAM_TimingTypeDef SdramTiming;

/** Perform the SDRAM1 memory initialization sequence
// 168/2= 84 MHz,
*/
hsdram1.Instance = FMC_SDRAM_DEVICE;
/* hsdram1.Init */
hsdram1.Init.SDBank = FMC_SDRAM_BANK2;
hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_2;
/* SdramTiming */
SdramTiming.LoadToActiveDelay = 0x02; //TMRD
SdramTiming.ExitSelfRefreshDelay = 0x07; //TXSR
SdramTiming.SelfRefreshTime = 0x04; //TRAS
SdramTiming.RowCycleDelay = 0x07; //TRC>TRFC
SdramTiming.WriteRecoveryTime = 0x03; //TWR, TWR>=TRAS-TRCD, TWR>=TRC-TRCD-TRP
SdramTiming.RPDelay = 0x02; // TRP
SdramTiming.RCDDelay = 0x02; // TRCD

if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
{
Error_Handler();
}
/* Program the SDRAM external device */

SDRAM_Initialization_Sequence(&hsdram1, &command);


/* Write data to the SDRAM memory */
for (uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
{
aTxBuffer[uwIndex]=0xA102;

*(uint32_t*) (SDRAM_BANK_ADDR + uwIndex*2)=aTxBuffer[uwIndex];
for (uint16_t ii=0;ii<10;ii++);
}
HAL_SDRAM_Read_16b(&hsdram1, (uint32_t*)SDRAM_BANK_ADDR, aTxBuffer, BUFFER_SIZE);


/* Read back data from the SDRAM memory */

for (uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
{
aRxBuffer[uwIndex] =*(uint32_t*) (SDRAM_BANK_ADDR + uwIndex*2);
}

//HAL_SDRAM_Write_16b(&hsdram1, (uint32_t*)SDRAM_BANK_ADDR, aRxBuffer, BUFFER_SIZE);
HAL_Delay (10);

/*##-3- Checking data integrity ############################################*/


for (uwIndex = 0; (uwIndex < BUFFER_SIZE) && (uwWriteReadStatus == 0); uwIndex++)
{
if (aRxBuffer[uwIndex] != aTxBuffer[uwIndex])
{
uwWriteReadStatus++;
}

}

if (uwWriteReadStatus)
{
/* KO */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15,1);
}
else
{
/* OK */
}


}


Цитата
Покажите SDRAM_Initialization_sequence()


CODE
void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command)
{
__IO uint32_t tmpmrd =0;
/* Step 3: Configure a clock configuration enable command */
Command->CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = 0;

/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);

/* Step 4: Insert 100 ms delay */
HAL_Delay(100);

/* Step 5: Configure a PALL (precharge all) command */
Command->CommandMode = FMC_SDRAM_CMD_PALL;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = 0;

/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);

/* Step 6 : Configure a Auto-Refresh command */
Command->CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 8;
Command->ModeRegisterDefinition = 0;

/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);

/* Step 7: Program the external memory mode register */
tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2 |
SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |
SDRAM_MODEREG_CAS_LATENCY_3 |
SDRAM_MODEREG_OPERATING_MODE_STANDARD |
SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;

Command->CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = tmpmrd;

/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);

/* Step 8: Set the refresh rate counter */
/* (15.62 us x Freq) - 20 */
/* Set the device refresh counter */
HAL_SDRAM_ProgramRefreshRate(hsdram, 0x0569);
}

Цитата
Что это значит и как определяете?

Пардоньте за жаргон. Резетами в линии я называю импульсы низкого уровня на линии reset микроконтроллера. Смотрю осциллоскопом (фото выше прилагал). То есть, когда я включаю инициализацию видеобуфера - с периодичностью 20 мс линия reset прижимается к земле; выключаю объявление видеобуфера - в линии reset спокойные 3.3В


Цитата(SasaVitebsk @ Dec 26 2016, 19:13) *
biggrin.gif Я тоже не понял... Какие ресеты в какой линии... Причём здесь LTDC... Одни вопросы.
Неверная настройка самого контроллера по частотам к краху приводить не должна. Если не так области заданы, ну тогда наверное возможно... Ну типа видеоозу не по тем адресам задано.... Тогда наверное при попытке обращения будет вызываться немаскируемое прерывание и рестарт... Ну так там надо просто посмотреть... Да и всё.

Хорошая мысль! Тоже думал, будто видеобуфер добегает до конца, стукается об стенку и перезагружается)) (уж извиняюсь, с помощью простых аналогий пытаюсь понять суть сложных вещей).
На всякий случай вот код инициализации экрана, может здесь, конечно, накосячил
CODE
#define LCD_LAYER1_WIDTH 790
#define LCD_LAYER1_HEIGHT 470

void MX_LTDC_Init(void)
{
LTDC_LayerCfgTypeDef pLayerCfg;
LTDC_LayerCfgTypeDef pLayerCfg1;

hltdc.Instance = LTDC;
hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
hltdc.Init.HorizontalSync = 47;
hltdc.Init.VerticalSync = 2;
hltdc.Init.AccumulatedHBP = 87;
hltdc.Init.AccumulatedVBP = 31;
hltdc.Init.AccumulatedActiveW = 887;
hltdc.Init.AccumulatedActiveH = 511;
hltdc.Init.TotalWidth = 927;
hltdc.Init.TotalHeigh = 524;
hltdc.Init.Backcolor.Blue = 255;
hltdc.Init.Backcolor.Green = 255;
hltdc.Init.Backcolor.Red = 255;
if (HAL_LTDC_Init(&hltdc) != HAL_OK)
{
Error_Handler();
}

pLayerCfg.WindowX0 = 5;
pLayerCfg.WindowX1 = 795;
pLayerCfg.WindowY0 = 5;
pLayerCfg.WindowY1 = 475;
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
pLayerCfg.Alpha = 255;
pLayerCfg.Alpha0 = 0;
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
pLayerCfg.FBStartAdress =(uint32_t)0xD0000000;
pLayerCfg.ImageWidth = LCD_LAYER1_WIDTH;
pLayerCfg.ImageHeight = LCD_LAYER1_HEIGHT;
pLayerCfg.Backcolor.Blue = 0;
pLayerCfg.Backcolor.Green = 0;
pLayerCfg.Backcolor.Red = 255;

if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
{
Error_Handler();
}

}
uriy
Цитата
то есть, когда я включаю инициализацию видеобуфера - с периодичностью 20 мс линия reset прижимается к земле; выключаю объявление видеобуфера - в линии reset спокойные 3.3В
Вы пишите об этом так как-будто это в порядке вещей. Разбирайтесь кто там напряжение просаживает.
adrvyho
Цитата(uriy @ Dec 28 2016, 13:11) *
Вы пишите об этом так как-будто это в порядке вещей. Разбирайтесь кто там напряжение просаживает.

Дело в том, что при наличии и отсутствии строчки
Код
pLayerCfg.FBStartAdress =(uint32_t)0xD0000000;
ситуации следующие:
При отсутствующей:
Напряжение питания




Линия reset




При наличии строчки питание абсолютно не проседает, не прыгает, всё те же 3,301В, а в линии reset следующая картина:



Попробовал адресовать видеобуфер на внутреннюю память - в линии reset всё спокойно, картинка отображается как надо.
SDRAM выпаяна с STM32F429Discovery, подключена к контроллеру также. Стоит ли грешить на разводку платы- уж думаю, не влияет ли то, что микросхема sdram находиться под микроконтроллером, с обратной стороны платы?...
uriy
Позвоните ресет с соседними ногами.
Рядом сигнал FMC_SDNWE
adrvyho
Цитата(uriy @ Dec 28 2016, 15:12) *
Позвоните ресет с соседними ногами.
Рядом сигнал FMC_SDNWE

В точку!!!
Огромное спасибо!!! ЧтоГдеКогда отдыхает! Лучшего подарка на день рождения я и придумать не мог!!!))
Reset действительно звонится с sdnwe, причем контроллер припаян нормально, видимо косяк платы, причём где-то под микроконтроллером)))
А может ли в самом контролере замкнуть соседние ноги?

Ура!!!! Заработало!!!! Дело было в косяке платы, слава богу, что контактов, а не переходного отверстия, что под микроконтроллером)
Всем огромное спасибо за помощь, особеннно Uriy!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.