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

Программирование на С (кнопки)


tifaso

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

тогда код будет больше.Но в прерывании у тебя будет лучше срабатывать кнопка.При нажатии кнопки ты выставляешь флаг или бит if(!(buton1==1)){ flag=1} потом if(flag==1&&buton1==1){вкл .порт1.И выкл.все остальные).Ну важно настроить таймер и в обработчике прерывания это нужно написать.И таких в обработчике сколько каналов и столько писать.Я написал на один канал.

Если нужно код могу написать.Не жадный.Но лучше когда сам напишешь.Принцип действия я написал.Да и ещё не забывай дребезг контактов убрать.

 

 

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

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

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

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

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

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

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

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

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

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

проэкт готов сейчас вышлю.

У меня к тебе просьба.Ты не подумай я не требую.За эту работу ты не мог бы мне выслать по карточке в эквиваленте 100 гривен так как я без работы.Работу я отправлю.Если вышлешь то буду благодарен .Если нет на том и спасибо. вот номер карты приват 5168 7574 0961 1565 Ргсев иван .

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

buton3.7z

и 3 кнопки в  качестве переключателей диапазонов с фиксацией на 8 каналов .Для 3УСЦТ 

Проэкт и в протеусе 7.10.В протеусе работает .В желекзе не проверял.Но думаю ято и в железе будет работать.Я налаживал Бобра автомат-защита -станция управления  глубинным насосом от обрыва фаз и перегруза.

и у меня на 97 % работало что в железе что в протеусе.

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

@Ivan Rusev Спасибо за пример, но не мог бы ты в виде текста код выслать потому как у меня студия не открывает этот проект вылетает в ошибку. 

По поводу средств выслать не могу потому как сам на мели до получки ещё далеко, а денег только на еду осталось.

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

ну да ладно.Это наполовину то СВП или УСУ  полное устройство на атмегах нельзя сделать.Разве что на стмках.там можно регулировать 8 каналов и по каждому каналу 3 переключателя диапазона .Нужно для полного Свп на 8 каналов  из них 8 входных ацп   32 входных порта  40 выходных 2 ацп по  4 иннжект канала и 2 таймера по 4 шима.и ещё один таймер для прераывания (для кнопок) и один таймер дпя уверенного старта ацп инжект каналы если в основном цикле  то они запускаются без таймера если в прерывании то у меня без таймера никак не получается.Я любитель.62 порта.а если одной кнопкой то меньше но не намного.Я решил твой вопрос.Ты смотрел проект?

Спасибо что поднял рейтинг

А как ты савишь лайки?Спасибо что поднял рейтинг

Ты майн в программе блокнот открой и там всё увидишь.

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

@Ivan Rusev Так в том то и дело я же тебе пишу что моя студия не может открыть данный проект попросту вылетает в ошибку. Вышли код этого проекта в виде текста чтобы проблем меньше было.

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

ты в судию не лезь у меня 7 а у тебя 6 ест файл main.c ты его открываешь  с помощью блокнота.Попробуй.Мне и так все минуса ставят.И напишешь.

Ты майн в программе блокнот открой и там всё увидишь.

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

А всё понял через main.cpp открыл прямо в студии. Потом разберусь уже. На код глянул смысл примерно понял и увидел даже свои ошибки в своём коде. Ещё один плюсик за помощь.

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

13 любимое моё число.Я программированием занимаюсь почти 6 лет начинал с полного нуля и понимания.Как зовут тебя?.А то тут у всех клички.Я один своё имя и фамилию написал.

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

4 часа назад, Ivan Rusev сказал:

buton3.7z 50 kB · 9 скачиваний

и 3 кнопки в  качестве переключателей диапазонов с фиксацией на 8 каналов .Для 3УСЦТ 

Проэкт и в протеусе 7.10.В протеусе работает .В желекзе не проверял.Но думаю ято и в железе будет работать.Я налаживал Бобра автомат-защита -станция управления  глубинным насосом от обрыва фаз и перегруза.

и у меня на 97 % работало что в железе что в протеусе.

