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

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


tifaso

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

1 час назад, ARV сказал:

Ну... виноват. Косячок допустил. Но вот так 100% будет работать:

вы программист? а мой код работает почему не возьмёте.Вам топор не понравился tifaso.Мой код понятен что не устраивает.Сработают  каналы  при отжатии кнопок. 

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

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

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

почему не возьмёте

Потому, что ваш код ужасен.

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

Сработают  каналы  при отжатии кнопок

После того, как я исправил свой косячок, мой код отлично работает, не хуже вашего. И он прост и понятен.

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

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

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

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

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

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

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

студия выбивает ошибку в вашем коде?

и в протеусе  не работает.Хотя в железе нужно проверять.Нужно исправить ошибку сначало найти её потом исправить.

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

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

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

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

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

и в протеусе  не работает

Работает

Конкретно вот этот код:

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

uint8_t get_button(void){
	uint8_t tmp = ~PIND;
	_delay_ms(10);
	if(tmp != (uint8_t)~PIND)
		return 0;
	else
		return tmp;
}

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

	uint8_t tmp;
	uint8_t state = 1;

	while(1){
		PORTB = state; // включаем светодиоды

		tmp = get_button();
		if(tmp)
			state = tmp; // обновляем состояние
	}
}

Компилируется без ошибок:

Скрытый текст

22:02:38 **** Build of configuration Debug for project BULLSHIT ****
make all 
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -Wall -g2 -gdwarf-2 -Os -fpack-struct -fshort-enums -ffunction-sections -Og -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=16000000UL -MMD -MP -MF"main.d" -MT"main.o" -c -o "main.o" "../main.c"
Finished building: ../main.c
 
Building target: BULLSHIT.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,BULLSHIT.map -mmcu=atmega328p -o "BULLSHIT.elf"  ./main.o   
Finished building target: BULLSHIT.elf
 
Invoking: AVR Create Extended Listing
avr-objdump -h -S BULLSHIT.elf  >"BULLSHIT.lss"
Finished building: BULLSHIT.lss
 
Create Flash image (ihex format)
avr-objcopy -R .eeprom -R .fuse -R .lock -R .signature -O ihex BULLSHIT.elf  "BULLSHIT.hex"
Finished building: BULLSHIT.hex
 
Invoking: Print Size
avr-size --format=avr --mcu=atmega328p BULLSHIT.elf
AVR Memory Usage
----------------
Device: atmega328p

Program:     182 bytes (0.6% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)


Finished building: sizedummy
 

22:02:44 Build Finished (took 6s.51ms)

 

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

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

9 часов назад, ARV сказал:

Конкретно вот этот код:

если это имитация кнопок модуля СВП  , то код не рабочий,  в модуле кнопки работают по приоритету, у Вас в коде нажатие двух и более кнопок приведет к включению двух и более светодиодов или нет?

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

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

Или учится

Да. Это никогда не поздно.

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

у Вас в коде нажатие двух и более кнопок приведет к включению двух и более светодиодов или нет?

Да. Но как раз в этом зарыта собака "почему опрос кнопок в отдельной функции" - там легко сделать нужную проверку. Код демонстрационно-учебный, так что я не вижу оснований для его критики.

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

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

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

так это и не критика

Изначально я хотел показать, как следует делать по самому первому моему совету - с анализом кодов кнопок. Но потом поленился. Хотя и сейчас это можно сделать в порядке обучения. Меня ж критиковали за отсутствие switch - вот, можно и добавить :) 

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

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

Ну что ели одновременно нажмёшь две кнопки оба канала включаться ? Так не должно быть.Должно перейти на первый .Вот он  алгоритм свп и усу.Значит не доработано.Нужно дальше думать.Да век живи век учись.

Вы показали класс программиста.Спасибо.

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

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

Меня ж критиковали за отсутствие switch - вот, можно и добавить

с одной стороны правильно критиковали, в процессе разводки платы очень часто возникает ситуация невозможности последовательно организовать подключение к портам. наличие свитча + дефайнов переименования кнопок/ледов позволяет изменением пары строк упростить разводку платы.

с другой с оглядкой на учебность вполне себе код.

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

Только что, IMXO сказал:

с одной стороны правильно критиковали,

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

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

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

@ARV Записал код проверил на 8 меге куда собственно и делается прошивка. Вроде бы как работает при нажатии включает соответствующий светодиод, но не удерживает данное состояние при отпускании тут же гаснет.

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

Только что, tifaso сказал:

при отпускании тут же гаснет

Не может быть

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

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

@ARV Ну так что же я проверил на реальном железе.

Вот мой код:

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

uint8_t get_button(void)
{
	uint8_t tmp = ~PINB;
	_delay_ms(10);
	if(tmp != (uint8_t)~PINB)
	return 0;
	else
	return tmp;
}
int main(void)
{
	DDRB = 0b00000000;
	DDRD = 0b11111111;
	DDRC = 0b1111111;
	PORTB = 0b00011111;
	PORTD = 0b00000000;
	PORTC = 0b0000000;
	uint8_t tmp;
	uint8_t state = 1;
    while(1)
    {
              PORTC = state;
		tmp = get_button();
		if(tmp)
		state = tmp;
          }
}

