Особенности разработки микропроцессорной системы и устройства для чтения электронных книг

Содержание



Перечень условных обозначений, символов, единиц, сокращений и терминов

Введение

1. Теоретические основы разработки

1.1 Разработка микропроцессорной системы на основе микроконтроллера

1.2 Устройства для чтения электронных книг

2. Разработка устройства для чтения электронных книг

2.1 Постановка задачи

2.2 Разработка структурной схемы устройства и функциональной

спецификации

2.3 Аппаратные средства микроконтроллеров серии AT90S8515

2.4 Разработка функциональной схемы устройства

2.5 Разработка программного обеспечения микроконтроллера

2.6 Выбор элементной базы

2.7 Разработка схемы электрической принципиальной

3. Технико-экономическое обоснование объекта разработки

3.1 Расчет расходов на ПО, которое разрабатывается

3.2 Расчет расходов на создание ПО

3.3 Расчет стоимости разработки конструкторской документации и сборки устройства

3.4 Расчет расходов на стадии производства изделия

3.5 Анализ устройств-аналогов

4. Охрана труда

4.1 Требования к производственным помещениям

4.1.1 Окраска и коэффициенты отражения

4.1.2 Освещение

4.1.3 Параметры микроклимата

4.1.4 Шум и вибрация

4.1.5 Электромагнитное и ионизирующее излучения

4.2 Эргонометрические характеристики рабочего места

4.3 Электропожаробезопасность

4.4 Режим труда

4.5 Расчет освещенности

4.6 Расчет вентиляции

4.7 Расчет уровня шума

Выводы

Перечень ссылок




Перечень условных обозначений, символов, единиц, сокращений и терминов



АЛУ - арифметико - логическое устройство;

АЦП – аналого-цифровой преобразователь;

ВДТ - видеодисплейный терминал;

ЖКИ- дисплей – жидкокристаллический дисплей;

КПК – карманный персональный компьютер;

МПС – микропроцессорная система;

ОЗУ - оперативно-запоминающее устройство;

ОМК – однокристальные микроконтроллеры;

ПЗУ – программно-запоминающее устройство;

ПО – программное обеспечение;

РС – регистр сдвига.




Введение



Микропроцессоры и производные от них — микроконтроллеры — являются широко распространенным и при этом незаметным элементом инфраструктуры современного общества, основанного на электронике и коммуникациях. Исследования, проведенные в 2008 году, показали, что в каждом доме незаметно для нас «живет» около 100 микроконтроллеров и микропроцессоров. Они присутствуют буквально всюду: в звуковых открытках, стиральных машинах, микроволновых печах, телевизорах, телефонах, персональных компьютерах и разных других устройствах. Даже в самом обыкновенном автомобиле скрывается более двадцати таких элементов, где они, в частности, контролируют состояние беспроводных датчиков давления в шинах и отображают критичные данные.

Каждый год продается около четырех миллиардов подобных изделий, предназначенных для реализации «мозгов» разнообразных «умных» устройств, начиная от интеллектуальных таймеров для яйцеварок и заканчивая системами управления самолетом. Эволюция микропроцессоров, первые из которых были выпущены компанией Intel в далеком 1971 году, привела к коренному изменению структуры общества, спровоцировав в начале XXI века вторую промышленную революцию. Несмотря на то что микропроцессоры, являясь основным компонентом вездесущих ПК, известны лучше, объем продаж различных микропроцессоров, таких как Intel Pentium, составляет всего около 2% от общего объема продаж подобных устройств. Подавляющее же большинство продаж приходится на дешевые микроконтроллеры, встраиваемые в специализированные электронные устройства, такие как смарт-карты. Причем если основной задачей микропроцессоров является обеспечение собственно вычислительной мощности, то во втором случае акцент смещается в сторону объединения на одном кристалле центрального процессора, памяти и устройств ввода/вывода. Такая интегрированная вычислительная система называется микроконтроллером.

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

Тема дипломной работы – «Разработка устройства для чтения книг», которая и является предметом исследования.

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

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

Основные этапы исследования:

- ознакомление с теорией разработки электронных устройств на микроконтроллерах;

- разработка устройства для чтения книг;

- анализ технико-экономических показателей разработанного устройства и сравнение с показателями аналогичных существующих устройств.


1. Теоретические основы разработки



1.1 Разработка микропроцессорной системы на основе микроконтроллера



МПС на основе МК используются чаще всего в качестве встроенных систем для решения задач управления некоторым объектом. Важной особенностью данного применения является работа в реальном времени, т.е. обеспечение реакции на внешние события в течение определенного временного интервала. Такие устройства получили название контроллеров.

Перед разработчиком МПС стоит задача реализации полного цикла проектирования, начиная от разработки алгоритма функционирования и заканчивая комплексными испытаниями в составе изделия, а, возможно, и сопровождением при производстве. Сложившаяся к настоящему времени методология проектирования контроллеров может быть представлена так, как показано на рисунке 1.1.

В техническом задании формулируются требования к контроллеру с точки зрения реализации определенной функции управления. Техническое задание включает в себя набор требований, который определяет, что пользователь хочет от контроллера и что разрабатываемый прибор должен делать. Техническое задание может иметь вид текстового описания, не свободного в общем случае от внутренних противоречий.

На основании требований пользователя составляется функциональная спецификация, которая определяет функции, выполняемые контроллером для пользователя после завершения проектирования, уточняя тем самым, насколько устройство соответствует предъявляемым требованиям. Она включает в себя описания форматов данных, как на входе, так и на выходе, а также внешние условия, управляющие действиями контроллера.





Рисунок 1.1- Основные этапы разработки контроллера



Этап разработки алгоритма управления является наиболее ответственным, поскольку ошибки данного этапа обычно обнаруживаются только при испытаниях законченного изделия и приводят к необходимости дорогостоящей переработки всего устройства. Разработка алгоритма обычно сводится к выбору одного из нескольких возможных вариантов алгоритмов, отличающихся соотношением объема программного обеспечения и аппаратных средств.

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

- разрядность;

- быстродействие;

- набор команд и способов адресации;

- требования к источнику питания и потребляемая мощность в различных режимах;

- объем ПЗУ программ и ОЗУ данных;

- возможности расширения памяти программ и данных;

- наличие и возможности периферийных устройств, включая средства поддержки работы в реальном времени (таймеры, процессоры событий и т.п.);

- возможность перепрограммирования в составе устройства;

- наличие и надежность средств защиты внутренней информации;

- возможность поставки в различных вариантах конструктивного исполнения;

- стоимость в различных вариантах исполнения;

- наличие полной документации;

- наличие и доступность эффективных средств программирования и отладки МК;

- количество и доступность каналов поставки, возможность замены изделиями других фирм.

Список этот не является исчерпывающим, поскольку специфика проектируемого устройства может перенести акцент требований на другие параметры МК.

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

Однако для реализации на практике возможности выбора оптимального МК необходима достаточно глубокая проработка алгоритма управления, оценка объема исполняемой программы и числа линий сопряжения с объектом на этапе выбора МК. Допущенные на данном этапе просчеты могут впоследствии привести к необходимости смены модели МК и повторной разводки печатной платы макета контроллера. В таких условиях целесообразно выполнять предварительное моделирование основных элементов прикладной программы с использованием программно-логической модели выбранного МК.

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

После разработки структуры аппаратных и программных средств дальнейшая работа над контроллером может быть распараллелена. Разработка аппаратных средств включает в себя разработку общей принципиальной схемы, разводку топологии плат, монтаж макета и его автономную отладку. На этапе ввода принципиальной схемы и разработки топологии используются, как правило, распространенные системы проектирования типа "ACCEL EDA" или "OrCad".

Содержание этапов разработки программного обеспечения, его трансляции и отладки на моделях существенно зависит от используемых системных средств. В настоящее время ресурсы 8-разрядных МК достаточны для поддержки программирования на языках высокого уровня. Это позволяет использовать все преимущества структурного программирования, разрабатывать программное обеспечение с использованием раздельно транслируемых модулей. Одновременно продолжают широко использоваться языки низкого уровня типа ассемблера, особенно при необходимости обеспечения контролируемых интервалов времени. Задачи предварительной обработки данных часто требуют использования вычислений с плавающей точкой, трансцендентных функций.

В настоящее время самым мощным средством разработки программного обеспечения для МК являются интегрированные среды разработки, имеющие в своем составе менеджер проектов, текстовый редактор и симулятор, а также допускающие подключение компиляторов языков высокого уровня типа Паскаль или Си. При этом необходимо иметь в виду, что архитектура многих 8-разрядных МК вследствие малого количества ресурсов, страничного распределения памяти, неудобной индексной адресации и некоторых других архитектурных ограничений не обеспечивает компилятору возможности генерировать эффективный код.

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



1.2 Устройства для чтения электронных книг



Википедия определяет понятие электронной книги (е-книги, ebook и пр.) как двуединство, состоящее из электронного документа (вида цифрового контента) и электронного читающего устройства (его также называют электронной книгой и е-книгой).

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

Из-за дефицита машинного времени читать такие книги на компьютерах (даже имеющих дисплеи) было сложно. Главной задачей электронных текстов в тот период было обеспечение безболезненной малозатратной (по сравнению с перепечаткой или дублированием различными множительными устройствами) передачи книг максимальному количеству пользователей.

Из-за дефицита машинного времени и отсутствия в то время персональных компьютеров на работе и дома, чтобы иметь возможность прочесть электронные книги, их приходилось сначала распечатывать. В условиях повсеместного дефицита книг такие распечатки пользовались популярностью, несмотря на то, что большинство компьютеров и принтеров в ту пору имели проблемы с кириллизацией.

С появлением и укоренением персональных компьютеров (ПК), исчезновением (минимизацией) дефицита машинного времени, улучшением качества дисплеев, утверждением полноценной кириллизации и возможностей шрифтового форматирования улучшилось (приблизилось к качеству печатной продукции) качество машиночитаемых текстов, увеличилось их количество. Чтение на ПК художественной и особенно специальной литературы стало понемногу заметным и общепринятым явлением.

Машиночитаемые документы становятся всё более типичным способом передачи документации от разработчика (производителя) оборудования к потребителю (пользователю). Эта тенденция усилилась, когда появилась возможность скачивать документацию из Интернета. Тем не менее время, когда чтение машиночитаемых документов начало вытеснять чтение бумажной документации, тогда еще не наступило.

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

Однако пока ПК были стационарными, преимущество печатной книги перед её машиночитаемым аналогом состояло в возможности мобильного чтения - в транспорте, на даче, «на диване» и т.п. С другой стороны, преимущество электронной книги перед печатной книгой - возможность быстрого, безболезненного и практически бесплатного копирования в условиях дефицита печатной литературы - вскоре привело к широкому спросу на электронные книги, хотя технически «подкованные» пользователи ПК хорошо осознавали ограниченность их в плане мобильного чтения.

Дорогостоящие профессиональные сканеры использовались прежде всего для подготовки электронной документации. Появление недорогих офисных и бытовых сканеров и программ распознавания текста в сочетании со ставшими и в Украине (в конце прошлого тысячелетия) достаточно широко доступными возможностями Интернета, привели к повсеместному распространению электронных книг и обеспечили их значительный ассортимент. Были созданы общедоступные Интернет-библиотеки. Если на Западе эта работа активно финансировалась и финансируется (общеевропейский проект «Гуттенберг», проект Gallica Национальной библиотеки Франции, Google Book Search; многоязычная электронная-библиотека в США, некоммерческий проект Archive.org и др.), то в Украине работа в основном велась (и по сей день ведется) на энтузиазме.

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

Появление и широкое распространение удобных (как по цене, так и по уровню необходимой для уверенного пользования первичной подготовки), гораздо более легких и значительно более малогабаритных субноутбуков, планшетных ПК, карманных ПК, коммуникаторов и смартфонов, а также «продвинутых» мобильных телефонов (с поддержкой Java), практически идеально подходивших для мобильного чтения электронных книг, свело на нет преимущество печатных книг по мобильности чтения.

Важным фактором, способствовавшим продвижению электронных книг в Украине, явились сложности распространения печатной продукции. В связи с падением покупательной способности населения многих регионов сеть распространения печатной продукции «съёжилась» до минимума и стала пропускать только книги с гарантированной, по мнению продавцов, реализацией.

Первые специализированные устройства для чтения е-книг не выдержали конкуренции с КПК.

Феномен е-чтения (чтения на электронных устройствах е-книг - книг в машиночитаемых форматах) получил достаточно широкое распространение и на Западе. Там уже в прошлом тысячелетии наряду с программами-«читалками» е-книг для универсальных вычислительных устройств появляются не только прототипы, но и реально имеющиеся в продаже специализированные устройства для чтения е-книг.

По удобству чтения специализированные машины превосходили универсальные. Благодаря большому монохромному экрану увеличивалось, по сравнению с КПК, время автономной работы и делался больше размер видимой страницы. Продуманный эргономичный интерфейс, близкий к привычным метафорам бумажного чтения, обеспечивал большую комфортность чтения, чем маленькие цветные («бликующие» на солнце) экранчики КПК, коммуникаторы, смартофоны и продвинутые телефоны (с поддержкой Java).

Сдерживается сегодня данное направление тем, что экраны у телефонов пока не слишком велики (что неудобно для чтения), и тем, что телефоны при чтении «съедают» слишком много энергии.

Вот такой была первая аппаратная е-книга, сравнимая по удобству чтения с бумажной книгой (Rocket eBook). Большой монохромный жидкокристаллический экран, обеспечивающий как максимальное время работы, так и максимальную комфортность при чтении. Это устройство заметно опередило свое время. Из-за довольно высокой стоимости и отсутствия контентной составляющей большого количества устройств продать не удалось. Тем не менее, устройство до сих пор пользуется устойчивым спросом. Примененные при его создании интерфейсные приемы, имитирующие работу с бумажной книгой (в т.ч. «листание страниц»), стали промышленным стандартом.




2. Разработка устройства для чтения электронных книг



2.1 Постановка задачи



Разработать устройство для чтения книг на микроконтроллере, которое бы удовлетворяло следующим требованиям:

- простота схемы (минимальное количество компонентов);

- вывод информации на жидкокристаллический индикатор;

- долговечность;

- новизна конструкции;

- низкое энергопотребление.

Разработка этого устройства была вызвана желанием читать книги в электронном виде не только дома, с помощью настольного компьютера, но и в прочих местах - там же, где можно прочитать и обычную бумажную книгу.



2.2 Разработка структурной схемы устройства и функциональной спецификации



Структурная схема устройства для чтения электронных книг приведена на рисунке 2.1.





Рисунок 2.1 – Структурная схема устройства для чтения электронных книг



На рисунке 2.1 изображены функциональные узлы:

УВИ – устройство ввода информации;

БУ – блок управления;

КР – кварцевый резонатор;

МК – микроконтроллер;

РС- регистр сдвига;

ПУ – преобразователь уровней;

РСЧ – регулятор скорости чтения;

ЖКИ- жидкокристаллические индикаторы буквенно-цифровые.

Функциональная спецификация:

Входы

а. 3 кнопки управления (БУ) – закладка страницы, «перелистывание» страниц, вперед и назад ;

b. устройство ввода информации, записанной по COM-порту во flash-память;

с. регулятор скорости чтения (РС);

d. кварцевый резонатор – стабильность частоты генератора (КР).

Выходы

а. регистр - для защёлкивания младших 8 бит адреса (РС);

b. преобразование уровней (ПУ).

Функции:

а. запись на COM-порт во flash-память записанную книгу;

