Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2)

Обсуждаем контроллеры компании Atmel.
TovsCat
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт апр 27, 2012 15:48:35

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение TovsCat »

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

Код: Выделить всё

/*****************************************************
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=1,min=1,sek=1;   //часы, минуты, секунды
unsigned char day=18,month=11,year=12;   //день, месяц, год
unsigned char   myday=0;           // день недели
unsigned int y=0, m=0;


void main(void)
{

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);  //считать дату   
// ---------- вычислить день недели по дате ----------
   y = year+2000;
   m=month;
   if (m > 2) { m -= 2;       }
   else       { m += 10; y--; }
   myday = (((day) + y + (y>>2) + ((31 * m) / 12)) % 7);
   
   if (myday == 0) myday = 7;
 //-
                         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);
                       

      };
}

Но, моя математика пока стабильную ошибку на 1 день недели, и как тут проверить если год высокосный и не высоксный?, поправьте если можно код, пожалуйста.
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение Danko »

У меня формула упрощенная (урезанная).

Первоисточником была эта формула.

А вот примеры на разных языках.

Я для экономии памяти МК формулу упростил, но у Вас если в этом проблемы нет попробуйте пойти от первоисточника так сказать.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
TovsCat
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт апр 27, 2012 15:48:35

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение TovsCat »

Не знаю почему у меня по по формуле (урезаной) получился сдвиг недели на плюс один день, я просто в код который я показал выше, добавил условие

Код: Выделить всё

   New_myday=myday-1;
      if (New_myday == 0) New_myday = 7;
//и вывод на дисплей
   lcd_putchar(New_myday%10+0x30);

Проверил 2112 -2013 год и выбочно до 2099.
Показывает, день недели точно....
Изображение
СПАСИБО Danko это таки с помощью вашей формулы все получилось :beer:
Вложения
smayl6.gif
(54 КБ) 4215 скачиваний
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение O-LED »

Не знаю почему у меня по по формуле (урезаной) получился сдвиг недели на плюс один день


потому что по этой формуле неделя начинается с воскресенья.
KIT
Аватара пользователя
NickNI
Прорезались зубы
Сообщения: 237
Зарегистрирован: Ср май 19, 2010 11:15:36
Откуда: Украина

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение NickNI »

TovsCat писал(а):Не знаю почему у меня по по формуле (урезаной) получился сдвиг недели на плюс один день,

Просто на заметку: Учтите, что в модели протеуса при некотором стечении исходного кода получается 8 дней в недели :(
Жизнь - цепь, а мелочи в ней звенья. Нельзя звену не придавать значения!
Аватара пользователя
santy
Открыл глаза
Сообщения: 62
Зарегистрирован: Пт янв 20, 2012 16:09:11
Откуда: Татарстан

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение santy »

Valeri S писал(а):M169 писал
Доброго времени суток.
У меня к вам просьба, посмотрите, пожалуйста, на секундное двоеточие несколько минут внимательно, что Вы видите?


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

с уважением Валерий



Можно узнать что там с точками? вопрос решили или нет? у меня такая же беда...
только два раза по 10 сек. и один 15 сек.
Последний раз редактировалось santy Чт дек 27, 2012 07:53:02, всего редактировалось 2 раза.
Аватара пользователя
santy
Открыл глаза
Сообщения: 62
Зарегистрирован: Пт янв 20, 2012 16:09:11
Откуда: Татарстан

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение santy »

Еще небольшая подсветка сегментов идет, правда днем не заметно, только ночью, из-за чего интересно?
m169
Открыл глаза
Сообщения: 46
Зарегистрирован: Сб ноя 20, 2010 15:47:40
Откуда: Кирово-Чепецк

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение m169 »

santy писал(а):Еще небольшая подсветка сегментов идет, правда днем не заметно, только ночью, из-за чего интересно?

Понизьте напряжение питания на индикаторах. С помощью подстроичных резисторов, в цепи DC-DC преобразователей.
Можешь сделать лучше? Сделай!
Аватара пользователя
santy
Открыл глаза
Сообщения: 62
Зарегистрирован: Пт янв 20, 2012 16:09:11
Откуда: Татарстан

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение santy »

m169 писал(а):Понизьте напряжение питания на индикаторах. С помощью подстроичных резисторов, в цепи DC-DC преобразователей.


спасибо m169, попробую понизить.
os1125
Родился
Сообщения: 4
Зарегистрирован: Пн фев 11, 2013 10:36:58

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение os1125 »

респект автору :))
большое спасибо за труд.
Вложения
IMG_3968.jpg
(188.43 КБ) 1316 скачиваний
IMG_3965.jpg
(144.08 КБ) 1183 скачивания
IMG_3964.jpg
(163.37 КБ) 1076 скачиваний
IMG_3966.jpg
(149.06 КБ) 1250 скачиваний
svinuk
Родился
Сообщения: 13
Зарегистрирован: Сб апр 02, 2011 09:49:50

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение svinuk »

os1125, очь красиво. Мне нравится. Расскажите, пожалуйста, подробней о корпусе и светофильтрах. :)

И печатку выложите, если не сложно
Последний раз редактировалось svinuk Ср май 08, 2013 12:30:16, всего редактировалось 1 раз.
Не доверяйте лошади с фиолетовыми бровями
svinuk
Родился
Сообщения: 13
Зарегистрирован: Сб апр 02, 2011 09:49:50

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение svinuk »

Подскажите, пожалуйста, откуда взять +5В и +9В для питания индикаторов, ведь основное питание у нас 15В.
Не доверяйте лошади с фиолетовыми бровями
Аватара пользователя
NickNI
Прорезались зубы
Сообщения: 237
Зарегистрирован: Ср май 19, 2010 11:15:36
Откуда: Украина

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение NickNI »

svinuk писал(а): ...откуда взять +5В и +9В для питания индикаторов, ведь основное питание у нас 15В.

Посмотреть схему в первом посте... Два линейных стабилизатора в каскаде. После первого 9В, после второго 5В... Или вопрос в другом?
Жизнь - цепь, а мелочи в ней звенья. Нельзя звену не придавать значения!
Аватара пользователя
Welten
Потрогал лапой паяльник
Сообщения: 325
Зарегистрирован: Сб янв 16, 2010 22:51:45

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение Welten »

Эх, жаль автор крайней печатки не заходит на форум(
os1125
Родился
Сообщения: 4
Зарегистрирован: Пн фев 11, 2013 10:36:58

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение os1125 »

печатка тут, только сегменты индикаторов неправильно обозначены.

корпус делал из мелкой вагонки,стекло тонировал пленкой, оконтовка из мебельной фурнетуры.
Вложения
часы 15_03_2013.rar
(61.19 КБ) 596 скачиваний
Аватара пользователя
Welten
Потрогал лапой паяльник
Сообщения: 325
Зарегистрирован: Сб янв 16, 2010 22:51:45

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение Welten »

Преогромное спасибо)
svinuk
Родился
Сообщения: 13
Зарегистрирован: Сб апр 02, 2011 09:49:50

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение svinuk »

Приветствую всех. Выложите кто-нибудь фьюзы, а то в первом посте все ссылки мертвы. Спасибо.
Не доверяйте лошади с фиолетовыми бровями
Аватара пользователя
NickNI
Прорезались зубы
Сообщения: 237
Зарегистрирован: Ср май 19, 2010 11:15:36
Откуда: Украина

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение NickNI »

svinuk писал(а):...Выложите кто-нибудь фьюзы, а то в первом посте все ссылки мертвы...

Нашел среди архивов Danko
Fuse.zip
(81.54 КБ) 373 скачивания
Жизнь - цепь, а мелочи в ней звенья. Нельзя звену не придавать значения!
svinuk
Родился
Сообщения: 13
Зарегистрирован: Сб апр 02, 2011 09:49:50

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение svinuk »

Премного благодарствую:)
Не доверяйте лошади с фиолетовыми бровями
Аватара пользователя
tony_art
Родился
Сообщения: 3
Зарегистрирован: Чт авг 15, 2013 21:05:06
Откуда: Москва

Re: Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2

Сообщение tony_art »

NickNI писал(а):
svinuk писал(а): ...откуда взять +5В и +9В для питания индикаторов, ведь основное питание у нас 15В.

Посмотреть схему в первом посте...

Я конечно глубоко извиняюсь, но в первом посту - все ссылки мёртвые! :cry: Возможно-ли их обновить? Или выложить схему?
Ответить

Вернуться в «AVR»