LinTai: качественные китайские корпуса и каркасы

Модификация мигалки на микроконтроллере Atmega8

Страница 1 из 2
is an unknown quantity at this point
 
Регистрация: 05.06.2015
Сообщений: 6
Репутация: 0
 
15.06.2019 21:02 #1
Здравствуйте!
Делаю свой первый проект Светодиодная мигалка на микроконтроллере ATmega8. Проект компилировал в Atmel Studio.
Вроде все заработало как нужно, но хочу теперь добавить светодиоды - 4 штуки и повесить их к примеру на порт B.
Не совсем понимаю что нужно написать в код, как я понимаю сначала нудно настроить порт B на выход :
Код:
DDRB= 0xff; /* все выводы порта D сконфигурировать как выходы */

А вот как быть дальше не совсем понятно(( Подскажите пожалуйста.
Я могу просто скопировать часто кода где есть порт D и заменить на B. К примеру рядом с DDRD &= ~(1<<j); дописать DDRB &= ~(1<<j); и так далее?
Оценка
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,596
Репутация: 1058
1,204 77
480 0
 
15.06.2019 21:22 #2
Можете, почему нет ?

Только рискну дать маленький совет. Для начинающего гораздо лучше подойдет CodeVision.

И еще, там, на схеме, линии AGND и AVCC МК никуда не подключены, а надо бы подпаять к ним землю и питание ...
Оценка
Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW. Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного.
is an unknown quantity at this point
 
Регистрация: 05.06.2015
Сообщений: 6
Репутация: 0
 
15.06.2019 22:08 #3
В этом случае если скопировать, наверное она будут мигать одновременно, а мне нужно чтобы последовательно, т.е. сначала промигали 4 светодиода порта D а потом начали также мигать по очереди мигать светодиоды порта B.
Оценка
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,596
Репутация: 1058
1,204 77
480 0
 
15.06.2019 22:19 #4
Тогда придется взять уже имеющийся блок для PORTD, скопировать его в отдельный файл, внести в него соотв. изменения, вставить после уже имеющегося в программе блока для PORTD, а затем ввести между блоками требуемую задержку.
Или я задачи не понял ?
Оценка
Эксперт
 
Аватар для DmitriyVDN
 
Регистрация: 08.11.2009
Сообщений: 2,308
Репутация: 635
615 131
34 9
 
15.06.2019 23:12 #5
Цитата:
Сообщение от Mega2560
А вот как быть дальше не совсем понятно(( Подскажите пожалуйста.
Я могу просто скопировать часто кода где есть порт D и заменить на B. К примеру рядом с DDRD &= ~(1<<j); дописать DDRB &= ~(1<<j); и так далее?
дам ответ с конца, да можете и на выводах портаБ получите эффект дублирующий эффект на портД , то же самое можно получить поставив по два светодиода на выходы портаД , результат будет такой же. понятно?
неговоря уже о том что конструкция вида (1<<j) не что иное как говнокод граничащий с идиотизмом как по размеру получаемого машинного кода так и производительности МК и обращение к регистру DDR не изменяет состояние порта ,а переключает порт на вход или выход , что для мигалки очередная тупость.
чел который это написал скорее всего сам не понимал че он делает.
что с этим делать :
1 создать переменную буфер в которой формируется текущий эффект
2 после необходимых действий с переменой ее значение передается на выходы портов
пример: для 16 светодиодов на по 8 на портах Д и Б

Код:
unsigned int buffer;
//......
//......
//**** эффект бегущий огонь вперед ***
// код вставляем в case
if(j==0) buffer=(1<<0); // устанавливаем начальное состояние
PORTB=buffer&0xff; // младшие 8бит буфера загружаем в портБ
PORTD=buffer>>8; // старшие 8бит буфера загружаем в портД
buffer<<=1; //сдвиг влево
for(i=0;i<d;i++)_delay_us(50);
 j++; 
j&=0x0F; 

//**** эффект бегущий огонь назад ***
// тоже самое отличие всего в двух командах (помечены !!!)
// код вставляем в case
if(j==0) buffer=(1<<15); // устанавливаем начальное состояние бит15=1 !!!
PORTB=buffer&0xff; // младшие 8бит буфера загружаем в портБ
PORTD=buffer>>8; // старшие 8бит буфера загружаем в портД
buffer>>=1;сдвиг вправо !!!
for(i=0;i<d;i++)_delay_us(50);
 j++; 
j&=0x0F;
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
16.06.2019 21:51 #6
А можно создать переменную с каким то названием, у которой каждый бит будет соответствовать заранее назначенному порту МК ? И потом гонять сдвигами в любые стороны , обнулять, устанавливать , инвертировать , экспотировать .. ну вобщем делать всё что хочешь .. ?
Оценка
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,596
Репутация: 1058
1,204 77
480 0
 
16.06.2019 22:05 #7
Можно, конечно же. Например:

Код:
unsigned char var_portc;

var_portc = 0x55;

PORTC = var_portc;
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
16.06.2019 22:09 #8
Цитата:
Сообщение от kovigor
Можно, конечно же. Например:

Код:
unsigned char var_portc;

var_portc = 0x55;

PORTC = var_portc;
Не .... Порты разные и биты разные ... К примеру B3,c1,d5,d2,c6,b0,b1,b2
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
16.06.2019 22:23 #9
Когда делаешь печатную плату под какой то проект , то не всегда получается использовать один порт, приходится тусовать порты ... И вот в этом случае сдвиги одного порта не проканывают .
Оценка
Эксперт
 
Аватар для DmitriyVDN
 
Регистрация: 08.11.2009
Сообщений: 2,308
Репутация: 635
615 131
34 9
 
16.06.2019 23:21 #10
можно.
Оценка
Ответ
Страница 1 из 2
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Оценка этой теме
Оценка этой теме:
Метки
atmega8, мигалка на atmega8, мигалка на мк
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 23:57.
Обратная связь РадиоЛоцман Вверх