Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 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.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 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, время: 04:12.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot