Страница 1 из 1

УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 25 янв 2012, 14:00
kustarev
Добрый день.

Данная тема посвящена проведению учебно-исследовательской работы студентов и практики студентов кафедры ВТ 2-го курса 2011/12 уч. года
под руководством доц. Кустарёва Павла Валерьевича.

Материалы и ссылки по теме УИРС:

1)документация, примеры программирования и инструментальное программное обеспечение для стенда SDK-1.1:
http://embedded.ifmo.ru/index.php/support/sdk-11

С уважением,
Кустарев П.В.

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 25 янв 2012, 14:16
kustarev
Добрый день.

Встреча со студентами будет проводиться в четверг 26.01.2012 в 16-00 в ауд.300 в здании ИТЦ НИУ ИТМО по адресу Биржевая линия В.О. д.14.

Как попасть: войти через главный вход (под большим козырьком, опирающимся на 2 столба) в здание. Проход поста охраны - по студенческим пропускам, по которым вы проходите в главное здание.
Если охранники спросят: "Куда идете" - говорите, что идете в лабораторию кафедры вычислительной техники на 3-й этаж.
Далее, после поста охраны, идете по первому этажу прямо вглубь здания, проходите мимо красивой старинной круговой лестницы, идете дальше по коридору 20 м., пока не упретесь в стену. Направо будет вход в столовую, но вы поворачиваете налево и через 5 метров будет широкая лестница. По ней поднимаетесь на 3-й этаж, справа будет дверь, рядом кнопка звонка. Вам туда. Нажимаете кнопку, прислушиваетесь, что сработала и слышна мелодия звонка. Если нет - нажимаете кнопку повторно. Если не открыли - нажимаете еще раз через полминуты. Не открыли - ждите здесь, на лестнице.
Когда откроют дверь, входите в лабораторию и ждите меня в первой комнате (лекционный класс). Если меня долго нет - входите во вторую комнату (компьютерный класс) и звоните мне по телефону (номер написан у телефона).

По содержанию завтрашней встречи: это будет вводное занятие, где я расскажу, чем занимается направление "Встроенные вычислительные системы" кафедры ВТ, поясню, чем конкретно будем заниматься, расскажу об учебном стенде, с которым вы будете работать, выдам стартовое задание. В завершении проведу экскурсию по участку по производству электронной аппаратуры.

С уважением,
Кустарев П.В.

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 28 янв 2012, 17:31
Serkhiomel
Здравствуйте, Павел Валерьевич.

Пишу Вам от имени студентов, которые по причине отъезда не могли присутствовать на вводном занятии. Мы приносим извинения за неявку. Ниже приведен минимальный список этих студентов (мы все к Вам записывались на первом занятии). Людей скорее всего больше, но я о них не знаю.
1. Савицкая Александра - 2100
2. Ильина Ксения - 2100
3. Кочетков Илья - 2100
4. Леготин Александр - 2105
5. Мелехин Сергей - 2105
...

Со слов присутствовавших на первом занятии очень сложно понять, что же все-таки нужно сделать и в каком объеме на второе занятие. Поэтому, если Вам не трудно, не могли бы Вы продублировать вкратце первое задание в этом форуме. Также мы хотели бы попросить Вас провести второе занятие после так называемых каникул (после 6 числа февраля, если это возможно), иначе мы его снова пропустим.

С уважением,
студент группы 2105
Мелехин Сергей.

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 30 янв 2012, 02:15
kustarev
Здравствуйте.

Пока никого из осенних списков не вычеркивал. То, что будут не все понимал и претензий не имею.
Однако в форуме дублировать 2 часа рассказа не буду.

Кратко по сути занятий:
- заниматься будем изучением устройства ЭВМ и программированием ЭВМ на уровне аппаратуры на примере
простейшей однокристальной ЭВМ (или иначе "микроконтроллер") ADuC812 семейства MCS-51 (или 8051 - как кто привык).
В качестве "испытательной базы" будем использовать учебный стенд SDK-1.1, используемый на нашей кафедре.

Про все это можно прочитать в документах здесь:
http://embedded.ifmo.ru/index.php/support/sdk-11

Программирование будет осуществляться на языке C, возможно использование ассемблера. Для разработки и отладки программ будем использовать инструментальное программное обеспечение (редактор, компилятор, симулятор/отладчик программ) C51 Development Tools фирмы Keil . Последнюю версию можно взять здесь https://www.keil.com/demo/eval/c51.htm . Она с ограничениями, но для Ваших задач пока хватит. На том же сайте найдете документацию и примеры программирования (правда все на английском, но без технического английского в области вычислительной техники никак).