предусмотрена возможность "пролистывания" книги - на случай, если закладка не была положена, а питание устройства было отключено;

выбор функций и чтение происходит по нажатию трёх клавиш: выбор, вверх и вниз (БУ);

"сердцем" устройства является микроконтроллер (МК), управляющий шинами адреса-данных, принимающий команды от компьютера и выводящий на индикатор;

для защёлкивания младших 8 бит адреса служит регистр (РС);

преобразование уровней (ПУ);

вывод текста книги на алфавитно-цифровой индикатор с русифицированным знакогенератором (ЖКИ);

регулировка скорости чтения (РС).



2.3 Аппаратные средства микроконтроллеров серии AT90S8515



Для разработки устройства для чтения электронных книг выберем микроконтроллер серии AT90S8515.

AT90S8515 8-ми разрядный AVR® микроконтроллер с 8 Кбайт Flash памятью с поддержкой внутрисистемного программирования

Отличительные особенности:

AVR® - высокая производительность и RISC архитектура с низким энергопотреблением

118 мощных инструкций - большинство из них выполняются за один такт

8 Кбайт Flash- памяти с поддержкой внутрисистемного программирования:

- SPI последовательный интерфейс для загрузки программного обеспечения

Ресурс: 1000 циклов записи/ стирания

512 байт EEPROM

Ресурс: 100 000 циклов записи/ стирания

512 байт внутренней SRAM

32 х 8 рабочих регистров общего назначения

32 программируемые шины I/O

Программируемый последовательный UART

SPI последовательный интерфейс

Напряжение VCC: от 2.7В до 6.0 В

Полностью статический режим работы

От 0 до 8 МГц (от 4.0 В до 6.0 В)

От 0 до 4 МГц (от 2.7 В до 4.0 В)

Производительность, вплоть до 8 MIPS при 8 МГц

Один 16-ти разрядный таймер/ счетчик с отдельным предварительным делителем частоты с режимами сравнения, захвата

Сдвоенный ШИМ

Внешние и внутренние источники прерывания

Программируемый следящий таймер с встроенным тактовым генератором

Встроенный аналоговый компаратор

Режимы пониженного энергопотребления:

Покоя (Idle)

Отключения (Power Down)

Программируемая блокировка для безопасности программного обеспечения

Блок- схема AT90S8515 (Рисунок 2.2).



Рисунок 2.2 - Блок- схема AT90S8515



Расположение выводов микроконтроллера AT90S8515 (Рисунок 2.3).





Рисунок 2.2 – Расположение выводов микроконтроллера AT90S8515



Описание:

AT90S8515 является 8-ми разрядным CMOS микроконтроллером с низким уровнем энергопотребления, основанным на усовершенствованной AVR RISC архитектуре. Благодаря выполнению высокопроизводительных инструкций за один период тактового сигнала, AT90S8515 достигает производительности, приближающейся к уровню 1 MIPS на МГц, обеспечивая разработчику возможность оптимизировать уровень энергопотребления в соответствии с необходимой вычислительной производительностью.

Ядро AVR содержит мощный набор инструкций и 32 рабочих регистра общего назначения. Все 32 регистра напрямую подключены к арифметико - логическому устройству (АЛУ), что обеспечивает доступ к двум независимым регистрам при выполнении одной инструкции за один такт. В результате, данная архитектура имеет более высокую эффективность кода, при повышении пропускной способности, вплоть до 10 раз, по сравнению со стандартными микроконтроллерами CISC.

AT90S8515 имеет: 8 Кбайт Flash - памяти с поддержкой внутрисистемного программирования, 512 байт EEPROM, 512 байт SRAM, 32 линий I/O общего назначения, 32 рабочих регистра общего назначения, универсальные таймеры/ счетчики с режимами сравнения, внутренние и внешние прерывания, программируемый UART последовательного типа, программируемый следящий таймер с встроенным тактовым генератором и программируемый последовательный порт SPI, а также, два программно выбираемых режима экономии энергопотребления. Режим ожидания «Idle Mode» останавливает CPU, но позволяет функционировать SRAM, таймеру/ счетчикам, SPI порту и системе прерываний. Режим экономии энергопотребления «Power Down» сохраняет значения регистров, но останавливает тактовый генератор, отключая все остальные функции микроконтроллера, вплоть до следующего внешнего прерывания, или до аппаратной инициализации.

Устройство производится с применением технологи энергонезависимой памяти с высокой плотностью размещения, разработанной в корпорации Atmel. Встроенная Flash - память с поддержкой внутрисистемного программирования обеспечивает возможность перепрограммирования программного кода в составе системы, посредством SPI последовательного интерфейса, или с помощью стандартного программатора энергонезависимой памяти. Благодаря совмещению усовершенствованного 8-ми разрядного RISC CPU с Flash- памятью с поддержкой внутрисистемного программирования на одном кристалле получился высокопроизводительный микроконтроллер AT90S8515, обеспечивающий гибкое и экономически- высокоэффективное решение для многих приложений встраиваемых систем управления.

AVR AT90S8515 поддерживается полным набором программ и пакетов для разработки, включая: компиляторы С, макроассемблеры, отладчики/ симуляторы программ, внутрисхемные эмуляторы и наборы для макетирования.



2.4 Разработка функциональной схемы устройства



Теперь, когда мы составили структурную схему разрабатываемого устройства, зная тип микроконтроллера, мы можем приступить к построению функциональной схемы устройства для чтения электронных книг (Рисунок 2.3).





ПУ

КР

РСЧ

ЖКИ

РС







ЖКИ

С COM-порта во flash-память





Рисунок 2.3 – Функциональная схема устройства для чтения электронных книг




2.5 Разработка программного обеспечения микроконтроллера



Несвязанное с компьютером устройство может только считывать записанную в него книгу. Для стирания памяти либо записи в неё надо выбрать пункт меню: "Связь с ЭВМ", непосредственно затем послать либо число 0x5e, либо 0xe5. В первом случае устройсво перейдёт в командный режим, во втором - в отладочный, когда принимаемый от компьютера символ будет просто отображаться на экране.

Команды, подаваемые на устройство, таковы:

10 - стереть первую МС памяти,

20 - стереть вторую МС памяти,

30 - записать в память данные,

40 - считать из памяти начиная с текущего адреса,

50 - выставить текущий адрес.

Последние две команды являются также отладочными и не используются в обычном нормальном функционировании устройства. Первые две не требуют никаких дальнейших действий кроме ожидания сообщения на экране устройства, что память стёрта. Команда записи в память потребует сначала ввести заголовок данной книги (то есть автора и название, это нужно для дальнейшей идентификации текста при использовании устройства), завершив его посылкой символа 0x07, а затем передать массив текста. После окончания цикла записи символа в память устройство подтверждает приём, посылая этот же символ в компьютер, что позволяет контролировать скорость передачи данных, и не потерять данные при записи. Передача текста также финишируется посылкой кода 0x07. Этот код был выбран потому, что является управляющим и обозначает звонок, писк на динамике компьютера (bell), то есть принципиально не может встретиться в текстовых файлах.

Файлы программ находятся в приложениях А-З:

reader.asm – Приложение А;

rus.inc – Приложение Б;

reader.hex – Приложение В;

reader.cpp – Приложение Д;

reader.exe – Приложение Ж;

reader.ini – Приложение З.

Первый файл, reader.asm (Приложение А), содержит собственно код для AT90S8515, следующий файл содержит эквиваленты русских букв (AVR Studio традиционно некорректно работает с неанглийскими символами, причём проблема эта прекрасно известна программистам Atmel), reader.hex (Приложение В) - откомпилированный код, прошивка того, что получилось. Далее содержится пример программы для компьютера, написанной на языке Си под DOS, позволяющей записывать текстовые файлы - reader.cpp (Приложение Д), reader.exe (Приложение Ж) - это соответственно откомпилированный reader.cpp, а reader.ini (Приложение З) - файл настроек для программы. Настроек, собственно, две: это на какой порт подключено устройство (в примере поддерживаются только COM1 и COM2, впрочем, легко добавить в исходник программы и остальные порты) и кодировка записываемого текста (WIN или DOS). Само устройство отображает текст, который записан в него только в кодировке WIN, но поскольку очень много текстов в Интернете, доставшихся в наследство ещё от FIDO, имеют кодировку DOS, то программа позволяет перекодировать при записи, на лету, освобождая пользователя от этой предварительной процедуры. Также программа отфильтровывает "лишние" пробелы, получившиеся при форматировании текста, убирает переносы, оставляя нетонутыми дефисы и тире перед фразами речи. Для программы при запуске существуют два возожных параметра - либо "reader.exe e", означающий стирание памяти, либо "reader.exe w <имя_файла>", позволяющее записать файл. При записи программа попросит ввести имя автора и название книги.




2.6 Выбор элементной базы



Устройство предназначено для прочтения текстовой информации, записанной по COM-порту во flash-память AT49F040, на алфавитно-цифровом индикаторе с контроллером HD44780 фирмы Hitachi и русифицированным знакогенератором. Размер памяти 1 Мбайт, всего возможно записать 8 книг, с возможностью оставить закладку на каждую книгу. Размер дисплея 40х2 строчки, что, как показала практика, вполне достаточно для восприятия смысла написанного.

"Сердцем" устройства является микроконтроллер AT90S8515, управляющий шинами адреса-данных, принимающий команды от компьютера и выводящий на индикатор. Для защёлкивания младших 8 бит адреса служит регистр КР1533ИР33 (аналог 74ALS573). Для преобразования уровней RS-232C служит также хорошо известная микросхема ADM202 фирмы Analog Devices.

Особых приоритетов в выборе элементной базы нет, поэтому выбираем наиболее подходящие комплектующие, которые будут соответствовать критериам:

- минимизация размера;

- минимизация стоимости;

- надежность работы.

Единственно на что требуется обратить внимание – кнопки. Для эстетики можно поставить красивые и миниатюрные кнопки, но они не выдержат интенисивного нажимания (всё-таки двустрочный дисплей, нажимать прийдется где-то раз в секунду), поэтому прийдется поставить произведение отечественной "оборонки" - кнопки на основе концевиков - КМ1-1.

Спецификация элементов приведена в Приложении К.


2.7 Разработка схемы электрической принципиальной



Разрабатываем в Accel EDA схему электрическую принципиальную устройства для чтения электронных книг (Рисунок 2.4).





Рисунок 2.4 - Принципиальная схема устройства для чтения электронных книг в Accel EDA



Электрическая принципиальная схема устройства для чтения электронных книг приведена в Приложении Л.




3. Технико-экономическое обоснование объекта разработки



В данном разделе проводится технико-экономический расчет стоимости устройства для чтения электронных книг.

Стоимость устройства будет состоять из стоимости разработки ПО для микроконтроллера, стоимости разработки конструкторской документации (КД) и стоимости сборки и испытания устройства.



3.1 Расчет расходов на ПО, которое разрабатывается



Исходные данные для расчета стоимости разработки ПО, которое разрабатывается приведены в таблице 3.1.



Таблица 3.1 – Исходные данные по предприятию 

№п/п

Статьи затрат

 Усл. обоз.

Ед. изм.

Значения











Проектирование и разработка ПО

1

Часовая тарифная ставка программиста

Зпр

грн.

8,00

2

Коэффициент сложности программы

с

коэф.

1,40

3

Коэффициент коррекции программы

Р

коэф.

0,05

4

Коэффициент увеличения расходов труда

Z

коэф.

1,3

5

Коэффициент квалификации программиста

k

коэф.

1,0

6

Амортизационные отчисления

Амт

%

10,0

7

Мощность компьютера, принтера

WМ

Квт/ч

0,40

8

Стоимость ПЕОМ IBM

Sempron LE1150(AM2)/1GB/TFT

Втз

грн.

3200,00

9

Тариф на электроэнергию

Це/е

грн.

0,56

10

Норма дополнительной зарплаты

Нд

%

10,0

11

Отчисление на социальные расходы

Нсоц

%

37,2

12

Транспортно-заготовительные расходы

Нтр

%

4,0

Эксплуатация П0

13

Численность обслуживающего персонала

Чо

чел

1

14

Часовая тарифная ставка обслуживающего персонала

Зпер

грн.

6,00

15

Время обслуживания систем 

То

час/г

150

16

Стоимость ПЕОМ

Втз

грн.

3200,00

17

Норма амортизационных отчислений на ПЕОМ

На

%

10,0

18

Норма амортизационных отчислений на ПЗ

НаПО

%

10,0

19

Накладные расходы

Рнак

%

25,0

20

Отчисление на содержание и ремонт ПЕОМ 

Нр

%

10,0

21

Стоимость работы одного часа ПЕОМ

Вг

грн.

6,5



Первичными исходными данными для определения себестоимости ПО является количество исходных команд (операторов) конечного программного продукта. Условное количество операторов Q в программе задания может быть оценено по формуле:







где у – расчетное количество операторов в программе, что разрабатывается (единиц);

с – коэффициент сложности программы;

р – коэффициент коррекции программы в ходе ее разработки.

Рассчитанное количество операторов в разработанной программе – 200.

Коэффициент с – относительная сложность задания относительно отношения к типичной задаче, сложность которой принята более 1, лежит в границах от 1,25 до 2,0 и выбирается равным 1,30.

Коэффициент коррекции программы р – увеличение объема работ за счет внесения изменений в программу лежит в границах от 0,05 до 0,1 и выбирается равным 0,05.

Подставим выбранные значения в формулу (3.1) и определим величину Q:

Q = 200∙1,3 (1 + 0,05) = 273.




3.2 Расчет расходов на создание ПО



Расчет расходов на ПО проводится методом калькуляции расходов, в основу которого положена трудоемкость и заработная плата разработчиков. Трудоемкость разработки ПО рассчитывается по формуле:







где То – расходы труда на описание задания;

Ти – расходы труда на изучение описания задания;

Та – расходы труда на разработку алгоритма решения задания;

Тп – расходы труда на составление программы по готовой блок-схеме;

Тотл – расходы труда на отладку программы на ЭВМ;

Тд – расходы труда на подготовку документации.

Составные расходы труда, в свою очередь, можно определить по числу операторов Q для ПО, которое разрабатывается. При оценке расходов труда используются:

- коэффициенты квалификации разработчика алгоритмов и программ – k;

– увеличение расходов труда в результате недостаточного описания задания – Z.

Коэффициент квалификации разработчика характеризует меру подготовленности исполнителя к порученной ему работе (он задается в зависимости от стажа работы), k = 1,0.

Коэффициент увеличения расходов труда в результате недостаточного описания задания характеризует качество постановки задания, выданного для разработки программы, в связи с тем, что задание требовало уточнения и некоторой доработки. Этот коэффициент принимается равным 1,3.

Все исходные данные приведенные в таблице 3.1.

а) Трудоемкость разработки П0 составляет:

Расходы труда на подготовку описания задания То принимаются равными 5 чел/час, исходя из опыта работы.

Расходы труда на изучение описания задания Те с учетом уточнения описания и квалификации программиста могут быть определены по формуле:



;



Ти = 273∙1,3/80∙1 = 5(чел/час)

Расходы труда на разработку алгоритма решения задачи рассчитываются по формуле:



; 



Та=273/25∙1 = 11 (чел/час)

Расходы труда на составление программы по готовой блок-схеме Тп рассчитываются по формуле:



;



 (чел/час)

Расходы труда на отладку программы на ПЕОМ Тотл рассчитываются по формуле:

при автономной отладке одного задания:



;



 (чел/час)

при комплексной отладке задания:



;



 (чел/час)

