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

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


tifaso

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

@Электронщик Попробовал вставить твой скрипт в свой код учитывая все подсказки, но студия бьёт кучу ошибок.

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
uint8_t i=0;
void setup_interrupts() 
{
	EIMSK |=(1<<INT0);
	EICRA =(1<<ISC01) | (1<<ISC00);//по возрастанию, потому 10кОм на змелю, а кнопку на +питания
}
int main(void)
{
	DDRD = 0b00000000;
	DDRB = 0b11111111;
	PORTB = 0b11111111;
	_delay_ms(450);
	PORTB = 0b00000000;
	PORTD = (1<<1);
	setup_interrupts();
    while(1)
    {
	 if (!(PIND & (1<<1)))
	 {
		 PORTB = 0b11111111;
		 _delay_ms(500);
		 PORTB = 0b00000000;
		 _delay_ms(500);
	 }
	 else
	 {
		 PORTB = 0b00000000;
	 }		
	 if (!(PIND & (1<<2)))
	 {
       Switch(i)
        {
	     case 2:
	     i=0;// обнуляем
	     break;
	     case 1:
	     // включаем светик
	     PORTB = 0b00111110;
	     break;
	     case 0:
	     // выключаем светик
	     PORTB = 0b00000000;
	     break;
        }
	 }		
       
    }
  ISR(INT0_vect ) // вектор обработчик дополнительных прерываний
   {
	i++;
   }	
}

Весь этот код писался с учётом всех выводов и подсказок под эту схему.

836691067_.JPG.6ba08d07a36e5f346e5f4167c6f31994.JPG

Третью кнопку в коде пока не прописывал. Ну и четвертая кнопка для перезагрузки микросхемы если потребуется.

Вот вся распиновка выводов.

ATMEGA8.jpg.dae124519da9f3937e51c458b7ff1fca.jpg

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

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

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
uint8_t i=0;
void setup_interrupts() 
{
	EIMSK |=(1<<INT0);
	EICRA =(1<<ISC01) | (1<<ISC00);//по возрастанию, потому 10кОм на змелю, а кнопку на +питания
}
int main(void)
{

	DDRB = 0b11111111;
	PORTB = 0b11111111;
	_delay_ms(450);
	PORTB = 0b00000000;

	setup_interrupts();
    while(1)
    {
	
       Switch(i)
        {
	     case 2:
	     i=0;// обнуляем
	     break;
	     case 1:
	     // включаем светик
	     PORTB = 0b00111110;
	     break;
	     case 0:
	     // выключаем светик
	     PORTB = 0b00000000;
	     break;
        }
}  
}
  ISR(INT0_vect ) // вектор обработчик дополнительных прерываний
   {
	i++;
   }	

Так попробуй, ты скобки не там понаставлял, второе при прерывании порт можешь как вход не объявлять

