простой счетчик расхода воды для теплого пола

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

Здравствуйте подскажите по написанию программы хочу купить датчик расхода жидкости Изображение для теплых полов, хочу вывести на дисплей расход в литрах но не знаю с чего начать видел готовые проекты но там идет дисплей 16х2 и там много не нужной мне информаци, мне хотелось на семисегментнике, можно и на дисмлее 16х2 но тогда мне нужно информацию с 3-х датчиков выводить.
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: простой счетчик расхода воды для теплого пола

Сообщение Z_h_e »

Предположим что у Вас выход с расходомера 450 имп/л.
Тогда Q (л/мин) = F(Гц)*60/450=0,133*F.

Измеряете частоту, умножаете на коэфф, выводите.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

Re: простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

как вывести это на си, через таймер счетчик с счетом импульсов?
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: простой счетчик расхода воды для теплого пола

Сообщение Z_h_e »

Надо определиться с контроллером, на его основе разработать электрическую схему, установить среду программирования поддерживающую Си, набить там программу, скомпилировать, зашить в контроллер, посмотреть что получилось, исправить косяки и потом радоваться.

Можно еще что-то почитать, задать четкий вопрос по непонятому - Вам помогут. А на абстрактные вопросы тут не отвечают.

Частоту проще измерять через таймер, да.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

Re: простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

а как более точно написать: "помогите написать программу" или что то я не правильно написал?
Реклама
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

Re: простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

подскажите если я не правильно создал тему или что исправить или дописать
Реклама
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

Re: простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

микроконтроллер атмега16 среда программирования атмел студио 6




Вам нужно прочитать Правила форума.
http://radiokot.ru/forum/viewtopic.php?f=19&t=6538
Нарушение Правил форума п. 2.2
aen
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: простой счетчик расхода воды для теплого пола

Сообщение Z_h_e »

gulevskyd писал(а):"помогите написать программу"
Это равнозначно сделайте за меня. Но только если кто-то возжелает это сделать, без ТЗ и схемы никак не сможет.

Если брать тот же коэфф преобразования расходомера (450), можно посчитать количество импульсов за 13,33 сек. Потом просто разделить на 100. И у Вас опять будут л/мин. А можно собрать обычный частотомер на логике, только время счета не стандартное, а деление на 100 - это всего-лишь точка постоянно засвеченная на индикаторе после второго разряда справа.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

Re: простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

нет я не хочу чтоб за меня это делали я просто хочу чтоб помогли с чего все начать что за чем идет я начинаю изучать таймера счетчики читать я про них читал а практики нет охота и попрактиковаться и чтоб интерес был и польза.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: простой счетчик расхода воды для теплого пола

Сообщение Z_h_e »

Поморгайте светодиодом - примеров полно.
Подключите один семисегементный индикатор, что-нибудь отобразите.
Подключите N индикаторов - что-нибудь отобразите.

После этого придет хоть какое-то понимание. А если появятся вопросы, то это будут ВОПРОСЫ действительные.

Сейчас то Вы что хотите? Как посчитать частоту я Вам предложил.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

Re: простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

я вас понял попробую напишу код а потом буду задавать вопросы
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: простой счетчик расхода воды для теплого пола

Сообщение Андрей СШ »

Z_h_e писал(а):поддерживающую Си
Без вариантов, ибо Си спущен нам богами, а других языков и совсем на этой планете нет. А те кто на них (несуществующих) пишут упыри инопланетные.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: простой счетчик расхода воды для теплого пола

Сообщение Z_h_e »

Андрей СШ, Ваш сарказм абсолютно не в тему. ТС спрашивал именно как написать на С. Не кажется ли Вам, чтобы написать на С нужна среда которая поддерживает С?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: простой счетчик расхода воды для теплого пола

Сообщение Андрей СШ »

Ладно затупил.
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

Re: простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

здравствуйте написал немного кода #include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>


void SPI_out(char data,char data1);
volatile int a=0;
volatile int c=0;
volatile int d=0;

unsigned char number[] =
{

0b11111100, //0
0b01100000, //1
0b11011010, //2
0b11110010, //3
0b01100110, //4
0b10110110, //5
0b10111110, //6
0b11100000, //7
0b11111110, //8
0b11110110, //9
};

volatile unsigned long signal = 0; // глобальная переменная
void timer_0 (void)
{
//настраиваем на срабатывание INT0 по переднему фронту
MCUCR |= (1<<ISC01)|(1<<ISC00);
//разрешаем внешнее прерывание INT0
GICR |= (1<<INT0);
sei();

}
//функция обработчик внешнего прерывания INT0
ISR( INT0_vect )
{
signal++;

}

void port(void)
{

DDRD=~(1<<2);
PORTD&=~(1<<2);
}

void SPI_out(char data,char data1) //функция вывода цифры на индикатор
{
SPDR=data; //запись в регистр данных SPI
while(!(SPSR & (1<<SPIF))) //ждем окончания передачи по SPI

PORTB |= 0x01; //подаем импульс положительной полярности на вход SHCP сдвигового регистра
SPDR=data1; //запись в регистр данных SPI
while(!(SPSR & (1<<SPIF))) //ждем окончания передачи по SPI
//_delay_us(100); //ждем 100мкс
PORTB &= ~0x01; //снимаем импульс положительной полярности со входа SHCP сдвигового регистра
}

