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

Гирлянда на ATMEGA16 и С


tifaso

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

Решил собирать новогоднюю гирлянду и за основу взял микросхему ATMEGA16 прошивку пишу на си. Задумка хорошая вроде как даже получается, но есть одна вещь которую я так и не могу понять.

Вот в общем схема и код прошивки (код ещё не дописан).

197937728_2.thumb.JPG.0e94e562d90b9ee93185d6fe9fa9537d.JPG

Код прошивки:

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
volatile unsigned char power=0;
volatile unsigned char menu=0;

int main(void)
{
	DDRA = 0b11110000;
	DDRB = 0b00000000;
	DDRC = 0b11111111;
	DDRD = 0b11111111;
	PORTA = 0b00001111;
	PORTB = 0b11111111;
	PORTC = 0b00000000;
	PORTD = 0b10000000;
    while(1)
    {
        if (~PINB & (1<<0))
        {
			while(~PINB & (1<<0));
			if (PINC)
			{
				PORTD = 0b10000000;
				PORTC = 0b00000000;
				PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
				power=0;
			} 
			else
			{
				PORTD &= ~(1<<7);
				PORTC |= (1<<0);
				power=1;
			}
        }
		if (power==1)
		{
			if (~PINB & (1<<1))
			{
				PORTC |= (1<<1);
				PORTC &= ~((1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
				PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
				menu=1;
			}
			if (~PINB & (1<<2))
			{
				PORTC |= (1<<2);
				PORTC &= ~((1<<1)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
				PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));				
				menu=2;
			}
			if (~PINB & (1<<3))
			{
				PORTC |= (1<<3);
				PORTC &= ~((1<<1)|(1<<2)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
				PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));				
				menu=3;
			}
			if (~PINB & (1<<4))
			{
				PORTC |= (1<<4);
				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<5)|(1<<6)|(1<<7));
				PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));				
				menu=4;
			}
			if (~PINB & (1<<5))
			{
				PORTC |= (1<<5);
				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6)|(1<<7));
				PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));				
				menu=5;
			}
			if (~PINB & (1<<6))
			{
				PORTC |= (1<<6);
				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<7));
				PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));				
				menu=6;
			}
			if (~PINB & (1<<7))
			{
				PORTC |= (1<<7);
				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6));
				PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));				
				menu=7;
			}
			if (~PINA & (1<<0))
			{
				PORTA |= (1<<4);
				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
				PORTA &= ~((1<<5)|(1<<6)|(1<<7));				
				menu=8;
			}
			if (~PINA & (1<<1))
			{
				PORTA |= (1<<5);
				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
				PORTA &= ~((1<<4)|(1<<6)|(1<<7));				
				menu=9;
			}
			if (~PINA & (1<<2))
			{
				PORTA |= (1<<6);
				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
				PORTA &= ~((1<<4)|(1<<5)|(1<<7));				
				menu=10;
			}
			if (~PINA & (1<<3))
			{
				PORTA |= (1<<7);
				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
				PORTA &= ~((1<<4)|(1<<5)|(1<<6));				
				menu=11;
			}
			if (menu==1)
			{
				PORTD |= (1<<0);
				PORTD &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<1);
				PORTD &= ~((1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<2);
				PORTD &= ~((1<<0)|(1<<1)|(1<<3)|(1<<4)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<3);
				PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<4)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<4);
				PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<5);
				PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<6);
				PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5));
				_delay_ms(300);
			}
			if (menu==2)
			{
				PORTD |= (1<<0);
				_delay_ms(300);
				PORTD |= (1<<1);
				_delay_ms(300);
				PORTD |= (1<<2);
				_delay_ms(300);
				PORTD |= (1<<3);
				_delay_ms(300);
				PORTD |= (1<<4);
				_delay_ms(300);
				PORTD |= (1<<5);
				_delay_ms(300);
				PORTD |= (1<<6);
				_delay_ms(300);
				PORTD &= ~(1<<0);
				_delay_ms(300);
				PORTD &= ~(1<<1);
				_delay_ms(300);
				PORTD &= ~(1<<2);
				_delay_ms(300);
				PORTD &= ~(1<<3);
				_delay_ms(300);
				PORTD &= ~(1<<4);
				_delay_ms(300);
				PORTD &= ~(1<<5);
				_delay_ms(300);
				PORTD &= ~(1<<6);
			}
			if (menu==3)
			{
				PORTD |= ((1<<0)|(1<<6));
				_delay_ms(300);
				PORTD |= ((1<<1)|(1<<5));
				_delay_ms(300);
				PORTD |= ((1<<2)|(1<<4));
				_delay_ms(300);
				PORTD |= (1<<3);
				_delay_ms(300);
				PORTD &= ~((1<<0)|(1<<6));
				_delay_ms(300);
				PORTD &= ~((1<<1)|(1<<5));
				_delay_ms(300);
				PORTD &= ~((1<<2)|(1<<4));
				_delay_ms(300);
				PORTD &= ~(1<<3);
				_delay_ms(300);
			}
		}
    }
}

А в чём заключается проблема при подаче питания и не зависимо от каких либо нажатий кнопок на некоторые ножки микросхемы (ножки 24, 25, 27) прилетает +5V  там где впринцепи их не должно быть при запуске. Проверял мультиметром на плате всё в норме нигде не подкорачивает всё на своих местах да плюсовая дорожка там далеко.

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

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

Насчёт кода не знаю, но схема - жесть. Реле-то в ней нафига? Да ещё и питается всё это от одного источника без единого конденсатора даже.

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

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

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

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

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

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

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

@Dr. West По поводу кондёров на схеме как то не обозначил, но в реале на входе питания стоят на 0.1 uF и элекролит на 680uF. А реле поставил так как побоялся что будет слишком большая нагрузка на микросхему ведь туда планируется подключить по 20 светодиодов на каждый канал (вывод микросхемы) не знаю достаточно ли будет если оставить только транзисторные ключи. Кстати по поводу питания питается всё это от блока питания на 5V 2A.

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

Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

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

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

достаточно ли будет если оставить только транзисторные ключи

Достаточно. Только ключи нужно выбрать соответствующие (с учетом тока, потребляемого желаемым букетом светодиодов). С реле схема схема приобретает юмористические черты.

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Задача вывода МК - обеспечить базовый ток насыщения транзисторного ключа, а это доли - единицы мА. А сам ключ можно поставить какой угодно мощности, хоть на 100 Ампер.
Если, допустим, 20 светодиодов, по 20 мА, в сумме 0,4 Ампера. Такой ток влёгкую потянет любой транзистор средней мощности типа КТ815 и подобные. А чтобы уж совсем не грузить выходы МК, можно поставить ключи на составных транзисторах.
А если светодиодов в каждом канале помногу, то выгодней их запитать от более высокого напряжения, заодно сэкономив кучу резисторов.
С реле же только проблемы будут, и щёлканье постоянное - оно надо?

Двухтранзисторные биполярные ключи в схемах на микроконтроллере

Изменено пользователем Dr. West

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

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

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

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

3 часа назад, tifaso сказал:

при подаче питания и не зависимо от каких либо нажатий кнопок на некоторые ножки микросхемы (ножки 24, 25, 27) прилетает +5V  там где впринцепи их не должно быть при запуске.

Неоднократно мною было замечено, что на китайских атмегах активным должен быть "0", Если активная "1", то светодиод светит всегда. Т.е. светодиод анодом подключаем к питанию, а катодом к контроллеру и меняем прошивку. При чем все светодиоды, и не только их, а и транзисторные ключи тоже, т.е. меняем проводимость транзисторов.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

24 minutes ago, makcucm8 said:

Если активная "1", то светодиод светит всегда.

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

Quote

С реле схема схема приобретает юмористические черты.

Ну, если заменить контроллер на шаговый искатель, сочинить генаратор импульсов на электромашинном принципе, а вместо светодиодов воспользоваться какой-нибудь вакуумной индикацией (чуть светящиеся лампы накаливания начала прошлого века будут самое то), то получится брутальный агрегат в стим-панк стиле. :-D

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

@makcucm8 Ну так да я изначально в коде все светодиоды выставляю в ноль и только при нажатии кнопки или выполнения условия светодиод должен включится, но тут какая то таинственная загадка для меня с этим. И оно вообще не реагирует ни на что Там всё время сидит +5V.

@Dr. West Так как у меня уже всё собрано на чистовую и переделывать хотелось бы с минимальными затратами нашёл сейчас у себя транзисторы 2N4401 распиновка у них похожая да и по характеристикам помощнее BC547. Да и мою гирлянду должно потянуть. Поэтому я просто заменю транзисторы в ключах и уберу все реле.

@El-Shang Попробую проверить. Ну как подтянуть вывод к нулю изначально? Если вроде как в коде я это выставил, но оно не действует.

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

Потянет, хоть и на пределе. Базовые резисторы только придётся уменьшить раза в 3.
з.ы. Может, МК элементарно, битый. Сделайте тестовую прошивку, где ничего другого не делается, а МК только дрыгает ногами,  с интервалом, например 1 секунда.

Изменено пользователем Dr. West

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

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

@Dr. West И на какое сопротивление резисторы ставить? Если уменьшить раза в 3 я так понимаю на 330 ОМ будут в самый раз.

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

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

@tifaso, вчитался в Ваш сам первый пост. :-) Я полагаю, что Вам достаточно отключить в фьюзах JTAG. Ножки 24, 25, 26 и 27 как раз для него и выделены (линии TCK, TMS, TDO и TDI соответственно).

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

@El-Shang Попробую такой вариант применить.

В фьюзах есть только JTAGEN это оно? просто ничего больше похожего нету.

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

56 минут назад, El-Shang сказал:

Сомневаюсь, что такое возможно даже на "китайких" микросхемах.

Делал проект на атмеге 8, динамическая индикация с общим анодом, при определенных условиях должен засветиться светодиод, на выходе "1". Так вот когда он светится на индикаторах непонятно что, не работают анодные ключи, всегда открыты. Физически отключил светодиод, проверил выход контроллера, "1" присутствует, индикация нормальная. Подключаю все назад, опять тоже самое. Заменил в прошивке режим работы вывода на светодиод, активный стал "0", перевернул светодиод и подключил анод к питанию, все работает нормально.

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

11 минут назад, makcucm8 сказал:

Так вот когда он светится на индикаторах непонятно что, не работают анодные ключи, всегда открыты

Светодиод через резистор был включен?

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

16 minutes ago, makcucm8 said:

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

Ну я не ванга и без кода и схемы "определенные условия" представить не могу, увы. :-)

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

3 часа назад, Dr. West сказал:

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

А лучше на мосфетах

Для людей, которые пишут "мФ" вместо "мкФ", в аду приготовлен отдельный котёл. 1 мФ = 1000 мкФ.

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

8 часов назад, tifaso сказал:

DDRC = 0b11111111;

измени на DDRC=0b00000000;

8 часов назад, tifaso сказал:

if (~PINB & (1<<0))

проверка бита на ноль  if (~(PINB & (1<<0))) , а не  if (~PINB & (1<<0))

8 часов назад, tifaso сказал:

volatile unsigned char power=0;

volatile unsigned char menu=0;

зачем тут volatile?

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

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

А лучше на мосфетах

Мосфетов, да ещё низковольтных, у автора наверняка нет, а покупать он не любит, делает из того что есть.

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

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

1 час назад, Dr. West сказал:

Мосфетов, да ещё низковольтных

мог бы на материнках надергать .... коих у каждого мусорного бака найти можно ....

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

@El-Shang Спасибо при отключении  JTAGEN в фьюзах +5 вольт ушли и теперь эта часть работает как и должна.

@Dr. West Сделал всё так убрал реле, заменил транзисторы на 2N4401 и резисторы на 330 ом. Но вот в чём суть через ключи напруга не проходит. Промерял мультиметром в разных точках на выходах микросхемы напруга появляется как и положено 5 вольт, но после резистора остаётся всего лишь 0.7 вольта, а в коллекторе транзистора вообще по нолям.

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

Just now, tifaso said:

как и положено 5 вольт, но после резистора остаётся всего лишь 0.7 вольта, а в коллекторе транзистора вообще по нолям.

Так и должно быть, транзистор открыт. Нагрузку к коллектору присоединил? :)

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

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

Изменено пользователем Dr. West

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

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

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

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

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

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

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

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

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

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

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

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