Задача к следующему занятию:
1) Разобраться в первом приближении с устройством стенда SDK-1.1 и процессора (микроЭВМ, микроконтроллера) ADuC812, установленного в этом стенде. Задача не понять все (это невозможно так сразу), а начать задавать мне вопросы.
2) Скачать и установить Keil C51. Попытаться скомпилировать и отлаживать в симуляторы проект HELLO , прилагаемый в примерах. Т.е. потихоньку осваивать инструмент разработки программного обеспечения для микроконтроллеров MCS-51 (8051).
3) Попытаться разработать программу, которая сможет устанавливать различные логические уровни (а в физическом смысле - различные уровни напряжения) на ножках (портах) мироконтроллера ADuC812, а так же считывать значения уровней, установленных на этих портах извне. Таким образом процессор (который встроен в микроконтроллер) сможет управлять подключенными к нему устройствами (например, зажигать светодиоды) или считывать состояния сигналов подключенных к нему устройств (например, датчиков). Все это нужно скомпилировать и симулировать в инструментальной среде Keil C51.

Пока все.
Есть вопросы -пишите.

С уважением,
Кустарев П.В.

P.S. Ваши пожелания по времени следующей встречи учту.

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 10 фев 2012, 15:39
kustarev
Добрый день всем.

К сожалению на этой неделе не получилось встретиться. Встретимся на следующей.

Сообщаю, что к руководству Вашим УИРС будут привлечены студенты-магистранты 5-го курса.
Они будут непосредственно контролировать Вашу практическую работу: у них навык практической деятельности свежее, чем у меня.
Кроме того, эти магистранты ведут реальные студенческие исследовательские и опытно-конструкторские работы, к которым вы,
если проявите себя, в перспективе сможете присоединиться.

Еще раз напоминаю: пока на прохождение практики/УИРС у меня ограничений нет. Жду всех желающих.

С уважением,
Кустарев П.В.

P.S. В понедельник лекцию будет вести Довгий П.С. - объяснит материал и ответит на вопросы по подготовке к Тесту №1 "Прикладная архитектура ЭВМ"

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 16 фев 2012, 11:32
kustarev
Добрый день.

Очередная встреча по УИРС пройдет в среду 22.02.2012 с 13-20 до 15-40, в здании на Кронверкском 49 в аудитории 369A.
Занятие будем проводить совместно я и магистрант 5-го курса Андриенко Евгений.
Будем рассматривать ваши решения по управлению портами ввода-вывода микроконтроллера ADuC812 (MCS-51) - это Вам предлагалось на самостоятельную проработку. Поэтому прошу быть готовыми.
Ссылка на документацию - см. первое сообщение в теме.

Далее покажем, как выполняется загрузка и отладка программного обеспечения в учебном стенде SDK-1.1.

С уважением,
Кустарев П.В.

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 17 фев 2012, 21:34
h0rr0rr_drag0n
Занятие будем проводить совместно я и магистрант 5-го курса Андриенко Евгений.

Отмечусь здесь на всякий случай.
Если возникнут какие-нибудь вопросы, то лучше писать мне письмо на E-mail: evg.andrienko гмыло-ком. Можно писать и сюда в личку, но я редко бываю на самом форуме ибо смотрю обновления на нем через RSS.

2kustarev
Павел Валерьевич, если мы будем показывать загрузку и отладку программ в SDK1.1 исключительно в "демонстрационных" целях ("смотрите, вот что вас ждет на 3 курсе!"), то я могу притащить свою старую программу - часы-будильник для SDK1.1. По-крайней мере это, как мне кажется, будет интереснее смотреть, чем простое мигание светодиодом...

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 26 фев 2012, 10:03
Сухов Стас
Здравствуйте, Павел Валерьевич.

Я бы хотел обратиться к вам по поводу времени встреч по УИРСу. Дело в том, что у двоих студентов (в частности, Сухов С. и Колтавский А., гр 2105) английский по средам начинается в 14:20, а у остальных - в 11:00. Не могли бы вы как-нибудь изменить время встречи? Например, на более позднее время?

