Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 13:46:06

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 84, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 15, 2011 21:17:27 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
eufs писал(а):
Если непонятно - пиши, поясню на примере. Все получается не очень компактно(из-за таблицы), но очень быстро и просто и без условных переходв.

Цитата:
Тогда таблицу придётся делать для всех возможных комбинаций, т.е. 2^4 = 16 байт для хранения, по сути, всего двух бит (0 или ±1). Как-то нерационально, а бешеная скорость мне не нужна: по даташиту максимальная скорость вращения энкодера 100 об/мин.

Да. 16 байт. Но не только для хранения 2 бит. Таблица дает возможность исключить всевозможные проверки и условные переходы, а это тоже место. А 16 байт - это 8 команд(всего лишь). Попробуй, напиши с таблицей и без, тогда поговорим о длине кода и затем о рациональности.

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб апр 16, 2011 08:21:57 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
eufs писал(а):
Да. 16 байт. Но не только для хранения 2 бит. Таблица дает возможность исключить всевозможные проверки и условные переходы, а это тоже место. А 16 байт - это 8 команд(всего лишь). Попробуй, напиши с таблицей и без, тогда поговорим о длине кода и затем о рациональности.

Ну, я не говорил, что совсем отказываюсь от таблицы :) К тому же, у меня есть подозрение что с таблицей будет проще организовать обработку двух энкодеров.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс апр 17, 2011 13:13:02 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Вот и я суда с вопросом.
Подскажите, как можно разделить 8-битное число на 2? Сдвигом вправо?

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс апр 17, 2011 13:15:09 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
DX168B писал(а):
Подскажите, как можно разделить 8-битное число на 2? Сдвигом вправо?

ДА :) По кр. мере, положительное.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс апр 17, 2011 13:19:56 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Знаковое или нет, там не играет роли.
Мне нужно было поделить число пополам, отвечающее за частоту ШИМ,
чтобы его вставить в регистр сравнения.
TINY26L, TIMER1
OCR1C - число n+1 (частота ШИМ)
OCR1A - число n\2 (длинна периода)
Разрабатываю кодер\декодер сигнатур для радиосвязи. :)
Спасибо :) :beer:

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт апр 19, 2011 11:17:01 
Опытный кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 43
Зарегистрирован: Вт апр 12, 2011 18:38:19
Сообщений: 838
Откуда: с Земли
Рейтинг сообщения: 0
Gudd-Head писал(а):
Как с помощью МК определить направление вращения энкодера, покрасивее и покомпактнее?
Энкодер двухбитный в коде Грея, т.е. последовательность 00-10-11-01 в одну сторону и 00-01-11-10 в другую.
Пока в голову не приходит ничего лучше, чем сравнивать прошлые 2 бита и новые 2 бита с константами (CPI с последующим BREQ на каждую константу) "0010", "1011", "1101" и "0100" в случае инкремента (условно); "0001", "0111", "1110" и "1000" в случае декремента.

Можно с помощью аппаратного прерывания по положительному фронту. Подаете первую ногу энкодера, например, на INT0. В обработчике считываете вторую ногу. Если 0 - то одно направление, если 1 - другое. Можно замутить внешний детектор на одном D-триггере. Полет фантазии безграничен :)

_________________
Все будет только лучше, в крайнем случае - хуже.


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

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт апр 19, 2011 11:22:49 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
coredumped писал(а):
Можно с помощью аппаратного прерывания по положительному фронту. Подаете первую ногу энкодера, например, на INT0. В обработчике считываете вторую ногу. Если 0 - то одно направление, если 1 - другое. Можно замутить внешний детектор на одном D-триггере. Полет фантазии безграничен :)

Во-первых, не хочется делать это в прерывании. Во-вторых, такой алгоритм даст всего одно прерывание на 4 изменения положения энкодера. Ну и в-третьих, только внешнего D-триггера мне и не хватало, когда есть МК.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт апр 19, 2011 18:11:41 
Опытный кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 43
Зарегистрирован: Вт апр 12, 2011 18:38:19
Сообщений: 838
Откуда: с Земли
Рейтинг сообщения: 0
moza-mult писал(а):
Период импульса Т 1100 машинных циклов (305 мкс*)
Длительность импульса t 340 машинных циклов (94 мкс*)
Источники прерывания
Запрос на прерывание от внешнего источника INT0
Запрос на прерывание от внутреннего источника INT1
исходник добавил... но не могу понять как он работает... и работает ли... проверить на анализаторе его временно не могу... поэтому если есть возможность ответьте плиз :)