И это что за бред?

	 if (!(PIND & (1<<1)))
	 {
		 PORTB = 0b11111111;
		 _delay_ms(500);
		 PORTB = 0b00000000;
		 _delay_ms(500);
	 }
	 else
	 {
		 PORTB = 0b00000000;
	 }		
	 if (!(PIND & (1<<2)))
	 {

 

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

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

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

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

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

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

Этот код тоже не заработал?

 

@tifaso  Может стоит разобраться что такие бит? порт? а потом к прерываниям переходить? а не пихать все подряд куда угодно? 

например почему вам писали что у вас кнопки мешают друг другу?

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

на первом курсе универа мы писали вообще просто словами алгоритмы.

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

 

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

39 минут назад, Электронщик сказал:

И это что за бред?


	 if (!(PIND & (1<<1)))
	 {
		 PORTB = 0b11111111;
		 _delay_ms(500);
		 PORTB = 0b00000000;
		 _delay_ms(500);
	 }
	 else
	 {
		 PORTB = 0b00000000;
	 }		
	 if (!(PIND & (1<<2)))
	 {

 

А как я по твоему должен определять какую кнопку нажимают ведь она там далеко не одна будет.

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

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

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

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

while(1)
    {
		// если нулевой бит сброшен - кнпока нажата
         if (!(PINB & 0b1))
         {
             // установим нужные биты на светодиоды
			 PORTD  |= 0b11111111;
             // ждем пол секнуды
			 _delay_ms(500);
             // сбросим нужные биты на светодиоды
			 PORTD &= ~0b11111111;
             // ждем пол секунды
			 _delay_ms(500);
         }
      
		 // если первый бит сброшен - кнопка нажата
         if (!(PINB & 0b10))
         {
           // джем 1 мс
	       _delay_ms(1);
           // проверяем, нажата еще кнопка?
           // чтобы убедится что кнопка нажата и дребезг прошел уже
           if (!(PINB & 0b10))
           {
             // ждем пока кнпока будет отпущена
             while(!(PINB & 0b10));
             // если нужные биты светодиодов были выставлены
             if (PIND & 0b11111111)
             { // сбросим их, у нас выключение
               PORTD &= ~0b11111111;
             }
             else
             { // иначе включим
               PORTD |= 0b11111111;
             }
           }
         }
	}

 

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

 

 

Ты в начале одно отстрой, а потом добавляй что хочешь

PORTB = 0b11111111; _delay_ms(500); PORTB = 0b00000000; _delay_ms(500); это вообще ты же 1секунду стоишь в этом куске, и почему нет задержки от дребезга в этом куске? Так же по схеме кнопки прицепленные к выводам 1 и 2, притяни резисторами 10кОм к + питания, а то они у тебя в воздухе

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

Н да видимо действительно прийдётся ставить обычные кнопки с фиксацией только это в этой ситуации очень не удобно. По тому как там достаточно не простая схема действий должна быть.

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

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

Н да видимо действительно прийдётся ставить обычные кнопки с фиксацией

если лень проверить код который я скинул и разобраться в нем, то лучше да, ставьте кнопки с фиксацией и лучше мк тоже убрать их схемы ибо он для этой цели будет уже не нужен  :D 

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

21 минуту назад, DrobyshevAlex сказал:

если лень проверить код который я скинул и разобраться в нем, то лучше да, ставьте кнопки с фиксацией и лучше мк тоже убрать их схемы ибо он для этой цели будет уже не нужен  :D 

Так этот код фиксированное положение кнопки не сохраняет после того как отпустил кнопку.

В общем попробую собрать такую конструкцию чтоб не парится с кодом и всё. Впринцепи должно получится нормально. А в микроконтролере останется только вся комутация действий этих кнопок. Тоесть частично кодом на меге8, а частично на радиодеталях так будет проще для меня и мне нужно то всего пару микросхем зашить в разные места. Из за этого думаю не стоит лопатить всё программирование микросхем.

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

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

Так этот код фиксированное положение кнопки не сохраняет после того как отпустил кнопку.

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

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

@DrobyshevAlex Тут не я обманываю, а код не рабочий или попросту не совместим с Атмел студио. Ай ладно уже решил что буду делать подругому на радиодеталях. Хотя бы это должно помочь и мне будет проще. Если всё получится можно будет достаточно хитрый переключатель собрать.

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

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

Тут не я обманываю, а код не рабочий или попросту не совместим с Атмел студио

Ок! Смотрим, прям копирую со страницы текст в пустой проект и запускаю.

Первая кнопка работает как и раньше, мигает если держать. Вторая переключает.

Что не так???

 

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

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

Ай ладно уже решил что буду делать подругому на радиодеталях

Сразу бы так-3 транзистора на 1 фикс.кнопку,а их 8 каналов.Итого:24 штуки.Хоть программировать не нужно.:D

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

Я кажется понял что не так. Вы хотите наверное чтобы кнопка механическая визуально оставалась нажатой? Прям в железе? Залипала. :D Другого объяснения я не вижу

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

  • 1 год спустя...

Поздравляю всех с новым годом!!!!! Дорогие форумчане пожалуйсто выручайте, нужны ваши знания в програмировании!!! Сетуация такая испортился микшерский пульт (behringer xenyx1002) точнее микроконтроллер Атмега8 который в схеме стоит на цифровом ревербераторе и управляем музыкальными эффектами!!!! Кароче вопрос такой кто сможет помочь запрограмировать новый контролер? 

V1000_DATASHEET.pdf

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

Запрограммировать (прошить) не проблема, проблема найти чем прошить. Файл прошивки на такую аппаратуру в свободном доступе врядли найдёте. Попробуйте на профильных сайтах запрашивать.

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

6 часов назад, 100482 сказал:

Запрограммировать (прошить) не проблема 

Usbasp есть у меня принцип как то понятен как это делается!!! саму прошивку как то написать надо загвоздка у меня в этом, я никргда не прошивал Атмеги тем более HEX файлы не писал!!! там я думаю нет проблем Атмега дисплей и энкодер что то тут примитивное!!! 

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

17 минут назад, nissan62 сказал:

тем более HEX файлы не писал!!! 

Не осознано вы поставили ТРИ восклицательных знака и это говорит о  полном отсутствии понятия "программировние". 

НЕХ файлы не пишутся, они являются результатом обработки программой-компилятором, текста программы.

Из за непонимания сути для вас

22 минуты назад, nissan62 сказал:

я думаю нет проблем

легко и просто, там же 

23 минуты назад, nissan62 сказал:

Атмега дисплей и энкодер что то тут примитивное!!! 

:lol2:. Ну тогда вперёд за дело.

Ну правда тут маленький нюансик. Это "примитивное" должно взаимодействовать с начинкой пульта и выполнять некие функции. 

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

28 минут назад, nissan62 сказал:

там я думаю нет проблем

В разделе РАБОТА Вы узнаете точно, есть ли там проблемы или нет.

Хорошо зафиксированный пациент в анестезии не нуждается

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

Вам же выше написали. Формулируете чёткое техническое задание и публикуете заказ в указанном разделе форума. Кто-нибудь, да возьмётся. 
Учить программированию микроконтроллёров "с нуля" вас тут вряд ли кто-то будет.

"Я не знаю какой там коэффициент, я просто паять умею. "

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Нарушена технология изготовления сердечника. Потише сделать можно только продав его другому радиодиолюбителю. Когда трансформатор окажется у него, вам его уже не будет слышно. 
    • https://benzpro.ru/forum/threads/tv-lg-lw575s-с-платами-eax64405501-0-eax64294002-1-шасси-ld12c-самопроизвольная-перезагрузка-если-телевизор-подключен-в-интернет.6266/
    • Совсем не по этой причине.  На то они и китайцы  Я говорил лишь за габаритный размер, а про это я вообще молчу.  Хотя если честные китайцы, то последнее время качество продукции довольно хорошее, и не только в радиоэлектронике.  
    • Занимаюсь машинами, мотоциклами, компьютерами. Машины и разбираю и собираю и дорабатываю, компы сейчас собираю на продажу, так же с доработками, раз вот пришла с алишки материнка с перебитыми дорожками от проца к оперативке, успешно ее починил, впаял жилки проводов, удалил лишний припой, залил место ремонта краской, высушил, протестировал, все гуд. Биосы редактировал, настраивал частоты, скорости кулеров на видеокартах для оптимальной работы. Усилитель Aiyima разобрал, там были ошметки припоя примерно по 0.5 - 1 мм, все протер спиртом, почистил, чипы 3116 были дико залиты термопастой, также почистил, нанес хорошую термуху, поставил радиатор обратно. А так кусочек припоя мог попасть куда нибудь и закоротить. Блок питания от него также разобрал, внутри был писец какой ржавый винт, заменил его, также транзиторы были без термопасты, открутил радиаторы и нанес ее. В общем не зря полез, устранил много косяков. https://iimg.su/s/01/yiKzMUcLJSNRkv3wqZui3olXTPwYMm5JrWU4gnwp.jpg https://iimg.su/s/01/cJZE90gNFw5CcLWHQKHSJrMwBWoFgsaahhisxQQD.jpg https://iimg.su/s/01/PAEBzQONtbnrGelcv0ZhovZw6pkTaDiepfytmRrD.jpg https://iimg.su/i/lfYHZ Сильное шипение в колонки, не зависит от уровня громкости, с двумя блоками питания одинаковое.  В Brzhifi кроме шипения есть еще какое то посвистывание. До этих усилков пользовался акустикой AVE - C160, там тоже присутствует шипение, но оно еле заметно, и на слух не давит. А тут если сидишь за компом, то по ушам бьет это ш-ш-ш-ш-ш. Если удастся его хоть чуть понизить, уже будет хорошо.
    • Где вы купили радиаторы, которые в коробочке сверху..?
    • Почему ? Ну дороговат, да.  Китайцы клепают как хотят. Покрытие может попасться такое, что еле паяется даже кислотой.
    • Можно его питать пониженным напряжением. Взять ещё один небольшой трансформатор 230 В со вторичкой вольт на 15-30. Первичку в сеть, а вторичку подключить к сети так, чтобы напряжение вычиталось. Это напряжение подать на имеющийся тороид.  Этот дополнительный трансформатор достаточно взять ватт на 20.
×
×
  • Создать...