Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Как реализовать меню в термодатчике

Непрочитано 09.08.2011, 14:30  
Nixon83
Частый гость
 
Регистрация: 07.08.2009
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Nixon83 на пути к лучшему
По умолчанию Как реализовать меню в термодатчике

Доброго времени суток! Я начинающий в програмировании.У меня к Вам вопросик. Хочу сделать термодатчик на Atmega8, семисегментник и 3 кнопки "+", "-", "set". в проге "+" и "-" работают хочу реализовать в ход в меню кнопкой set установка верхнего и нижнего порога. Подскажите как реализоать такое меню.
Заранее спасибо!
Пишу на C
Реклама:
Nixon83 вне форума  
Сказали "Спасибо" Nixon83
warel (28.06.2019)
Непрочитано 09.08.2011, 14:54  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: как реализовать меню в Термодатчике

Так для начала предоставили бы кусок кода из своей программы который реагирует на нажатие кнопок "+","-" (как производится опрос кнопок),тогда можно решить как его модифицировать. На данный момент можно только рекомендовать при нажатии "set" переходить к программе установок параметров (хотя это и так очевидно) при повторном нажатии-выход в основную программу.

Последний раз редактировалось heady69; 09.08.2011 в 14:59.
heady69 вне форума  
Сказали "Спасибо" heady69
warel (28.06.2019)
Непрочитано 09.08.2011, 15:15  
urry
Почётный гражданин KAZUS.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: как реализовать меню в Термодатчике

дежавю...
http://radiokot.ru/forum/viewtopic.php?f=20&t=50539
__________________
warez
urry вне форума  
Сказали "Спасибо" urry
warel (28.06.2019)
Непрочитано 09.08.2011, 15:18  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: как реализовать меню в Термодатчике

Сообщение от urry Посмотреть сообщение
дежавю...
http://radiokot.ru/forum/viewtopic.php?f=20&t=50539
за год небось не разобрался
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Сказали "Спасибо" picavr
warel (28.06.2019)
Непрочитано 09.08.2011, 15:24  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: как реализовать меню в Термодатчике

Сообщение от picavr Посмотреть сообщение
за год небось не разобрался
Да вроде пара месяцев всего-то! Успеет еще...

Последний раз редактировалось heady69; 09.08.2011 в 15:28.
heady69 вне форума  
Сказали "Спасибо" heady69
warel (28.06.2019)
Непрочитано 09.08.2011, 15:28  
Nixon83
Частый гость
 
Регистрация: 07.08.2009
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Nixon83 на пути к лучшему
По умолчанию Re: как реализовать меню в Термодатчике

Вот кусок кода!

void temp_test() {
if (JUMPER==0) {
if (alarm_temp›temp) ALARM=1; else ALARM=0;
}else{
if (alarm_temp‹temp) ALARM=1; else ALARM=0;
}
}

void temp_inc() {
if (alarm_temp‹1250) alarm_temp++;
}

void temp_dec() {
if (alarm_temp›-550) alarm_temp--;
}

void main() {
PORTB=0;
DDRB=0x0f;
PORTD=0;
DDRD=0xff;
PORTC=0;
DDRC=0x10;
TCCR0=0;
TCNT0=0xfd;
TIMSK=1;
#asm("sei");
led_buff[0]=dig_table[11];
led_buff[1]=dig_table[11];
led_buff[2]=dig_table[11];
led_buff[3]=dig_table[11];
delay_ms(200);
TCCR0=2;
ds_init();
while (ds_ok==0);
epp_read();
while (1) {
if (menu_tmr==0) ds_calc();
if (menu_tmr==15) {
ds_read();
temp_test();
}
if (BTN_PLUS==0&&btn0==0&&btn1==0) {
btn0=1;
temp_inc();
btn_timeout=30;
}
if (BTN_PLUS==0&&btn0!=0&&btn_timeout‹20) {
btn_timeout=20;
temp_inc();
}
if (BTN_PLUS!=0&&btn0!=0) {
btn0=0;
btn_timeout=20;
}
if (BTN_MINUS==0&&btn0==0&&btn1==0) {
btn1=1;
temp_dec();
btn_timeout=30;
}
if (BTN_MINUS==0&&btn1!=0&&btn_timeout‹20) {
btn_timeout=20;
temp_dec();
}
if (BTN_MINUS!=0&&btn1!=0) {
btn1=0;
btn_timeout=20;
}
if (btn_timeout›0) {
led_temp(alarm_temp);
btn_timeout--;
if (btn_timeout==0) epp_write();
}else{
led_temp(temp);
}
delay_ms(50);
menu_tmr++;
if (menu_tmr›19) menu_tmr=0;
}
}
Nixon83 вне форума  
Сказали "Спасибо" Nixon83
warel (28.06.2019)
Непрочитано 09.08.2011, 16:04  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: как реализовать меню в Термодатчике

