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

Программирование кнопок в 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 у вас будет мешать в данном случае если брать ваш начальный код.

 

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

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

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

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

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

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


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

 

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

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

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 пользователей онлайн

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

  • Сообщения

    • Cкорее всего, при 31,5 В на выходе драйвер не выдаст 300 мА.  Хотя, раз заявлено входное от 100 В, то при 230 В может что-то и получится. Но это уже за заявленными пределами работы.  Можно подключить проволочный резистор 100 Ом и померить напряжение, но лучше использовать как заявлено: в диапазоне 12-20 В.  
    • @MisterAnderson , напряжение на выходе светодиодного драйвера зависит от нагрузки, и определяется оно напряжением на светодиодах, а не самим драйвером. Светодиоды имеют характеристику близкую к стабилитрону, напряжение на них от тока зависит мало. Белые светодиоды имеют это напряжение примерно 3...3,4 В. Четыре последовательно включённых - примерно 12...14 В. На подключение таких "трёхвольтовых" белых светодиодов и расчитан ваш драйвер. Драйвер напряжением не управляет, есть только ограничение по максимальному, больше которого он выдать не может. Драйвер светодиодов стабилизирует ток. Ваш драйвер стабилизирует его на уровне 0,3 А. И выдать больше 20 В при этом не может. Измеренные вами 31,5 В на холостом ходу - это напряжение его внутреннего питания. Под нагрузкой 0,3 А напряжение на его выходе тут же "просядет", выше 20 В не поднимется. Мощность на одном трёхвольтовом 300-миллиамперном светодиоде будет (примерно, для светодиодов точность никогда особо не обеспечивают) 0,3 А * 3,3 В = 1 Вт. Трёхвольтовый белый светодиод на ток 300 мА - это и есть одноваттный светодиод. На четырёх будет 4 ватта. Следующие по напряжению в линейке белых осветительных светодиодов - шестивольтовые. У них в одном корпусе последовательно соединённые два светодиодных кристалла. Четыре таких светодиода, включённых последовательно, ваш драйвер не потянет, потому что им нужно минимум 6*4=24 В, а ваш драйвер может выдать не больше 20. Впрочем, можно бы было поставить вместо четырёх трёхвольтовых четыре шестивольтовых на 150 мА, две группы параллельно по два последовательно, но вряд ли справитесь с переделкой платы под светодиоды. Поэтому этот вариант вам и не предлагали. Проще, дешевле и с наименьшими затратами собственного времени, без переделки драйвера, платы и т.п., с которой вы точно не справитесь, поставить четыре одноваттных трёхвольтовых, на которые ваш драйвер расчитан. Тем более, что купить их - проблем нет. Именно этот оптимальнейший совет вам и дали. Всё вам правильно уже много людей много раз разными словами рассказали. Что вас ещё смущает?
    • Предусилители-корректоры на полевых транзисторах. Радио №9,   №10/2010.  А.Гурский.
    • Тоже самое в подсветках фирменных телеках даже 10 летней давности. Ток можно уменьшить на треть без потери качества легко. Потребитель должен потреблять и всё тут.
    • Естественно после 7 вольт то. Или аккум сам по себе хлам и садит в себя или ибп. Тут вариантов не много.
    • Попробуйте зарядить, а потом погонять ее  в полный цикл несколько раз. Это если акум нормальный а у ТС 100% давно не нормальный.
×
×
  • Создать...