| Ваш IP: 34.228.42.25 | Online(38) - гости: 13, боты: 25 | Загрузка сервера: 2.37 ::::::::::::

Простой секундомер (модуль индикации 74НС595) (Arduino)

В предыдущей статье было рассмотрено использование модуля индикации 4-х разрядного 7-и сегментного на сдвиговых регистрах 74НС595. В этой статье будет простой пример реализации простого секундомера с использованием выше указанного модуля индикации.

Частотомер состроит из модуля индикации 74НС595, одной кнопки и платы Arduino Nano. Управление секундомером очень простое, при подачи питания на индикаторе отражается 00,00, при первом нажатии на кнопку запуска происходит отсчет времени с разрешением 0,01 с до 99,99 секунды, затем разрешение уменьшается до 0,1 сек. с 100,0 до 999,9 секунды, далее разрешение секундомера равно 1 секунде.  При втором нажатии на кнопку счет времени останавливается, третье нажатие обнуляет показание. Максимальное время измерения секундомера 9999 секунд.

#include <MsTimer2.h>
 
byte razr[5] = {0x08, 0x04, 0x02, 0x01, 0x00};// 0123         
byte digit[12] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF}; // 0123456789 
byte point = 0x80; //точка
float k=0.000;
int k1,t,n;
byte a[4];
unsigned long time,time1;
 
void setup(){
  MsTimer2::set(10, to_Timer);// задаем период 10...20 мс
  MsTimer2::start();// старт индикации
  pinMode(3, OUTPUT);  // RCLK
  pinMode(4, OUTPUT);  // SCLK
  pinMode(2, OUTPUT);  // DIO
  pinMode(10,INPUT); // кнопка старт / стоп
}
 
void to_Timer(){
  if(n==1){time++;}
}
 
void loop(){
  if(digitalRead(10)==HIGH&&n==0&&millis()-time1>200){n=1;time1=millis();}
  if(digitalRead(10)==HIGH&&n==1&&millis()-time1>200){n=2;time=time;time1=millis();}
  if(digitalRead(10)==HIGH&&n==2&&millis()-time1>200){time=0;n=0;time1=millis();}
 
  if(k<10){k1=round(k*100);t=1;}
  else if(k<100){k1=round(k*100);t=1;}
  else if(k<1000){k1=round(k*10);t=2;}
  else {k1=k;t=4;}
  a[0]=k1/1000;
  a[1]=k1/100%10;
  a[2]=k1/10%10;
  a[3]=k1%10%10;
  for(int i=0;i<5;i++){
  digitalWrite(3, LOW);
  if(i==t){shiftOut(2, 4, MSBFIRST, digit[a[i]] ^ point);}
  else{shiftOut(2, 4, MSBFIRST, digit[a[i]]);}
  shiftOut(2, 4, MSBFIRST, razr[i]);
  digitalWrite(3, HIGH);}
  k=(float)time/100;
  delay(5); // паузой от 1 до 10 мс можно регулировать яркость свечения индикатора 1 - макс. яркость, 10 - миним.
}

Если сравнивать скетч с кетчами на странице «Модуль индикации на 74НС595 (Arduino)» , то видно, что код индикатора выведен из функции to_Timer() и помещен в функцию loop() , это позволяет очень точно воспроизводить таймером интервал времени 10 мс, поэтому все временные задержки при нажатии кнопки используют функцию millis().

Скетчи на странице «Модуль индикации на 74НС595 (Arduino)» больше подойдут для применения совместно с различными датчиками которые имеют большое время опроса (датчики температуры, давления, влажности и др.), в этих скетчах код индикации помещен в функцию таймера и не зависит от времени исполнения кода помещенного в функцию loop().

Библиотека MsTimer2.h — MsTimer2.zip

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

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

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

  • Источник опорного напряжения

    Источник опорного напряжения

    На рисунке показана схема источника опорного напряжение, который может работать от двух батареек AA в течении 18 месяцев. Дрейф напряжения не более 5,5 мкВ  / ° С. Выходное напряжение источника 1,23 В при 25 ° C. Регулировка выхода опорного напряжения не более чем на 120мВ.Подробнее...
  • BA5417 стерео-усилитель 2*5Вт

    BA5417 стерео-усилитель 2*5Вт

    Усилитель на базе ВА5417 имеет выходную мощность 5 Вт на канал при 4 ом нагрузке, питание 12В (от 6 до 15В) постоянного напряжения. Усилитель на BA5417 имеет отличное качество звука и низкий коэффициент нелинейных искажений, не более 0,1% на частоте 1 кГц при Рвых=0, 5Вт. SA1 — включение режима ОЖИДАНИЕ …Подробнее...
  • Термометр на PIC16F628A (-55…+125 гр. Цельсия)

    Термометр на PIC16F628A (-55…+125 гр. Цельсия)

    На рисунке показана схема термометра выполненного на основе микроконтроллера PIC16F628A, в качестве датчика используется цифровой датчик температуры DS18B20. Индикатор термометра состоит из 4-х разрадного семисегментного индикатора. Диапазон измеряемой температуры от -55 до + 125 градусов Цельсия. Температура считывается каждые 15 секунд, время считывания можно изменить в коде.   Напряжение питания термометра 5В, …Подробнее...
  • Высокоточный стабилизатор

    Высокоточный стабилизатор

    Можно добиться суммарной нестабильности вызванной изменением нагрузки, входного напряжения и температуры менее 0,01% применив схему показанную на рисунке. R4 определяет ток через стабилитрон, ток стабилитрона определяет температурный дрейф. R2 и R3 высокоточные резисторы. Литература — Джеймс Уитсон — 500 практических схем на ИСПодробнее...
  • Медный обмоточный провод

    В табл. представлены обмоточные провода ПЭВ-1 ПЭВ-2, они одножильные с винифлексовой изоляцией(лак). ПЭВ- 1-однослойная изоляция 2-двухслойная. Провода рассчитаны на работу при температуре от -60 до 105 градусов Цельсия. Ресурс провода при макс. температуре 20000 часов.Подробнее...