Разработка устройства нахождения минимального давления при помощи микроконтроллера ATMega324P

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.06.2011
Размер файла 24,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МО РБ

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

Кафедра ВС и С

Курсовой проект

по курсу: "Периферийные устройства ЭВМ"

на тему: "Разработка устройства нахождения минимального давления при помощи микроконтроллера ATMega324P"

Полоцк 2010 г.

Содержание

Введение

1. Обзор литературы

2. Разработка структуры устройства

3. Обоснование выбора узлов, элементов функциональной схемы устройства

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

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

Заключение

Литература

Введение

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

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

История появления микроконтроллеров уходит в 70-е годы, когда инженерам М. Кочрену и Г. Буну, сотрудникам американской компании Texas Instruments, впервые был выдан патент на однокристальную микро-ЭВМ. Именно они предложили на одном кристалле разместить не только процессор, но и память с устройствами ввода-вывода.

В 1976 году американская фирма Intel выпускает микроконтроллер i8048. Чуть позже в этом же году Intel выпускает следующий микроконтроллер: i8051. Удачный набор периферийных устройств, возможность гибкого выбора внешней или внутренней программной памяти и приемлемая цена обеспечили этому микроконтроллеру успех на рынке. С точки зрения технологии микроконтроллер i8051 являлся для своего времени очень сложным изделием -- в кристалле было использовано 128 тыс. транзисторов, что в 4 раза превышало количество транзисторов в 16-разрядном микропроцессоре i8086.

На сегодняшний день существует более 200 модификаций микроконтроллеров, совместимых с i8051, выпускаемых двумя десятками компаний, и большое количество микроконтроллеров других типов. Популярностью у разработчиков пользуются 8-битные микроконтроллеры PIC фирмы Microchip Technology и AVR фирмы Atmel, 16-битные MSP430 фирмы TI, а также ARM, архитектуру которых разрабатывает фирма ARM и продаёт лицензии другим фирмам для их производства.

AVR микроконтроллеры фирмы Atmel, являются наиболее яркими представителями семейства 8-ми битных микроконтроллеров. Они имеют RISC-архитектуру, что позволяет выполнять команды за один такт, и начитывают от 90 до 133 инструкций. Так же данные микроконтроллеры в большинстве случаев включают в себя АЦП, ШИМ и встроенною Flash-памятью.

1. Обзор литературы

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

Справочник об микроконтроллерах [1] содержат необходимую начальную справочную информацию об микроконтроллерах AVR семейства Mega, используемых в качестве главного элемента разрабатываемого устройства. В данной книге описаны основы работы микроконтроллеров: иерархия и архитектура микроконтроллеров, включенные в него периферийные устройства, принцип работы. Подробно описаны возможности микроконтроллеров. В книге [2] рассмотрены принципы и методы получения аналоговой информации с датчиков. Также в этой книге описана специфика измерения различных параметров окружающей среды. В книгах [3] и [4] изложены основы программирования микроконтроллеров. В этих книгах есть примеры на основе которых можно быстро изучить особенности программирования для микроконтроллеров. В книге [5] описана выбранная мной среда разработки программного обеспечения для микроконтроллера. В этой книге подробно изложена настройка среды, последовательность действий для создания проекта, так же в этой книге есть основы языка C для микроконтроллеров. Книга [6] разъясняет то, как присоединить микроконтроллер к компьютеру через com-порт. На сайт www.atmel.com можно найти datasheet на заданный в условии микроконтроллер. В datasheet'e содержится подробное описание микроконтроллера. В выше приведенных книгах содержится вся информация нужная для написания курсовой работы.

2. Разработка структуры устройства

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

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

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

Структурная схема приведена в приложении А.

3. Обоснование выбора узлов, элементов, функциональной схемы устройства

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

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

Микроконтроллер ATmega324P является 8-разрядным AVR- микроконтроллером с внутрисистемно-программируемой флэш-памятью размером 32 килобайта. Отличительные особенности:

· Прогрессивная RISC-архитектура

· ОЗУ - 2 килобайта;

· EEPROM - 1 килобайт;

· 32 контакта ввода/вывода;

· производительность до 20 миллионов инструкций в секунду на частоте 20 МГц;

· встроенный 8-канальный, 10-разрядный АЦП;

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

· источники внешних и внутренних прерываний;

· встроенная поддержка UART.

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

Рабочее напряжение для ATmega324P составляет 2.7 - 5.5В и зависит от частоты на которой работает процессор микроконтроллера.

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

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

На основе описания микроконтроллера ATMega324P необходимо выбрать тип датчика. Так как у данного микроконтроллера присутствуют 8 входов, через которые можно напрямую связаться с АЦП, значит необходимо выбирать аналоговые датчики температуры, которые напрямую будут передавать показания.

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

Так как рабочие напряжения в COM-порту +12 В и -12 В, а МК оперирует напряжениями +5 В и 0 В. Для того, чтобы все работало нормально, нужно установить преобразователь уровней. В нашей схеме мы будем использовать микросхему преобразователя уровня MAX232. При работе с COM-портом именно эта микросхема находит наиболее частое применение.

MAX232 - интегральная схема, преобразующая сигналы последовательного порта RS-232 в сигналы, пригодные для использования в цифровых схемах на базе ТТЛ или КМОП технологий. MAX232 работает приемопередатчиком и преобразует сигналы RX, TX, CTS и RTS.

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

Схема обеспечивает уровень выходного напряжения, используемый в RS-232 (приблизительно ± 7.5 В), преобразуя входное напряжение + 5 В при помощи внутреннего зарядового насоса на внешних конденсаторах. Это позволяет использовать ее именно в нашем устройстве, которое работает на напряжении от 0 до + 5 В, поэтому не требуется усложнять источник питания только для того, чтобы использовать RS-232.

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

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

Первый блок представляют собой датчики. По условию у нас должно быть семь датчиков. Питание для всех элементов данной категории +5 V.

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

Выводы с 33 по 40 это выводы аналогово-цифрового преобразователя. Так как у данного микроконтроллера 8 выводов АЦП, а мы используем 7 датчиков, то один вывод не будет задействован.

Выводы 14 и 15, это выводы последовательного протокола передачи данных USART. 14 вывод RXD0 отвечает за принятые данные, 15 TXD0 за отправленные данные. Индекс 0 означает, что мы используем первые USART из двух доступных в нашем протоколе.

Подключенные вывод AVCC к источнику питания в +5V показывает, что опорное напряжение питания микроконтроллера было взято именно с него, для корректной работы аналогово-цифрового преобразователя. Так же как источник опорного напряжения можно использовать вывод AREF. Это может быть напряжение со специальной микросхемы опорного напряжения, или же со стабилитрона. Если нужно замерять небольшое напряжение, заметно меньшее чем напряжение питания, скажем от 0 до 1 вольт, то чтобы было точнее, и чтобы оно не затерялось на фоне пятивольтового питания, то на AREF мы заводим опорное напряжение в 1 вольт. Еще можно использовать внутренний источник опорного напряжения +2.56V. Но данный источник имеет явные недостатки. Если брать данные с него, то показания сильно плавают и бывают, не стабильны. Кое-как исправить ситуацию можно поставив конденсатор на вход AREF (оттуда берется питание для внутреннего источника).

Напряжение питание самого микроконтроллера так же берется из источника в +5V, так как он не маломощный. Более простые МК данного семейства могут использовать меньшее напряжение питания. Вывод, на который подается питание, обозначен под номером 5.

Третьи блок представляет собой микросхему преобразователь MAX232.

Для корректной работы необходимо подключить дополнительно к ножкам микросхемы четыре конденсатора емкостью 1мкФ. С1 и С2 выполняют роль корректировки работы микросхемы, С3 и С4 являются сглаживающими элементами. Так как они подключены к проводам, где подпитывается микросхема. Особенностью питания MAX232 является то, что она берет ток из интерфейса RS-232.

Элементы U2 и U3 являются инверторами. Они необходимы для корректной передачи данных, так как MAX232 использует, инвертированные сигналы. Подключение ножек к выводам со стороны МК осуществляется по следующему принципу: из RXD0 микроконтроллера через U3 на R1OUT микросхемы MAX232, а TXD0 напрямую к T1IN. Подключение со стороны последовательного интерфейса RS232: из T1OUT через U2 на TXD порта RS232, а R1IN напрямую RXD порта RS232. Временная диаграмма и схема электрическая принципиальная представлена в приложении Б и В соответственно.

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

давление датчик микроконтроллер программный

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

Выбор среды разработки программного обеспечения был остановлен на CodeVisionAVR. CodeVisionAVR - пакет разработки программного обеспечения для микроконтроллеров семейства AVR. Он поддерживает все современные чипы данного семейства. Встроенные компиляторы языков Assembler и С открывают большие возможности в использование микроконтроллеров.

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

При написании прошивки были сделаны выводы, что оптимальная частота дискретизации лежит в границах 50-200кГц, соответственно время на обработку входных данных необходимо больше.

Код прошивки:

#include <mega324.h>

#include <delay.h>

#include <stdio.h>

#define FIRST_ADC_INPUT 0

#define LAST_ADC_INPUT 6

unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];

#define ADC_VREF_TYPE 0x60

interrupt [ADC_INT] void adc_isr(void)

{

static unsigned char input_index=0;

adc_data[input_index]=((ADCH/5)+0.095)/0.009;

if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))

input_index=0;

ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;

delay_us(10);

ADCSRA|=0x40;

}

void main(void)

{

unsigned char i,min,rec;

#pragma optsize-

CLKPR=0x80;

CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

PORTA=0x00;

DDRA=0x00;

PORTB=0x00;

DDRB=0x00;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

TCCR0A=0x00;

TCCR0B=0x00;

TCNT0=0x00;

OCR0A=0x00;

OCR0B=0x00;

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

ASSR=0x00;

TCCR2A=0x00;

TCCR2B=0x00;

TCNT2=0x00;

OCR2A=0x00;

OCR2B=0x00;

EICRA=0x00;

EIMSK=0x00;

PCICR=0x00;

TIMSK0=0x00;

TIMSK1=0x00;

TIMSK2=0x00;

UCSR0A=0x00;

UCSR0B=0x18;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x33;

ACSR=0x80;

ADCSRB=0x00;

DIDR0=0x00;

ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);

ADCSRA=0xEE;

ADCSRB&=0xF8;

#asm("sei")

while (1)

{

scanf("%c",&rec);

delay_ms(1);

if (rec=='s')

{

#asm("sleep")

min=adc_data[0];

for (i=1;i<LAST_ADC_INPUT-FIRST_ADC_INPUT+1;i++)

{

if (min<adc_data[i])

min=adc_data[i];

}

printf("%d",min);

rec=0;

}

}

}

Для компьютера в Visual Studio 2008 был написан драйвер код которого приведен дальше.

Исходный код драйвера:

// comport.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <windows.h>

#include <stdlib.h>

#include <conio.h>

const int ATTEMPTS=3;

const int TIMEOUT=150;

int Connect(HANDLE *handle, const char *port, int speed)