Расходы труда на подготовку документации по заданию Тд определяются по формуле:



,



где Тдр – расходы труда на подготовку материалов в рукописи:



;



(чел/час)

Тдо – расходы труда на редактирование, печать и оформление документация:



.



(чел/час)

Подставляя приобретенных значений в формулу (3.8), получим:

 (чел/час)

Определим трудоемкость разработки ПО, подставив полученные значения составляющих в формулу (3.2):



Расчет трудоемкости и зарплаты приведен в таблице 3.2.




Таблица 3.2 – Трудоемкость и зарплата разработчиков ПО

Наименование этапов разработки

Трудоемкость чел/часов

Почасовая тарифная ставка программиста, грн. 

Сумма зарплаты, грн.

Описание задания

5

8,00

40,00

Изучение задания

5

8,00

40,00

Составление алгоритма решения задачи

11

8,00

88,00

Программирование

13

8,00

104,00

Отладка программы

55

8,00

440,00

Оформление документации

25

8,00

200,00

ВСЕГО:

114

8,00

912,00



б) Расчет материальных расходов на разработку ПО

Материальные расходы Мз, которые необходимы для создания ПО приведены в таблице 3.3.



Таблица 3.3 – Расчет материальных расходов на разработку ПО

Материал

Фактическое количество

Цена за единицу, грн.

Сумма, грн.

1. DVD

2

3,00

6,00

2. Бумага

500

0,10

50,00

ВСЕГО:





56,00

ТЗР (4%)





2,24

ИТОГО:





57,24



в) Расходы на использование ЭВМ при разработке ПО

Расходы на использование ЭВМ при разработке ПО рассчитываются, исходя расходов одного часа, по формуле:







где Вг – стоимость работы одного часа ЭВМ, грн.;

Тотл – расходы труда на наладку программы на ЭВМ, чел./час.;

Тд– расходы труда на подготовку документации, чел./час.; Тп – расходы труда на составление программы по готовой блок-схеме, чел./час.

 (грн.)

г) Расчет технологической себестоимости создания программы

Расчет технологической себестоимости создания программы проводится методом калькуляции расходов (таблица 3.4).



Таблица 3.4 – Калькуляция технологических расходов на создание ПО



Наименование

Расходы, грн.

1

Материальные расходы

57,24

2

Основная зарплата

912,00

3

Дополнительная зарплата (15,0 %)

136,80

4

Отчисление на социальные мероприятия (37,2 %)

390,15

5

Накладные расходы (25,0 %)

228,00

6

Расходы на использование ЭВМсоставлении программного обеспечения ПО

604,50

7

Себестоимость ПО микроконтроллера

2328,69



В таблице 3.4 величина материальных расходов Мз рассчитана в таблице 3.3, основная зарплата Со берется из таблицы 3.2, дополнительная зарплата составляет 15% от основной зарплаты, отчисление на социальные потребности – 37,2% от основной и дополнительной зарплат (вместе), накладные расходы – 25% от основной зарплаты. Себестоимость разработанной программы СПО рассчитывается как сумма пунктов 1 – 6.

Стоимость ПО для микроконтроллера составляет 2328,69 грн. на единицу продукции.



3.3 Расчет стоимости разработки конструкторской документации и сборки устройства



а) Трудоемкость разработки КД изделия (Т) рассчитывается по формуле:






где Татз – расходы труда на анализ технического задания (ТЗ), чел./час;

Трес – расходы труда на разработку электрических схем, чел./час;

Трк – расходы труда на разработку конструкции, чел./час;

Трт – расходы труда на разработку технологии, чел./час;

Токд – расходы труда на оформление КД, чел./час;

Твидз – расходы труда на изготовление и испытание опытного образца, чел./час.

Данные расчета заносятся в таблицу 3.5.

Заработная плата на разработку КД изделия определяется по формуле:







где  - почасовая тарифная ставка разработчика, грн.;

 - трудоемкость разработки КД изделия.



Таблица 3.5 - Расчет заработной платы на разработку КД изделия

Виды работ

Условные обозначения

Почасовая тарифная ставка - Сст, грн.

Факт. расходы времени чел./час;

 Зарплата, грн.

1. Анализ ТЗ

Татз

6,00

2

12,00

2. Разработка электрических схем

Трес

6,00

4

24,00

3. Разработка конструкции

Трк

6,00

4

24,00

4. Разработка технологии

Трт

6,00

2

12,00

5. Оформление КД

Токд

6,00

2

12,00

6. Изготовление и испытание опытного образца

Твидз

6,00

8

48,00

Всего:



6,00

22

132,00



б) Расчет материальных расходов на разработку КД

Материальные расходы Мв, которые необходимы для разработки (создании) КД, приведены в таблице 3.6.



Таблица 3.6 - Расчет материальных расходов на разработку КД 

Материал

Обозначение пометь.

Факт. кол.чество

Цена за ед. грн.цу, грн.

Сумма,грн.

1. CD DVD



2

3,00

6,00

2. Бумага



500

0,07

35,00

ВСЕГО:







41,00

 ТЗР (4%)







1,64

Итого:

Мв





42,64



в) Расходы на использование ЭВМ при разработке КД



Расходы, на использование ЭВМ при разработке КД, рассчитываются исходя из расходов работы одного часа ЭВМ по формуле, грн.:







где Вг – стоимость работы одного часа ЭВМ, грн.

Трес – расходы труда на разработку электрических схем, чел./час;

Трк – расходы труда на разработку конструкции, чел./час;

Трт – расходы труда на разработку технологии, чел./час;

Токд – расходы труда на оформление КД, чел./час;

При этом, стоимость работы одного часа ЭВМ (других технических средств - ТС) Вг определяется по формуле, грн.:







где Те/е – расходы на электроэнергию, грн.;

Ваморт – величина 1-ого часа амортизации ЭВМ (ТС), грн.;

Зперс – почасовая зарплата обслуживающего персонала, грн.;

Трем – расходы на ремонт, покупку деталей, грн.;

Стоимость одного часа амортизации Ваморт определяется по формуле, грн.: (при 40 часовой рабочей неделе)







где Втз - стоимость технических средств, грн.

На - норма годовой амортизации (%).

Кт - количество недель на год (52 недели/год).

Гт - количество рабочих часов в неделю (40 час/неделя)

Почасовая оплата обслуживающего персонала Зперс рассчитывается по формуле, грн.:







где Окл - месячный оклад обслуживающего персонала, грн.

Крг - количество рабочих часов в месяц (160 часов/месяц);

Нрем - расходы на оплату труда ремонта ЭВМ (6 % Окл).

Расходы на ремонт, покупку деталей для ЭВМ Трем определяются по формуле, грн.:







где Втз - стоимость технических средств, грн.

Нрем - процент расходов на ремонт, покупку деталей (%);

Кт - количество недель на год (52 недели/год).

Гт - количество рабочих часов в неделю (36  168 час./неделя)

Расходы на использование электроэнергии ЭВМ и техническими средствами Те/е определяются по формуле, грн.:






где Ве/е – стоимость одного кВт/час электроэнергии, грн.;

Wпот – мощность компьютера, принтера и сканера (за 1 час), (кВт/час.).

Таким образом, стоимость одного часа работы ЭВМ при разработке КД будет составлять (см. формулу 3.16), грн.:



.



Расходы на использование ЭВМ при разработке, грн. (см. формулу 3.15):







г) Расчет технологической себестоимости создания КД

Расчет технологической себестоимости создания КД изделия проводится методом калькуляции расходов (таблица 3.7).

В таблице 3.7 величина материальных расходов Мв рассчитана в таблице 3.6, основная зарплата Со берется из таблицы 3.5, дополнительная зарплата 15 % от основной зарплаты, отчисление на социальные мероприятия –37,2% - от основной и дополнительной зарплаты (вместе). Накладные расходы 25% от основной зарплаты. Себестоимость разработанной конструкторской документации Скд рассчитывается как сумма пунктов 1–6.




Таблица 3.7 - Калькуляция технологических расходов на создание КД изделия

№ п/п

Наименование статей

Условные обозначения

 Расходы (грн.)

1

2

3

4

1.

Материальные расходы

Мв

42,64

2.

Основная зарплата

Зо

132,00

3.

Дополнительная зарплата 

Зд 

19,80

4.

Отчисление на социальные мероприятия 

Нсоц

56,47

5.

Общепроизводственные (накладные) расходы предприятия 

Ннакл

33,00

6.

Расходы на использование ЭВМ при составлении программного обеспечения КД

ВЕОМ

26,60

7.

Себестоимость КД изделия

Скд =  (16)

310,51



3.4 Расчет расходов на стадии производства изделия



Себестоимость изделия которое разрабатывается рассчитывается на основе норм материальных и трудовых расходов. Среди исходных данных, которые используются для расчета себестоимости изделия, выделяют нормы расходов сырья и основных материалов на одно изделие.



Таблица 3.8 -Расчет расходов на сырье и основные материалы на одно изделие

Материалы

Норма расходов

(единиц)

Оптовая цена грн./ед.

Фактические расходы (единиц)

Сумма грн.

1

2

3

4

5

Стеклотекстолит СФ-2-35 (лист 1,0 ГОСТ 10316 - 78), кг

0,5

24,00

0,4

9,60

Припой ПОС - 61 (ГОСТ 21930 - 76), кг

0,05

18.00

0,05

0,90

Всего:







10,50

Транспортно-заготовительные расходы (4%)







0,42

Итого:







10,92



В ходе расчета себестоимости изделия, как исходные данные, используют спецификации материалов, покупных комплектующих изделий и полуфабрикатов, которые используются при сборке одного изделия (Приложение М).

Расчет зарплаты основных производственных рабочих проводим на основе норм трудоемкости по видам работ и по часовым ставкам рабочих (таблица 3.9).



Таблица 3.9 - Расчет основной зарплаты работников, участвующих в сборке , настройке и монтаже изделия

Наименование операции

Почасовая тарифная ставка, грн.

Норма времени чел./час.

Сдельная зарплата, грн.

1

2

3

4

Заготовительная

5,67

1

5,67

Фрезерная

5,67

1

5,67

Слесарная

5,67

1

5,67

Гравировка

5,67

1

5,67

Фотохимпечать

5,67

2

11,34

Гальваническая

5,67

2

11,34

Маркировочная

5,67

1

5,67

Сборка

5,67

2

11,34

Монтаж

5,67

1

5,67

Настройка

5,67

2

11,34

Другие

-

-

-

Всего:



14

62,37



Калькуляция себестоимости и определения цены выполняется в таблице 3.10.



Таблица 3.10 - Калькуляция себестоимости и определения цены изделия 

Наименование статей расходов

 Расходы грн.

1

2

Сырье и материалы

10,92

Покупные комплектующие изделия

99,74

Основная зарплата рабочих

62,37

Дополнительная зарплата (15%)

9,36

Отчисление на социальные мероприятия (37,2%)

26,68

Накладные расходы (25% ) 

15,59

Стоимость КД

310,51

Общая стоимость изделия

535,17



Общая стоимость изделия будет составлять:



Собщ. = С прог. + С баз. Бл. (3.21)



где С прог. – себестоимость составления программы для микроконтроллера;

С баз. Бл – себестоимость подготовки КД и сборки устройства.

При единичном изготовлении:

Собщ. = 2328,69+ 535,17= 2863,86 (грн.).

При производстве 100 единиц продукции:

Собщ.100 = 251,06 грн.

При производстве 1000 изделий:

Собщ.1000 = 227,30 грн.

При расчете не учитывалось снижение цены на покупные комплектующие изделия и полуфабрикаты, т.к. эта величина при оптовой закупке будет зависеть от величины партии.



3.5 Анализ устройств-аналогов



Ниже приводятся цены на аналогичные устройства для чтения электронных книг (Таблица 3.11).




Таблица 3.11 – Анализ стоимости устройств для чтения электронных книг (данные market.yandex.ru)

Наименование

Цена, грн.

Sony PRS-300 Reader

2 499,00

FR Book e251

1 774,00

PocketBook 360 ABBYY Lingvo

2 715,00

M-Book Deluxe

6000,00

Наше устройство (при единичном изготовлении)

2863,86



Из полученных данных видим, что наше устройство намного проще, надежней и дешевле, может создать конкуренцию на рынке.




4. Охрана труда



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

Основными, при определении условий труда являются следующие вопросы:

- производственное освещение;

- воздействие шума и вибрации;

- электромагнитные излучения;

- производственный микроклимат;

- электропожаробезопасность;

- эргонометрические характеристики рабочего места.



4.1 Требования к производственным помещениям



4.1.1 Окраска и коэффициенты отражения

Источники света, такие как светильники и окна, которые дают отражение от поверхности экрана, значительно ухудшают точность знаков и влекут за собой помехи физиологического характера, которые могут выразиться в значительном напряжении, особенно при продолжительной работе. Отражение, включая отражения от вторичных источников света, должно быть сведено к минимуму.

Для защиты от избыточной яркости окон могут быть применены шторы и экраны.

Окраска помещений и мебели должна способствовать созданию благоприятных условий для зрительного восприятия, хорошего настроения.

В зависимости от ориентации окон рекомендуется следующая окраска стен и пола:

окна ориентированы на юг: - стены зеленовато-голубого или светло-голубого цвета; пол - зеленый;

окна ориентированы на север: - стены светло-оранжевого или оранжево-желтого цвета; пол - красновато-оранжевый;

окна ориентированы на восток: - стены желто-зеленого цвета; пол зеленый или красновато-оранжевый;

окна ориентированы на запад: - стены желто-зеленого или голубовато-зеленого цвета; пол зеленый или красновато-оранжевый.

В помещениях, где находится компьютер, необходимо обеспечить следующие величины коэффициента отражения: для потолка: 60-70%, для стен: 40-50%, для пола: около 30%. Для других поверхностей и рабочей мебели: 30-40%.



4.1.2 Освещение

Правильно спроектированное и выполненное производственное освещение улучшает условия зрительной работы, снижает утомляемость, способствует повышению производительности труда, благотворно влияет на производственную среду, оказывая положительное психологическое воздействие на работника, повышает безопасность труда и снижает травматизм.

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

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

Существует три вида освещения - естественное, искусственное и совмещенное (естественное и искусственное вместе).

Естественное освещение - освещение помещений дневным светом, проникающим через световые проемы в наружных ограждающих конструкциях помещений.

Естественное освещение характеризуется тем, что меняется в широких пределах в зависимости от времени дня, времени года, характера области и ряда других факторов.

Искусственное освещение применяется при работе в темное время суток и днем, когда не удается обеспечить нормированные значения коэффициента естественного освещения (пасмурная погода, короткий световой день).

Освещение, при котором недостаточное по нормам естественное освещение дополняется искусственным, называется совмещенным освещением.

Искусственное освещение подразделяется на рабочее, аварийное, эвакуационное, охранное. Рабочее освещение, в свою очередь, может быть общим или комбинированным. Общее - освещение, при котором светильники размещаются в верхней зоне помещения равномерно или применительно к расположению оборудования. Комбинированное - освещение, при котором к общему добавляется местное освещение.

Согласно СНиП II-4-79 в помещений вычислительных центров необходимо применить систему комбинированного освещения.

При выполнении работ категории высокой зрительной точности (наименьший размер объекта различения 0,3…0,5мм) величина коэффициента естественного освещения (КЕО) должна быть не ниже 1,5%, а при зрительной работе средней точности (наименьший размер объекта различения 0,5…1,0 мм) КЕО должен быть не ниже 1,0%. В качестве источников искусственного освещения обычно используются люминесцентные лампы типа ЛБ или ДРЛ, которые попарно объединяются в светильники, которые должны располагаться над рабочими поверхностями равномерно.

Требования к освещенности в помещениях, где установлены компьютеры, следующие: при выполнении зрительных работ высокой точности общая освещенность должна составлять 300лк, а комбинированная - 750лк; аналогичные требования при выполнении работ средней точности - 200 и 300лк соответственно.

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



4.1.3 Параметры микроклимата

Параметры микроклимата могут меняться в широких пределах, в то время как необходимым условием жизнедеятельности человека является поддержание постоянства температуры тела благодаря терморегуляции, т.е. способности организма регулировать отдачу тепла в окружающую среду. Принцип нормирования микроклимата – создание оптимальных условий для теплообмена тела человека с окружающей средой.

Вычислительная техника является источником существенных тепловыделений, что может привести к повышению температуры и снижению относительной влажности в помещении. В помещениях, где установлены компьютеры, должны соблюдаться определенные параметры микроклимата. В санитарных нормах СН-245-71 установлены величины параметров микроклимата, создающие комфортные условия. Эти нормы устанавливаются в зависимости от времени года, характера трудового процесса и характера производственного помещения (см. табл. 4.1)

Объем помещений, в которых размещены работники вычислительных центров, не должен быть меньше 19,5м3/человека с учетом максимального числа одновременно работающих в смену. Нормы подачи свежего воздуха в помещения, где расположены компьютеры, приведены в табл. 4.2.

Для обеспечения комфортных условий используются как организационные методы (рациональная организация проведения работ в зависимости от времени года и суток, чередование труда и отдыха), так и технические средства (вентиляция, кондиционирование воздуха, отопительная система).



Таблица 4.1- Параметры микроклимата для помещений, где установлены компьютеры

Период года

Параметр микроклимата

Величина

Холодный

Температура воздуха в помещении

22…24°С



Относительная влажность

40…60%



Скорость движения воздуха

до 0,1м/с

Теплый

Температура воздуха в помещении

23…25°С



Относительная влажность

40…60%



Скорость движения воздуха

0,1…0,2м/с



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

Характеристика помещения

Объемный расход подаваемого в помещение свежего воздуха, м3 /на одного человека в час

Объем до 20м3 на человека

Не менее 30

20…40м3 на человека

Не менее 20

Более 40м3 на человека

Естественная вентиляция



4.1.4 Шум и вибрация

Шум ухудшает условия труда оказывая вредное действие на организм человека. Работающие в условиях длительного шумового воздействия испытывают раздражительность, головные боли, головокружение, снижение памяти, повышенную утомляемость, понижение аппетита, боли в ушах и т. д. Такие нарушения в работе ряда органов и систем организма человека могут вызвать негативные изменения в эмоциональном состоянии человека вплоть до стрессовых.

Под воздействием шума снижается концентрация внимания, нарушаются физиологические функции, появляется усталость в связи с повышенными энергетическими затратами и нервно-психическим напряжением, ухудшается речевая коммутация. Все это снижает работоспособность человека и его производительность, качество и безопасность труда. Длительное воздействие интенсивного шума [выше 80 дБ(А)] на слух человека приводит к его частичной или полной потере.

В табл. 4.3 указаны предельные уровни звука в зависимости от категории тяжести и напряженности труда, являющиеся безопасными в отношении сохранения здоровья и работоспособности.



Таблица 4.3 - Предельные уровни звука, дБ, на рабочих местах

Категория напряженности труда

Категория тяжести труда



Легкая

Средняя

Тяжелая

Очень тяжелая

I. Мало напряженный

80

80

75

75

II. Умеренно напряженный

70

70

65

65

III. Напряженный

60

60

-

-

IV. Очень напряженный

50

50

-

-



Уровень шума на рабочем месте математиков-программистов и операторов видеоматериалов не должен превышать 50дБА, а в залах обработки информации на вычислительных машинах - 65дБА.

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



4.1.5 Электромагнитное и ионизирующее излучения

Большинство ученых считают, что как кратковременное, так и длительное воздействие всех видов излучения от экрана монитора не опасно для здоровья персонала, обслуживающего компьютеры. Допустимые значения параметров неионизирующих электромагнитных излучений от монитора компьютера представлены в табл. 4.4.

Максимальный уровень рентгеновского излучения на рабочем месте оператора компьютера обычно не превышает 10мкбэр/ч, а интенсивность ультрафиолетового и инфракрасного излучений от экрана монитора лежит в пределах 10-100мВт/м2.



Таблица 4.4 - Допустимые значения параметров неионизирующих электромагнитных излучений (в соответствии с СанПиН 2.2.2.542-96)

Наименование параметра

Допустимые значения

Напряженность электрической составляющей электромагнитного поля на расстоянии 50см от поверхности видеомонитора

10В/м

Напряженность магнитной составляющей электромагнитного поля на расстоянии 50см от поверхности видеомонитора

0,3А/м

Напряженность электростатического поля не должна превышать:

для взрослых пользователей

для детей дошкольных учреждений и учащихся средних специальных и высших учебных заведений



20кВ/м

15кВ/м



Для снижения воздействия этих видов излучения рекомендуется применять мониторы с пониженным уровнем излучения (MPR-II, TCO-92, TCO-99), устанавливать защитные экраны, а также соблюдать регламентированные режимы труда и отдыха.




4.2 Эргонометрические характеристики рабочего места



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

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

Рабочее пространство.

Научная организация рабочего пространства (Рис.4.1) базируется на данных о средней зоне охвата рук человека - 35-40 см. Ближней зоне соответствует область, охватываемая рукой с прижатым к туловищу локтем, дальней зоне - область вытянутой руки. Тонкой линией изображено фактическое положение монитора на рабочем столе сотрудника – на углу стола с левой стороны. Это приводит к значительному неудобству при работе. При работе с компьютером приходится постоянно поворачивать голову влево, что ведет к усталости шейных мышц.

Значимым фактором является пространство под столешницей. Высота столов, использующихся на предприятии соответствует общепринятым стандартам, и составляет 74 см. Конструкция столов обеспечивает требования СанПин 2.2.2.542-96 по ширине и высоте необходимого пространства для ног.

Взаимное расположение предметов на рабочем месте :

1 - угол обзора по вертикали, 35

2 - угол наклона клавиатуры, 10

h1 - высота рабочей поверхности, 79 см

h2 - высота сиденья стула, регулируется под конкретного человека

h3 - расстояние от края стола до клавиатуры, 10 см

h4 - расстояние от органов зрения оператора до экрана, 65 см

Взгляд человека направлен перпендикулярно центру экрана монитора.

При компоновке рабочего места не следует забывать о том, что наиболее важные из орудий труда следует располагать спереди и справа от человека.

Клавиатура, как наиболее часто используемое устройство ввода. Параметры этой зоны: угол - 70, глубина - 30-40 см.

Остальные устройства - угол - 130 градусов, глубина 70-80 см.

С учетом выше приведенных данных об углах обзора, а так же зная максимальный размер зоны досягаемости правой руки (70-100 см), можно считать, что расположение рабочих предметов в моторном поле правильное.



4.3 Электропожаробезопасность



Для обеспечения электробезопасности в помещении должны проверены следующие показатели:

- соответствие напряжения в сети тому на которое рассчитан ПК;

- наличие защитного заземления;

- меры защиты от перепадов в сети.

Приборы, находящиеся в помещении работают от номинального напряжения 220 В. В нашем случае применим заземление с изолированной нейтралью. Заземление выведено на заземляющий контур с сопротивлением 4 Ома. Заземление дисплеев осуществляется через системный блок ЭВМ.

Соединение ПК с сетью выполнено с помощью трехжильного медного силового кабеля с вилкой, имеющей клеммы заземления. Все провода в рабочем помещении имеют характеристики, соответствующие токам и напряжениям в сети.

При эксплуатации ЭВМ возможны возникновения следующих аварийных ситуаций:

- короткие замыкания;

- перегрузки;

- повышение переходных сопротивлений в электрических контактах;

- перенапряжение;

- возникновение токов утечки.

Обязательно наличие порошкового огнетушителя в помещении серверной станции.



4.4 Режим труда



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

В табл. 4.5 представлены сведения о регламентированных перерывах, которые необходимо делать при работе на компьютере, в зависимости от продолжительности рабочей смены, видов и категорий трудовой деятельности с ВДТ (видеодисплейный терминал) и ПЭВМ (в соответствии с САнНиП 2.2.2 542-96 «Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работ»).




Таблица 4.5 - Время регламентированных перерывов при работе на компьютере

Категория работы с ВДТ или ПЭВМ

Уровень нагрузки за рабочую смену при видах работы с ВДТ, количество знаков

Суммарное время регламентированных перерывов, мин





При 8-часовой смене

При 12-часовой смене

Группа А

до 20000

30

70

Группа Б

до 40000

50

90

Группа В

до 60000

70

120



Примечание. Время перерывов дано при соблюдении указанных Санитарных правил и норм. При несоответствии фактических условий труда требованиям Санитарных правил и норм время регламентированных перерывов следует увеличить на 30%.

В соответствии со САнНиП 2.2.2 546-96 все виды трудовой деятельности, связанные с использованием компьютера, разделяются на три группы: группа А: работа по считыванию информации с экрана ВДТ или ПЭВМ с предварительным запросом; группа Б: работа по вводу информации; группа В: творческая работа в режиме диалога с ЭВМ.

Эффективность перерывов повышается при сочетании с производственной гимнастикой или организации специального помещения для отдыха персонала с удобной мягкой мебелью, аквариумом, зеленой зоной и т.п.



4.5 Расчет освещенности



Расчет освещенности рабочего места сводится к выбору системы освещения, определению необходимого числа светильников, их типа и размещения. Исходя из этого, рассчитаем параметры искусственного освещения.

Обычно искусственное освещение выполняется посредством электрических источников света двух видов: ламп накаливания и люминесцентных ламп. Будем использовать люминесцентные лампы, которые по сравнению с лампами накаливания имеют ряд существенных преимуществ:

- по спектральному составу света они близки к дневному, естественному свету;

- обладают более высоким КПД (в 1,5-2 раза выше, чем КПД ламп накаливания);

- обладают повышенной светоотдачей (в 3-4 раза выше, чем у ламп накаливания);

- более длительный срок службы.

Расчет освещения производится для комнаты площадью 15м2 , ширина которой - 5м, высота - 3 м. Воспользуемся методом светового потока.

Для определения количества светильников определим световой поток, падающий на поверхность по формуле:



F = E∙S∙Z∙К / n , (4.1)



ГдеF - рассчитываемый световой поток, Лм;

Е - нормированная минимальная освещенность, Лк (определяется по таблице). Работу программиста, в соответствии с этой таблицей, можно отнести к разряду точных работ, следовательно, минимальная освещенность будет Е = 300Лк;

S - площадь освещаемого помещения (в нашем случае S = 15м2);

Z - отношение средней освещенности к минимальной (обычно принимается равным 1,1-1,15 , пусть Z = 1,1);

К - коэффициент запаса, учитывающий уменьшение светового потока лампы в результате загрязнения светильников в процессе эксплуатации (его значение зависит от типа помещения и характера проводимых в нем работ и в нашем случае К = 1,5);

n - коэффициент использования, (выражается отношением светового потока, падающего на расчетную поверхность, к суммарному потоку всех ламп и исчисляется в долях единицы; зависит от характеристик светильника, размеров помещения, окраски стен и потолка, характеризуемых коэффициентами отражения от стен (РС) и потолка (РП)), значение коэффициентов РС и РП были указаны выше: РС=40%, РП=60%. Значение n определим по таблице коэффициентов использования различных светильников.

Для этого вычислим индекс помещения по формуле:



I = A∙B / h (A+B), (4.2)



где h - расчетная высота подвеса, h = 2,92 м;

A - ширина помещения, А = 3 м;

В - длина помещения, В = 5 м.

Подставив значения получим:

I= 0,642.

Зная индекс помещения I, по таблице 7 [23] находим n = 0,22.

Подставим все значения в формулу (4.1) для определения светового потока F, получаем F = 33750 Лм.

Для освещения выбираем люминесцентные лампы типа ЛБ40-1, световой поток которых Fл = 4320 Лк.

Рассчитаем необходимое количество ламп по формуле:



N = F / Fл, (4.3)



где N - определяемое число ламп;

F - световой поток, F = 33750 Лм;

Fл- световой поток лампы, Fл = 4320 Лм.

N = 8 ламп.

При выборе осветительных приборов используем светильники типа ОД. Каждый светильник комплектуется двумя лампами.

Значит требуется для помещения площадью S = 15 м2 четыре светильника типа ОД.

Расчет естественного освещения помещений

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

Освещение должно удовлетворять такие основные требования:

- быть равномерным и довольно сильным;

- не создавать различных теней на местах работы, контрастов между освещенным рабочем местом и окружающей обстановкой;

- не создавать ненужной яркости и блеска в поле взора работников;

- давать правильное направление светового потока;

Все производственные помещения необходимо иметь светлопрорезы, которые дают достаточное природное освещение. Без природного освещения могут быть конференц-залы заседаний, выставочные залы, раздевалки, санитарно-бытовые помещения, помещения ожидания медицинских учреждений, помещений личной гигиены, коридоры и проходы.

Коэфициент естественного освещения в соответствии с ДНБ В 25.28.2006, для нашого III пояса светового климата составляет 1,5.

Исходя из этого произведем расчет необходимой площади оконных проемов.

Расчет площади окон при боковом освещении определяется, по формуле:



Sо = (Ln*Кз.*N0*Sn*Кзд.)/(100 *T0*r1) (4.4)



где:Ln – нормированное значение КЕО

Кз – коэффициент запаса (равен 1,2)

N0 – световая характеристика окон

Sn – площадь достаточного естественного освещения

Кзд. – коэффициент, учитывающий затенение окон противостоящими зданиями

r1 – коэффициент, учитывающий повышение КЕО при боковом освещении

T0 – общий коэффициент светопропускания, который рассчитывается по формуле:



T0 = T1 * T2 * T3 * T4 * T5, (4.5)



где T1 – коэффициент светопропускания материала;

T2 – коэффициент, учитывающий потери света в переплетах светопроема;

T3 – коэффициент, учитывающий потери света в несущих конструкциях;

T4 – коэффициент, учитывающий потери света в солнцезащитный устройствах;

T5 – коэффициент, учитывающий потери света в защитной сетке, устанавливаемой под фонарями, принимается равным 1;

Теперь следует рассчитать боковое освещение для зоны, примыкающей к наружной стене. По разряду зрительной работы нужно определить значение КЕО. КЕО = 1,5 нормированное значение КЕО с учетом светового климата необходимо вычислить по формуле:



Ln=l*m*c, (4.6)



где l – значение КЕО (l=1.5);

m – коэффициент светового климата (m=1);

c – коэффициент солнечности климата (c=1)

Ln=1,5

Теперь следует определить отношение длины помещения Ln к глубине помещения B:

Ln/B=3/5 =0,6;

Отношение глубины помещения В к высоте от уровня условной рабочей поверхности до верха окна h1 (в данном случае h1=1,8) :

B/h1=5/1,8 = 2,77.

Световая характеристика световых проемов N0=9.

Кзд=1

Значение T0=0,8*0,7*1*1*1=0,56.

Ln для 4 разряда зрительных работ равен 1,5 при мытье окон два раза в год.

Определяем r1, r1=1,5.

Кз.=1,2.

Теперь следует определить значение Sп:



Sп=Ln*В=3*10=30 м2.



Кзд.=1.

На данном этапе следует рассчитать необходимую площадь оконных проемов: (Ln* Кз.*N0*Sn*Кзд.) / (100*T0*r1)

Sо = (1,5*1,2*9*30*1)/(100*0,56*1,5)=486/84= 5,78 м2;

Принимаем количество окон 1 штука:

S1=5,78 м2 площадь одного окна

Высота одного окна составляет – 2,5 м, ширина 2,3 м.




4.6 Расчет вентиляции



В зависимости от способа перемещения воздуха вентиляция бывает естественная и принудительная.

Параметры воздуха, поступающего в приемные отверстия и проемы местных отсосов технологических и других устройств, которые расположены в рабочей зоне, следует принимать в соответствии с ГОСТ 12.1.005-76. При размерах помещения 3 на 5 метров и высоте 3 метра, его объем 45 куб.м. Следовательно, вентиляция должна обеспечивать расход воздуха в 90 куб.м/час. В летнее время следует предусмотреть установку кондиционера с целью избежания превышения температуры в помещении для устойчивой работы оборудования. Необходимо уделить должное внимание количеству пыли в воздухе, так как это непосредственно влияет на надежность и ресурс эксплуатации ЭВМ.

Мощность (точнее мощность охлаждения) кондиционера является главной его характеристикой, от неё зависит на какой объем помещения он рассчитан. Для ориентировочных расчетов берется 1 кВт на 10 м2 при высоте потолков 2,8 – 3 м (в соответствии со СНиП 2.04.05-86 "Отопление, вентиляция и кондиционирование").

Для расчета теплопритоков данного помещения использована упрощенная методика:



Q=S·h·q (4.8)



где:Q – Теплопритоки

S – Площадь помещения

h – Высота помещения

q – Коэффициент равный 30-40 вт/м3 (в данном случае 35 вт/м3)

Для помещения 15 м2 и высотой 3 м теплопритоки будут составлять:

Q=15·3·35=1575 вт

Кроме этого следует учитывать тепловыделение от оргтехники и людей, считается (в соответствии со СНиП 2.04.05-86 "Отопление, вентиляция и кондиционирование") что в спокойном состоянии человек выделяет 0,1 кВт тепла, компьютер или копировальный аппарат 0,3 кВт, прибавив эти значения к общим теплопритокам можно получить необходимую мощность охлаждения.



Qдоп=(H·Sопер)+(С·Sкомп)+(P·Sпринт) (4.9)



где:Qдоп – Сумма дополнительных теплопритоков

C – Тепловыделение компьютера

H – Тепловыделение оператора

D – Тепловыделение принтера

Sкомп – Количество рабочих станций

Sпринт – Количество принтеров

Sопер – Количество операторов

Дополнительные теплопритоки помещения составят:

Qдоп1=(0,1·2)+(0,3·2)+(0,3·1)=1,1(кВт)

Итого сумма теплопритоков равна:

Qобщ1=1575+1100=2675 (Вт)

В соответствии с данными расчетами необходимо выбрать целесообразную мощность и количество кондиционеров.

Для помещения, для которого ведется расчет, следует использовать кондиционеры с номинальной мощностью 3,0 кВт.



4.7 Расчет уровня шума



Одним из неблагоприятных факторов производственной среды в ИВЦ является высокий уровень шума, создаваемый печатными устройствами, оборудованием для кондиционирования воздуха, вентиляторами систем охлаждения в самих ЭВМ.

Для решения вопросов о необходимости и целесообразности снижения шума необходимо знать уровни шума на рабочем месте оператора.

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



∑L = 10·lg (Li∙n), (4.10)



где Li – уровень звукового давления i-го источника шума;

n – количество источников шума.

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

Уровни звукового давления источников шума, действующих на оператора на его рабочем месте представлены в табл. 4.6.



Таблица 4.6 - Уровни звукового давления различных источников

Источник шума

Уровень шума, дБ

Жесткий диск

40

Вентилятор

45

Монитор

17

Клавиатура

10

Принтер

45

Сканер

42



Обычно рабочее место оператора оснащено следующим оборудованием: винчестер в системном блоке, вентилятор(ы) систем охлаждения ПК, монитор, клавиатура, принтер и сканер.

Подставив значения уровня звукового давления для каждого вида оборудования в формулу (4.4) , получим:

∑L=10·lg(104+104,5+101,7+101+104,5+104,2)=49,5 дБ

Полученное значение не превышает допустимый уровень шума для рабочего места оператора, равный 65 дБ (ГОСТ 12.1.003-83). И если учесть, что вряд ли такие периферийные устройства как сканер и принтер будут использоваться одновременно, то эта цифра будет еще ниже. Кроме того при работе принтера непосредственное присутствие оператора необязательно, т.к. принтер снабжен механизмом автоподачи листов.




Выводы



В данном проекте было разработано устройство для чтения электронных книг.

В процессе работы были рассмотрены общие вопросы разработки устройств на микроконтроллерах, рассмотрены этапы разработки, разработка программного обеспечения, внедрения в производство. На основании изученной литературы и сети Интернет получили теоретические знания в области проектирования устройств на микроконтроллерах, приобрели теоретические о принципе работы устройств для чтения электронных книг.

В практической части были разработаны структурная, функциональная и принципиальная схемы устройства, составлен алгоритм работы микроконтроллера, выбран микроконтроллер удовлетворяющий требованиям ТЗ, произведен расчет элементной базы устройства, произведено подробное описание программы.

В технико-экономическом обосновании объекта разработки были произведены расчеты стоимости составления ПО микроконтроллера и КД для разрабатываемого устройства, произведен сравнительный анализ устройств-аналогов. Разработанное устройство может создать конкуренцию на рынке, может быть предложено для внедрения в производство.

В последнем разделе дипломной работы были изложены требования охраны труда. Созданные условия должны обеспечивать комфортную работу. На основании изученной литературы по данной проблеме, были указаны оптимальные размеры рабочего стола и кресла, рабочей поверхности, а также проведен выбор системы и расчет оптимального освещения производственного помещения, произведен расчет рационального кондиционирования помещения, а также расчет уровня шума на рабочем месте.


Перечень ссылок



1. "Dimmable Fluorescent Ballast" – User Guide, 10/07, Atmel Corporation, http://www.atmel.com/dyn/resources/prod_documents/doc7597.pdf

2. ГОСТ13109-97. Нормы качества электрической энергии в системах электроснабжения общего назначения.

3. G. Howell "Five questions about resistors" // EDN, 9/28/2006, http://www.edn.com/contents/images/6372835.pdf

4. П. Хоровиц, У. Хилл "Искусство схемотехники" – Изд. 6-е, М.: Мир, 2003.

5. C. Hillman "Common mistakes in electronic design" // EDN, 12/14/2007 http://www.edn.com/contents/images/6512156.pdf

6."Frequently asked questions about dimmers" // http://www .lutron.com/product_technical/faq.asp

7. Л. Н. Кечиев, Е. Д. Пожидаев "Защита электронных средств от воздействия статического электричества" – М.: ИД "Технологии", 2005.

8. Жидецкий В.Ц., Джигирей В.С., Мельников А.В. Основы охраны труда: Учебник – Львов, Афиша, 2008 – 351с.

9. Денисенко Г.Ф. Охрана труда: Учебн.пособие – М., Высшая школа, 1989 – 319с.

10. Самгин Э.Б. Освещение рабочих мест. – М.: МИРЭА, 1989. – 186с.

11. Справочная книга для проектирования электрического освещения. / Под ред. Г.Б. Кнорринга. – Л.: Энергия, 1976.

12. Борьба с шумом на производстве: Справочник / Е.Я. Юдин, Л.А. Борисов;

Под общ. ред. Е.Я. Юдина – М.: Машиностроение, 1985. – 400с., ил.

13. Зинченко В.П. Основы эргономики. – М.: МГУ, 1979. – 179с.

14.Методичні вказівки до виконання дипломної роботи для учнів спеціальності «Оператор комп’ютерного набору; оператор комп’ютерної верстки»/ Упоряд.: Д.О. Дяченко, К.О. Ізмалкова, О.Г. Меркулова. – Сєверодонецьк: СВПУ, 2007. – 40 с.

15. Н. Заец. Многофункциональные часы. — Схемотехника, 2006, № 2,с. 41,42.

16. Н. Заец. Термометр - часы с датчиками фирмы Dallas Semiconductor. — Схемотехника, 2005, № 5, с. 52 - 55.

17. Н. Заец. Радиолюбительские конструкции на Р1С-микроконтроллерах. Книга 3. — М.: СОЛОН-Пресс, 2005, с. 248.

18. Н. Заец. Отечественные жидкокристаллические индикаторы TIC9162 с драйверами по технологии COG. - Схемотехника, 2005, №9, с. 9-11.

19. Н. Заец. Таймеры десятичного счета. — Электрик, 2006, № 7-8, с. 36 -39.

20. Мощные полевые переключательные транзисторы фирмы International Rectifier. — Радио, 2001, № 5, с. 45.

21. А. Долгий. Разработка и отладка устройств на микроконтроллерах. — Радио, 2001 ,№ 5-12, 2002, № 1.

22. А. Долгий. Программаторы и программирование микроконтроллеров. — Радио, 2004, № 1-12.

23. Н. Заец. Универсальный таймер. — Схемотехника, 2003, № 1, с. 53.

24. Н. Заец. Электронные самоделки для быта, отдыха и здоровья.— М.: СОЛОН-Пресс, 2009, 423 с.




Приложение А



Файл reader.asm

;Описание и распиновка.

;Порт B это данные индикатора и памяти.

;D0 -RxD, D1 - TxD, D6 - RS, D5 - R/W, D4 - E, D2 - adr. latch,

;D3 - общий #OE,D7 - общий #WE

;Порт С - адресный порт

;Порт А: А0-А2 - старшие линии адреса, А3 - #СЕ1, А4 - #СЕ2

;А5 - красная кнопка, А6 - зелёная кнопка "вниз", А7 - зелёная кнопка "вверх"

;-----------------------------------------------------------------------

.include "d:\Program Files\Atmel\AVR Studio\Appnotes\8515def.inc"

.include "d:\seagull\Depot\AVR\reader\rus.inc"

;-----------------------------------------------------------------------

.def rsym=r0

.def storel=r1

.def storeh=r2

.def book=r3

.def storead0=r4

.def storead1=r5

.def all_book=r6

.def rus=r14

.def store=r15

.def work=r16

.def data=r17

.def char=r18

.def pauseh=r19

.def pausel=r20

.def count=r21

.def address0=r22

.def address1=r23

.def address2=r24

.def flag=r25

.def key=r26

.def loz=r30

.def hiz=r31

;-----------------------------------------------------------------------

;flag: бит0 = 1-переполнение адреса; бит1 =1-команда ко 2-й памяти; бит2 =1 -питание только подано

;бит3 = 1-нужен pop

;-----------------------------------------------------------------------

.set E=4

.set RW=5

.set RS=6

.set C = 2

.set WE=7

.set OE=3

.set CE1=3

.set CE2=4

.equ TSYM=80;Всего символов на экране

;-----------------------------------------------------------------------

.org 0x000

;.org 0x007

;rjmp RXcomplete

.org 0x010

main:

bclr 7;неразрешение прерываний

ldi work, 0x5f;загрузка адреса стека

out spl,work

ldi work, 0x02;загрузка старшего адреса стека

out sph,work

ldi work,0b11111110

out ddrd, work

ldi work,0b10001011

out portd, work

ser work

out ddrb, work;выходы индикатора

ldi work, 0b00011000;8-битный режим, приём/передача, RX-~прерывание

out ucr, work

ldi work, 4

out ubrr, work;115200 при кварце 9,216 МГц

ser work

out ddrc, work;выходы порта С

ldi work, 0b00011111

out ddra, work;выходы порта A

clr work

out portc,work

ldi work, 0b11111000

out porta,work

clr address0

clr address1

clr address2

ser count

ldi flag,0b00000100

clr book

;-----------------------------------------------------------------------

;модуль инициализации индикатора

;rjmp tst_loop

rcall precharge

ldi char, 0b00111000;8-разр. шина,2 строки,5х8

rcall write_cmd

ldi char, 0b00001100;вкл. изобр., курсор-подчерк. выкл, курсор-блок выкл

rcall write_cmd

ldi char, 0b00000110;сдвиг курсора вправо.

rcall write_cmd

ldi char, 0b00000001

rcall write_cmd

in char,udr

in char,udr

in char,udr

;-----------------------------------------------------------------------

;Тестовый участок

tst_loop:

;ldi char,0x55

;out eedr,work

;clr work

;out eearl,work

;rcall write_flash

;rcall module_write

;rcall inc_addr

;rcall wait_busy

;rjmp read_begin

;rjmp tst_loop

;rjmp command

;----------------------------------------------------------------------

ldi hiz,(high(hello*2))

ldi loz,(low(hello*2))

rcall message

rcall push_button

main_menu:

rcall menu;Ответ: 0-начать читать, 1- закладку, 2- связь с компом, 3- кто сделал

cpi count,0

breq read_begin

cpi count,1

breq pre_goto_bookmark

cpi count,2

breq pre_comp_mes

ldi hiz,(high(about_develop*2))

ldi loz,(low(about_develop*2))

rcall message

rcall push_button

rjmp main_menu

pre_goto_bookmark:

rjmp goto_bookmark

read_begin:

cbr flag,0x04

rcall choose_text

rcall get_address_text_begin

continue_read:

rcall blank_screen

rcall show_to_screen

menu_2:

rcall menu

rcall sub_string

cpi count,0

breq continue_read

cpi count,1

breq pre_goto_bookmark

cpi count,2

breq set_bookmark

listing_subreturn:

rcall listing

push_list_page:

push count

list_page:

rcall blank_screen

ser count

read_page:

rcall read_flash

mov rus,data

mov char,data

rcall write_char

rcall inc_addr

cpi count,TSYM-1

brne read_page

pop count

rcall push_button

cpi key,3

breq sub_page

cpi key,2

breq add_page

rjmp menu_2

add_page:

push count

lsl count

lsl count

add address1,count

brcc no_add_adr2

inc address2

cpi address2,0x10

brlo no_add_adr2

ser address0

ser address1

ldi address2,0x0f

no_add_adr2:

pop count

rjmp push_list_page

pre_comp_mes:

rjmp comp_mes

sub_page:

push count

lsl count

lsl count

sub address1,count

brsh no_sub_adr2

dec address2

brpl no_sub_adr2

clr address2

clr address1

clr address0

no_sub_adr2:

pop count

rjmp push_list_page

read_current:

rcall show_to_screen

rjmp read_current

set_bookmark:

push work

write_current:

clr work

out eearh,work

rcall wait_write_internal_eeprom

mov work,book

lsl work

lsl work

inc work

out eearl,work

out eedr,address2

rcall write_internal_eeprom

rcall wait_write_internal_eeprom

inc work

out eearl,work

out eedr,address1

rcall write_internal_eeprom

rcall wait_write_internal_eeprom

inc work

out eearl,work

out eedr,address0

rcall write_internal_eeprom

pop work

rjmp continue_read

goto_bookmark:

sbrc flag,2

rcall choose_text

push work

clr work

out eearh,work

mov work,book

lsl work

lsl work

inc work

out eearl,work

rcall read_internal_eeprom

push work

in work,eedr

cpi work,0xff

brne no_return_from_gtb

ldi hiz,(high(no_bookmark*2))

ldi loz,(low(no_bookmark*2))

rcall message

rcall push_button

pop work

pop work

sbrc flag,0x02

rjmp main_menu

rjmp continue_read

no_return_from_gtb:

mov address2,work

pop work

inc work

out eearl,work

rcall read_internal_eeprom

in address1,eedr

inc work

out eearl,work

rcall read_internal_eeprom

in address0,eedr

pop work

cbr flag,0x04

rjmp continue_read

;-----------------------------------------------------------------------

read_internal_eeprom:

sbic eecr,eewe;Жду, пока не закончится цикл записи

rjmp read_internal_eeprom

sbi eecr,eere

ret

wait_write_internal_eeprom:

sbic eecr,eewe

rjmp wait_write_internal_eeprom

ret

write_internal_eeprom:

sbi eecr,eemwe

sbi eecr,eewe

ret

;-----------------------------------------------------------------------

comp_mes:

ldi hiz,(high(i_love_my_computer*2))

ldi loz,(low(i_love_my_computer*2))

rcall message

loop:

sbis usr,rxc

rjmp loop

rcall blank_screen

rcall RXcomplete

cpi data,0xe5

breq loop_ex

cpi data,0x5e

breq command

rjmp loop

;-----------------------------------------------------------------------

loop_ex:

sbis usr,rxc

rjmp loop_ex

rcall RXcomplete

rcall write_char

rcall confirm

rjmp loop_ex;зацикливание

;-----------------------------------------------------------------------

write_char:

push work

inc count

cpi count,TSYM/2

breq next_row

cpi count,TSYM

breq new_screen

send:

sbrc char,7

rcall decode

rcall write_data

pop work

ret

next_row:

mov store,char

ldi char, 0b11000000

rcall write_cmd

mov char,store

rjmp send

new_screen:

clr count

mov store,char

ldi char, 0b00000001

rcall write_cmd

mov char,store

rjmp send

recognize:

;inc count

;cpi char,0xa

;brge nodig

;ldi work,0x30

;add char,work

;rcall write_char

;ret

nodig:

;ldi work,0x37

;add char,work

;rcall write_char

;ret

;-----------------------------------------------------------------------

command:

sbis usr,rxc

rjmp command

rcall RXcomplete

cpi data,0x10

breq _module_erase1

cpi data,0x20

breq _module_erase2

cpi data,0x30

breq _module_write

cpi data,0x40

breq _module_read

cpi data,0x50

breq _module_address_set

rjmp command

_module_erase1:

cbr flag,0x02

rcall module_erase

rjmp command

_module_erase2:

sbr flag,0x02

rcall module_erase

rjmp command

_module_write:

rcall module_write

rjmp command

_module_read:

rcall blank_screen

rcall module_read

rjmp command

_module_address_set:

rcall module_address_set

rjmp command

;-----------------------------------------------------------------------

;индикаторные модули чтения/записи

write_cmd:

push work

rcall wait_busy

cbi portd,RS

cbi portd,RW

out portb,char

rcall latch

pop work

ret

write_data:

push work

rcall wait_busy

sbi portd,RS

cbi portd,RW

out portb,char

rcall latch

pop work

ret

wait_busy:

push char

clr work

out ddrb, work;входы

ser work;Включил подтяжку к единице

out portb,work

cbi portd,RS

sbi portd,RW

busy:

nop

sbi portd,E

rcall nop_wait

in char,pinb

cbi portd,E

sbrc char,7

rjmp busy

ser work

out ddrb, work;выходы

cbi portd,RS

pop char

ret

latch:

rcall nop_wait

sbi portd,E

rcall nop_wait

cbi portd,E

ret

nop_wait:

ldi work, 0x1f

_wait:

dec work

brne _wait

ret

precharge:;Подпрограмма начальной предустановки

ser work

out ddrb, work;выходы

cbi portd,RS

cbi portd,RW

rcall pause

rcall pause

rcall pause

rcall pause

rcall pause

rcall ldi30

rcall pause

rcall pause

rcall ldi30

rcall pause

rcall pause

rcall ldi30

rcall pause

ldi30:

ldi work,0x30

out portb,work

rcall latch

ret

;-----------------------------------------------------------------------

pause:

clr pauseh

clr pausel

_pauseh:

rcall pause_1

dec pauseh

brne _pauseh

ret

pause_1:

dec pausel

brne pause_1

ret

;-----------------------------------------------------------------------

RXcomplete:

in char,udr

mov rus,char

mov data,char

ret

;-----------------------------------------------------------------------

decode:

cpi char,0xa8

breq yob

cpi char,0xb8

breq yol

cbr char,0xc0;два старших бита не нужны

ldi hiz,(high(rus_letters*2))

ldi loz,(low(rus_letters*2))

add loz,char

brcc read_code

inc hiz

read_code:

lpm

mov char,rsym

ret

yob:

ldi char,0xa2

ret

yol:

ldi char,0xb5

ret

.cseg

rus_letters:

;Большие буквы

.db 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,0xa5,0xa6,0x4b,0xa7,0x4d,0x48

.db 0x4f,0xa8,0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,0xac,0xe2,0xad,0xae

.db 0x62,0xaf,0xb0,0xb1

;Маленькие буквы

.db 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd

.db 0x6f,0xbe,0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,0xc1,0xe6,0xc2,0xc3

.db 0xc4,0xc5,0xc6,0xc7

;-----------------------------------------------------------------------

confirm:

;sbi usr,txc

wait_txc:

sbis usr,udre

rjmp wait_txc

out udr,rus

ret

;-----------------------------------------------------------------------

adr_latch:

sbis portd,WE;либо запись

out portb,data

out portc,address0

sbi portd,C

nop

cbi portd,C

out portc,address1

push work

in work,porta;считали с защёлок порта А

cbr work,0x07

or work,address2

sbrc address2,3

rjmp ce2_set

sbr work,0x10;CE2

cbr work,0x08;CE1

rjmp ce1_set

ce2_set:

sbr work,0x08

cbr work,0x10

ce1_set:

out porta,work

pop work

nop

sbic portd,WE

in data,pinb;либо чтение

sbi porta,CE1;операция завершена

sbi porta,CE2

ret

;-----------------------------------------------------------------------

inc_addr:

clz

inc address0

brne ret_inc

inc address1

brne ret_inc

inc address2

cpi address2,0x10

brlo ret_inc

sbr flag,0x01

ret_inc:

ret

;-----------------------------------------------------------------------

erase_flash:

cbi portd,WE

sbi portd,OE

push work

ldi work, 0x55

mov address0,work

mov address1,work

clr address2

sbrc flag,1

sbr address2,0x08;если стирается вторая флешь

ldi data,0xaa

rcall adr_latch

ldi work, 0xaa

mov address0,work

ldi work, 0x2a

mov address1,work

ldi data,0x55

rcall adr_latch

ldi work, 0x55

mov address0,work

mov address1,work

ldi data,0x80

rcall adr_latch

ldi work, 0x55

mov address0,work

mov address1,work

ldi data,0xaa

rcall adr_latch

ldi work, 0xaa

mov address0,work

ldi work, 0x2a

mov address1,work

ldi data,0x55

rcall adr_latch

ldi work, 0x55

mov address0,work

mov address1,work

ldi data,0x10

rcall adr_latch

sbi portd,WE

pop work

mov store,work

ldi work,10

wait_10s:;память стирается 10 секунд. Максимум, правда.

rcall wait_1s

dec work

brne wait_10s

mov work,store

sbi portd,WE

ret

;-----------------------------------------------------------------------

read_flash:

sbi portd,WE

cbi portd,OE

push work

clr work

out ddrb,work

rcall adr_latch

ser work

out ddrb,work

pop work

sbi portd,OE

ret

;-----------------------------------------------------------------------

write_flash:

mov store,address0

mov storel,address1

mov storeh,address2

cbi portd,WE

sbi portd,OE

push work

ldi work, 0x55

mov address0,work

mov address1,work

cbr address2,0xf7;если пишется во вторую флешь

ldi data,0xaa

rcall adr_latch

ldi work, 0xaa

mov address0,work

ldi work, 0x2a

mov address1,work

ldi data,0x55

rcall adr_latch

ldi work, 0x55

mov address0,work

mov address1,work

ldi data,0xa0

rcall adr_latch

mov address0,store

mov address1,storel

mov address2,storeh

mov data,char

rcall adr_latch

push char

rcall data_polling

pop char

pop work

sbi portd,WE

ret

;-----------------------------------------------------------------------

wait_1s:

push work

ldi work,0x47

pause_1s_l:

rcall pause

dec work

brne pause_1s_l

pop work

ret

;-----------------------------------------------------------------------

module_write:

clr work

clr book

clr address0

clr address1

clr address2

find_empty_slot:

rcall read_flash

cpi data,0x5e

brne empty_slot

rcall inc_addr

inc book

mov work,book

cpi work,0x08

brne find_empty_slot

ldi hiz,(high(no_slot*2))

ldi loz,(low(no_slot*2))

rcall message

rcall push_button

ret

empty_slot:

ldi char,0x5e

rcall write_flash

ldi hiz,(high(type_header*2))

ldi loz,(low(type_header*2))

rcall message

clr address2

clr address1

ldi address0,0x0b;смещение=8 + адрес=3

mov work,book

sbrc work,0

sbr address0,0x40

sbrc work,1

sbr address0,0x80

sbrc work,2

sbr address1,0x01

ldi work,55

ret_enter_name:

sbis usr,rxc

rjmp ret_enter_name

rcall RXcomplete

rcall write_flash

rcall inc_addr

dec work

breq stop_write_header

cpi char,0x07

brne ret_enter_name

rjmp type_status_reciev

stop_write_header:

ldi char,0x07

rcall write_flash

type_status_reciev:

ldi hiz,(high(reciev_file*2))

ldi loz,(low(reciev_file*2))

rcall message

rcall get_address_text_begin

module_write_cont:

sbis usr,rxc

rjmp module_write_cont

rcall RXcomplete

cpi char,0x07

breq ret_module_write

mov data,char

rcall write_flash

rcall confirm

rcall inc_addr

sbrs flag,0;если память переполнена.

rjmp module_write_cont

ldi hiz,(high(memory_full*2))

ldi loz,(low(memory_full*2))

rcall message

rcall push_button

ret

ret_module_write:

mov char,address2

mov storead1,address1

mov storead0,address0

clr address2

clr address1

ldi address0,0x08

mov work,book

sbrc work,0

sbr address0,0x40

sbrc work,1

sbr address0,0x80

sbrc work,2

sbr address1,0x01

rcall write_flash

rcall inc_addr

mov char,storead1

rcall write_flash

rcall inc_addr

mov char,storead0

rcall write_flash

ldi hiz,(high(file_recieved*2))

ldi loz,(low(file_recieved*2))

rcall message

ret

;-----------------------------------------------------------------------

module_read:







ПРИЛОЖЕНИЕ А (Продолжение)



;clr address0

;clr address1

;clr address2

show_to_screen:

rcall read_flash

mov rus,data

mov char,data

rcall write_char

rcall inc_addr

cpi count,TSYM-1

breq branch

rjmp show_to_screen

branch:

rcall push_button

cpi key,1

breq ret_module_read

cpi key,2

breq show_to_screen

minus_tsym:

subi address0,low(TSYM*2)

sbci address1,high(TSYM*2)

brsh show_to_screen

dec address2

brpl show_to_screen

clr address0

clr address1

clr address2

rjmp show_to_screen

ret_module_read:

ret

;-----------------------------------------------------------------------

module_erase:

clr work;Вначале стираются закладки в ЭППЗУ

clr count

out eearh,work

rcall wait_write_internal_eeprom

ldi work,0x01

erase_bookmark:

out eearl,work

ser data

out eedr,data

rcall write_internal_eeprom

rcall wait_write_internal_eeprom

subi work,0xfc

inc count

cpi count,8

brne erase_bookmark

ldi hiz,(high(memory_erased_process*2))

ldi loz,(low(memory_erased_process*2))

rcall message

rcall erase_flash

ldi hiz,(high(memory_erased*2))

ldi loz,(low(memory_erased*2))

rcall message

ret

;-----------------------------------------------------------------------

;Нажатие кнопки. Возвращаемый код: 1-красная кнопка, 2-зелёная вниз, 3-зелёная вверх

push_button_no_wait:

push work

clr key

sbis pina,5

rjmp red

sbis pina,6

rjmp green_down

sbis pina,7

rjmp green_up;ЭЄю рэрыюушўэыщ єўрёЄюъ ъюфр,

ret;Єюы№ъю схч юцшфрэш эрцрЄш ъэюяъш

push_button:

;ret

push work

clr key

wait_push_button:

clr work

sbis pina,5

rjmp red

sbis pina,6

rjmp green_down

sbis pina,7

rjmp green_up

rjmp wait_push_button;ЗрЎшъыхэю: эрцрЄ№ яЁшфёЄё

red:

dec work

nop

breq pull_red

sbis pina,5

rjmp red

rjmp wait_push_button

clr_pull_red:

clr work

pull_red:

dec work

nop

breq red_quit

sbic pina,5

rjmp pull_red

rjmp clr_pull_red

red_quit:

pop work

ldi key,1

ret

green_down:

dec work

nop

breq pull_green_down

sbis pina,6

rjmp green_down

rjmp wait_push_button

clr_pull_green_down:

clr work

pull_green_down:

dec work

nop

breq green_down_quit

sbic pina,6

rjmp pull_green_down

rjmp clr_pull_green_down

green_down_quit:

pop work

ldi key,2

ret

green_up:

dec work

nop

breq pull_green_up

sbis pina,7

rjmp green_up

rjmp wait_push_button

clr_pull_green_up:

clr work

pull_green_up:

dec work

nop

breq green_up_quit

sbic pina,7

rjmp pull_green_up

rjmp clr_pull_green_up

green_up_quit:

pop work

ldi key,3

ret

;-----------------------------------------------------------------------

blank_screen:

ser count

ldi char, 0b00000001

rcall write_cmd

ret

;-----------------------------------------------------------------------

message:

;ret

push work

sbr flag,0x08

rcall blank_screen

message_loop:

lpm

mov work,rsym

cpi work,0x0

breq go_away

cpi work,0x1

brne no_return

ldi char, 0b11000000

rcall write_cmd

rjmp message_adr_inc

no_return:

mov char,work

push loz

push hiz

rcall write_data

pop hiz

pop loz

message_adr_inc:

inc loz

brne message_loop

inc hiz

rjmp message_loop

go_away:

sbrc flag,3

pop work

cbr flag,0x08

ret

;Выводимые сообщения. AVR Studio некорректно понимает коды русских симолов, так что пришлось извратиться.

hello:

.db ' ',bS,_i,_s,_t,_e,_m,_a,' ',' ','"',bK,_n,_i,_g,_o,_ch,_e,_j,'"',0x01,' ',bV,_e,_r,_s,_i,_ya,' ','1','.','3','7',0x00

begin:

.db ' ',bN,_a,_ch,_a,_t,_q,' ',_ch,_i,_t,_a,_t,_q,' ',_k,_n,_i,_g,_u,0x01,0x00

ret_cursor:

.db 0x7e,0x00

zakladka:

.db ' ',bD,_o,_s,_t,_a,_t,_q,' ',_z,_a,_k,_l,_a,_d,_k,_u,0x01,0x00

about:

.db ' ',bR,_e,_a,_l,_i,_z,_o,_v,_a,_n,_o,'.','.','.',0x0

about_develop:

.db ' ','R','&','D',' ','7','-',_ya,' ',bZ,_a,_s,_t,_a,_v,_a,'.',' ',bS,_o,_z,_d,_a,_l,' ','S','e','a','G','u','l','l','.',0x01,' ',bE,_s,_l,_i,' ',_ch,_t,_o,',',' ',_p,_i,_sh,_i,_t,_e,' ',_n,_a,' ','"','s','e','a','g','u','l','l','@','m','a','i','l','.','r','u','"',0x00

computer:

.db ' ',bS,_v,_ya,_z,_a,_t,_q,_s,_ya,' ',_s,' ',bEE,bV,bM,0x01,0x00

i_love_my_computer:

.db ' ',bZH,_d,_u,' ',_s,_v,_ya,_z,_i,' ',_n,_a,' ','1','1','5','2','0','0',0x01,' ',bP,_o,_d,_k,_l,_yu,_ch,_i,_t,_e,' ',_p,_o,_r,_t,'.',0x00

continue:

.db ' ',bP,_r,_o,_d,_o,_l,_zh,_i,_t,_q,' ',_ch,_i,_t,_a,_t,_q,0x01,0x00

pop_zakl:

.db ' ',bP,_o,_l,_o,_zh,_i,_t,_q,' ',_z,_a,_k,_l,_a,_d,_k,_u,0x01,0x00

high_inc:

.db ' ',bL,_i,_s,_t,_a,_t,_q,0x01,0x00

memory_erased:

.db ' ',bP,_a,_m,_ya,_t,_q,' ',_s,_t,_yo,_r,_t,_a,'!',0x00

list_kb:

.db ' ',bV,_v,_e,_d,_i,_t,_e,' ',_sh,_a,_g,' ',_p,_r,_o,_l,_i,_s,_t,_y,_v,_a,_n,_i,_ya,0x01,' ','(',_v,' ',_t,_y,_s,_ya,_ch,_a,_h,' ',_s,_i,_m,_v,_o,_l,_o,_v,')',':',0x00

address_set:

.db ' ',bA,_d,_r,_e,_s,' ',_v,_y,_s,_t,_a,_v,_l,_e,_n,0x00

memory_erased_process:

.db ' ',bS,_t,_i,_r,_a,_yu,'.','.','.',0x00

reciev_file:

.db ' ',bP,_r,_i,_yo,_m,' ',_i,_n,_f,_o,_r,_m,_a,_ts,_i,_i,0x00

file_recieved:

.db ' ',bI,_n,_f,_o,_r,_m,_a,_ts,_i,_ya,' ',_p,_r,_i,_n,_ya,_t,_a,'!',0x00

no_text:

.db ' ',bK,_n,_i,_g,_i,' ',_n,_e,' ',_b,_y,_l,_i,' ',_z,_a,_p,_i,_s,_a,_n,_y,'!',0x00

no_slot:

.db ' ',bN,_e,_t,' ',_m,_e,_s,_t,_a,' ',_v,' ',_t,_a,_b,_l,_i,_ts,_e,' ',_p,_o,_d,' ',_k,_n,_i,_g,_u,'!',0x01,' ',bK,_n,_i,_g,' ',_n,_e,' ',_b,_o,_l,_q,_sh,_e,' ','8','-',_m,_i,'!',0x00

type_header:

.db ' ',bV,_s,_t,_u,_ch,_i,_t,_e,' ',_z,_a,_g,_o,_l,_O,_v,_o,_k,'.',0x00

memory_full:

.db ' ',bP,_a,_m,_ya,_t,_q,' ',_z,_a,_p,_o,_l,_n,_e,_n,_a,' ',_p,_o,_l,_n,_o,_s,_t,_q,_yu,'!',0x00

no_bookmark:

.db ' ',bZ,_a,_k,_l,_a,_d,_k,_a,' ',_d,_l,_ya,' ',_ee,_t,_o,_j,' ',_k,_n,_i,_g,_i,' ',_o,_t,_s,_u,_t,_s,_t,_v,_u,_e,_t,'!',0x00

;-----------------------------------------------------------------------

menu:

;ret

clr count

choose_menu:

sbrs flag,2

rjmp current

ring_menu:

push count

rcall blank_screen

pop count

cpi count,2

breq start_pos_1

cpi count,3

breq start_pos_2

start_pos_0:

cpi count,0

brne end_pos_01

rcall show_cur

rjmp end_pos_02

end_pos_01:

rcall show_space

end_pos_02:

ldi hiz,(high(begin*2))

ldi loz,(low(begin*2))

rcall message_loop

start_pos_1:

cpi count,1

brne end_pos_11

rcall show_cur

rjmp end_pos_12

end_pos_11:

rcall show_space

end_pos_12:

ldi hiz,(high(zakladka*2))

ldi loz,(low(zakladka*2))

rcall message_loop

cpi count,2

brlo polling

start_pos_2:

cpi count,2

brne end_pos_21

rcall show_cur

rjmp end_pos_22

end_pos_21:

rcall show_space

end_pos_22:

ldi hiz,(high(computer*2))

ldi loz,(low(computer*2))

rcall message_loop

cpi count,2

breq polling

start_pos_3:

cpi count,3

brne end_pos_31

rcall show_cur

rjmp end_pos_32

end_pos_31:

rcall show_space

end_pos_32:

ldi hiz,(high(about*2))

ldi loz,(low(about*2))

rcall message_loop

polling:

rcall push_button

cpi key,2

breq add_count

cpi key,3

breq sub_count

ret

add_count:

cpi count,3

breq choose_menu

inc count

rjmp choose_menu

sub_count:

cpi count,0

breq choose_menu

dec count

rjmp choose_menu

;Меню, вылазиющее при чтении

current:

push count

rcall blank_screen

pop count

cpi count,2

breq start_cur_1

cpi count,3

breq start_cur_2

start_cur_0:

cpi count,0

brne end_cur_01

rcall show_cur

rjmp end_cur_02

end_cur_01:

rcall show_space

end_cur_02:

ldi hiz,(high(continue*2))

ldi loz,(low(continue*2))

rcall message_loop

start_cur_1:

cpi count,1

brne end_cur_11

rcall show_cur

rjmp end_cur_12

end_cur_11:

rcall show_space

end_cur_12:

ldi hiz,(high(zakladka*2))

ldi loz,(low(zakladka*2))

rcall message_loop

cpi count,2

brlo polling

start_cur_2:

cpi count,2

brne end_cur_21

rcall show_cur

rjmp end_cur_22

end_cur_21:

rcall show_space

end_cur_22:

ldi hiz,(high(pop_zakl*2))

ldi loz,(low(pop_zakl*2))

rcall message_loop

cpi count,2

breq polling

start_cur_3:

cpi count,3

brne end_cur_31

rcall show_cur

rjmp end_cur_32

end_cur_31:

rcall show_space

end_cur_32:

ldi hiz,(high(high_inc*2))

ldi loz,(low(high_inc*2))

rcall message_loop

rjmp polling

show_cur:

ldi hiz,(high(ret_cursor*2))

ldi loz,(low(ret_cursor*2))

rcall message_loop

ret

show_space:

ldi char,' '

rcall write_data

ret

;-----------------------------------------------------------------------

listing:

push work

rcall blank_screen

ldi count,1

ldi hiz,(high(list_kb*2))

ldi loz,(low(list_kb*2))

rcall message_loop

select_kbyte:

ldi char, 0b11010111

rcall write_cmd

cpi count,0x0a

brsh big_gid

mov work,count

rcall dec_itoa

ldi char,' '

rcall write_data

rjmp after_show

big_gid:

ldi char,'1'

push count

rcall write_data

pop count

ldi char, 0b11011000

rcall write_cmd

mov work,count

subi work,0x0a

rcall dec_itoa

after_show:

rcall push_button

cpi key,3

breq inc_kbyte

cpi key,2

breq dec_kbyte

pop work

ret

inc_kbyte:

cpi count,16

breq select_kbyte

inc count

rjmp select_kbyte

dec_kbyte:

cpi count,1

breq select_kbyte

dec count

rjmp select_kbyte

dec_itoa:

ldi char,0x30

add char,work

push count

rcall write_data

pop count

ret

;-----------------------------------------------------------------------

module_address_set:

sbis usr,rxc

rjmp module_address_set

rcall RXcomplete

mov address2,data

wait1:

sbis usr,rxc

rjmp wait1

rcall RXcomplete

mov address1,data

wait2:

sbis usr,rxc

rjmp wait2

rcall RXcomplete

mov address0,data

ldi hiz,(high(address_set*2))

ldi loz,(low(address_set*2))

rcall message

ret

;-----------------------------------------------------------------------

get_address_text_begin:

push work

mov work,book

cpi work,0

brne address_calc

clr address2

ldi address1,0x02

ldi address0,0x08

rjmp end_get_address_text_begin

address_calc:

dec work;То есть dec book!

clr address1

ldi address0,0x08

;mov work,book

sbrc work,0

sbr address0,0x40

sbrc work,1

sbr address0,0x80

sbrc work,2

sbr address1,0x01

rcall read_flash

mov storeh,data

rcall inc_addr

rcall read_flash

mov storel,data

rcall inc_addr

rcall read_flash

mov address0,data

mov address1,storel

mov address2,storeh

end_get_address_text_begin:

pop work

ret

;-----------------------------------------------------------------------

choose_text:

push work

clr address0

clr address1

clr address2

rcall read_flash

cpi data,0x5e

breq calk_name

ldi hiz,(high(no_text*2))

ldi loz,(low(no_text*2))

rcall message

rcall push_button

rjmp choose_text_ret

calk_name:

inc address0;гораздо быстрее, чем подпрограммой inc_addr

rcall read_flash

cpi data,0x5e

breq calk_name

dec address0

mov all_book,address0

show_name:

clr address1

ldi address0,0x0b;смещение=8 + адрес=3

mov work,book

sbrc work,0

sbr address0,0x40

sbrc work,1

sbr address0,0x80

sbrc work,2

sbr address1,0x01

rcall blank_screen

ser count

mov work,all_book

cpi work,0

breq one_book

cp work,book

breq book_down

ldi char,0xda

rcall write_data

inc count

mov work,book

cpi work,0

breq one_book

book_down:

ldi char,0xd9

rcall write_data

inc count

one_book:

ldi char,' '

rcall write_char

ldi work,55

name_loop:

rcall read_flash

cpi data,0x07

breq end_show_name_ent

push work

mov char,data

rcall write_char

rcall inc_addr

pop work

dec work

brne name_loop

end_show_name_ent:

ldi char,' '

rcall write_char

ldi char,0x7e

rcall write_char

end_show_name:

rcall push_button

cpi key,3;то есть в минус

breq minus_text

cpi key,2;то есть в плюс

breq plus_text

rjmp choose_text_ret

minus_text:

mov work,book

cpi work,0

breq end_show_name

dec book

clr address2

clr address1

mov address0,book

rcall read_flash

cpi data,0x5e

breq ret_minus_text

inc book

ret_minus_text:

rjmp show_name

plus_text:

mov work,book

cpi work,7

breq end_show_name

inc book

clr address2

clr address1

mov address0,book

rcall read_flash

cpi data,0x5e

breq ret_plus_text

dec book

ret_plus_text:

rjmp show_name

choose_text_ret:

pop work

ret

;-----------------------------------------------------------------------

sub_string:

subi address0,low(TSYM)

sbci address1,high(TSYM)

brsh ret_sub_string

dec address2

ret_sub_string:

ret

;-----------------------------------------------------------------------

data_polling:

clr work

out ddrb,work

sbi portd,WE

sbrc address2,3

rjmp ce2_pol

sbi porta,CE2;CE2

cbi porta,CE1;CE1

rjmp repeat_dp

ce2_pol:

sbi porta,CE1

cbi porta,CE2

repeat_dp:

cbi portd,OE

nop

nop

in data,pinb

sbi portd,OE

cbr data,0x7f

cbr char,0x7f

cp data,char

brne repeat_dp; Собссно, это и есть #data polling по 7-му биту

ser work

out ddrb,work

sbi porta,CE1

sbi porta,CE2

ret

;-----------------------------------------------------------------------




Приложение Б



Файл rus.inc



.set _a=0x61

.set _b=0xb2

.set _v=0xb3

.set _g=0xb4

.set _d=0xe3

.set _e=0x65

.set _yo=0xb5

.set _zh=0xb6

.set _z=0xb7

.set _i=0xb8

.set _j=0xb9

.set _k=0xba

.set _l=0xbb

.set _m=0xbc

.set _n=0xbd

.set _o=0x6f

.set _p=0xbe

.set _r=0x70

.set _s=0x63

.set _t=0xbf

.set _u=0x79

.set _f=0xe4

.set _h=0x78

.set _ts=0xe5

.set _ch=0xc0

.set _sh=0xc1

.set _tch=0xe6

;.set _q=0xc2

.set _y=0xc3

.set _q=0xc4

.set _ee=0xc5

.set _yu=0xc6

.set _ya=0xc7

.set bA=0x41

.set bB=0xa0

.set bV=0x42

.set bG=0xa1

.set bD=0xe0

.set bE=0x45

.set bYO=0xa2

.set bZH=0xa3

.set bZ=0xa4

.set bI=0xa5

.set bJ=0xa6

.set bK=0x4b

.set bL=0xa7

.set bM=0x4d

.set bN=0x48

.set bO=0x4f

.set bP=0xa8

.set bR=0x50

.set bS=0x43

.set bT=0x54

.set bU=0xa9

.set bF=0xaa

.set bH=0x58

.set bTS=0xe1

.set bCH=0xab

.set bSH=0xac

.set bTCH=0xe2

;.set b&&=0xad

.set bY=0xae

;.set b##=0xc4

.set bEE=0xaf

.set bYU=0xb0

.set bYA=0xb1

Файл reader.hex

:020000020000FC

:10002000F8940FE50DBF02E00EBF0EEF01BB0BE829

:1000300002BB0FEF07BB08E10AB904E009B90FEFF3

:1000400004BB0FE10ABB002705BB08EF0BBB66270B

:10005000772788275FEF94E033240CD128E3DED0A4

:100060002CE0DCD026E0DAD021E0D8D02CB12CB1C5

:100070002CB1F6E0E2E0ABD26CD2E6D3503051F0D6

:10008000513039F0523091F1F6E0E0E6A0D261D281

:10009000F4CF52C09B7FA1D483D495D224D2D4D3A1

:1000A000F8D45030D1F35130A1F3523071F13BD438

:1000B0005F9389D25FEF89D1E12E212F7ED04BD182

:1000C0005F34C9F75F9145D2A33089F0A23009F0BF

:1000D000E6CF5F93550F550F750F30F48395803140

:1000E00018F06FEF7FEF8FE05F91E2CF54C05F9326

:1000F000550F550F751B28F48A951AF48827772712

:1001000066275F91D5CFEFD1FECF0F9300270FBBAE

:100110003CD0032D000F000F03950EBB8DBB38D0D4

:1001200034D003950EBB7DBB33D02FD003950EBBCF

:100130006DBB2ED00F91B1CF92FD4FD40F930027FE

:100140000FBB032D000F000F03950EBB1AD00F93AA

:100150000DB30F3F49F4F8E0E2E239D2FAD10F9142

:100160000F9192FD8ACF99CF802F0F9103950EBBEF

:1001700008D07DB303950EBB04D06DB30F919B7F68

:100180008CCFE199FECFE09A0895E199FECF0895D2

:10019000E29AE19A0895F6E0ECEB19D25F9BFECF6C

:1001A00012D286D0153E19F01E35E9F0F7CF5F9BCD

