Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2
Добавлено: Пн сен 17, 2012 00:00:40
Вопрос автору. Интересно можно ли обойтись без ds1307 в конструкции? На борту у меги ведь есть встроенные таймеры!
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Программа производит поиск датчика при включении часов. Хотите верте хотите нет, но у меня ни разу не отваливаль датчики.ivanov6 писал(а):Вопрос к автору
Собрал часы, но вопрос по температуре остался. При "потере" датчика "замерзают" показания индикаторов температуры. За сутки реально так случилось. Выключил - включил -Fnd0. Перестыковал датчики - нормально. Кстати в Протеусе, если при работе отключить термометры(установить кнопку), то ситуация аналогичная. Срочно нужен совет по программе - все уже в корпусе.
Конечно можно.Aaantonnn15 писал(а):Вопрос автору. Интересно можно ли обойтись без ds1307 в конструкции? На борту у меги ведь есть встроенные таймеры!
Забыли еще кварц часовой! В моей практике ds не очень точно идет. Постоянно убегает. А точность зависит от часового кварца, правильной разводки платы и еще некоторых параметров. Да и зачем тратить лишних два бакса если ds Вы используете всего как часы? А она ведь гараздо больше может!Danko писал(а):Конечно можно.Aaantonnn15 писал(а):Вопрос автору. Интересно можно ли обойтись без ds1307 в конструкции? На борту у меги ведь есть встроенные таймеры!
И в этих часах и во всех других.
А еще вместо DS1820 можно использовать кремневый диод (при измерении положительных температур), только вот вопрос, а зачем? ради чего?
DS1307 + батарейка = два бакса
m169 писал(а):Доброго времени суток. Плата под данный проект. Пользуйтесь на здоровье. (2стр. 7 пост, от 7 октября 2011 г.)
И в чём проблема?santy писал(а):m169 писал(а):Доброго времени суток. Плата под данный проект. Пользуйтесь на здоровье. (2стр. 7 пост, от 7 октября 2011 г.)
Неужили кто то собирал по этой плате и у него работало!!! или никто по ней за год так и не собирал??? я тут начал было собирать, но что то там нестыковочка какая-то, прикрепляю рисунок со схемой и платой, смотрите как стыкуются две микрухи ULN2803A и 74HC595...
Danko писал(а):Тю, а я то думал ...
Все будет работать, но только в программе нужно несколько строк подправить.
m169, я не не ошибаюсь?
Что дешевле, это верно. В чем она лучше?Danko писал(а): Кроме DS1307 есть более дешевые и лучшие микросхемы. Например M41T56.
У меня компилятор ругается на undefined symbol 'bcd2bin' , как нужно его правильно прописать?TovsCat писал(а):Здравствуйте подскажите как всетаки вычисляется этот день недели...Спойлер
Danko писал(а):Нет это обычный счетчик от 1 до 7. То что выставишь то и будет считать.
Я в своих часах его вообще не использую, а вычисляю.
Формула есть на Википедии.
Кусок кода из моих часов (Си CVAVR):Код: Выделить всё
// в данной версии данные хранятся не в двоичной, а в двоично-десятичной системе unsigned char myhour, mymin, mysec, // текушее время mydate, mymonth, myyear, // текущий календарь myday; // день недели // -------------------- вычислить день недели по дате -------------------------------------- void date2day(void) { unsigned int y, m; y = bcd2bin(myyear); m = bcd2bin(mymonth); if (m > 2) { m -= 2; } else { m += 10; y--; } myday = (unsigned char)((bcd2bin(mydate) + y + (y>>2) + ((31 * m) / 12)) % 7); if (myday == 0) myday = 7; }//-----------------------------------------------------------------------------------------
Код: Выделить всё
/*****************************************************
CodeWizardAVR V2.04.4a Advanced
Chip type : ATmega8
AVR Core Clock frequency: 4,000000 MHz
*****************************************************/
#include <mega8.h>
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#asm
.equ __ds1302_port=0x15 ;PORTC
.equ __ds1302_io=5
.equ __ds1302_sclk=4
.equ __ds1302_rst=3
#endasm
#include <ds1302.h>
unsigned char hour,min,sek; //часы, минуты, секунды
unsigned char day,month,year; //часы, минуты, секунды
unsigned char myday; // день недели
// -------------------- вычислить день недели по дате --------------------------------------
void date2day(void) {
unsigned int y, m;
y = bcd2bin(year);
m = bcd2bin(month);
if (m > 2) { m -= 2; }
else { m += 10; y--; }
myday = (unsigned char)((bcd2bin(day) + y + (y>>2) + ((31 * m) / 12)) % 7);
if (myday == 0) myday = 7;
}//-
void main(void)
{
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
// DS1302 Real Time Clock initialization
// Trickle charger: Off
rtc_init(0,0,0);
lcd_init(16);
while (1)
{
rtc_get_time(&hour,&min,&sek); //считать время
rtc_get_date(&day,&month,&year); //считать дату
lcd_gotoxy(0,0);
lcd_putchar(hour/10+0x30);
lcd_putchar(hour%10+0x30);
lcd_putchar(':');
lcd_putchar(min/10+0x30);
lcd_putchar(min%10+0x30);
lcd_putchar('.');
lcd_putchar(sek/10+0x30);
lcd_putchar(sek%10+0x30);
lcd_gotoxy(0,1);
lcd_putchar(day/10+0x30);
lcd_putchar(day%10+0x30);
lcd_putchar('.');
lcd_putchar(month/10+0x30);
lcd_putchar(month%10+0x30);
lcd_putchar('.');
lcd_putsf("20");
lcd_putchar((year/10)%10+0x30);
lcd_putchar(year%10+0x30);
lcd_putchar(' ');
lcd_putchar(myday%10+0x30);
};
}
Без каких?без дополнительных функций,
Код: Выделить всё
unsigned char day,month,year; //часы, минуты, секунды
unsigned char myday; // день недели