Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
sobaka123
0 / 0 / 0
Регистрация: 26.11.2015
Сообщений: 2
1

Последовательное зажигание светодиодов

26.11.2015, 06:37. Просмотров 816. Ответов 7
Метки нет (Все метки)

Собственно задание: при включении МК светодиоды не горят, через 2 с загораются 1-й, затем 2-й,...,8-й. Затем все гаснут и по новой. В голову пришел такой вариант:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <mega16.h>
#include <delay.h>
 
void main(void)
{
DDRB = 0xff; // Порт A выход
PORTB = 0; // Лог. 0 на выходе
 
while (1){ 
 
delay_ms(200);
    PORTB.0 = 0x01;
    delay_ms(200);
    PORTB.1 = 0x01;
    delay_ms(200);
    PORTB.2 = 0x01;
    delay_ms(200);
    PORTB.3 = 0x01;
    delay_ms(200);
    PORTB.4 = 0x01;
    delay_ms(200);
    PORTB.5 = 0x01;
    delay_ms(200);
    PORTB.6 = 0x01;
    delay_ms(200);
    PORTB.7 = 0x01;
    delay_ms(400);
    PORTB = 0b0000000;
    }
 
 
}
Все вообщем-то работает, но с маленьким недостатком, при включении все светодиоды загораются, а потом последовательно гаснут. Как сделать, чтобы было наоборот(сначала погашены, а потом загорались?)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2015, 06:37
Ответы с готовыми решениями:

Последовательное зажигание светодиодов по кнопке (ATtiny2313, Cи)
Здравствуйте.Есть такая проблема.Написал код для подпрограммы последовательного зажигания...

Последовательное зажигание светодиодов по кнопке (ATmega8515, ASM)
Добрый день. Требуется помощь для написания программы на ассемблере под AVR ATmega8515...

Зажигание светодиодов AT90S2313
Доброго времени суток. На AVR только начинающий Вот написал программу для циклического зажигания...

Зажигание полос светодиодов на мк AT90S8515
Здравствуйте! Задача такова:написать и отладить программу на ассемблер обрабатывающую прерывание...

Последовательное плавное управление яркостью светодиодов
Нужно написать программку на Atmega48 в CodevisionAVR Используя PORTD 0 1 2 С начало загорается...

7
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
26.11.2015, 08:28 2
Лучший ответ Сообщение было отмечено sobaka123 как решение

Решение

Седьмую строчку исправте PORTB = 255; // Лог. 1 на выходе
1
ValeryS
Модератор
7476 / 5661 / 723
Регистрация: 14.02.2011
Сообщений: 19,358
Завершенные тесты: 1
26.11.2015, 11:00 3
Цитата Сообщение от Витальич Посмотреть сообщение
Седьмую строчку исправте PORTB = 255; // Лог. 1 на выходе
судя по программе светодиоды подключены на землю, соответственно 0 гасит 1 зажигает
а судя по описанию проблеммы
Цитата Сообщение от sobaka123 Посмотреть сообщение
при включении все светодиоды загораются, а потом последовательно гаснут.
наоборот
вопрос TC как включены светодиоды?

Не по теме:

вот для этого мы и просим схемы

0
pyzhman
795 / 488 / 67
Регистрация: 15.05.2012
Сообщений: 2,770
26.11.2015, 11:25 4
1 в порте гасит светодиод. Отсюда следует, что светодиоды подключены анодом к питанию, а катодом к порту. Стало быть вместо 0х01 (а правильно было бы писать 1) нужно прописать 0, а при инициализации не 0хFF, а 0х00.
1
sobaka123
0 / 0 / 0
Регистрация: 26.11.2015
Сообщений: 2
26.11.2015, 12:25  [ТС] 5
Спасибо всем за ответы, вот так в итоге выглядит код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <mega16.h>
#include <delay.h>
 
void main(void)
{
DDRB = 0xff; // Порт B выход
PORTB = 255; // Лог. 1 на выходе
 
while (1){ 
 
delay_ms(200);
    PORTB.0 = 0x00;
    delay_ms(200);
    PORTB.1 = 0x00;
    delay_ms(200);
    PORTB.2 = 0x00;
    delay_ms(200);
    PORTB.3 = 0x00;
    delay_ms(200);
    PORTB.4 = 0x00;
    delay_ms(200);
    PORTB.5 = 0x00;
    delay_ms(200);
    PORTB.6 = 0x00;
    delay_ms(200);
    PORTB.7 = 0x00;
    delay_ms(400);
    PORTB = 0b11111111;
    }
 }
может кому еще пригодиться)
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
26.11.2015, 12:43 6
а у меня короче
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <mega16.h>
#include <delay.h>
unsigned char a;
 
void main(void)
{
DDRB = 0xff; // Порт B выход
PORTB = 255; // Лог. 1 на выхо
 
while(1)
{
a = 0b11111110;
 
for(unsigned char i = 1; i < 8; i++)
{
 PORTB = a;
 delay_ms(200);
 a = a << 1;
}
delay_ms(400);
}
}
0
pyzhman
795 / 488 / 67
Регистрация: 15.05.2012
Сообщений: 2,770
26.11.2015, 12:52 7
Цитата Сообщение от sobaka123 Посмотреть сообщение
при включении МК светодиоды не горят
Не, они действительно не горят. 5мс.

Добавлено через 31 секунду

Не по теме:

Ага, вот такой вот зануда-педантист.

0
ValeryS
Модератор
7476 / 5661 / 723
Регистрация: 14.02.2011
Сообщений: 19,358
Завершенные тесты: 1
26.11.2015, 12:58 8
Цитата Сообщение от Витальич Посмотреть сообщение
а у меня короче
а вот правильней ли?
Цитата Сообщение от Витальич Посмотреть сообщение
PORTB = a;
*delay_ms(200);
*a = a << 1;
насколько понял имеем бегущую тень
a будет равно
00000001
00000010
00000100
.....
а нужно
11111111
11111110
11111100
11111000
...........
может быть вот так?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <mega16.h>
#include <delay.h>
unsigned char a;
 
void main(void)
{
DDRB = 0xff; // Порт B выход
 
while(1)
a =255;//0xFF // 0b11111111;
{
for(unsigned char i = 0; i < 8; i++)
{
 PORTB = a;
 delay_ms(200);
 a = a << 1;
}
delay_ms(400);
}
}
}
или вот так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <mega16.h>
#include <delay.h>
unsigned char a;
 
void main(void)
{
DDRB = 0xff; // Порт B выход
 
while(1)
 
{
for(unsigned char i = 0xFF; i ; i*=2)
{
 PORTB = i;
 delay_ms(200);
 
}
delay_ms(400);
}
}
}
1
26.11.2015, 12:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2015, 12:58

Последовательное гашение светодиодов на окружности с интервалом
Помогите пожалуйста! Разработать программу, осуществляющую последовательное гашение светодиодов на...

7 бегущих светодиодов из 8
Дали такую задачу: 7 бегущих светодиодов туда-сюда по линейке из 8 светодиодов. Пока пытаюсь...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru