view source print
.void ds_write(unsigned char addr,unsigned char data)
.{
.i2c_start();
.i2c_write(0xD0);
.i2c_write(addr);
.i2c_write(data);
.i2c_stop();
.}
.
.unsigned char ds_read(unsigned char addr)
.{
.unsigned temp;
.i2c_start();
.i2c_write(0xD0);
.i2c_write(addr);
.i2c_stop();
.i2c_start();
.i2c_write(0xD1);
.temp=i2c_read(0);
.i2c_stop();
.return temp;
.}
.
.void ds_off()
.{
.ds_write(0x00,ds_read(0x00)|0x80);
.}
.
.void ds_on()
.{
.ds_write(0x00,ds_read(0x00)&~0x80);
.}
.
.void ds_init()
.{
.unsigned char i;
37.// устанавливаем режим 24 часа
.i=ds_read(0x02);
39.if((i&0x40)!=0)
.{
.ds_write(0x02,i&~0x40);
42.}
.// Если часы выключены - то включаем их
44.i=ds_read(0x00);
.if((i&0x80)!=0)
.{
.ds_write(0x00,i&~0x80);
.}
.}
.
.unsigned char IntToBoolInt(unsigned char data)
.{
.data=data%100;
.return data/10*16+data%10;
55.}
ds_write(адрес,байт данных) - отправляет 1 байт данных по указанному адресу DS1307
байт данных ds_read(адрес) - считывает 1 байт данных из указанного адреса DS1307_off() - выключить DS1307_on() - включить DS1307_init() - инициализация DS1307
байт IntToBoolInt(байт) - функция перекодировки числа в двоично-десятичный вид
Во время инициализации проверяются и устанавливаются, если выключены следующие биты: бит отвечающий за 24-х часовой режим работы часов и бит отвечающий за включенное состояние часов. Были реализованы 2 функции для включения и отключения часов. DS1307 может отправлять и принимать как однобайтовые посылки, так и много байтовые, но для упрощения работы с часами функции для чтения и записи только однобайтовые. Для установки часов есть ещё функция для преобразования привычной десятичной формы представления числа в двоично-десятичную, в которой микросхема хранит показатели времени. Приведённых функция для работы с часами вполне достаточно.
В прошивки реализованы функции для считывания и вывода на дисплей времени -time() , даты - date(). В бесконечном цикле через некоторые промежутки времени эти функции вызываются для вывода времени и даты на дисплей. Рассмотрим, как устроена функция для чтения с последующим выводом текущего времени:
view source print
.void time()
.{
.unsigned char i;
.SetLCDPosition(1, 0);
.i=ds_read(0x02);
.buffer[0] = i/16+'0';
.buffer[1] = i%16+'0';
.buffer[2] = ':';
.i=ds_read(0x01);
.buffer[3] = i/16+'0';
.buffer[4] = i%16+'0';
.buffer[5] = ':';
.i=ds_read(0x00);
.buffer[6] = i/16+'0';
.buffer[7] = i%16+'0';
.buffer[8] = '\0';
.ShowStr(buffer);
18.}
Происходит установка курсора на дисплее. Считываем значение регистра отвечающего за час и по пол байта, т.к. данные хранятся в двоично-десятичном виде, записываем в буфер. Далее добавляем разделитель в виде двоеточия. Считываем и записываем в буфер таким же образом значения минут и секунд. Выводим содержимое буфера на дисплей. Таким же образом устроена функция вывода текущей даты.
В прошивки есть функция для установки часов и минут - set_time(). Эта функция с помощью одной кнопки устанавливает время. Как это делается: нажимаем на кнопку - на дисплее высвечивается надпись «Set hour :» и количество часов, увеличиваем час по средством коротких нажатий на кнопку; установив час длительным нажатием переходим на установку минут, о чём свидетельствует надпись «Set min :», таким же образом устанавливаем минуты, а длительным нажатием возвращаемся в бесконечный цикл к часам. Но т.к. эта функция большая приведём из неё только одну строчку, которая записывает в DS1307 значение минут:
view source print
.ds_write(0x02,IntToBoolInt(time));
Записываем в регистр, который соответствует минутам желаемое значение, предварительно приведённое к двоично-десятичному виду.
Назначение учебного стенда СУ-МК НТЦ-31.100
Учебный стенд СУ-МК НТЦ-31.100 (далее по тексту Стенд) предназначен для изучения устройства микроконтроллеров семейства AVR, современных компонент, входящих в состав типичных устройств, базирующихся на применении микропроцессорной техники, исследования законченных устройств на базе микропроцессоров, решения специфичных задач по управлению различными объектами, сбору, хранению и обработке информации.
Технические характеристики
Габаритные размеры 200 х 200 х 100 мм 2.2 Масса 0,5 кг 2.3 Напряжение питания 5 В 2.4 Потребляемый ток 0,45 А 2.5 Стенд построен на базе микроконтроллера ATMega128 2.6 Разрядность микроконтроллера 8 бит 2.7 Связь с компьютером по интерфейсам USB, RS-232
Органы управления стенда
Внешний вид передней панели стенда приведен на рисунке 10.
Рисунок 10 - Внешний вид передней панели учебного стенда СУ-МК НТЦ-31.100
Самое читаемое:
Активный фильтр нижних частот каскадного типа
Используя
в качестве элемента схемы ОУ, можно синтезировать характеристику любого
RLC-фильтра без применения катушек индуктивности. Такие безындукционные фильтры
известны под названием «активные фильтра» благодаря включению в их схему
активного элемента (усилителя).
Активные
фильтры можно использовать в качестве фильтров низких ...