Неплохо было-бы комментариями разбавить... BTN_PLUS (нога AVR ?), btn0 (предыдущее состояние?).
Если у вас динамическая индикация на индикаторах,неплохо бы в программу опроса кнопок свалить туда-же,и в основной программе проверять колько код кнопки передаваемый из программы опроса ,ИМХО проще было-бы,чем париться с таймаутами в основной.

Почему не вставить тогда что-то подобное:

Код:
if (BTN_SET==0&&btn2!=0&&btn_timeout‹20) {
btn_timeout=20;
set_params(); //переход на установку параметров
}
if (BTN_SET!=0&&btn2!=0) {
btn2=0;
btn_timeout=20;
}

Последний раз редактировалось heady69; 09.08.2011 в 16:12.
heady69 вне форума  
Сказали "Спасибо" heady69
warel (28.06.2019)
Непрочитано 09.08.2011, 16:17  
Nixon83
Частый гость
 
Регистрация: 07.08.2009
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Nixon83 на пути к лучшему
По умолчанию Re: как реализовать меню в Термодатчике

menu_tmr это счетчик по кругу 0-19, 20 тиков примерно 1 секунда

#include ‹mega8.h›
#asm
.equ __w1_port=0x15
.equ __w1_bit=0
#endasm
#include ‹1wire.h›
#include ‹delay.h›

//#define LED_CATODE
#define LED_DOT_MASK 0x7f

#define ALARM PORTC.4
#define BTN_PLUS PINC.3
#define BTN_MINUS PINC.2
#define JUMPER PINC.1

#define DS18S20_FAMILY 0x10
#define DS18B20_FAMILY 0x28
#define DS1822_FAMILY 0x22

#define DS_READ_ROM 0x33
#define DS_SKIP_ROM 0xcc
#define DS_CONVERT_T 0x44
#define DS_WRITE_SCRATCHPAD 0x4e
#define DS_READ_SCRATCHPAD 0xbe
#define DS_12BITS 0x7f

flash byte dig_table[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0,0xff,0xbf};

byte menu_tmr=0;
byte led_dig=0;
byte led_buff[4];
trom ds_rom;
tscratchpad ds_sp;
int temp;
bit ds_ok=0;
bit btn0=0; //флаг кнопки
bit btn1=0;
byte btn_timeout=40;
int alarm_temp;
eeprom int epp_alarm_temp=0;

interrupt [TIM0_OVF] void tmr0_ovf() {
#ifdef LED_CATODE
PORTB=0x0f;
PORTD=~led_buff[led_dig];
PORTB=(~(1‹‹led_dig))&0x0f;
#else
PORTB=0;
PORTD=led_buff[led_dig];
PORTB=1‹‹led_dig;
#endif
led_dig++;
if (led_dig›3) led_dig=0;
}
Nixon83 вне форума  
Сказали "Спасибо" Nixon83
warel (28.06.2019)
Непрочитано 09.08.2011, 16:32  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: как реализовать меню в Термодатчике

Сообщение от Nixon83 Посмотреть сообщение
menu_tmr это счетчик по кругу 0-19, 20 тиков примерно 1 секунда
Т.е. другими словами,задается задержка DS1820 для окончания им измерения температуры.
ТОгда надо прописать подключение кнопки set,в основную код который выше и программу установки парам. Тоолько в ней опять придется городить опрос кнопок по вашей теме... Удобней наверное все-таки перенести опрос кнопок в прерывание.
P.S. Заодно и задержку опроса термометра. Пусть выставляет флаг разрешения опроса.

Последний раз редактировалось heady69; 09.08.2011 в 16:49.
heady69 вне форума  
Сказали "Спасибо" heady69
warel (28.06.2019)
Непрочитано 09.08.2011, 16:36  
Nixon83
Частый гость
 
Регистрация: 07.08.2009
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Nixon83 на пути к лучшему
По умолчанию Re: как реализовать меню в Термодатчике

как-то так! И хоть кол чеши не могу организовать меню!
Nixon83 вне форума  
Сказали "Спасибо" Nixon83
warel (28.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Альтернативная энергия kum1953 Поиск схем. Делимся схемами 1218 01.10.2012 16:30
Водка и как с ней бороться SerjT Отвлекитесь, эмбеддеры! 108 29.09.2009 21:25
Как реализовать точное время в сети из AVR? Don_Ambrosio Микроконтроллеры, АЦП, память и т.д 44 15.08.2008 14:02
Как реализовать на ATmeg8 или ATtiny датчик случайных чисел Don_Ambrosio Микроконтроллеры, АЦП, память и т.д 20 03.05.2008 21:06
Как можно реализовать управление 8-сегментным индикатором? greafuger Микроконтроллеры, АЦП, память и т.д 22 17.03.2008 23:16


Часовой пояс GMT +4, время: 00:26.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.