ПредишенСледващото

Electronic - шах - часовник


Електронни шахматни часовници. Най-простият вариант на такъв часовник е, само два последователно включен секундомер.

Материал статия може да бъде полезна за тези, на CT започва да се развива CodeVisionAVR.

Без значение колко е голям в Интернет, обаче, прости и интересни схеми не са толкова лесни за намиране и.

Така например от типа на шахматни часовници, Google и аз не се сблъскате с подобна схема, а в действителност да направи такава схема на КН, че е лесно.

Определение: "Часовник за шах", наречен часовник с две единици време на дисплея, свързани помежду си по такъв начин, че само един от тях може да работи в същото време.

Нека ви дам един прост пример за такъв шах часовник (всъщност е прототип на хронометър. Вместо таймера за обратно отброяване. И дори опростена версия без допълнителни функции, но това може да се фиксира :)) изходния код са включени).

Функции: Контролът е проста, докато натискане на KH-1 преминава през първата хронометъра, докато натискане на KH-3 минава през 2-ри бутон хронометър KH-2 (нулиране) до нула резултатът на четене.

Ако контролът започне хронометрите използвани P2K ключ или обикновена смяна. то приблизително ще съответства на желаната функционалност на веригата.

В този проект, основната е да се използват два хронометри, ако е необходимо, броят им може да се увеличи, което може да бъде полезно и за други вериги, например, създаване на проект, в горната му част CodeVisionAVR.

Моля изберете MK и честота.

Electronic - шах - часовник

свържете дисплея да PORTB

Electronic - шах - часовник

и пристанище PORTD направя контролира входните бутони с вътрешни гостилница резистори към +.

Electronic - шах - часовник


Най-интересното нещо е да изберете таймера за точен резултат секунди.

Как се прави това, аз съм много лесно да се разбере по това време, помогна за информация от my-avr.at.ua уебсайт.

Таймер опциите на таймера Изберете 1, Clock стойност 7813 кХц, Прекъсване на: сравнение на мач, Comp. А = 1e85 (чисто показва, че той ще бъде часовник с честота от 1 секунда)
часовник стойност - отчитане на честотата
Прекъсване на сравнение на мач - прекъсне случайно с регистрирате

Electronic - шах - часовник


Тук имаме малко стоп. Какъв е този номер 1e85? Защо решихте да се вземе точно този номер?

Така че, да правилно изчисли каква е честотата на таймера който искате да отворите научен калкулатор. Брой 1e85 (това е 16-матрични нотация) в 10sitichnoy = 7813 и / час. От това следва, че 7813 (честота = 1 Hz прекъсване) на * 5 (сек) = 39065 и го трансформира в 16chnuyu / ч 9899 тогава се получи, че този брой се вмъква в Comp. А и нашата таймер ще работи с честота от 0,2 Hz, което е един път на 5 секунди.
Генериране на код и спаси.

В таймерът за код: (TIM1_COMPA)
Трябва да се прави в средата на следните редове с код:
TCNT1H = 0;
TCNT1L = 0;
За правилното функциониране на тези регистри се възлага на таймера 0.
Тук е източникът код се оказа в крайна сметка.

невалидни основни (свободен)
<
// Декларирам вашите локални променливи тук

// Crystal Oscillator фактор разделяне: 1
#pragma optsize-
CLKPR = 0x80;
CLKPR = 0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize +
# endif
ПОРТА = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTD = 0x1C;
DDRD = 0x00;

TCCR1A = 0x00;
TCCR1B = 0x05;
TCNT1H = 0x00;
TCNT1L = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
OCR1AH ​​= 0x1e;
OCR1AL = 0x85;
OCR1BH = 0x00;
OCR1BL = 0x00;
TIMSK = 0x40;
USICR = 0x00;
ACSR = 0x80;
lcd_init (16);
#asm ( "SEI")

докато (1)
<
lcd_gotoxy (0,0); // Поставете дисплея
lcd_putchar (hour_A / 10 + 0x30);
lcd_putchar (hour_A% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (min_A / 10 + 0x30);
lcd_putchar (min_A% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (sek_A / 10 + 0x30);
lcd_putchar (sek_A% 10 + 0x30);
ако (PIND.2 == 0) // за състоянието на екрана на първия хронометъра
lcd_putsf ( " още
<
lcd_putsf ( " >;
lcd_gotoxy (0,1); // Поставете дисплея
ако (PIND.4 == 0) // за състоянието на екрана на 2-ри хронометъра
lcd_putsf ( "START2>");
още
<
lcd_putsf ( "payza>");
>;
lcd_putchar (hour_B / 10 + 0x30);
lcd_putchar (hour_B% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (min_B / 10 + 0x30);
lcd_putchar (min_B% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (sek_B / 10 + 0x30);
lcd_putchar (sek_B% 10 + 0x30);

ако (sek_A == 60) ; // Работа състояние секунди
ако (min_A == 60) ; // Състояние минути работа
ако (hour_A == 96) ; // Състояние часа във формат на 4 дни

ако (sek_B == 60) ; // Работа състояние секунди
ако (min_B == 60) ; // Състояние минути работа
ако (hour_B == 96) ; // Състояние часа във формат на 4 дни

#pragma optsize-
CLKPR = 0x80;
CLKPR = 0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize +
# endif
ПОРТА = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTD = 0x1C;
DDRD = 0x00;

TCCR1A = 0x00;
TCCR1B = 0x05;
TCNT1H = 0x00;
TCNT1L = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
OCR1AH ​​= 0x1e;
OCR1AL = 0x85;
OCR1BH = 0x00;
OCR1BL = 0x00;
TIMSK = 0x40;
USICR = 0x00;
ACSR = 0x80;
lcd_init (16);
#asm ( "SEI")

докато (1)
<
lcd_gotoxy (0,0); // Поставете дисплея
lcd_putchar (hour_A / 10 + 0x30);
lcd_putchar (hour_A% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (min_A / 10 + 0x30);
lcd_putchar (min_A% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (sek_A / 10 + 0x30);
lcd_putchar (sek_A% 10 + 0x30);
ако (PIND.2 == 0) // за състоянието на екрана на първия хронометъра
lcd_putsf ( " още
<
lcd_putsf ( " hour_AA = 0, min_AA = 0, sek_AA = 0; // нулиране на текущото време
>;
lcd_gotoxy (0,1); //
lcd_putchar (hour_AA / 10 + 0x30);
lcd_putchar (hour_AA% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (min_AA / 10 + 0x30);
lcd_putchar (min_AA% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (sek_AA / 10 + 0x30);
lcd_putchar (sek_AA% 10 + 0x30);

lcd_gotoxy (0,2); //
ако (PIND.4 == 0) // за състоянието на екрана на 2-ри хронометъра
lcd_putsf ( "START2>");
още
<
lcd_putsf ( "payza>");
hour_BB = 0, min_BB = 0, sek_BB = 0; // нулиране на текущото време
>;
lcd_putchar (hour_B / 10 + 0x30);
lcd_putchar (hour_B% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (min_B / 10 + 0x30);
lcd_putchar (min_B% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (sek_B / 10 + 0x30);
lcd_putchar (sek_B% 10 + 0x30);

lcd_gotoxy (8,3); // текущото време
lcd_putchar (hour_BB / 10 + 0x30);
lcd_putchar (hour_BB% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (min_BB / 10 + 0x30);
lcd_putchar (min_BB% 10 + 0x30);
lcd_putchar ( ":");
lcd_putchar (sek_BB / 10 + 0x30);
lcd_putchar (sek_BB% 10 + 0x30);

ако (PIND.3 == 0) hour_A = 0, min_A = 0, sek_A = 0; // нулиране време
hour_AA = 0, min_AA = 0, sek_AA = 0; // Reset тока
hour_B = 0, min_B = 0, sek_B = 0; // нулиране време
hour_BB = 0, min_BB = 0, sek_BB = 0; // Reset тока
>;

ако (sek_A == 60) ; // Работа състояние секунди
ако (min_A == 60) ; // Състояние минути работа
ако (hour_A == 96) ; // Състояние часа във формат на 4 дни

ако (sek_AA == 60) ; // Работа състояние секунди
ако (min_AA == 60) ; // Състояние минути работа
ако (hour_AA == 24) ; // Състояние часа

ако (sek_B == 60) ; // Работа състояние секунди
ако (min_B == 60) ; // Състояние минути работа
ако (hour_B == 96) ; // Състояние часа във формат на 4 дни

Свързани статии

Подкрепете проекта - споделете линка, благодаря!