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

Управление яркостью светодиода двумя кнопками на Atmega8

02.06.2014, 17:52. Просмотров 2315. Ответов 4
Метки нет (Все метки)

задача была такая но проверить сейчас не на чем может кто посмотреть и сказать правильно я написал или нет
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 <avr/io.h>
#include <stdlib.h>
#define  BitIsSet(reg, bit) ((reg & (1<<bit)) !=0)
#define  BitIsClear(reg, bit) ((reg & (1<<bit)) ==0)
int main(void)
{   DDRD=0;
        DDRC=0b00100000;
        PORTC=0b00100000;
        PORTD=0b00011000;
        int i=0;
        int y=50;
        int fl=0;
        int f=0;
    while(1)
    {
        for(i=0; i<100; i++)
        {
            if(i<y)PORTC=0b00100000;
            else {PORTC=0;}
        }
        
        if(i==1000)if(BitIsClear(PORTD,3)& y<90){if(fl==0) y=y+10; fl=1;}
        if(BitIsSet(PIND,3)) fl=0;
        
        
        if(i==1000)if(BitIsClear(PIND,4)& y>10) {if(f==1) y=y-10; f=1;}
            if(BitIsSet(PIND,4)) f=0;
            i++;
            if(i==1001) i=0;
        //TODO:: Please write your application code 
    }
}
0
Миниатюры
Управление яркостью светодиода двумя кнопками на Atmega8  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2014, 17:52
Ответы с готовыми решениями:

ATMega8. Управление миганием светодиода
Здравствуйте, извините за глупый вопрос решил собрать простую схему на proteus так проблема...

Разработка МП системы, управляющей уровнем напряжения яркостью свечения светодиода
Изменяя положение ручки регулятора напряжения переменным резистором, подключенным к входу АЦП...

Atmega8 - плавное разгорание/затухание светодиода
Всем привет! Как же давно я не писала прошивку, а под рукой сейчас по этому вопросу нет примеров....

Управление яркостью лампочки
Здравствуйте. Есть контроллер, который через оптопару и симистор будет управлять яркостью обычной...

BAM. Управление яркостью светодиодов.
Подкиньте, пожалуйста идей, как лучше сделать. Хочу чтобы параллельно обрабатывалось какое-то...

4
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
02.06.2014, 18:41 2
...вы же в тырнете, загрузите любой симулятор и проверьте.

p.s.: текст задания и условие задачи на картинке переписать ручками в теме.
1
dronzzz
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 17
02.06.2014, 19:13  [ТС] 3
К выводу 5 порта С микроконтроллера подключен светодиод. Две тактовые
кнопки подключены к выводам 3,4 порта D микроконтроллера.
Написать программу для микроконтроллера AtMega8, реализующую следующим
При включении питания светодиод включен на яркость 50%. При нажатии на правою кнопку его яркость увеличивается на 10%. При нажатии на левую - уменьшается
на 10%. Удержание кнопки не должно приводить к повтору её действия. При достижении максимума яркости (100%) нажатие на правую кнопку не приводит к действию
при достижении минимума яркости (0%) нажатие на левую кнопку не приводит к действию.
Устранить «дребезг контактов» кнопок.
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
03.06.2014, 10:04 4
Для удаления дребезга кнопку надо опрашивать несколько раз например каждые 20 mS и только когда значение перестанет изменяться сформировать сигнал кнопка нажата.
0
dronzzz
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 17
04.06.2014, 00:08  [ТС] 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
#include <avr/io.h>
#include <avr/delay.h>
#include <stdlib.h>
#define BitIsSet(reg,bit) ((reg&(1<<bit)) !=0)
#define BitIsClear(reg,bit) ((reg&(1<<bit)) ==0)
int main(void){
DDRD=0;
DDRC=0b00100000;
PORTD=0b00011000;
PORTC=0b00100000;
int i;
int y=50;
int f1=0;
int f2=0;
while(1)
{
    for(i=0; i<100; i++)
    {
        if(i<y) PORTC=0b00100000;
    else{PORTC=0;}
}
 
if(BitIsClear(PIND,3) & y<=90) {if (f1==0) y=y+10; f1 =1;}
if(BitIsSet (PIND,3)) f1=0;
if(BitIsClear(PIND,4)& y>=10) {if (f2==0) y=y-10; f2=1;}
if(BitIsSet(PIND,4)) f2=0;
}}
ps прадо не понел куда делся дребезг
0
04.06.2014, 00:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2014, 00:08

Не совпадает частота мигания светодиода в симуляторе Proteus и реальном устройстве (Atmega8)
Привет. я начинающий поэтому не прикалывайтесь. вот чё за беда у меня. повторил видеоурок кобзара...

Управление яркостью через триммер и АЦП
Суть задания-используя переменный резистор стенда(подключенный к ацп) управлять яркостью...

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


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

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

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