Перейти к содержанию

Язык СИ для микроконтроллеров


Рекомендуемые сообщения

Всё придёт с опытом.

Если изменение одного куска кода приводит к изменению половины программы, значит неверно составлен алгоритм и его срочно нужно пересматривать.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Да, надо изначально было оптимизировать программу по максимуму, и работать с макросами где только можно. Но кто же думал что в процессе разработки, в мою пустую голову будут приходить новые и новые идеи :D. Тут пока не разберешь все по полкам, дела не будет

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

К примеру,

В 20:00 нагрузка включилась, а должна отключиться завтра в 6:00 , но с пяти до семи, не было света и когда свет появляется, нагрузка остается включенной до 20:00 а потом и до 6 следующего дня. Потому что в 6:00, контроллер не работал чтобы сравнить переменные отключения с текущими часами и записать 0 в епром.

Вот так как то...

как думаете чем для суточного таймера отличается фраза:

с 20-00 до 6-00 нагрузка ВКЛ

от

с 6-00 до 20-00 нагрузка ВЫКЛ ?????

правильный ответ: ничем....

делайте выводы....

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

si4karuk, Вы несерьёзно ведёте себя. По этому что-то Вам объяснять нет особо желания. Думаю, это не только у меня.

IMHO правильную дал подсказку, но Вы всё сводите на шутку, даже не пытаясь вникнуть в суть написанного.

Ссылка на комментарий
Поделиться на другие сайты

как думаете чем для суточного таймера отличается фраза:

с 20-00 до 6-00 нагрузка ВКЛ

от

с 6-00 до 20-00 нагрузка ВЫКЛ ?????

правильный ответ: ничем....

делайте выводы....

Я действительно не понимаю вашей подсказки! Ну ёлка палка, к чему такая скрытность, прямо говорите что хотите этим сказать.

Ссылка на комментарий
Поделиться на другие сайты

Это решение проблемы с вашим переходом через 00-00.

Если с 20-00 по 6-00 есть переход, то с 6-00 до 20-00 его НЕТ !

Ещё раз повторюсь. Не надо ловить момент события, надо просто знать в каком диапазоне находится текущее время !

Ссылка на комментарий
Поделиться на другие сайты

Если я правильно всё понял, то сделал-бы как-то так:

...
unsigned int on_time = hour_on * 60 + min_on ;
unsigned int off_time = hour_off * 60 + min_off ;
unsigned int cur_time = hour * 60 + min ;
...
if ( cur_time >= on_time && cur_time <= off_time ) // если текущее время внутри диапазона
powerload = 1 ; // Да, включить нагрузку
else
powerload = 0 ; // Нет, выключить нагрузку
...

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

Изменено пользователем shindbad
Ссылка на комментарий
Поделиться на другие сайты

Именно так и сделано, я читаю часы с DS-ки.

Правда сейчас этот проект отложил в сторону, нынче компрессор на производстве делаю, и тоже с часами :crazy:

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Помогите, пожалуйста, написать простейшую программу для обработки длительности нажатия кнопки с помощью прерывания и таймера!

В общем алгоритм такой:

1. После подачи питания микронтроллер ATtiny13A сразу уходит в «глубокую спячку», то есть в Power Down Mode!

2. Просыпается только от нажатия кнопки, которая подключена к PORTB.1

3. «Смострит», сколько её держат нажатой

4. Если дольше, например, 1 секунды, подает питание на светодиод, подключенный к порту PORTB.0

5. Следующее нажатие не только выключает светодиод, но и отправляет контроллер в Power Down Mode

6. Либо это происходит автоматически после 5-ти минут бездействия, то есть если кнопку не нажимали – контроллер сам выключает светодиод и «крепко засыпает»!

Насколько я понял в «глубокую спячку» ATtiny13A можно ввести так:

void EN_SLEEP_MODE(void)	 //enable sleep mode
{
TCCR0B=0; //Disable timer
MCUCR=0x30; //PowerDown Mode interrupt by level
GIMSK=0x40; //Enable External Interrupt-0
#asm("sleep")		 // вкл. спящего режима
}

А что делать с кнопкой? Прерывание ведь должно быть обработано максимально быстро, а что если нужно например, распознать нажатие не 1 с, а 2-3 или 5! Как правильно составить код!!! Напишите пожалуйста, если не сложно! Заранее спасибо!

Изменено пользователем prosto_andriy
Ссылка на комментарий
Поделиться на другие сайты

