| Ваш IP: 3.230.119.106 | Online(16) - гости: 8, боты: 8 | Загрузка сервера: 1.64 ::::::::::::

Часы на ATmega8 (Arduino IDE)

Arduino IDE поддерживает множество различных микроконтроллеров, в том числе ATmega8. Микроконтроллер ATmega8 выполнен по технологии CMOS, 8-разрядный, основан на AVR архитектуре RISC. За один такт выполняется одна инструкция, на микроконтроллера ATmega8 достигается производительность в 1MIPS на МГц, и тем самым достигается наиболее оптимальная производительность и потребляемая энергия.

Как программировать или прошить микроконтроллер Atmega8 в среде Arduino IDE  можно узнать из — https://rcl-radio.ru/?p=82486

Часы на ATmega8 в своем составе имеют индикатор TM1637(модуль), часы реального времени DS3231(модуль) и две кнопки для корректировки времени.

В микроконтроллере ATmega8  имеется внутренний RC генератор работающий на частоте от 1 до 8 МГц, если Вам не нужна большая точность важна частота некоторых временных функций (например delay), то во внешний кварцевый резонатор можно не подключать. В моем случае в наличии был кварц на 4 МГц который я установил для использования в других проектах, в часах внешний кварцевый резонатор можно не использовать.

Так же учитывайте что ATmega8 имеет диапазон питающего напряжения от 4.5 до 5.5 В и тактовую до 16 МГц, а ATmega8L имеет диапазон питающего напряжения от 2.7 до 5.5 В и тактовую частоту до 8 МГц.

Настройка частоты тактирования в Arduino IDE

External — внешний кварцевый резонатор

Internal — внутренний RC генератор

#include <DS3231.h>
#include <Wire.h>
#include <STM32_TM1637.h>
  DS3231 clock;
  RTCDateTime DateTime;
  STM32_TM1637 tm(PD2,PD3);// CLK, DIO 
  int timer;
  byte hour,minut;
  bool w;
 
  // PD0, PD1(2, 3) = RXD TXD
  // PC3(26) = SQW DS3231
  // PC2(25) = HOUR+
  // PC1(24) = MINUTE+
  // PC4(27) = SDA
  // PC5(28) = SCL
  // PD2, PD3(4, 5) = CLK DIO TM1637
 
void setup(){
   Wire.begin();
   clock.begin();
   tm.brig(7);
   clock.setOutput(DS3231_1HZ);
   PORTC |= (1 << 2)|(1 << 1); // INPUT_PULLUP PC1 PC2
  }
 
void loop(){
  DateTime = clock.getDateTime();
  hour = DateTime.hour;
  minut = DateTime.minute;
  timer = hour*100 + minut;
  tm.print_time(timer, ((PINC >> 3) & 1));
 
  if(((PINC >> 2) & 1) == LOW){ /////// BUTTON PC2
    w=1; hour++; if(hour>23){hour=0;} delay(300);}
  if(((PINC >> 1) & 1) == LOW){ /////// BUTTON PC1
    w=1; minut++; if(minut>59){minut=0;} delay(300);}
 ////////// SET CLOCK
 if(w == 1){w=0; clock.setDateTime(2020, 8, 20, hour, minut, 0);}
  delay(100);
  }

Так же можно дополнить часы простым будильником. Управление часами состоит из трех кнопок, кнопка SET позволяет менять режимы:

  • Основной режим (секундное двоеточие мигает в такт секундам) — кнопка + и — отключают или включают будильник, при этом загорается и гаснет светодиод — индикатор включения будильника
  • Второй режим (секундное двоеточие горит постоянно) — режим корректировки времени (кнопки + и — корректируют часы и минуты)
  • Третий режим (секундное двоеточие не горит) — режим корректировки времени будильника (кнопки + и — корректируют часы и минуты)

#include <EEPROM.h>
#include <DS3231.h>
#include <Wire.h>
#include <STM32_TM1637.h>
  DS3231 clock;
  RTCDateTime DateTime;
  STM32_TM1637 tm(PD2,PD3);// CLK, DIO 
  int timer;
  byte hour,minut,hh,mm,sett;
  bool w,ww,alarm;
 
  // PD0, PD1(2, 3) = RXD TXD
  // PC3(26) = SQW DS3231
  // PC2(25) = HOUR+
  // PC1(24) = MINUTE+
  // PC0(23) = SETTING
  // PC4(27) = SDA
  // PC5(28) = SCL
  // PD2, PD3(4, 5) = CLK DIO TM1637
  // PB5(19) = LED ALARM
  // PD6(12) = BYZZER ALARM
 
void setup(){
   Wire.begin();
   clock.begin();
   tm.brig(7);
   clock.setOutput(DS3231_1HZ);
   PORTC |= (1 << 2)|(1 << 1)|(1 << 0); // INPUT_PULLUP PC0 PC1 PC2
   DDRB |= (1 << 5);
   hh = EEPROM.read(0);mm = EEPROM.read(1);alarm = EEPROM.read(2);
  }
 
void loop(){
  DateTime = clock.getDateTime();
  hour = DateTime.hour;
  minut = DateTime.minute;
  timer = hour*100 + minut;
 
 if(sett == 0) {tm.print_time(timer, ((PINC >> 3) & 1));}
 if(sett == 1) {tm.print_time(timer, 1);}
 if(sett == 2) {tm.print_time(hh*100+mm, 0);}
 
  if(((PINC >> 2) & 1) == LOW && sett == 1){ /////// BUTTON PC2 = HOUR+
    w=1; hour++; if(hour>23){hour=0;} delay(300);}
  if(((PINC >> 1) & 1) == LOW && sett == 1){ /////// BUTTON PC1 = MINUTE+
    w=1; minut++; if(minut>59){minut=1;} delay(300);}
 
  if(((PINC >> 2) & 1) == LOW && sett == 2){ /////// BUTTON ALARM PC2 = HOUR+
    ww=1; hh++; if(hh>23){hh=0;} delay(300);}
  if(((PINC >> 1) & 1) == LOW && sett == 2){ /////// BUTTON ALARM PC1 = MINUTE+
    ww=1; mm++; if(mm>59){mm=0;} delay(300);}
 
  if(((PINC >> 2) & 1) == LOW && sett == 0){ /////// BUTTON PC2 = alarm on
    alarm = 1; EEPROM.update(2,alarm);delay(300);}
  if(((PINC >> 1) & 1) == LOW && sett == 0){ /////// BUTTON PC1 = alarm off
    alarm = 0; EEPROM.update(2,alarm);delay(300);}  
    if(alarm == 1){PORTB |= (1 << 5);}else{PORTB &= ~(1 << 5);} 
 
  //// setting
  if(((PINC >> 0) & 1) == LOW){sett++;if(sett > 2){sett=0;}delay(300);}
 
 ////////// SET 
 if(w == 1){w=0; clock.setDateTime(2020, 8, 20, hour, minut, 0);}
 if(ww == 1){ww=0; EEPROM.update(0,hh);EEPROM.update(1,mm);}
 
 if((hh*100+mm == hour*100+minut) && alarm==1){tone(6,1500,150);}
 
 // delay(100);
  }

Библиотеки:

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=197

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Простое зарядное уст-во с регулируемым током зарядки

    Простое зарядное уст-во с регулируемым током зарядки

    На рисунке показана схема простого зарядного уст-ва автомобильных аккумуляторов с регулируемым током зарядки. Зарядное уст-во основано на стабилизаторе L200 регулятора. Основные параметры стабилизатора L200CV: Максимальное входное напряжение 40В Максимальная разница напряжений «вход-выход» 32В Выходное напряжение 2,8..36В Выходной ток до 2А Минимальное падение напряжения «вход-выход» (dropout) <2,5В Ток потребления (по выводу …Подробнее...
  • УНЧ на TDA1558Q

    УНЧ на TDA1558Q

    Напряжение питания 6…18В Максимальный ток нагрузки 4А Выходная мощность при Uп=14,4В и Rн=4Ом: КНИ=0,5% — 5Вт КНИ=10% — 6Вт Ток покоя 80мАПодробнее...
  • Недорогой узкополосный FM-приемник на 68…88МГц

    На рисунке показана схема простого приемника FM-диапазона, настройка на станцию осуществляется потенциометром Р2. Полевой транзистор Т1 обеспечивает усиление входного радиосигнала на 18дБ, запитывая входную цепь TDA7000 через разделительный конденсатор С5. Ряд конденсаторов вокруг микросхемы предназначен для формирования полосы пропускания около 70 кГц. Перестраиваемый генератор строится на базе варикапа D1. Напряжение …Подробнее...
  • Полицейская сирена на LM324

    Полицейская сирена на LM324

    Данная схема издает звук напоминающий полицейскую сирену. Схема основана на ОУ LM324 представляющий собой генератор ЗЧ. При нажатии на кнопку SA1 начнет быстро заряжаться С1, сирена начнет издавать звук. При размыкании контактов SA1  сирена будет работать до тех пор пока не разрядится через R2 конденсатор С1. Источник — http://www.eleccircuit.com/police-bicycle-siren-circuits/Подробнее...
  • Простой тестер проверки радиоэлементов

    При регулировке и настройке электронной аппаратуры применяют вспомогательные устройства: индикаторы состояний, «прозвоночные” приборы и тестеры, с помощью которых выполняют различные операции: от простейшей – по проверке целостности цепей до сложной – по измерению параметров радиоэлементов. Сложные тестеры необходимы, когда выполнена проверка работоспособности радиоэлемента и необходимо уточнить значения его параметров. Оценку …Подробнее...