Не хочу читать нотаций, просто в паузах, пока компилится проект на ARM (минут 10) скучно... А тут какраз плата с 16й мегой валялась :)))
Код:
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/interrupt.h>

volatile unsigned char INT0_count = 0;
volatile unsigned char INT1_count = 0;
volatile unsigned char phase = 0;

ISR(INT0_vect)
{
   TCCR1B = 0; //Stop timer 1

   INT0_count++;
   if(INT0_count == 6) GICR &= ~(1<<INT0); //disable INT0

   TCCR1B = 1; //Start timer 1, prescaler=1
}

ISR(INT1_vect)
{
   TCCR1B = 0; //Stop timer 1

   INT1_count++;
   if(INT1_count == 6) GICR &= ~(1<<INT1); //disable INT1

   TCCR1B = 1; //Start timer 1, prescaler=1
}

ISR(TIMER1_OVF_vect)
{
   if(phase == 0)
   {
      TCNT1 += 0xffff - 340; //One phase
      PORTA = 1; // set PA=1;
      phase = 1;
   }
   else
   {
      TCNT1 += 0xffff - (1100 - 340); // Zero phase
      PORTA = 0; // set PA=0;
      phase = 0;
   }
}



int main( void )
{

   DDRA = 0x01; //PA1 - output
   PORTA = 0;
      
   TIMSK |= (1<<TOIE1); //timer1 overflow interrupt enable
   TCNT1 = 0xffff - (1100 - 340); // Zero phase

   TCCR1B = 1; //Start timer 1, prescaler=1

    MCUCR = (1<<ISC00) | (1<<ISC01) | (1<ISC10) | (1<ISC11); //interrupts INT0,INT1 on rising edge
   GICR |= (1<<INT0) | (1<<INT1);  //enable INT0 and INT1
   sei(); //global interrupts enable
   for(;;); //main loop
   
   return 0;
}

Импульсы наблюдаются на PA0. Кварц под рукой был тока на 4МГц, поэтому время слегка отличается
Вложение:
tek00001.png [5.47 KiB]
Скачиваний: 385

_________________
Все будет только лучше, в крайнем случае - хуже.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср апр 20, 2011 23:59:44 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
coredumped писал(а):
Gudd-Head писал(а):
Как с помощью МК определить направление вращения энкодера, покрасивее и покомпактнее?
Энкодер двухбитный в коде Грея, т.е. последовательность 00-10-11-01 в одну сторону и 00-01-11-10 в другую.
Пока в голову не приходит ничего лучше, чем сравнивать прошлые 2 бита и новые 2 бита с константами (CPI с последующим BREQ на каждую константу) "0010", "1011", "1101" и "0100" в случае инкремента (условно); "0001", "0111", "1110" и "1000" в случае декремента.

Можно с помощью аппаратного прерывания по положительному фронту. Подаете первую ногу энкодера, например, на INT0. В обработчике считываете вторую ногу. Если 0 - то одно направление, если 1 - другое. Можно замутить внешний детектор на одном D-триггере. Полет фантазии безграничен :)

Чуть изношеный энкодер дает дребезг по фронтам, поэтому так делать нельзя. С аппаратным триггером на входе-это получится, но нужен еще один корпус. Так что для полетов не так и много места.

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 21, 2011 13:09:50 
Родился

Зарегистрирован: Вс фев 20, 2011 23:48:02
Сообщений: 5
Рейтинг сообщения: 0
Добрый день ребята :tea: ! Я к вам за помощью и советами-вот с утра вожусь со SPI интерфейсом на MEGA16 :sleep: ,никак не хочет нормально работать зараза. Собственно идея в том,чтобы передать сигналы 'A' и 'B' с одного МК на другой и переключать соответствующие светодиоды на ведомом МК-зеленый и желтый,т.е. нажимаешь одну кнопку-горит соответствующий светодиод,а другой светодиод выключается,нажимаещь другую-наоборот. :dont_know: где я ошибаюсь-не понимаю. Прикрепляю исходные коды и схему в ПРОТЕУСЕ. Заранее благодарю!


