|
РАЗРАБОТКА ЧАСОВ С МИКРОПРОЦЕССОРНЫМ УПРАВЛЕНИЕМ. Разработка часов с микропроцессорным управлением
ГЛАВА 4. ОХРАНА ТРУДА И БЕЗОПАСНОСТИ ВО ВРЕМЯ РАБОТ
Мероприятия по охране труда направлены прежде всего на создание безопасных условий труда, обеспечивающих всестороннюю защиту работающих, от опасных и вредных производственных факторов.
Безопасность работ на электроустановках обеспечивается правильной организацией труда, соблюдением технологии и безусловным выполнением всех требований техники безопасности.
Чтобы обезопасить работающих в цехе от поражения электрическим током, необходимо: включать и отключать оборудование в строгом соответствии с инструкцией по обслуживанию данного прибора или установки; производить какие-либо работы по ремонту и наладке оборудования (замена предохранителей и др.) только специальному наладочному персоналу;
При обнаружении проводов с плохой изоляцией прекратить работу и сообщить мастеру;
При работе на оборудовании с напряжением 220 В и выше постелить под ноги диэлектрический коврик;
Оберегать электропровод и аппаратуру от попадания на них воды, кислот, щелочей и других химикатов, так как они разрушают изоляцию, что может привести к поражению электрическим током;
Иметь переносной инструмент или лампу на 36 или 12 В.
Кроме того, запрещается оставлять без присмотра и под напряжением или поручать его незнакомому лицу, а также снимать установленные переносные плакаты “Не включать – работают люди” и др.
Для предупреждения возможности накопления зарядов статического электричества на человеке необходимо применять электростатическое заземление – специальные браслеты. Персонал должен быть обеспечен спецодеждой из мало электризующихся материалов. Безопасность использования электроустановок обеспечивается путем применения: защитных ограждений с соблюдением необходимых расстояний до токоведущих частей; блокировки ограждений с аппаратами для предотвращения ошибочных операций; заземления корпусов электрооборудования и элементов установок, могущих оказаться под напряжением. Безопасность создается также надежным и быстродействующим защитным отключением при однофазном замыкании на землю частей электрооборудования или поврежденного участка сети, когда устройство заземления вызывает большие трудности или не обеспечивает безопасность обслуживания электроустановки. Кроме того, в целях безопасности применяют: понижающие трансформаторы с малым вторичным напряжением (42 В и ниже) для питания переносных электроинструментов, переносных ламп; разделяющие трансформаторы для включения в сеть электроприемников напряжением до 380 В с целью надежного изолирования; предупредительные надписи, плакаты и защитные средства.
Правила безопасности требуют, чтобы неизолированные токоведущие части были ограждены или закрыты кожухами, крышками и т. д. Открытые неизолированные провода и шины разрешается располагать на высоте не менее 3,5 м от уровня пола, при меньших высотах их следует ограждать для защиты от соприкосновения с токоведущими частями.
Защитные ограждения должны быть механически прочными; снимать и отрывать их допускается лишь с помощью ключей или инструментов.
Меры противопожарной безопасности являются неотъемлемой частью комплекса мероприятий по охране труда.
Необходимо соблюдать требования по содержанию помещений. Запрещается загромождать эвакуационные пути и выходы, производить уборку помещений и стирку спецодежды с применением бензина, керосина и прочих горючих жидкостей, оставлять неубранным промасленный обтирочный материал, оставлять после работы включенные в сеть электронагревательные приборы.
Короткое замыкание, перегрузка – характерные проявления аварийных режимов. Короткое замыкание возникает в местах нарушения изоляции токоведущих частей, присоединения проводов к токоприемникам и т. д.
Предупредить короткое замыкание можно правильным подбором электропроводов, способов их прокладки, применением надежной предохранительной защиты. Для защиты электросетей от перегрузки в сетях напряжением до 1000 В применяются плавкие предохранители и автоматические выключатели.
Неисправности в электросетях и электроаппаратуре, которые могут вызвать искрение, короткое замыкание, перегрев изоляции, должны немедленно устраняться. Неисправные электросети следует отключать до приведения ее в пожароопасное состояние. Тушить электропроводку можно только углекислотными и бромэтиловыми огнетушителями.
Прекращение пожара осуществляется следующими способами: охлаждением – охлаждение конденсированной фазы сплошными струями воды, охлаждение распыленными струями воды, охлаждение путем перемешивания горючих материалов; разбавлением – разбавление газовой и конденсированной фаз (твердой, жидкой) струями тонкораспыленной воды, разбавление горючих жидкостей водой, разбавлением негорючими газами или водяным паром; изоляцией слоем пены различной кратности, изоляция слоем огнетушащего порошка; химическим торможением реакции горения с помощью огнетушащих порошков или галоидопроизводных углеводородов. Вода – наиболее распространенное и достаточно эффективное огнетушащее средство.
ЗАКЛЮЧЕНИЕ
В ходе выполнения дипломного проектирования были разработаны электронные часы на базе микроконтроллера.
Были выполнены следующие задачи:
Выбор элементной базы; Обоснование выбора программного обеспечения; Разработана структурная схема часов; Разработана принципиальная схема часов; Разработан программный код для микроконтроллера; Моделирование часов в программе Proteus; Произведен экономический расчет затрат на разработку; Составлена организация работы по технике безопасности
Устройство готово к работе сразу после подключения питания. СПИСОК ИСПОЛЬЗУМОЙ ЛИТЕРАТУРЫ
http://we.easyelectronics.ru/antonluba/samye-prostye-chasy-na-avr.html http://www.avislab.com/blog/stm32_st_link_ru/ https://stm32.chrns.com/post/150532640859/whatisrtc http://embedded-lab.com/blog/stm32s-internal-rtc/ https://electrosam.ru/glavnaja/slabotochnye-seti/oborudovanie/mikrokontrollery/ http://www.gaw.ru/html.cgi/txt/ic/Maxim/timing/rtc/serial/DS1307.htm http://iprg.ru/index.php?topic=129.0 http://avr-start.ru/?p=1587 http://www.hexiwear.com/ https://cxem.net/mc/mc316.php https://www.chipdip.ru/ https://radioparty.ru/prog-avr/program-c/430-lesson-ds1307 http://refleader.ru/jgeyfsatyqasjge.html http://digitrode.ru/computing-devices/mcu_cpu/1253-mikrokontrollery-8051-pic-avr-i-arm-otlichiya-i-osobennosti.html https://blog.circuits4you.com/2015/07/ds1307-rtc-interfacing-with-avr.html https://php-web.info/articles/video-info/lcd-led-oled-display/ 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 https://novate.ru/blogs/020114/25011/ https://studfile.net/preview/3581239/ https://habr.com/ru/post/383629/ http://www.adsl.kirov.ru/projects/articles/help/modding/lcd_display/lcd_controller_hd44780_hitachi/ https://extremeelectronics.co.in/avr-tutorials/interfacing-ds1307-rtc-chip-with-avr-microcontroller/ https://radio-magic.ru/microcontrollers/381-mikrokontroller-atmega8 https://www.kit-e.ru/articles/micro/2008_11_82.php «Кварцевые электронные часы» В.П. Царев, И.В.Сидин «Электроника для начинающих» Ч.Платт, 2017 «Микроконтроллеры» А.В. Васильев, 2003 «Микроконтроллеры семейства AVR» А.В. Евстифеев, 2008 «Разработка устройств на микроконтроллерах» А.В. Белов, 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 года
Нормоконтролер: _____________ / В.В. Степина/
|
|
|