Муфты электромонтажные от производителя Fucon

Модификация мигалки на микроконтроллере 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); и так далее?
Оценка
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,623
Репутация: 1070
1,216 82
480 0
 
15.06.2019 21:22 #2
Можете, почему нет ?

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

И еще, там, на схеме, линии AGND и AVCC МК никуда не подключены, а надо бы подпаять к ним землю и питание ...
Оценка
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,623
Репутация: 1070
1,216 82
480 0
 
15.06.2019 22:19 #4
Тогда придется взять уже имеющийся блок для PORTD, скопировать его в отдельный файл, внести в него соотв. изменения, вставить после уже имеющегося в программе блока для PORTD, а затем ввести между блоками требуемую задержку.
Или я задачи не понял ?
Оценка
Эксперт
 
Аватар для DmitriyVDN
 
Регистрация: 08.11.2009
Сообщений: 2,309
Репутация: 636
616 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,623
Репутация: 1070
1,216 82
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,309
Репутация: 636
616 131
34 9
 
16.06.2019 23:21 #10
можно.
Оценка
Ответ
Страница 1 из 2
Метки
atmega8, мигалка на atmega8, мигалка на мк
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

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