Вложения:
SPI.zip [45.71 KiB]
Скачиваний: 148
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 21, 2011 17:18:14 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 235
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3863
Откуда: Москва
Рейтинг сообщения: 0
Во-первых у вас портD подтянут к +
Код:
ldi temp,0xFF
out PORTD,temp

И как тогда контроллер сообразит что кнопка нажата, если кнопки подключены тоже к +? Так что кнопки сажаем на землю и меняем sbic на sbis.
Ну и еще про антидребезг не забываем...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 21, 2011 19:36:43 
Родился

Зарегистрирован: Вс фев 20, 2011 23:48:02
Сообщений: 5
Рейтинг сообщения: 0
Engineer_Keen писал(а):
Во-первых у вас портD подтянут к +
Код:
ldi temp,0xFF
out PORTD,temp

И как тогда контроллер сообразит что кнопка нажата, если кнопки подключены тоже к +? Так что кнопки сажаем на землю и меняем sbic на sbis.
Ну и еще про антидребезг не забываем...

Спасибо большое,щас исправим! :kill:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб апр 23, 2011 22:09:26 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пт янв 01, 2010 20:43:32
Сообщений: 61
Откуда: cccp
Рейтинг сообщения: 0
подскажите пожалуйста насчет антидребезга, я так понял что бороться с ним
надо задержкой. а какую лучше выбрать. Например 0,1с подойдет?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб апр 23, 2011 23:07:12 
Опытный кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 43
Зарегистрирован: Вт апр 12, 2011 18:38:19
Сообщений: 838
Откуда: с Земли
Рейтинг сообщения: 0
teist писал(а):
подскажите пожалуйста насчет антидребезга, я так понял что бороться с ним
надо задержкой. а какую лучше выбрать. Например 0,1с подойдет?

методов много, я использую следующий - читаем порт с задержкой 3 раза, если все 3 раза прочиталось одно и тоже, значит считаем, что событие произошло (нажатие кнопки или чего-то там еще дребезжащего). Задержку нужно выбирать в зависимости от кнопки. Обычно достаточно 10-50мкс. А Вы хотите в 10000 раз больше - это слишком "эстонское" устройство может получиться :) Поставьте 10 мкс, если будут ложные срабатывания, увеличьте.

_________________
Все будет только лучше, в крайнем случае - хуже.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вс апр 24, 2011 03:29:21 
Опытный кот
Аватар пользователя

Зарегистрирован: Вс янв 18, 2009 21:12:49
Сообщений: 703
Рейтинг сообщения: 0
teist писал(а):
... а какую лучше выбрать. Например 0,1с подойдет?

100 мс многовато.
12...14 мс - один опрос (удобно также для динамической индикации). 3 раза = истина.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пн апр 25, 2011 15:58:05 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
Время подавления дребезга контактов умные дядьки рекомендуют делать некратным длительности периода сети и не менее 100мс. То есть ближайшее значение 110мс, затем 130, 150,170. А вот более 200 мс рекомендуют делать для узлов управления с повышенными внешними помехами. Например в автомобилях.
Я, как правило, делаю 150 мс. Если в течении этого времени активный уровень от контакта стабильный - контакт замкнутый.

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пн апр 25, 2011 18:31:37 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс фев 27, 2011 01:01:11
Сообщений: 86
Откуда: Республика Крым
Рейтинг сообщения: 0
eufs писал(а):
Время подавления дребезга контактов умные дядьки рекомендуют делать некратным длительности периода сети и не менее 100мс. То есть ближайшее значение 110мс, затем 130, 150,170. А вот более 200 мс рекомендуют делать для узлов управления с повышенными внешними помехами. Например в автомобилях.
Я, как правило, делаю 150 мс. Если в течении этого времени активный уровень от контакта стабильный - контакт замкнутый.


