Чт июл 08, 2010 09:30:26
Секретный кот писал(а):А вот это зря, у меня ещё со времён "спектрумов" чёткая привычка все микрухи ставить на панельки...
Чт июл 08, 2010 09:51:11
Пт июл 09, 2010 15:51:16
Danko писал(а):я отгибаю на DS-ке ноги для кварца (1 и 2) и подпаиваю к ним кварц, а микросхему вставляю в панельку. Убиваю двух зайцев
Пт июл 09, 2010 16:03:45
нужно.Apparatchik писал(а):А корпус кварца заземлять ненужно?
Пт окт 01, 2010 18:03:04
Danko писал(а):не забудьте что в DS1307 не двоичный, а двоично-десятичный счетчик
Пт окт 01, 2010 18:14:41
Пт окт 01, 2010 18:31:50
Danko писал(а):я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.
Пт окт 01, 2010 18:53:57
rtc_get_time(&hour, &min, &sec);
digit_out[0] = hour >> 4;
digit_out[1] = hour & 0x0F;
digit_out[2] = min >> 4;
digit_out[3] = min & 0x0F;
tmp=bcd2bin(hour);
tmp++; if (tmp >= 24) tmp=0; // часы +1
hour=bin2bcd(tmp);
rtc_set_time(hour, min, sec);
rtc_get_time(&hour, &min, &sec);
digit_out[0] = hour / 10;
digit_out[1] = hour % 10;
digit_out[2] = min / 10;
digit_out[3] = min % 10;
Пт окт 01, 2010 19:06:29
Danko писал(а): т.е. внутри функции bcd2bin мы умножаем на 10, для того чтобы потом разделить на 10. Зачем?
Пт окт 01, 2010 20:11:44
Пт окт 01, 2010 21:23:35
Danko писал(а):я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.
Пт окт 01, 2010 22:01:25
void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
{
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_start();
i2c_write(0xd1);
*sec=bcd2bin(i2c_read(1));
*min=bcd2bin(i2c_read(1));
*hour=bcd2bin(i2c_read(0));
i2c_stop();
}
void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec)
{
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_write(bin2bcd(sec));
i2c_write(bin2bcd(min));
i2c_write(bin2bcd(hour));
i2c_stop();
}
Вс янв 23, 2011 22:17:30
Вс янв 23, 2011 22:33:38
*Trigger* писал(а):Написал небольшую програмку для часов, а на индикаторе 25:25:25. Что это значит?
Пн янв 24, 2011 17:04:15
Пн янв 24, 2011 17:18:17
rtc_write(0x00, 0x00);
default:break;
Пн янв 24, 2011 17:50:32
Пн янв 24, 2011 18:19:39
tmp = rtc_read(0x00);
tmp &=~(1<<7);
rtc_write(0x00, tmp); //включение DS1307, бит 7 ноль
tmp = rtc_read(0x02);
tmp &=~(1<<6);
rtc_write(0x02, tmp); // бит 6 ноль - 24ох часовой режим
rtc_init(0, 1, 1); // включение генератора импульсов
// потом идёт основной цикл
while (1)
{
}
#include <bcd.h>
tmp=bin2bcd(hour);
PORTD=tmp;
while (1) {
rtc_get_time(&hour, &min, &sec); // читаем из DS-ки время
PORTA=sec; //вывод секунд
PORTB=min; //вывод минут
PORTD=hour; //вывод часов
delay_ms(100); //задержка
}
Пн янв 24, 2011 18:23:35
Пн янв 24, 2011 19:10:05
*Trigger* писал(а):Пробовал оставить только неправильную индикацию. Всё равно 25:25:25.
PORTA=0x00;