:1001B000FECF7ED002D0B1D0FACF0F9353955832F4

:1001C00039F0503551F027FD77D030D00F91089598

:1001D000F22E20EC23D02F2DF6CF5527F22E21E042

:1001E0001DD02F2DF0CF5F9BFECF62D0103149F094

:1001F000103251F0103359F0103459F0103561F0CD

:10020000F2CF9D7F87D1EFCF926084D1ECCF11D117

:10021000EACFD9D168D1E7CFB3D3E5CF0F930ED0D2

:100220009698959828BB1DD00F9108950F9306D0EE

:10023000969A959828BB15D00F9108952F93002773

:1002400007BB0FEF08BB9698959A0000949A0ED0C2

:1002500026B3949827FDF9CF0FEF07BB96982F91FF

:10026000089504D0949A02D0949808950FE10A95C5

:10027000F1F708950FEF07BB9698959810D00FD01F

:100280000ED00DD00CD007D00AD009D004D007D0A2

:1002900006D001D004D000E308BBE3DF0895332784

:1002A000442703D03A95E9F708954A95F1F7089560

:1002B0002CB1E22E122F0895283A59F0283B59F01C

:1002C0002F73F2E0EAEDE20F08F4F395C895202DC4

:1002D000089522EA089525EB089541A042A1E04542

:1002E000A3A4A5A64BA74D484FA8504354A9AA586C

:1002F000E1ABACE2ADAE62AFB0B161B2B3B4E36555

:10030000B6B7B8B9BABBBCBD6FBE7063BF79E4788D

:10031000E5C0C1E6C2C3C4C5C6C75D9BFECFECB88D

:100320000895979B18BB65BB929A0000929875BB85

:100330000F930BB3087F082B83FD03C00061077F79

:1003400002C008600F7E0BBB0F910000979916B397

:10035000DB9ADC9A08959894639531F4739521F4AF

:100360008395803108F0916008959798939A0F9340

:1003700005E5602F702F882791FD88601AEAD1DF8C

:100380000AEA602F0AE2702F15E5CBDF05E5602F42

:10039000702F10E8C6DF05E5602F702F1AEAC1DF65

:1003A0000AEA602F0AE2702F15E5BBDF05E5602F32

:1003B000702F10E1B6DF979A0F91F02E0AE032D03D

:1003C0000A95E9F70F2D979A0895979A93980F93A6

:1003D000002707BBA6DF0FEF07BB0F91939A089585

:1003E000F62E172E282E9798939A0F9305E5602FD7

:1003F000702F88701AEA95DF0AEA602F0AE2702FE0

:1004000015E58FDF05E5602F702F10EA8ADF6F2D6D

:10041000712D822D122F85DF2F9340D32F910F91B5

:10042000979A08950F9307E43ADF0A95E9F70F9139

:10043000089500273324662777278827C6DF1E35CF

:1004400051F489DF3394032D0830C1F7F7E0E8EB6E

:10045000BED07FD008952EE5C3DFF7E0EEEEB7D033

:10046000882777276BE0032D00FD606401FD60683D

:1004700002FD716007E35F9BFECF1ADFB1DF6BDF28

:100480000A9519F02730B9F702C027E0A9DFF7E095

:10049000E6E79DD085D25F9BFECF0ADF273059F07B

:1004A000122F9EDF3ADF57DF90FFF5CFF8E0E4E050

:1004B0008ED04FD00895282F572E462E8827772785

:1004C00068E0032D00FD606401FD606802FD71605D

:1004D00087DF41DF252D84DF3EDF242D81DFF7E03C

:1004E000E8E875D0089571DFE12E212F66DE33DF55

:1004F0005F3409F0F8CF2DD0A13059F0A23099F334

:10050000605A704080F78A9572F7662777278827A8

:10051000EACF0895002755270FBB37DE01E00EBB59

:100520001FEF1DBB35DE31DE0C5F53955830B9F738

:10053000F7E0EAE64CD019DFF7E0E6E148D00895AD

:100540000F93AA27CD9B0FC0CE9B1DC0CF9B2BC066

:1005500008950F93AA270027CD9B05C0CE9B13C0FB

:10056000CF9B21C0F8CF0A95000021F0CD9BFBCF97

:10057000F2CF00270A95000019F0CD99FBCFF9CFF3

:100580000F91A1E008950A95000021F0CE9BFBCFCA

:10059000E2CF00270A95000019F0CE99FBCFF9CFE2

:1005A0000F91A2E008950A95000021F0CF9BFBCFA8

:1005B000D2CF00270A95000019F0CF99FBCFF9CFD1

:1005C0000F91A3E008955FEF21E028DE08950F93D7

:1005D0009860F9DFC895002D003079F0013019F4EA

:1005E00020EC1CDE06C0202FEF93FF931FDEFF914F

:1005F000EF91E39579F7F395EDCF93FD0F91977F09

:1006000008952043B863BF65BC612020224BBDB86C

:10061000B46FC065B922012042657063B8C720314C

:100620002E333700204861C061BFC420C0B8BF610D

:10063000BFC420BABDB8B47901007E0020E06F636A

:10064000BF61BFC420B761BABB61E3BA79010000E2

:1006500020506561BBB8B76FB361BD6F2E2E2E0001

:100660002052264420372DC720A46163BF61B361A7

:100670002E20436FB7E361BB2053656147756C6CF7

:100680002E01204563BBB820C0BF6F2C20BEB8C16F

:10069000B8BF6520BD61202273656167756C6C40D1

:1006A0006D61696C2E72752200002043B3C7B7617B

:1006B000BFC463C7206320AF424D010020A3E3798C

:1006C0002063B3C7B7B820BD612031313532303037

:1006D0000120A86FE3BABBC6C0B8BF6520BE6F706B

:1006E000BF2E000020A8706FE36FBBB6B8BFC42058

:1006F000C0B8BF61BFC4010020A86FBB6FB6B8BF50

:10070000C420B761BABB61E3BA79010020A7B8631E

:10071000BF61BFC4010020A861BCC7BFC42063BFC4

:10072000B570BF6121002042B365E3B8BF6520C149

:1007300061B420BE706FBBB863BFC3B361BDB8C73F

:10074000012028B320BFC363C7C061782063B8BC51

:10075000B36FBB6FB3293A002041E370656320B3E8

:10076000C363BF61B3BB65BD00002043BFB8706108

:10077000C62E2E2E000020A870B8B5BC20B8BDE44F

:100780006F70BC61E5B8B80020A5BDE46F70BC61B6

:10079000E5B8C720BE70B8BDC7BF61210000204BBF

:1007A000BDB8B4B820BD6520B2C3BBB820B761BE28

:1007B000B86361BDC3210000204865BF20BC6563EC

:1007C000BF6120B320BF61B2BBB8E56520BE6FE357

:1007D00020BABDB8B4792101204BBDB8B420BD65A5

:1007E00020B26FBBC4C16520382DBCB821002042A7

:1007F00063BF79C0B8BF6520B761B46FBB6FB36F1B

:10080000BA2E000020A861BCC7BFC420B761BE6F6C

:10081000BBBD65BD6120BE6FBBBD6F63BFC4C621DC

:10082000000020A461BABB61E3BA6120E3BBC7202A

:10083000C5BF6FB920BABDB8B4B8206FBF6379BF68

:1008400063BFB37965BF2100552792FF39C05F931D

:10085000BADE5F91523051F0533091F0503011F4C4

:100860005BD001C05DD0F6E0E4E2B4DE513011F4BB

:1008700053D001C055D0F6E0ECE3ACDE523090F03E

:10088000523011F449D001C04BD0F6E0EAEAA2DEC2

:10089000523041F0533011F43FD001C041D0F6E066

:1008A000E0E598DE56DEA23019F0A33029F0089575

:1008B000533059F25395C9CF503039F25A95C5CFBC

:1008C0005F9381DE5F91523051F0533091F05030A0

:1008D00011F422D001C024D0F6E0E4EE7BDE5130EA

:1008E00011F41AD001C01CD0F6E0ECE373DE5230F4

:1008F000C8F2523011F410D001C012D0F6E0E8EF87

:1009000069DE523079F2533011F406D001C008D0BC

:10091000F7E0ECE05FDEC6CFF6E0EAE35BDE0895E9

:1009200020E284DC08950F934EDE51E0F7E0E6E22A

:1009300051DE27ED73DC5A3028F4052F1BD020E25E

:1009400075DC09C021E35F9371DC5F9128ED66DC03

:10095000052F0A500FD0FDDDA33021F0A23031F079

:100960000F910895503129F35395E3CF513009F396

:100970005A95DFCF20E3200F5F9358DC5F910895F5

:100980005F9BFECF95DC812F5F9BFECF91DC712FAB

:100990005F9BFECF8DDC612FF7E0E8E518DE089560

:1009A0000F93032D003021F4882772E068E013C014

:1009B0000A95772768E000FD606401FD606802FD2C

:1009C000716003DD212EC7DC00DD112EC4DCFDDCEF

:1009D000612F712D822D0F9108950F936627772730

:1009E0008827F3DC1E3529F0F7E0EEE9F0DDB1DD14

:1009F0004EC06395EADC1E35E1F36A95662E7727D3

:100A00006BE0032D00FD606401FD606802FD716014

:100A1000DADD5FEF062D003059F0031531F02AEDD5

:100A200005DC5395032D003019F029EDFFDB5395BC

:100A300020E2C3DB07E3C9DC173039F00F93212F25

:100A4000BCDB89DC0F910A95B1F720E2B6DB2EE71B

:100A5000B4DB7FDDA33019F0A23069F018C0032D9C

:100A60000030B9F33A9488277727632DAEDC1E3522

:100A700009F03394C4CF032D073059F333948827FA

:100A80007727632DA2DC1E3509F03A94B8CF0F9179

:100A900008956055704008F48A950895002707BBB3

:100AA000979A83FD03C0DC9ADB9802C0DB9ADC983E

:100AB00093980000000016B3939A107820781217CC

:0C0AC000B9F70FEF07BBDB9ADC9A089532

:00000001FF


Приложение В



Файл reader.cpp



#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <time.h>

#define OUT_REG BASE

#define IN_REG BASE

#define CONTROL BASE+3

#define STATUS BASE+5

#define LOW_DIV BASE

#define HIGH_DIV BASE+1

#define INT_REG BASE+1

#define DIVISOR 0x80

unsigned long BASE;

FILE *file3;

int code;

void Help();

void Erase();

void Write(char *wr_file);

int o_sym(char symbol);

void Inv(char insym);

char i_sym();

void main(int argc, char *argv[])

{

FILE *file1;

char *param;

clrscr();

if ((file1 = fopen("reader.ini", "rt"))

== NULL)

{

printf("Cannot open file \"reader.ini\" !\n");

return;

}

do {

fscanf(file1,"%s\n",param);

}while(strcmp(param,"[PORT]")!=0);

fscanf(file1,"%s\n",param);

printf("\nConnect device to %s",param);

if(param[3]=='1')

BASE=0x3f8;

if(param[3]=='2')

BASE=0x2f8;

fsetpos(file1,0);

do {

fscanf(file1,"%s\n",param);

}while(strcmp(param,"[CODE]")!=0);

fscanf(file1,"%s\n",param);

printf("\nCode= %s",param);

if(!strcmp(param,"DOS")) code=1;

else code=0;

fclose(file1);

//Initial COM-port block

outportb(CONTROL,DIVISOR);

outportb(LOW_DIV,1);

outportb(HIGH_DIV,0);

outportb(CONTROL,0x07);//8 bit+2stop+noparity

outportb(INT_REG,0);//Disable interrupt

inportb(IN_REG);

inportb(IN_REG);//Zeroing read

//End of initial block

o_sym (0x5e);//Switch to operation mode

if(argc<2)

{

Help();

return;

}

switch(*argv[1])

{

case 'e':

Erase();

break;

case 'w':

Write(argv[2]);

break;

default:

Help();

break;

}

}

void Help()

{

printf ("\nUse \"reader.exe e\" for erase books, \"reader.exe w <file>\" for write <file>");

}

void Erase()

{

printf ("\nAll books in the memory will be erased.\nWait message on the Readerbook's screen");

o_sym(0x10);//first IC

o_sym(0x20);//second IC

}

void Write(char *wr_file)

{

FILE *file1;

char author[40],title[40],header[81],rec_sym;

int i=0,flag;

char win[256]={

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31

,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47

,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63

,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79

,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95

,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111

,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127

,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207

,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223

,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239

,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191

,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207

,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223

,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255

,168,184,242,243,244,245,246,247,248,249,250,251,252,253,254,255

};

if ((file1 = fopen(wr_file, "rt"))== NULL)

{

printf("Cannot open file \"%s\" !\n",wr_file);

return;

}

if ((file3 = fopen("reciev.txt", "wt"))== NULL)

{

printf("Cannot open file \"%s\" !\n",wr_file);

return;

}

printf("\n");

for(i=0;i<=256;i++)

putchar(fgetc(file1));

printf(" ...(etc)");

fsetpos(file1,0);

o_sym (0x30);

printf("\nEnter author's name\n");

gets(author);

printf("Enter title\n");

gets(title);

strcpy(header,author);

strcat(header," \"");

strcat(header,title);

strcat(header,"\"");

printf("\nHeader: %s",header);

i=0;

while(header[i]!='\0')

{

o_sym(win[(int)header[i]&0xff]);

i++;

}

o_sym(0x07);

printf("\nWriting file \"%s\"...",wr_file);

//flag: 01 - detect space

// -01 - skip symbol

while(!(feof(file1)))

{

rec_sym=fgetc(file1);

if(feof(file1)) break;

if(code==1)

rec_sym=win[(int)rec_sym&0xff];

if((rec_sym==' ')||(rec_sym=='-')||(rec_sym=='\n'))

{

if(rec_sym=='-')

{

rec_sym=fgetc(file1);

if(feof(file1)) break;

if(code==1) rec_sym=(char)win[(int)rec_sym&0xff];

if(rec_sym!='\n')

{

Inv('-');

flag=0;

}

else

flag=-1;

if(rec_sym==' ')

flag=1;

}

if(rec_sym=='\n')

rec_sym=' ';

if((flag==1)||(flag==-1))//rec_sym==' '

flag=-1;

else

flag=1;

}

else

flag=0;



if(flag!=-1)

Inv(rec_sym);

}

o_sym (0x07);

fclose(file1);fclose(file3);

printf("\nFile writing successfully complete");

}

int o_sym(char symbol)

{

long timeout;

timeout=clock();

if(timeout==-1)

printf("\nTime not available");

//printf("\nTimeout=%d",timeout);

do {

if((clock()-timeout)>1)

{

printf("\nWarning!Timeout!");

return -1;

}

}while((inportb(STATUS)&0x20)==0);

outportb(OUT_REG,symbol);

return 0;

}

char i_sym()

{

long timeout;

int errcode;

timeout=clock();

do{

if((clock()-timeout)>1000)

{

printf("\nTimeout. The symbol may be lost!");

return 0;

}

errcode=inportb(STATUS);

}while((errcode&0x01)==0);

return inportb(IN_REG);

}

void Inv(char insym)

{

char invalidate;

fputc(insym,file3);

o_sym(insym);

do

invalidate=i_sym();

while((invalidate!=insym)&&(invalidate!=0));//waiting confirm

}


Приложение Г



Файл reader.ini



[PORT]

COM2



[CODE]

DOS




Приложение Д

Схема электрическая принципиальная устройства для чтения электронных книг








Приложение Е

Расчет стоимости комплектующих устройства для чтения электронных книг