написание кода это в раздел работа....

а так выход их слипа просто фиксируется как событие, а дальше запускается системный таймер и задачи 3-6 выполняются в параллельном режиме, по системному таймеру опрашивается состояние кнопки, блокируется дребезг контактов, переключается состояние выхода и тд....

Ссылка на комментарий
Поделиться на другие сайты

prosto_andriy, Подобные алгоритмы весьма просто реализуются на автоматах состояний .

см. User Interfaces http://www.aqdi.com/state.htm

Изменено пользователем dosikus
Ссылка на комментарий
Поделиться на другие сайты

... выход их слипа просто фиксируется как событие...

насколько я понял для этого достаточно одного бита? То есть можно написать так:

bit POWER_ON;	 //Флаг включения 

для состояния кнопки (нажата/отпущена) тоже хватит одного бита

bit KEY_PRESSED; // флаг нажатия кнопки

ёще понадобится переменная для счетчика тиков таймера

unsigned int timerCount = 0; // первоначально счетчик равен нулю

Этого хватит для написания программы, или нужны ещё какие-то переменные? Подскажите пожалуйста!!!

Ссылка на комментарий
Поделиться на другие сайты

... выход их слипа просто фиксируется как событие...

насколько я понял для этого достаточно одного бита? То есть можно написать так:

bit POWER_ON;	 //Флаг включения 

Этого хватит для написания программы, или нужны ещё какие-то переменные? Подскажите пожалуйста!!!

а самому подумать? вы когда мама говорит спать сразу в кровать падаете или выполняете ряд необходимых действий? с МК тоже самое вход/выход из слипа это ряд необходимых действий , непосредственно для вашей задачи он вообще может быть реализован вне основного цикла на моменте инициализации МК, а вход в слип может при этом реализован переходом программы на вектор сброса МК....

к тому же пункты 3-5 не прописаны полностью...

что должен сделать МК если кн нажата дольше 1с ? включить выход или ждать отпускания кн и включить выход? а если меньше 1с? а если больше 5мин? и тд и тп....

когда вы для себя перечислите все "если" вы получите примерное количество необходимых флагов....

попробуйте почитать http://www.pic24.ru/doku.php/osa/ref/intro

разделы: сервисы и учебник

это поможет понять что нужно делать....

Ссылка на комментарий
Поделиться на другие сайты

Ребята помогите написать програмку((( суть такова:

atmega8a

имеется светодиод 1 он находится на PORTB на нулевой лапке

имеется 4 кнопки PC0;PC1;PC2;PC3

1.Если PC0 и PC1 включены то на PORTB подается питание и светодиод светится ( эти две лапки всегда имеют логическую 1(то есть питание на них подается постоянно))

я пробовал прописать if (PINC&((1<<PC0)&(1<<PC1)) так код не работает. если if (PINC&((1<<PC0)|(1<<PC1)) то работает, если любая из этих лапок включена а мне надо чтобы работал от 2 лапок а не от одной из них. если одна то светодиод не должен загореться как это прописать(((

2.А здесь чуть по другому две кнопка PC2;PC3 можно включать и отключать при включении одной из них светодиод должен тухнуть низависимо от того что включены PC0 PC1

Незнаю как это все прописать БУДУ ОЧЕНЬ БЛАГОДАРЕН ЕСлИ КТО НИТЬ ПОМОЖЕТ :unknw:

Ссылка на комментарий
Поделиться на другие сайты

Сделайте условие в условии :thank_you2:

if(Кнопка 1 нажата?)
 {
  if(Кнопка 2 нажата?)
  Светить лампочку;
 }

if(Кнопка 3 нажата?)
 {
  Тушить лампочку;
 }

if(Кнопка 4 нажата?)
 {
  Тушить лампочку;
 }

Учить операторы ветвления!!!

Изменено пользователем si4karuk
Ссылка на комментарий
Поделиться на другие сайты

А почему не так:

if((Кнопка 1 нажата?) И (Кнопка 2 нажата?)) {
 Светить лампочку;
}

:)

А учить автору нужно не операторы ветвления, а булеву алгебру. В частности - логические операции (И, ИЛИ, ..).

Опросить вход МК - самая элементарная операция в программировании.

Ссылка на комментарий
Поделиться на другие сайты

Гугл сможет ответить на этот вопрос :)

Вообще, я имел ввиду операции в общем. А побитовые они или побайтовые ( :) ) - пофиг. Логику учить нужно.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...