Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 новичку в ARM что к чему
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт июл 10, 2025 19:04:28

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8826 ]     ... , , , 210, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 25, 2018 13:40:14 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Помогите разобраться с FSMC.

Сумбурный пост, для начала скажи какая адресная линию к RS экрана подключена, потому что судя по коду это A18, что весьма вероятно не так.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 25, 2018 16:55:34 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пн ноя 07, 2016 12:14:14
Сообщений: 134
Рейтинг сообщения: 0
Да, А18. Какая еще информация нужна?

_________________
Я конечно все понимаю, но этого я не понимаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 25, 2018 18:05:09 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Да, А18. Какая еще информация нужна?

Экран подключен по 8-ми битной шине, потому для COM_ADR и DAT_ADR нужно (uint16_t*) заменить на (volatile uint8_t*). Кроме того в таком случае адрес 0x60080000 превратится в 0x60040000. Функции обращения к экрану там простейшие, должно быть как-то так:
Спойлер
Код:
#define DAT_ADR   *(volatile uint8_t*)0x60040000
#define COM_ADR   *(volatile uint8_t*)0x60000000


void writeReg(uint16_t reg)
{
    COM_ADR = 0;
    COM_ADR = reg;
}

void writeReg(uint16_t reg, uint16_t data)
{
   writeReg(reg);
   writeData(data);
}

uint16_t readReg(uint16_t reg)
{
   writeReg(reg);
   uint16_t data = COM_ADR << 8;
   return data | COM_ADR;
}

void writeData(uint16_t data)
{
   DAT_ADR = data >> 8;
   DAT_ADR = data;
}

Инициализацию можешь для начала свою проверить, после нее можно попробовать прочесть ID...

ps. Касательно адресов... Когда пишем по адресу 0x60040000, то активируется линия A18 идущая на RS, в противном случае там 0. В документации это колонка D/CX, в ней всегда, если речь о идет записи, 0 для команды и 1 для данных. Это если я правильно понял причину твоих затруднений...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Ср июл 25, 2018 21:59:04 
Электрический кот
Аватар пользователя

Карма: 4
Рейтинг сообщений: 135
Зарегистрирован: Сб мар 09, 2013 11:29:22
Сообщений: 1029
Откуда: 40RUS, Жуков
Рейтинг сообщения: 0
Что бы прочесть ID инициализация экрана не нужна. Нужна настройка FSMC

_________________
IVL ex UA6PJ


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт июл 26, 2018 09:42:38 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пн ноя 07, 2016 12:14:14
Сообщений: 134
Рейтинг сообщения: 0
Цитата:
Функции обращения к экрану там простейшие, должно быть как-то так:

Я не понимаю что именно надо заводить в аргумент reg. Какой адрес? Ведь в документации указана только data, то есть то, что выводить на шину D0-D7.
Вот например функция
Код:
void writeReg(uint16_t reg, uint16_t data)
{
   writeReg(reg);
   writeData(data);
}

Где в документации data, а где reg?


Инициализация FSMC
Код:
  FSMC_NORSRAM_TimingTypeDef Timing;

  /** Perform the SRAM1 memory initialization sequence
  */
  hsram1.Instance = FSMC_NORSRAM_DEVICE;
  hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
  /* hsram1.Init */
  hsram1.Init.NSBank = FSMC_NORSRAM_BANK1;
  hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;//ENABLE ?
  hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
  hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_8;
  hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
  hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
  hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
  hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
  hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
  hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
  hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
  hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
  hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
  /* Timing */
  Timing.AddressSetupTime = 15;
  Timing.AddressHoldTime = 15;
  Timing.DataSetupTime = 255;
  Timing.BusTurnAroundDuration = 15;
  Timing.CLKDivision = 16;
  Timing.DataLatency = 17;
  Timing.AccessMode = FSMC_ACCESS_MODE_A;

_________________
Я конечно все понимаю, но этого я не понимаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт июл 26, 2018 10:05:45 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 1
Я не понимаю что именно надо заводить в аргумент reg. Какой адрес? Ведь в документации указана только data, то есть то, что выводить на шину D0-D7.

Вот эти данные туда и заводишь, но писать их нужно по адресу который будет означать запись именно команды. В таблице колонка D/CX для любой команды изначально в 0, т.е. первый раз мы пишем по адресу 0x60000000, при этом на входе RS будет 0, а дополнительные данные, если таковые имеются, уже пишутся по адресу 0x60040000. Если у команды нет аргументов, то будет просто:
Код:
writeReg(reg);

Где reg(или cmd) - SWRESET(0x01), например.
Если аргумента два, то получается:
Код:
writeReg(reg);
writeData(data1);
writeData(data2);

Понятно?


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Чт июл 26, 2018 10:10:21 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пн ноя 07, 2016 12:14:14
Сообщений: 134
Рейтинг сообщения: 0
Кажется дошло. Спасибо :))

_________________
Я конечно все понимаю, но этого я не понимаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пт июл 27, 2018 12:44:56 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пн ноя 07, 2016 12:14:14
Сообщений: 134
Рейтинг сообщения: 0
Я правильно понимаю, смещение адреса команд на 1 влево актуально только для 16 битного интерфейса, а для 8 битного 18 бит так и останется на своем месте(0x60040000)?
Дисплей пока не хочет работать.
Хочу прочитать ID. Делаю так:

Код:

#define LCD_HW_RES_ON          HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET)
#define LCD_HW_RES_OFF         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET)
 

uint8_t data=0;
 HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_FSMC_Init();

   LCD_ON;       
   LCD_HW_RES_ON;   
   HAL_Delay(150);
   LCD_HW_RES_OFF;
   HAL_Delay(150);

   LCD_Write_Com(0x04); //RDDID
   data = COM_ADR;         //Dummy read
   data = COM_ADR;         //ID1 read
        data = COM_ADR;         //ID2 read
        data = COM_ADR;         //ID3 read

Но data не меняется и равно 0x55;
Еще пробовала с помощью команд RDID1-RDID3,но все так же. Нужно несколько раз вызывать команду LCD_Write_Com(0x04); //RDDID?
При попытке прочтения статуса, тоже выскакивает 0х55;
Алгоритм (во вложении) говорит, что вроде бы надо читать подряд.
Я неправильно читаю? Может быть читать надо не из COM_ADR, а из DAT_ADR?

Добавлено after 45 minutes 21 second:
Если отключить инициализацию FSMC, то значение так и остается 0. Значит ли это, что FSMC работает исправно, просто я неправильно обращаюсь к дисплею?

Добавлено after 1 hour 50 minutes 46 seconds:
Дисплей ожил наконец!
Проблема была в инициализации.
Вот моя инициализация для ST7735R:
Код:
#define LCD_LED_ON          HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_RESET)
#define LCD_LED_OFF         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_SET)
#define LCD_ON             HAL_GPIO_WritePin(GPIOD, GPIO_PIN_11, GPIO_PIN_RESET)
#define LCD_OFF            HAL_GPIO_WritePin(GPIOD, GPIO_PIN_11, GPIO_PIN_SET)
#define LCD_HW_RES_ON          HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET)
#define LCD_HW_RES_OFF         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET)

void LCD_Ini(void){
   LCD_ON;       
   LCD_HW_RES_OFF;   
   HAL_Delay(500);
   LCD_HW_RES_ON;
   HAL_Delay(500);

   LCD_Write_Com(0x11);                            //SLPOUT
   HAL_Delay(500);

   LCD_Write_Com(0x3A);                           //COLMOD
   LCD_Write_Data(0x05);                              

   LCD_Write_Com(0x36);                           //MADCTL
   LCD_Write_Data(0x14);   
   
   LCD_Write_Com(0x29);                           //DISPON
   LCD_LED_ON;                                 //LCD Backlight ON
}


Буду двигаться дальше