дребезг контактов - это время, за которое при нажатии на кнопку установится стабильное соединение (разъединение) контактов. Все зависит от самой кнопки, Например, подпружиненные срабатывают немного быстрее обычных. Как правило 20 мс хватает для всех случаев. 100-150 мс, как на мой взгляд, долговато. Здесь уже можно успеть нажать и отпустить кнопку, успешно приняв сигнал за дребезг... :) Борьба с помехами-это несколько другая ситуация, и тут надо смотреть в каждом случае отдельно...

_________________
Опыт и мудрость приходят с годами... К некоторым годы приходят одни...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пн апр 25, 2011 19:25:27 
Опытный кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 43
Зарегистрирован: Вт апр 12, 2011 18:38:19
Сообщений: 838
Откуда: с Земли
Рейтинг сообщения: 0
eufs писал(а):
Время подавления дребезга контактов умные дядьки рекомендуют делать некратным длительности периода сети и не менее 100мс. То есть ближайшее значение 110мс, затем 130, 150,170. А вот более 200 мс рекомендуют делать для узлов

Это кто рекомендует? Умные дядьки что курят? Че за бред? За секунду кнопку 10 раз нажать можно, ну ладно, любой и каждый 5 раз нажмет, а это 5 нажатий и 5 отпусканий. С таким подходом Ваш контроллер посчитает это дребезгом. Или Вы спутали милисекунды и микросекунды? Включите здравый смысл :)

_________________
Все будет только лучше, в крайнем случае - хуже.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт апр 26, 2011 02:45:48 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
VirZh писал(а):
дребезг контактов - это время, за которое при нажатии на кнопку установится стабильное соединение (разъединение) контактов. Все зависит от самой кнопки, Например, подпружиненные срабатывают немного быстрее обычных. Как правило 20 мс хватает для всех случаев. 100-150 мс, как на мой взгляд, долговато. Здесь уже можно успеть нажать и отпустить кнопку, успешно приняв сигнал за дребезг... :) Борьба с помехами-это несколько другая ситуация, и тут надо смотреть в каждом случае отдельно...


20 мс, это очень мало. Да и не к чему. 50 раз в секунду никто кнопки нажимать не будет, а помехоустойчивость выше. Это я в руководстве по программированию МК лет 10 назад еще читал (еще для 51,но суть дела не меняет). Там очень тесно связывалась моторика и физиология человека с подобными вещами. Приводились выкладки зачем и почему выбираются те или иные интервалы.

Для Вас специально привожу пример, который запомнился оттуда же. Подготовленная реакция человека на событие (зажигается например светодиод и этого человек пристально ждет) лежит в диапазоне 100-150мс, а неподготовленная, то есть та, которая происходит внезапно - 300-500мс, а если пьяный, то до 2 сек доходит. Можете проверить это каким либо образом на себе. я убежден, что цифры правильные.
А теперь скажите, зачем делать подавление дребезга 20мс, если все равно никаких действий, чаще чем 10 раз в секунду (100мс) Вы все равно пальцами сделать не сможете, а даже если у вас это получится - все равно отреагировать на каждое нажатие неполучится. Проще и грамотнее делать автоповтор нажатия на кнопку.
По поводу нажал-отпустил за 100мс - аргумент еще проще - нафига было нажимать. Мы же заботимся об эргономике и помехоподавлении, а не об играх с кнопками.

http://www.navoprosotveta.net/03/03_2882.htm
http://2po.eu/blog/vremya-reakcii-i-kibersport/

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт апр 26, 2011 02:55:30 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
coredumped писал(а):
eufs писал(а):
Время подавления дребезга контактов умные дядьки рекомендуют делать некратным длительности периода сети и не менее 100мс. То есть ближайшее значение 110мс, затем 130, 150,170. А вот более 200 мс рекомендуют делать для узлов

Это кто рекомендует? Умные дядьки что курят? Че за бред? За секунду кнопку 10 раз нажать можно, ну ладно, любой и каждый 5 раз нажмет, а это 5 нажатий и 5 отпусканий. С таким подходом Ваш контроллер посчитает это дребезгом. Или Вы спутали милисекунды и микросекунды? Включите здравый смысл :)

С таким подходом к школьному курсу физики Ваш контроллер вообще ничего не посчитает...Сколько в секунде миллисекунд?

_________________
C0FFEE=‭12648430‬


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


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

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


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