Прошу прощения за то, что это сообщение написано не своевременно.
С уважением,
студент группы 2105,
Сухов Станислав.

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 26 фев 2012, 13:40
h0rr0rr_drag0n
Перенести встречу на более позднее время точно не получится - у меня с 15.50 две пары с Алиевым, которые лучше не пропускать...

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 26 фев 2012, 13:46
Beomage
Здравствуйте, Павел Валерьевич.
К сожалению, мы с Вами не смогли встретиться в среду. Прошу записать меня следующих студентов на прохождение УИРСА и практики по Вашему направлению:
1. Чуглов Антон
2. Арфанян Мурад

С уважением,
студент группы 2105
Чуглов Антон.

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 26 фев 2012, 14:12
h0rr0rr_drag0n
На всякий случай продублирую здесь свои рекомендации по поводу литературы. Если кто-то еще не читал документацию на ADuC812 - самое время это сделать. Это поможет вам не только на УИРСе, но и на лабораторных по ОргЭВМ и пригодится на 3 и на 4 курсах, когда многие из вас будут заниматься программированием стендов SDK1.1 в рамках лабораторных по "Информационно-управляющим системам" и "Интерфейсам периферийных устройств". Думаю документов, которые выложены тут - http://embedded.ifmo.ru/index.php/support/sdk-11, в секции "Микроконтроллер ADuC812 (рус.)", будет достаточно.

Еще я настоятельно рекомендую изучать язык C. Он достаточно широко применяется в работе со стендом SDK1.1 и для программирования микроконтроллеров вообще. Необходимо изучать стандарт ANSI C, всякие Visual C здесь не нужны. С некоторыми отличиями C51, который применяется в MCS51, от ANSI C, думаю можно познакомиться по ходу работы...
Отличная книга по ANSI C от создателей языка - "Язык программирования C. Брайан Керниган, Деннис Ритчи". Читается за две недели неспешного пролистывания страниц. Если вы ее всю прочитаете и запомните - вы будете знать C. Эта книга есть на "Озоне" (http://www.ozon.ru/context/detail/id/2480925/), в доме Книги и вообще, она валяется на каждом углу в интернете. Отмечу, что необходимо именно второе издание! В первом вас ждет устаревший синтаксис, как минимум...
По части специфики написания программ под микроконтроллеры могу посоветовать, для начала, вот эти ссылки:
http://chipenable.ru/index.php/programming-c/60-how-to-use-cs-volatile-keyword.html
http://chipenable.ru/index.php/programming-c/68-c-test-the-0x10-best-questions-for-would-be-embedded-programmers.html
http://bsvi.ru/stil-ss-oformlenie/
http://bsvi.ru/wtf-volatile/
К сожалению, мне не известна какая-либо специализированная литература по данному предмету - я просто набивал шишки, спрашивал преподавателей и читал всю доступную мне информацию о С в embedded в интернете =).

В "странном" поведении портов ввода-вывода я разобрался - объяснение напишу чуть попозже, вечером. Тем же, кому не терпится познать истину, всячески рекомендую к прочтению материал по следующей ссылке: http://www.mikroe.com/eng/chapters/view/65/chapter-2-8051-microcontroller-architecture/#ch2.3

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 26 фев 2012, 22:31
h0rr0rr_drag0n
Рассказываю, что там было с портами. В прошлую среду многие столкнулись с тем, что установить значение для порта P0 можно только один - первый раз, присваивания для второй и следующих попыток оказывали воздействие только на содержимое регистра порта, а на его ножки, если они меняли их состояние из 0 в 1 - нет.
С портом P1 было что-то то же самое, но это как раз таки нормально - ведь порт P1, как следует из документации, может работать только на вход, но не на выход.
Я немного поэкспериментировал дома - оказалось, что порты, начиная с P2 и далее, работают без подобных вывертов. То есть, код вида:
Код: Выделить всё
P2 = 0xbb;
P2 = 0xaa;

отрабатывает именно так, как и ожидается. Следовательно, между портом P0 и, например, портом P2 есть какая-то разница... И она действительно есть!

Вот примерно так (весьма и весьма схематично) выглядит внутреннее устройство порта P2, точнее той его части, что работает на выход:
P2_port.png
Строение порта P2
P2_port.png (14.22 Кб) Просмотров: 33648

Тот самый регистр, куда вы заносите байт операцией P2 = 0xbb - это "register (P2)". Его же содержимое отражается в верхней линейке чекбоксов (Reg) в окне, отображающем состояние порта P2 в симуляторе кейла.
Железная же ножка, которая торчит из корпуса микроконтроллера - на схеме это "Pin", квадратик с крестиком внутри. В симуляторе кейла ее состояние отражается в нижней линейке чекбоксов (Pin) в соответствующем окне. По понятным причинам, я не стал рисовать все восемь ножек, а нарисовал лишь одну, для бита #1.
Между ножкой и регистром есть схема сопряжения, нужная хотя бы для того, чтобы не сжечь к такой-то матери все внутренности микроконтроллера, если через ножку потечет слишком большой ток - сгорит лишь схема сопряжения, что не так страшно.