Вложения:
Без имени.png [62.4 KiB]
Скачиваний: 596

_________________
Я конечно все понимаю, но этого я не понимаю.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пт июл 27, 2018 13:58:47 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Дисплей ожил наконец!
Буду двигаться дальше

По большому счету осталось задать окно(0x2A/0x2B), после чего 0x2C и гонишь сырые байты цветов. У меня вообще унифицированная либа, там все через установку окна делается, потому что дисплеи очень разные, где-то можно задать только координату внутри окна, что быстрее, но на одних дисплеях можно менять одну из координат, на других обязательно обе сразу, на третьих таких команд нет вообще и если хочешь начать вывод в другом месте, то задается окно и отрисовка идет с его левого верхний угла. Еще одна из возможных проблем - это направление вывода при разных ориентациях, для ST7735 это можно настроить через MADCTL, при этом больше ничего делать не придется, что встречается не так и часто. И да, если вдруг будут проблемы с цветами, то возможно придется заполнять LUT(2Dh)...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пт июл 27, 2018 17:47:58 
Друг Кота

Карма: 20
Рейтинг сообщений: 223
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6443
Рейтинг сообщения: 0
Попалось на глаза в твиттере, мож кому будет полезно:

Create new STM32 project in Keil uVision 5 tutorial

Материал на английском языке, который пошагово описывает создание проекта для STM32 в Keil uVision 5.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пт июл 27, 2018 19:57:39 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
Вот вы мне и попались. Какого чёрта кейловский компилятор откликается на #ifdef __GNUC__ ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пт июл 27, 2018 21:06:42 
Друг Кота

Карма: 20
Рейтинг сообщений: 223
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6443
Рейтинг сообщения: 0
Я мож и не знаю точного ответа, но при пользовании кейлом мне показалось, что по встроенным функциям и пре-дифайнам он практически совместим с GCC.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Пт июл 27, 2018 21:50:51 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
Есть у меня один проект, который на GCC и IAR собирается. Между ними разница вообще мизер. Даже стартап общий с парой ифдефов получился. Дай, думаю, ещё и Кейл прикручу. Будет, типа полигон для экспериментов. Ага, блин.

1. Притворяется __GNUC__, самозванец чёртов. Ладно, есть дефайны которых нет в GCC, обходим двойной проверкой.

2. Какой-то абсурдный стартап. Зачем он занимается распределением стека и кучи? Это дело линкера. Да ещё с бредовым колбэком из библиотеки, который не даёт переписать его с асма на С.
Код:
__user_initial_stackheap
                 LDR     R0, =  Heap_Mem
                 LDR     R1, =(Stack_Mem + Stack_Size)
                 LDR     R2, = (Heap_Mem +  Heap_Size)
                 LDR     R3, = Stack_Mem
                 BX      LR
Зачем, едрён батон??? Неужели линкер не может эти константы сам подставить куда надо?

3. Не хочет подхватывать инстанцированные в другом модуле шаблонные классы.
Код:
//Первый модуль
  HMC704T<1,LE3> snt1;
  template class HMC704T<1,LE3>;

//Второй модуль
  extern HMC704T<1,LE3> snt1;
  snt1.SetFreq(10000);     // <---- Уюшки!!!
Ну как так то? GCC и IAR видят, а этот слепой.

Тут терпение лопнуло. F8.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс июл 29, 2018 04:44:42 
Друг Кота

Карма: 20
Рейтинг сообщений: 223
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6443
Рейтинг сообщения: 0
Кстати, сегодня дошли руки проверить в кейле. Ничего такого, о чем вы говорили.

Код:
#ifdef __GNUC__
  #warning "GNU C defined!"
#else
  #warning "GNU C NOT defined!"
#endif

При компиляции оно радостно сообщает:

main.c(182): warning: #1215-D: #warning directive: "GNU C NOT defined!"
#warning "GNU C NOT defined!"
main.c: 1 warning, 0 errors

и наоборот, при компиляции с помощью GCC:

arm-none-eabi-gcc -c -mcpu=cortex-m0 -mthumb -DSTM32F031x6 -Iinc -Iinc\CMSIS -Og -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -MMD -MP -MF"build/main.d" -Wa,-a,-ad,-alms=build/main.lst main.c -o build/main.o
main.c: In function 'main':
main.c:180:4: warning: #warning "GNU C defined!" [-Wcpp]
#warning "GNU C defined!"
^~~~~~~

Возможно, у вас где-то в опциях этот гнус определен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс июл 29, 2018 11:05:41 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
Да ёлы палы, специально создал чистый проект. Найдите в нём упоминание про __GNUC__. Заодно может кто-то уговорит его мой шаблон прилинковать? Код примера упростил до минимума, смысла в нём не ищите особого, оставил только эффект с которым хотелось бы разобраться.
Изображение

Вложение:
Templ_test.zip [162.65 KiB]
Скачиваний: 200


Вложения:
VirtualBox_Win7-29_07_2018_12_03_35.png [7.33 KiB]
Скачиваний: 844
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс июл 29, 2018 18:41:51 
Друг Кота

Карма: 20
Рейтинг сообщений: 223
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6443
Рейтинг сообщения: 0
6.10.1 я доставил, но дальше оно начало что-то вопить про лицензии и мне показалось, что это не совсем то, что мне нужно в данный момент.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс июл 29, 2018 19:02:43 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
6.10.1 я доставил, но дальше оно начало что-то вопить про лицензии и мне показалось, что это не совсем то, что мне нужно в данный момент.

А причём тут версия компилятора? Я зашел на оффсайт, крайнее что дают скачал и попробовал.
На ЛЮБОЙ версиий в кейле мой код можно скомпилировать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс июл 29, 2018 19:19:44 
Друг Кота

Карма: 20
Рейтинг сообщений: 223
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6443
Рейтинг сообщения: 0
Я посчитал, что версия тут может иметь значение. Если на версию пофиг, то полученный мной результат аналогичен предыдущему.
Код:
#include "main.h"

int main()

#ifdef __GNUC__
  snt1.SetHMCMode();
  snt2.SetHMCMode();
  #warning "GNU C defined"
#else     
  snt1.SetChannel(30);
  snt2.SetChannel(10);
  #warning "GNU C NOT defined"
#endif
  for(;;);
}


SRC\main.cpp(12): warning: #1215-D: #warning directive: "GNU C NOT defined"
#warning "GNU C NOT defined"
SRC\main.cpp: 2 warnings, 0 errors
linking...
Program Size: Code=832 RO-data=372 RW-data=4 ZI-data=1636


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс июл 29, 2018 19:31:40 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
Ну а шаблон то? Убери, пожалуйста, все ифдефы.

А у меня вот так. Да и по подсветке ифдефа в редакторе это видно.
Спойлер
Код:
*** Using Compiler 'V6.10.1', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin'
Build target 'Target 1'
SRC/main.cpp(8): warning: "GNU C defined" [-W#warnings]
        #warning "GNU C defined"
         ^
1 warning generated.
compiling main.cpp...
linking...
.\Objects\Templ_test.axf: Warning: L6776W: The debug frame in .debug_frame(hmc704t.o) does not describe an executable section.
Program Size: Code=1060 RO-data=356 RW-data=0 ZI-data=1640 
Finished: 0 information, 1 warning and 0 error messages.
".\Objects\Templ_test.axf" - 0 Error(s), 2 Warning(s).
Build Time Elapsed:  00:00:01


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс июл 29, 2018 20:07:53 
Друг Кота

Карма: 20
Рейтинг сообщений: 223
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6443
Рейтинг сообщения: 0
*** Using Compiler 'V5.06 update 5 (build 528)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'Target 1'
compiling main.cpp...
compiling hmc704T.cpp...
linking...
Program Size: Code=864 RO-data=372 RW-data=4 ZI-data=1636


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8826 ]     ... , , , 210, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y