Ужас! Никогда так больше не делайте сами и, тем более, не советуйте другим! Мало того, что сам код крайне небрежный, с магическими числами, так еще и ЗАДЕРЖКИ в обработчике прерываний! Ваш код может быть примером того, как не следует решать задачи, даже если он и работает.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

пускай он допиливает.Можно убрать задержки.Тогда прескалер выставлять работу таймера.Код небрежный но понятный даже кухарки.Можно вести указатели структуры.Главное что работает.Или вы знаете по другому.По другому можно но не  нужно усложнять программу.Сам запутаюсь.Принцип всё равно остаётся вот этот.

а какие магические числа? Я не маг.И тем более не магистр.Я аматор.Знаете что это такое.?

ставте мне дизлайк моё любимое число 13

можно ацп задействовать.Как Шариков говорил по насоящему по нашему.Вы наверное не пролетариат.?

принцип таков .На каждую кнопку свой флаг если ты один флаг впишеш в обработчик двух кнопок работать не будет нормально.

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

2 минуты назад, Ivan Rusev сказал:

знаете что это такое.?

Знаю. Но ведь вы паяете все-таки не вот таким паяльником, верно?

picisk00001112.jpeg

То есть вы понимаете, что электроника требует ОСОБЫХ подходов ДАЖЕ ОТ ЛЮБИТЕЛЯ, чтобы получилось что-то отличное от примуса. Точно так же и программирование требует соблюдения определенных правил "хорошего тона" от всех, кто за него берется. Надо стремиться именно к этому, чтобы не быть тяп-ляпщиком, но быть любителем-аматором.

Для 8-и кнопок, расположенных на PORTD, управление 8-ю светодиодами на PORTC (к сожалению, я не могу посмотреть вашу схему в протеусе) задача "зависимого кнопочного поля" решается как-то так (в учебном примере):

#include <avr/io.h>
#include <util/delay.h>
  
uint8_t get_button(void){
	uint8_t tmp = ~PIND;
	_delay_ms(10);
	if(~PIND == tmp)
		return tmp;
	else
		return 0;
}

int main(void){
	DDRC = 0xFF; // порт светодиодов на выход
	PORTD = 0xFF; // подтяжки на входы порта кнопок, кнопки на землю

	uint8_t state = 0;
	uint8_t tmp;

	while(1){
		PORTC = state; // включаем светодиоды
		
		// ждем, пока изменится состояние кнопок
		do {
			tmp = get_button();
		// условие окончания ожидания - нажата кнопка, отличная от текущего состояния
		} while(!tmp && (tmp == state));
      
		state = tmp; // обновляем состояние
    }
}

И никаких простыней кода, никаких прерываний и т.п.

Код, разумеется, учебный, упрощенный, но простой и понятный, решающий поставленную задачу. Главное, можно научиться логически решать задачу, а не методом подбора комбинаций операторов Си.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

тут не нужно включать светодиоды один при запуске. Ваша функция как работает? Если вы обьявляете переменные в майне?Это сделано просто но по буржуазному.И работа при нажатых кнопках.Но самое главное при запуске должен загорется первый светодиод.Можно сделать немного по другому.Сразу говорю кухарка вашу программу не поймёт.

5 минут назад, ARV сказал:

Знаю. Но ведь вы паяете все-таки не вот таким паяльником, верно?

picisk00001112.jpeg

То есть вы понимаете, что электроника требует ОСОБЫХ подходов ДАЖЕ ОТ ЛЮБИТЕЛЯ, чтобы получилось что-то отличное от примуса. Точно так же и программирование требует соблюдения определенных правил "хорошего тона" от всех, кто за него берется. Надо стремиться именно к этому, чтобы не быть тяп-ляпщиком, но быть любителем-аматором.

Для 8-и кнопок, расположенных на PORTD, управление 8-ю светодиодами на PORTC (к сожалению, я не могу посмотреть вашу схему в протеусе) задача "зависимого кнопочного поля" решается как-то так (в учебном примере):


#include <avr/io.h>
#include <util/delay.h>
  
uint8_t get_button(void){
	uint8_t tmp = ~PIND;
	_delay_ms(10);
	if(~PIND == tmp)
		return tmp;
	else
		return 0;
}

int main(void){
	DDRC = 0xFF; // порт светодиодов на выход
	PORTD = 0xFF; // подтяжки на входы порта кнопок, кнопки на землю

	uint8_t state = 0;
	uint8_t tmp;

	while(1){
		PORTC = state; // включаем светодиоды
		
		// ждем, пока изменится состояние кнопок
		do {
			tmp = get_button();
		// условие окончания ожидания - нажата кнопка, отличная от текущего состояния
		} while(!tmp && (tmp == state));
      
		state = tmp; // обновляем состояние
    }
}

И никаких простыней кода, никаких прерываний и т.п.

Код, разумеется, учебный, упрощенный, но простой и понятный, решающий поставленную задачу. Главное, можно научиться логически решать задачу, а не методом подбора комбинаций операторов Си.

мне нужно учится .Но я учусь что даёт Всевышний.

Можно по другому я оператор do while   не использую.У меня магия а у вас.

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

53 minutes ago, ARV said:

решается как-то так

Неудачный пример: много ненужных проверок и лишнего кода. Зачем в get_button() считывать состояние кнопок дважды? Для чего возвращать значение 0?

Вот, например, так проще и понятней.

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{ 
    DDRC = 0xFF; // порт светодиодов на выход
    PORTD = 0xFF; // подтяжки на входы порта кнопок, кнопки на землю
    uint8_t state;
    
    PORTC  = 0;
    while(1)
    {
         state = ~PIND;
         
         if(state)             // если нажата кнопка
             PORTC = state;     // обновляем состояние 

          _delay_ms(10);
    }
}

 

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

2 часа назад, Yurkin2015 сказал:

Неудачный пример

Я бы не согласился на 100%, хотя основания для таких заявлений у вас есть. 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Усу умники и СВП на 3УСТ такие телевизоры если помните .Как они работают .Я могу расказать .Вкл телевизор зажигается 1 канал потом мы переключаем  а у вас везде порты погашены они что пьяные?Как будут обновлятся состояния если у вас одна и та же переменная используется для кнопок и для светодиодов(выходов)? и Как они будут обновлятся?Регисром сдвига?Обоим академикам.Вы же академики.А я по сравнению с вами Шариков.  пролеториат.

Отожмёте кнопку а светодиод не погаснет нажмёте другую зажжётся другой но первый не погаснет.

это есть наш последний и решительный бой.

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

4 минуты назад, Ivan Rusev сказал:

а у вас везде порты погашены

Можно сделать, чтобы изначально светился любой из портов - одну строку откорректировать:

PORTC  = 1; // вот и светится 1-й

 

5 минут назад, Ivan Rusev сказал:

Как они будут обновлятся

А вы проанализируйте в протеусе, и сразу увидите, как.

5 минут назад, Ivan Rusev сказал:

нажмёте другую зажжётся другой но первый не погаснет

Обязательно погаснет.

6 минут назад, Ivan Rusev сказал:

Вы же академики.А я по сравнению с вами Шариков.  пролеториат.

А вот хамить не надо.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Извените пожайлустас.Я написал правду о ваших пррограммах.Я внук Шарикова .И он будет светится постоянно как Красня звезда.Над красной площадью.PORTC = 1;Это позиция а может это весь порт будет светится?

8 пинов порта будут светится.

Нет простого решения если нужно сделать УСу или СВП полная программа не такая атмеги не пойдут.Там только АРМ ки пойдут Stm 32  например и то не начальные серии.

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

4 часа назад, Ivan Rusev сказал:

Нет простого решения если нужно сделать УСу или СВП полная программа не такая атмеги не пойдут.Там только АРМ ки пойдут Stm 32  например и то не начальные серии.

Не говорите ерунды: аналог СВП прекрасно можно сделать хоть на attiny25, никакого ARM там не нужно. И каналов можно сделать хоть 100500.

4 часа назад, Ivan Rusev сказал:

8 пинов порта будут светится.

Просимулируйте в протеусе. 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

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

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

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

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

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

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

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

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

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

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

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