int main(void)
{
timer_0();
port();
DDRB=0xFF;
SPCR=0b01110011; //прерывания запрещены, SPI включен, младший бит передается первым, МК ведущий, импульсы положительной полярности, скорость CLK/128
TIMER0();


while(1)
{
SPI_out(number[signal],number[d]); //вывод цифры
_delay_ms(200);
if (signal==10)
{
signal=0;
d=d+1;
}
if (d==10)
{
d=0;
}

}
}

здесь идет подсчет импульсов на входе а мне нужно литры в минуту если я правильно понимаю мне нужен еще один счетчик который будет отсчитывать этот промежуток времени, не будут ли конфликтовать эти счетчики если будут скажите пожалуйсти как этого избежать
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: простой счетчик расхода воды для теплого пола

Сообщение Аlex »

здесь идет подсчет импульсов на входе а мне нужно литры в минуту
Про литры/минуту Вам уже писали выше - нужно измерять частоту, а не подсчитывать кол-во импульсов. При таком раскладе, Вы получите общий расход в литрах.
Либо можете отсчитать 1 минуту и подсчитать кол-во импульсов за эту минуту. Хотя, по сути, это будет та же частота - импульсы за единицу времени.
не будут ли конфликтовать эти счетчики
Не совсем понятно, что за конфликт Вы имеете в виду и что за счётчики.

Что касается кода.
Вот эта вот стряпня :

Код: Выделить всё

if (signal==10)
 {
 signal=0;
 d=d+1;
 }
 if (d==10)
 {
 d=0;
 }
излишняя.
Достаточно было ограничить переменную signal 99-тью, а в SPI гнать делённое значение на 10 и остаток от деления:

Код: Выделить всё

SPI_out(number[signal/10],number[signal%10]); //вывод цифры
И ещё, вот тут :

Код: Выделить всё

_delay_ms(200);
 if (signal==10)
косяк.
Представьте, что перед задержкой значение = 9, а во время задержки увеличилось на 2. И всё, будете ждать миллиарды импульсов, чтобы сработало условие.
Можно, конечно, поставить условие ">=", но тогда будете терять импулься. Всё равно придётся делить переменную на 10.
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

Re: простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

Alex спасибо за поправки код подправил #include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>


void SPI_out(char data,char data1);
volatile int a=0;
volatile int c=0;
volatile int d=0;

unsigned char number[] =
{

0b11111100, //0
0b01100000, //1
0b11011010, //2
0b11110010, //3
0b01100110, //4
0b10110110, //5
0b10111110, //6
0b11100000, //7
0b11111110, //8
0b11110110, //9
};

volatile unsigned long signal = 0; // глобальная переменная
void timer_0 (void)
{
//настраиваем на срабатывание INT0 по переднему фронту
MCUCR |= (1<<ISC01)|(1<<ISC00);
//разрешаем внешнее прерывание INT0
GICR |= (1<<INT0);
sei();

}
//функция обработчик внешнего прерывания INT0
ISR( INT0_vect )
{
signal++;

}

void port(void)
{
//DDRB|=(1<<2);
//PORTB|=(1<<2);

//DDRB=~(1<<0)&~(1<<1);
//PORTB&=~(1<<0)&~(1<<1);

DDRD=~(1<<2);
PORTD&=~(1<<2);
}

void SPI_out(char data,char data1) //функция вывода цифры на индикатор
{
SPDR=data; //запись в регистр данных SPI
while(!(SPSR & (1<<SPIF))) //ждем окончания передачи по SPI

PORTB |= 0x01; //подаем импульс положительной полярности на вход SHCP сдвигового регистра
SPDR=data1; //запись в регистр данных SPI
while(!(SPSR & (1<<SPIF))) //ждем окончания передачи по SPI
//_delay_us(100); //ждем 100мкс
PORTB &= ~0x01; //снимаем импульс положительной полярности со входа SHCP сдвигового регистра
}

int main(void)
{
timer_0();
port();
DDRB=0xFF;
SPCR=0b01110011; //прерывания запрещены, SPI включен, младший бит передается первым, МК ведущий, импульсы положительной полярности, скорость CLK/128
//TIMER0();


while(1)
{
SPI_out(number[signal/10],number[signal%10]); //вывод цифры

if (signal==99)
{
signal=0;
}
}
}
я так и не могу сообразить как мне применить ту формулу которая написана в начале форума и как мне считать за определенную единицу времени куда эту формулу подставить
Q (л/мин) = F(Гц)*60/450=0,133*F. 60-это секунд в минуте я правильно понял. F(Гц)-чего процессора?
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: простой счетчик расхода воды для теплого пола

Сообщение Z_h_e »

При чем здесь частота процессора? Частота следования импульсов с Вашего расходомера - это и есть расход. Я же Вам предложил простой способ измерения расхода, что же там может быть непонятного.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
gulevskyd
Родился
Сообщения: 12
Зарегистрирован: Вс ноя 29, 2015 17:13:33
Откуда: г. Полевской

Re: простой счетчик расхода воды для теплого пола

Сообщение gulevskyd »

подскажите пожалуйста как мне измерять частоту уже голову сломал не могу понять как мне это реализовать.
Кто-то делает через второй таймер кто-то как-то через регистр захвата. Читаю понимаю а как у себя это все собрать немного не догоняю.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: простой счетчик расхода воды для теплого пола

Сообщение Z_h_e »

Ну например настраиваете прерывание от таймера так, чтобы оно возникало через нужный промежуток времени. В этом обработчике прерывания от таймера проводите нужную математику и обнуляете счетчик импульсов.

А можно период считать, самый быстрый способ посчитать частоту, по двум импульсам определите. Режим захват таймера удобен для этого.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

Вернуться в «AVR»