Главная страница
Навигация по странице:

  • СПИСОК ИСПОЛЬЗУМОЙ ЛИТЕРАТУРЫ

  • РАЗРАБОТКА ЧАСОВ С МИКРОПРОЦЕССОРНЫМ УПРАВЛЕНИЕМ. Разработка часов с микропроцессорным управлением


    Скачать 1.11 Mb.
    НазваниеРазработка часов с микропроцессорным управлением
    Дата06.02.2022
    Размер1.11 Mb.
    Формат файлаdocx
    Имя файлаРАЗРАБОТКА ЧАСОВ С МИКРОПРОЦЕССОРНЫМ УПРАВЛЕНИЕМ.docx
    ТипДиплом
    #353003
    страница4 из 4
    1   2   3   4

    ГЛАВА 4. ОХРАНА ТРУДА И БЕЗОПАСНОСТИ ВО ВРЕМЯ РАБОТ

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

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

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

    При обнаружении проводов с плохой изоляцией прекратить работу и сообщить мастеру;

    При работе на оборудовании с напряжением 220 В и выше постелить под ноги диэлектрический коврик;

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

    Иметь переносной инструмент или лампу на 36 или 12 В.

    Кроме того, запрещается оставлять без присмотра и под напряжением или поручать его незнакомому лицу, а также снимать установленные переносные плакаты “Не включать – работают люди” и др.

    Для предупреждения возможности накопления зарядов статического электричества на человеке необходимо применять электростатическое заземление – специальные браслеты. Персонал должен быть обеспечен спецодеждой из мало электризующихся материалов. Безопасность использования электроустановок обеспечивается путем применения: защитных ограждений с соблюдением необходимых расстояний до токоведущих частей; блокировки ограждений с аппаратами для предотвращения ошибочных операций; заземления корпусов электрооборудования и элементов установок, могущих оказаться под напряжением. Безопасность создается также надежным и быстродействующим защитным отключением при однофазном замыкании на землю частей электрооборудования или поврежденного участка сети, когда устройство заземления вызывает большие трудности или не обеспечивает безопасность обслуживания электроустановки. Кроме того, в целях безопасности применяют: понижающие трансформаторы с малым вторичным напряжением (42 В и ниже) для питания переносных электроинструментов, переносных ламп; разделяющие трансформаторы для включения в сеть электроприемников напряжением до 380 В с целью надежного изолирования; предупредительные надписи, плакаты и защитные средства.

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

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

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

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

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

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

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

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

    ЗАКЛЮЧЕНИЕ

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

    Были выполнены следующие задачи:

    1. Выбор элементной базы;

    2. Обоснование выбора программного обеспечения;

    3. Разработана структурная схема часов;

    4. Разработана принципиальная схема часов;

    5. Разработан программный код для микроконтроллера;

    6. Моделирование часов в программе Proteus;

    7. Произведен экономический расчет затрат на разработку;

    8. Составлена организация работы по технике безопасности

    Устройство готово к работе сразу после подключения питания.
    СПИСОК ИСПОЛЬЗУМОЙ ЛИТЕРАТУРЫ

    1. http://we.easyelectronics.ru/antonluba/samye-prostye-chasy-na-avr.html

    2. http://www.avislab.com/blog/stm32_st_link_ru/

    3. https://stm32.chrns.com/post/150532640859/whatisrtc

    4. http://embedded-lab.com/blog/stm32s-internal-rtc/

    5. https://electrosam.ru/glavnaja/slabotochnye-seti/oborudovanie/mikrokontrollery/

    6. http://www.gaw.ru/html.cgi/txt/ic/Maxim/timing/rtc/serial/DS1307.htm

    7. http://iprg.ru/index.php?topic=129.0

    8. http://avr-start.ru/?p=1587

    9. http://www.hexiwear.com/

    10. https://cxem.net/mc/mc316.php

    11. https://www.chipdip.ru/

    12. https://radioparty.ru/prog-avr/program-c/430-lesson-ds1307

    13. http://refleader.ru/jgeyfsatyqasjge.html

    14. http://digitrode.ru/computing-devices/mcu_cpu/1253-mikrokontrollery-8051-pic-avr-i-arm-otlichiya-i-osobennosti.html

    15. https://blog.circuits4you.com/2015/07/ds1307-rtc-interfacing-with-avr.html

    16. https://php-web.info/articles/video-info/lcd-led-oled-display/

    17. https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0

    18. https://novate.ru/blogs/020114/25011/

    19. https://studfile.net/preview/3581239/

    20. https://habr.com/ru/post/383629/

    21. http://www.adsl.kirov.ru/projects/articles/help/modding/lcd_display/lcd_controller_hd44780_hitachi/

    22. https://extremeelectronics.co.in/avr-tutorials/interfacing-ds1307-rtc-chip-with-avr-microcontroller/

    23. https://radio-magic.ru/microcontrollers/381-mikrokontroller-atmega8

    24. https://www.kit-e.ru/articles/micro/2008_11_82.php

    25. «Кварцевые электронные часы» В.П. Царев, И.В.Сидин

    26. «Электроника для начинающих» Ч.Платт, 2017

    27. «Микроконтроллеры» А.В. Васильев, 2003

    28. «Микроконтроллеры семейства AVR» А.В. Евстифеев, 2008

    29. «Разработка устройств на микроконтроллерах» А.В. Белов, 2013

    ПРИЛОЖЕНИЕ

    #include

    #include

     

    // Функция инициализация шины TWI

    void I2CInit(void)

    {

    TWBR = 2; // Настройка частоты шины

    TWSR = (1 << TWPS1)|(1 << TWPS0); // Предделитель на 64

    TWCR |= (1 << TWEN); // Включение модуля TWI

    }

     

    // Функция СТАРТ

    void I2CStart(void)

    {

    TWCR = (1 << TWINT)|(1 << TWEN)|(1 << TWSTA); // Передача условия СТАРТ

    while(!(TWCR & (1 << TWINT))); // Ожидание установки флага TWINT

    }

     

    // Функция СТОП

    void I2CStop(void)

    {

    TWCR = (1 << TWINT)|(1 << TWEN)|(1 << TWSTO); // Передача условия СТОП

    while(TWCR & (1 << TWSTO)); // Ожидание завершения передачи условия СТОП

    }

     

    // Функция записи данных по шине

    uint8_t I2CWriteByte(uint8_t data)

    {

    TWDR = data; // Загрузка данных в TWDR 

    TWCR = (1 << TWEN)|(1 << TWINT); // Сброс флага TWINT для начала передачи данных

    while(!(TWCR & (1 << TWINT))); // Ожидание установки флага TWINT

    // Проверка статуса

    // Если адрес DS1307+R и принято "подтверждение"(0x18)

    // или адрес DS1307+W и принято "подтверждение"(0x40)

    // или передается байт данных и принято "подтверждение"(0x28)

    if((TWSR & 0xF8) == 0x18 || (TWSR & 0xF8) == 0x40 || (TWSR & 0xF8) == 0x28) return 1; // OK

    else return 0; // ОШИБКА

    }

     

    // Функция чтения данных по шине

    uint8_t I2CReadByte(uint8_t *data,uint8_t ack)

    {

    // Возвращаем "подтверждение" после приема

    if(ack) TWCR |= (1 << TWEA);

    // Возвращаем "неподтверждение" после приема

    // Ведомое устройство не получает больше данных

    // обычно используется для распознования последнего байта

    else TWCR &=

    (1 << TWEA);

    // Разрешение приема данных после сброса TWINT

    TWCR |= (1 << TWINT);

    while(!(TWCR & (1 << TWINT))); // Ожидание установки флага TWINT

    // Проверка статуса

    // Если принят байт данных и возвращается "подтверждение"(0x50)

    // или принят байт данных и возвращается "ненеподтверждение"(0x58)

    if((TWSR & 0xF8) == 0x50 || (TWSR & 0xF8) == 0x58)

    {

    *data = TWDR; // Читаем данные из TWDR

    return 1; // OK

    }

    else return 0; // ОШИБКА   

    }

     

    // Функция чтения данных из DS1307

    uint8_t DS1307Read(uint8_t address,uint8_t *data)

    {

    uint8_t res;

    I2CStart(); // СТАРТ

    res = I2CWriteByte(0b11010000); // адрес DS1307+W

    if(!res)    return 0; // ОШИБКА

    // Передача адреса необходимого регистра

    res = I2CWriteByte(address);

    if(!res)    return 0; // ОШИБКА

    I2CStart(); // Повторный СТАРТ 

    res = I2CWriteByte(0b11010001); // адрес DS1307+R

    if(!res)    return 0; // ОШИБКА

    // Чтение данных с "неподтверждением"

    res = I2CReadByte(data,0);

    if(!res)    return 0; // ОШИБКА

    I2CStop(); // СТОП

    return 1; // OK

    }

     

    // Функция записи данных в DS1307

    uint8_t DS1307Write(uint8_t address,uint8_t data)

    {

    uint8_t res;

    I2CStart(); // СТАРТ

    res = I2CWriteByte(0b11010000); // адрес DS1307+W

    if(!res)    return 0; // ОШИБКА

    // Передача адреса необходимого регистра

    res = I2CWriteByte(address);

    if(!res)    return 0; // ОШИБКА

    res = I2CWriteByte(data); // Запись данных

    if(!res)    return 0; // ОШИБКА

    I2CStop(); // СТОП

    return 1; // OK

    }

     

    // Функции работы с LCD

    #define RS PD0

    #define EN PD2

    // Функция передачи команды

    void lcd_com(unsigned char p)

    {

    PORTD &= (1 << RS); // RS = 0 (запись команд)

    PORTD |= (1 << EN); // EN = 1 (начало записи команды в LCD)

    PORTD &= 0x0F; PORTD |= (p & 0xF0); // старший нибл

    _delay_us(100);

    PORTD &= (1 << EN); // EN = 0 (конец записи команды в LCD)

    _delay_us(100);

    PORTD |= (1 << EN); // EN = 1 (начало записи команды в LCD)

    PORTD &= 0x0F; PORTD |= (p << 4); // младший нибл

    _delay_us(100);

    PORTD &= (1 << EN); // EN = 0 (конец записи команды в LCD)

    _delay_us(100);

    }

    // Функция передачи данных

    void lcd_data(unsigned char p)

    {

    PORTD |= (1 << RS)|(1 << EN); // RS = 1 (запись данных), EN - 1 (начало записи команды в LCD)

    PORTD &= 0x0F; PORTD |= (p & 0xF0); // старший нибл

    _delay_us(100);

    PORTD &= (1 << EN); // EN = 0 (конец записи команды в LCD)

    _delay_us(100);

    PORTD |= (1 << EN); // EN = 1 (начало записи команды в LCD)

    PORTD &= 0x0F; PORTD |= (p << 4); // младший нибл

    _delay_us(100);

    PORTD &= (1 << EN); // EN = 0 (конец записи команды в LCD)

    _delay_us(100);

    }

     

    // Функция вывода строки на LCD

    void lcd_string(unsigned char command, char *string)

    {

    lcd_com(0x0C);

    lcd_com(command);

    while(*string != '\0')

    {  lcd_data(*string);

    string++;

    }

    }

     

    // Функция вывода переменной

    void lcd_num_to_str(unsigned int value, unsigned char nDigit)

    {

     switch(nDigit)

     {

      case 4: lcd_data((value/1000)+'0');

      case 3: lcd_data(((value/100)%10)+'0');

      case 2: lcd_data(((value/10)%10)+'0');

      case 1: lcd_data((value%10)+'0');

     }

    }

     

    // Функция инициализации LCD

    void lcd_init(void)

    {

    PORTD = 0x00;

    DDRD = 0xFF;

     

    _delay_ms(50); // Ожидание готовности ЖК-модуля

     

    // Конфигурирование четырехразрядного режима

    PORTD |= (1 << PD5);

    PORTD &= (1 << PD4);

     

    // Активизация четырехразрядного режима

    PORTD |= (1 << EN);

    PORTD &= (1 << EN);

    _delay_ms(5);

     

    lcd_com(0x28); // шина 4 бит, LCD - 2 строки

    lcd_com(0x08); // полное выключение дисплея

    lcd_com(0x01); // очистка дисплея

    _delay_us(100);

    lcd_com(0x06); // сдвиг курсора вправо

    lcd_com(0x0C); // включение дисплея, курсор не видим

    }

     

    int main(void)



    _delay_ms(100);

     

    DDRC = 0x00;

    PORTC = 0xFF;

     

    lcd_init(); // Инициализация LCD

    I2CInit(); // Инициализация шины I2C

     

    lcd_string(0x81, "«acГ Ѕa DS1307"); // Часы на DS1307

    lcd_string(0xC4, "  :  :  ");

     

    // Запускаем ход часов

    uint8_t temp;

    DS1307Read(0x00,&temp);

    temp &= (1 << 7); // обнуляем 7 бит

    DS1307Write(0x00,temp);

     

    while(1)

    {

    unsigned char hour, minute, second, temp;

    // Читаем данные и преобразуем из BCD в двоичную систему

    DS1307Read(0x00,&temp); // Чтение регистра секунд

    second = (((temp & 0xF0) >> 4)*10)+(temp & 0x0F);

    DS1307Read(0x01,&temp); // Чтение регистра минут

    minute = (((temp & 0xF0) >> 4)*10)+(temp & 0x0F);

    DS1307Read(0x02,&temp); // Чтение регистра часов

    hour = (((temp & 0xF0) >> 4)*10)+(temp & 0x0F);

     

    lcd_com(0xC4);

    lcd_num_to_str(hour, 2); // Выводим на экран часы

    lcd_com(0xC7);

    lcd_num_to_str(minute, 2); // Выводим на экран минуты

    lcd_com(0xCA);

    lcd_num_to_str(second, 2); // Выводим на экран секунды

     

    if((PINC & (1 << PC0)) == 0) // Если нажата кнопка

    {

    while((PINC & (1 << PC0)) == 0){} // Ждем отпускания кнопки

    hour++; // Увеличиваем часы на 1

    if(hour > 23) hour = 0;

    // Преобразуем из двоичной системы в BCD и записываем в DS1307

    uint8_t temp;

    temp = ((hour/10) << 4)|(hour%10);

    DS1307Write(0x02, temp);

    _delay_ms(100);

    }

     

    if((PINC & (1 << PC1)) == 0) // Если нажата кнопка

    {

    while((PINC & (1 << PC1)) == 0){} // Ждем отпускания кнопки

    minute++; // Увеличиваем минуты на 1

    if(minute > 59) minute = 0;

    // Преобразуем из двоичной системы в BCD и записываем в DS1307

    uint8_t temp;

    temp = ((minute/10) << 4)|(minute%10);

    DS1307Write(0x01, temp);

    _delay_ms(100);

    }

    }

    }

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

    Библиография: 29 наименований.

    Количество страниц: 51 и приложения на 5 страницах

    Отпечатано в 1 (одном) экземпляре, копия работы на электронном носителе.
    «_____» июня 2020 года

    Студент: _____________ Олькин Роман Андреевич

    подпись ФИО
    Нормоконтроль

    __________________________________________________________________

    __________________________________________________________________

    __________________________________________________________________

    __________________________________________________________________

    __________________________________________________________________

    __________________________________________________________________

    __________________________________________________________________

    __________________________________________________________________
    «_____» июня 2020 года

    Нормоконтролер: _____________ / В.В. Степина/


    1   2   3   4


    написать администратору сайта