{

*handle=CreateFile(port,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if (*handle==INVALID_HANDLE_VALUE)

{

handle=0;

return 1;

}

SetCommMask(handle,EV_RXCHAR);

SetupComm(handle,1500,1500);

COMMTIMEOUTS CommTimeOuts;

CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;

CommTimeOuts.ReadTotalTimeoutMultiplier = 0;

CommTimeOuts.ReadTotalTimeoutConstant = TIMEOUT;

CommTimeOuts.WriteTotalTimeoutMultiplier = 0;

CommTimeOuts.WriteTotalTimeoutConstant = TIMEOUT;

if (!SetCommTimeouts(*handle, &CommTimeOuts))

{

handle=0;

return 2;

}

DCB ComDCM;

memset(&ComDCM,0,sizeof(ComDCM));

ComDCM.DCBlength = sizeof(DCB);

GetCommState(handle, &ComDCM);

ComDCM.BaudRate = DWORD(speed);

ComDCM.ByteSize = 8;

ComDCM.Parity = NOPARITY;

ComDCM.StopBits = ONESTOPBIT;

ComDCM.fAbortOnError = TRUE;

ComDCM.fDtrControl = DTR_CONTROL_DISABLE;

ComDCM.fRtsControl = RTS_CONTROL_DISABLE;

ComDCM.fBinary = TRUE;

ComDCM.fParity = FALSE;

ComDCM.fInX = ComDCM.fOutX = FALSE;

ComDCM.XonChar = 0;

ComDCM.XoffChar = (unsigned char)0xff;

ComDCM.fErrorChar = FALSE;

ComDCM.fNull = FALSE;

ComDCM.fOutxCtsFlow = FALSE;

ComDCM.fOutxDsrFlow = FALSE;

ComDCM.XonLim = 128;

ComDCM.XoffLim = 128;

if (!SetCommState(*handle,&ComDCM))

{

handle=0;

return 3;

}

return 0;

}

void Disconnect(HANDLE *handle)

{

if (handle!=0)

{

CloseHandle(handle);

handle=0;

}

}

int Write(HANDLE handle,const unsigned char *data,int n)

{

if (handle==0)

return 1;

DWORD feedback;

if(!WriteFile(handle,data,n,&feedback,0) || feedback!=n)

return 2;

return 0;

}

int Read(HANDLE handle, unsigned char *data,int n)

{

if (handle==0)

return 1;

int begin=GetTickCount();

DWORD feedback;

int len=n;

int attempts = ATTEMPTS;

while(len&&(attempts||(GetTickCount()-begin)<(int)(TIMEOUT/ATTEMPTS)))

{

if (attempts) attempts--;

if (ReadFile(handle,data,len,&feedback,NULL))

return 2;

len-=feedback;

data+=feedback;

}

if(len)

return 3;

return 0;

}

int main(int argc, char* argv[])

{

HANDLE handle;

if (Connect(&handle,"COM2",9600))

{

printf("Connect port error.\n");

return 1;

}

while(1)

{

unsigned char data='s';

char x=getch();

if (x!=13)

if (x==1)

break;

continue;

if (Write(handle,&data,1))

{

printf("Write error.\n");

Disconnect(&handle);

return 1;

}

unsigned char data0;

while(1){

Read(handle,&data0,1);

if (data0!=0)

{

printf("%d\n",data0);

break;

}

}

}

Disconnect(&handle);

return 0;

}

Заключение

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

Литература

1. А.В. Евстифеев, "Микроконтроллеры AVR семейства Mega", Москва, 2007 г.

2. Р. Стюарт Болл, "Аналоговые интерфейсы микроконтроллеров", Москва, 2007 г.

3. А.В. Белов, "Самоучитель разработчика устройств на микроконтроллерах AVR", Санкт-Петербург, 2008 г.

4. Ю.А. Шпак, "Программирование на языке С для AVR и PIC микроконтроллеров", Киев, 2006 г.

5. М. Б. Лебедев, "CodeVisionAVR.Пособие для начинающих", Москва, 2008 г.

6. А. Ю. Кузьминов, "Интерфейс RS232. Связь между компьютером и микроконтроллером", Москва, 2006г.

7. www.atmel.com

Размещено на Allbest.ru


Подобные документы

  • Создание приемника команд RC5 для персонального компьютера на основе микроконтроллера ATmega8. Особенности написания файла прошивки и симулирование устройства. Порядок выполнения сборки собственной схемы и характеристика полученного микроконтроллера.

    курсовая работа [2,0 M], добавлен 24.11.2013

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

    курсовая работа [102,5 K], добавлен 21.10.2012

  • Практическое использование алгоритмов для нахождения минимального пути в лабиринте. Разработка программы на языке С++ и в среде Visual C++. Основные способы поиска пути: метод волны и приоритетов. Описание разработанных функций и инструкция пользователя.

    дипломная работа [54,3 K], добавлен 16.03.2012

  • Разработка структурной и принципиальной схемы. Блок-схема основной программы и подпрограмм обработки прерываний. Имена переменных, используемых в них. Результаты моделирования работы устройства в программе ISIS пакета Рroteus. Разработка печатной платы.

    курсовая работа [1,5 M], добавлен 13.11.2016

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

    курсовая работа [577,8 K], добавлен 24.06.2013

  • Моделирование заданных команд, внутренних функциональных устройств и объектов ввода-вывода микроконтроллера. Разработка программа для демонстрации совместной работы микроконтроллера и моделируемого внешнего устройства. Компоненты архитектуры ATMega128.

    курсовая работа [3,6 M], добавлен 12.06.2013

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

    курсовая работа [709,3 K], добавлен 22.12.2010

  • Теория графов и её применения. Разработка программного продукта для решения задач нахождения минимального пути. Анализ надежности и качества ПП "метода Дейкстры". Математическая модель задачи. Алгоритмы Дейкстры на языке программирования Turbo Pascal.

    курсовая работа [1,6 M], добавлен 26.03.2013

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

    курсовая работа [891,8 K], добавлен 24.12.2012

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

    дипломная работа [2,1 M], добавлен 10.07.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.