У меня на порту B кнопки, а на порту С светодиоды индикации. Все основные нагрузки планируется разместить на порту D через транзисторные ключи и реле.

Или может я что то тут упустил?

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

8 минут назад, tifaso сказал:

Или может я что то тут упустил?

У вас не 8 кнопок? Тогда лишние биты надо маскировать внутри функции get_button();

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

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

Так в том то и дело что нет на переключатель выделены биты с 1 по 5. А нулевой бит выделен на кнопку включения. Она по идее должна включить переключатель извиняюсь конечно что забыл сразу это указать нужно было сразу в начале сказать как то просто из головы вылетело. Тоже нужно как то сделать. Кнопка включения должна включить переключатель и светодиод индикации включения. сам же переключатель при включении должен встать в первый бит по умолчанию. И как маскировать лишние биты?

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

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

И как маскировать лишние биты?

Мне кажется, вам нужно все-таки заняться изучением Си. Простейшая задача, на 99% уже решенная, вами не может быть доведена до победного конца... Просто копипастя чужой код вы никогда не научитесь ничего делать самостоятельно.

У вас же есть студия, в ней можно просимулировать исполнение программы, посмотреть, что происходит НЕ ТАК, как вам надо... Разобраться, что нужно изменить в коде, чтобы СТАЛО ТАК, как нужно... Кто сделает это за вас?!

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

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

Только что, IMXO сказал:

вы же 99 уже сделали

:) Вот этот процент и надо сделать самому. Потом 2, потом 3... постепенно нагрузку увеличивать надо.

Только что, tifaso сказал:

придётся тогда искать решения (схемы)

Вам прямо говорят: СДЕЛАЙТЕ САМИ, не ищите готовое! Не найдете все равно на 100% подходящее, снова на 1% споткнетесь и начнете страдать.

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

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

@ARV Да уже будет проще найти подходящую схему и собрать по ней чем вникать в тонкости программирования, а микросхему оставить в качестве коммутации и выполнения некоторых других задач..

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Вот что мне ответил продавец после предъявления претензий к мини камере: "Да, сэр, мы проверили ваше видео для инженера. Инженер предоставил инструмент, и мы отправим его вам. Пожалуйста, укажите свой адрес электронной почты." Что это означает? И как не попасться в ловушку?
    • Питание к этому усилителю у меня имеется, трансформатор с двойным питанием 27-0-27, на 300вт, выпрямитель стоит на самом усилителе. Корпус не нужен, т.к. он будет находится внутри сабвуфера, все регулировки - частота среза, уровень - находятся на плате, вход и выход так же соответственно.  У саба одна катушка. С двумя катушками я бы так и сделал. 
    • Постепенное зажигание светодиодов в одной цепи, потом переключение реле на другую цепь, постепенное зажигание светодиодов в другой цепи и переключение реле обратно на первую цепь. Вообще схема работает. Реле переключает цепи несколько раз, примерно 3-4 раза, если на разряженных конденсаторах. Но после очередного переключения на первую цепь светодиоды начинают моргать, реле перестает переключаться, а в цепи начинает скакать ток.
    • Указанные Вами частотники, насколько я помню, имеют встроенное аналоговое управление, в т.ч. с помощью потенциометра. Как его подключить показано в инструкции на частотник. Можно ли иметь дополнительно индикацию положения потенциометра? Да, можно. Например обычный мультиметр в режиме вольтметра Вам будет показывать напряжение на движке потенциометра. Вам это нужно?
    • Давайте так, не знаю на сколько это конкретно но я попробую.    1. Мне нужна, схема подключения ШИМ регулятора CCM5D (DC) 6-30 В 6А с дисплеем, к частотным преобразователям LG SV004IC5-1 и Schneider ATV12H037M2 для возможности регулировки скорости двигателя.    Или….  возможно, если я не правильно понимаю, и ШИМ регулятор для такого функционала не годится. (Так как мне сказали что его можно использовать только на двигателях постоянного тока и только напрямую не через преобразователь, в чем я тоже сомневаюсь) Подсказать как сделать так что бы добавить к потенциометру цифровой дисплей.  Так как в целом задача стоит, поставить цифровой дисплей на котором будет отображаться заданная скорость.    сразу отмечу что вариант покупки выносных пультов управления к частотникам рассматривали, очень дорого в целом, так как надо много, да и на наши частотники не нашлись 
    • Если я правильно понял условия задачи, то как-то так попробовал бы подступиться к решению. Но нюансы есть - с какой скоростью надо сбрасывать конденсаторы ==> как быстро нужно открывать/закрывать мосфеты. 
×
×
  • Создать...