Теперь, о том, как все это работает. Для лучшего понимания, применю весьма близкую аналогию с водопроводом.
Представим, что GND - земля, "минус батарейки" - это канализация с черной дырой внутри, куда все неизбежно стекает. Провода - водопроводные трубы, по которым течет вода. VCC - питание, +5 вольт - это бак с водой на крыше небоскреба. Транзистор - это водопроводный вентиль. Резистор - сужение в трубе, предназначенное для того, чтобы вся вода не утекла сразу же в канализацию, унеся с собой детали от водопроводного вентиля, трубы и прочие штуки. Ну а ножка - ответвление от трубы, подключаемое к другой схеме.

Итак, что у нас происходит, когда мы записываем единицу в первый бит регистра? Вентиль закрыт. Вода из бака вытекает под напором из ответвления, наполняя собой трубы, подключенные к нему - иначе говоря, на ножке у нас логическая единица.
P2_port_1.png
P2 - логическая единица
P2_port_1.png (14.79 Кб) Просмотров: 33648

Если же мы вместо единицы, запишем ноль - вентиль открывается и вода из бака улетает сразу в канализацию, а ответвлению ничего не достается (у нас ведь черная дыра там, не забыли?). Более того, если в трубах, подключенных к ответвлению была какая-то вода, то она тоже сливается в канализацию. Это - логический ноль.
P2_port_0.png
P2 - логический ноль
P2_port_0.png (17.33 Кб) Просмотров: 33648


Перейдем же теперь к упомянутой особенности порта P0.
P0_port.png
Устройство порта P0
P0_port.png (9.13 Кб) Просмотров: 33648

Как видно, у него нет ни небоскреба с баком (VCC), ни тем более сужения в трубе после бака (pull up резистора). Все что мы можем здесь - это открыть транзистор и установить логический ноль на ножке. Если транзистор закрыт - у нас уже не будет состояния логической единицы! Небоскреба с баком нет, давления в системе нет, вода не заливается в ответвление, ни тем более (вентиль ведь закрыт) не высасывается из него в канализацию.
Иными словами, ножка просто "плавает в воздухе". В железе, состояние ножки будет зависеть от фазы луны и настроения императора Галактики Ская Фалькорра с планеты Дракия. На ножке может быть как ноль, так и единица, или же вообще некие случайные колебания напряжения...

Чтобы использовать такой порт для вывода, к нему таки подключают и питание (VCC), и ограничительный резистор, но делают это уже снаружи микросхемы. Преимущества - можно подобрать резистор, который сможет выдержать такие токи, от которых внутренний резистор давно бы помер, вместе с транзистором.
Но у нас в симуляторе кейла, есть только внутренности микроконтроллера, объяснить симулятору, что мы хотим еще и внешние pull-up резисторы, мы не можем (вроде бы). А с тем "огрызком" что у нас есть, все что мы можем - выставить логический ноль на пине и все...

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 01 мар 2012, 12:07
kustarev
Добрый день.

1) Прошу студентов посещающих занятия УИРС (и заинтересованных в этом на будущее), но ранее не записанных у меня, прислать мне свои ФИО, номер группы, номер сот. телефона и email.

2) Если есть такие, кто решил выйти из данной группы УИРС в связи со сменой интересов, переходом в другую группу УИРС и иными обстоятельствами, также прошу уведомить меня, чтобы в будущем у нескольких преподавателей не получилось дублированной отчетности по студентам - участникам УИРС.

3) В связи с возникающими вопросами информирую, что по результатам УИРС, чтобы получить "зачет" нужно будет написать и защитить отчет по выполненной работе. Отчет будет приниматься индивидуально.

4) Прошу подумать, есть ли у кого интерес/склонность к работам в области электроники/схемотехники/конструирования печатных плат. Данная область достаточно специфическая, скорее смежная для Вашей специальности, поэтому заниматься ей могут лишь те из Вас, у кого есть реальный интерес. В случае освоения соответствующих технологий данные студенты могут привлекаться для работ в ВУЗе и в сторонних организациях.

С уважением,
Кустарев П.В.

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 04 мар 2012, 00:02
dontspeaker
Здравствуйте, Павел Валерьевич!
Хотим уведомить Вас о выходе из группы УИРС. Спасибо за уделенное внимание.
С уважением, студ. Савицкая Александра (гр.2100) и студ. Кочетков Илья (гр.2100).

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 07 мар 2012, 23:01
h0rr0rr_drag0n
Выкладываю, как и обещал, презентацию с сегодняшнего занятия.
presentation.pdf
Прерывания. Таймеры.
(566.55 Кб) Скачиваний: 1513

Вот задание на следующее занятие. Необходимо написать программу, которая зажигает и гасит светодиод каждые 500 миллисекунд (500 мс горит, потом 500 мс не горит и так до бесконечности), используя рассмотренную сегодня функцию задержки на заданное количество миллисекунд. Для этого вам потребуется реализовать инициализацию таймера, поработать с подсистемой прерываний и сделать функцию, которая будет "засыпать" на заданное количество миллисекунд. Отмечу, что использовать функцию из моей презентации следует с осторожностью - она требует доработки в плане добавления отсутствующих критических секций.
Замечу, что программа должна будет работать под стендом SDK1.1, а не в симуляторе Keil'а! Пишите программу с учетом особенностей стенда SDK1.1. Опять таки, все это рассматривалось на сегодняшнем занятии.

Компилировать программу надо не в Keil'е, а при помощи компилятора sdcc и утилиты make. Возможно, будет проще, если вы возьмете готовый пример программы, например "Пример работы со светодиодными индикаторами" и измените его так, как вам будет нужно. Все это, вы можете найти по следующей ссылке: http://embedded.ifmo.ru/index.php/support/sdk-11
Операционная система для запуска всего этого добра - Windows. Те, кто использует Линукс, надеюсь сами без труда разберутся как все это запустить под ним.
Удачи! :twisted:

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 29 мар 2012, 10:02
kustarev
Добрый день.

Информация для тех, с кем договаривался встретиться сегодня (29.03.12) на Биржевой. Я смогу приехать не раньше 15-30, поэтому прошу либо додойти к этому времени, либо подождать меня (можно прямо в ауд. 300)

С уважением,
Кустарев П.В.

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 01 май 2012, 23:52
h0rr0rr_drag0n
Выкладываю список заданий, которые необходимо сделать и оформить в виде отчета, чтобы получить зачет по УИРСу. Крайний срок сдачи отчета - конец мая 2012 года.
https://docs.google.com/spreadsheet/ccc ... EdCSW5OU3c

Re: УИРС и практика 2-й курс 2012, рук. Кустарев П.В.

СообщениеДобавлено: 04 май 2012, 12:21
h0rr0rr_drag0n
На прошлом занятии возникли проблемы с выводом длинных строк через UART и выполнение части заданий, связанных с выводом ASCII графики, оказалось под угрозой. Спешу всех успокоить - мой драйвер в этом не виноват). Проблема крылась несколько в иной области...
Дело в том, что согласно используемым вами Makefile'ам sdcc компилирует вашу программу с ключом --stack-auto. Данный ключ заставляет компилятор помещать все автоматические переменные, к коим относится и наша длинная строка, в стек, который по умолчанию расположен во внутренней памяти ADuC812. А как вы должны знать из курсов Скорубского - размер этого стека увы слишком мал для размещения в нем по-настоящему длинных строк. Модификатор xdata увы не спасает ситуацию - ваша переменная все равно будет размещена в стеке:
Код: Выделить всё
unsigned char foo() {
   xdata unsigned char i;
   bit bvar;
   data at 0x31 unsigned char j;
   ...
}


In the above example the variable i will be allocated in the external ram, bvar in bit addressable space and j in internal ram. When compiled with --stack-auto or when a function is declared as reentrant this should only be done for static variables.

(документация по sdcc - "SDCC Compiler User Guide, rev 1.123", стр. 33)

Потому тестовая программа для вывода длинных строк выводила всякий мусор - условие *str == '\0' не выполнялось никогда, поскольку конец строки внезапно не влезал в стек и uart_printchar() выводил "мусорные" символы либо бесконечно, либо пока ему случайно не встретится '\0' в какой-нибудь ячейке памяти.

Есть два основных выхода из этого положения. Первый - объявлять большие массивы и строки с модификаторами static xdata. И второй - удалить из опций для sdcc ключ --stack-auto (переменные CFLAGS и LDFLAGS в вашем Makefile).

Удачи! :)