реклама на сайте
подробности

 
 
> Мгновенно реагировать на нажатие кнопки. Attiny 2313, прерывания
aivs
сообщение Mar 8 2013, 20:12
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 114
Регистрация: 3-10-09
Пользователь №: 52 731



Учусь программировать под Attiny 2313, написал такую программку:
Если нажать на кнопку, то запускается цикл мигания 6 светодиодов, если в конце мигания шестого светодиода нажать кнопку, то мигание выключится.
Вот код для gcc:
Код
unsigned char LIGHT = 0;
while (1) {
  // Если свет не горит и нажата кнопку
  if (LIGHT == 0 && bit_is_clear(PIND,0)) {
    // Включить свет
    while (LIGHT == 0) {
        PORTB = 0b11111110;
        _delay_ms(200);
        PORTB = 0b11111101;
        _delay_ms(200);
        PORTB = 0b11111011;
        _delay_ms(200);
        PORTB = 0b11110111;
        _delay_ms(200);
        PORTB = 0b11101111;
        _delay_ms(200);
        PORTB = 0b11011111;
        _delay_ms(200);
        // Если нажата кнопка, то выключаем свет
        if (bit_is_clear(PIND,0)) {
            PORTB = 0b11111111;
            _delay_ms(200);
            LIGHT = 1;
        }
    }
  }
  // Если свет выключен и нажата кнопка, то включаем свет
  if (LIGHT == 1 && bit_is_clear(PIND,0)) {
    LIGHT = 0;
  }
}

Работает как я и планировал, но есть одна недоработка.

Как сделать так, чтобы нажав на кнопку в ЛЮБОЙ момент времени светодиоды остановились мигать (а не только в конце цикла мигания)? подскажите куда копать? если есть простой пример на Си буду рад его изучить.

Сообщение отредактировал aivs - Mar 8 2013, 20:14
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aivs
сообщение Mar 13 2013, 15:18
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 114
Регистрация: 3-10-09
Пользователь №: 52 731



Разобрался с fuse битами
По умолчанию настройка fuse-битов такова
CKDIV8 - 0 (установлен) - деление тактового сигнала на 8

CKSEL3 - 0 (установлен) - выбор источника тактового сигнала
CKSEL2 - 1 (не установлен) - выбор источника тактового сигнала
CKSEL2 - 0 (установлен) - выбор источника тактового сигнала
CKSEL0 - 0 (установлен) - выбор источника тактового сигнала

Полубайт CKSEL3...0 = 0100, это означает что МК настроен на встроенный RC-генератор 8МГц
fuse-бит CKDIV8 делит эти 8 Мгц на 8, получается что МК по умолчанию работает на частоте 1МГц

Снял fuse-бит CKDIV8 и у меня все заработало как нужно

Теперь мне нужно некоторое разъяснение
1) Директива #define F_CPU 8000000UL просто сообщает программе что МК работает на частоте 8 МГц, а не задает ?
2) Внутренний RC генератор может быть настроен на выработку сигналов 8 и 4 Мгц, использую делитель на 8 (CKDIV8 fuse-бит) можно добиться частоты 1 МГц и 500КГц,
А какие частоты можно получить от внешнего кварца?
Так понимаю задать частоту нужно будет fuse-битами CKSEL3...0

Сообщение отредактировал aivs - Mar 13 2013, 19:20
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- aivs   Мгновенно реагировать на нажатие кнопки. Attiny 2313   Mar 8 2013, 20:12
- - mempfis_   Цитата(aivs @ Mar 8 2013, 23:12) Как сдел...   Mar 8 2013, 20:27
- - kovigor   Цитата(aivs @ Mar 8 2013, 23:12) Как сдел...   Mar 9 2013, 04:24
|- - mempfis_   Цитата(kovigor @ Mar 9 2013, 07:24) По-на...   Mar 9 2013, 08:19
- - sigmaN   Могу предложить рабочий кусок кода с простеньким п...   Mar 9 2013, 11:13
- - aivs   Выкладывайте, изучу, спасибо за помощь   Mar 9 2013, 17:19
- - ARV   примитивные решения. надо многозадачную ОС для реш...   Mar 9 2013, 17:44
|- - kovigor   Цитата(ARV @ Mar 9 2013, 20:44) примитивн...   Mar 9 2013, 18:04
|- - ILYAUL   Цитата(ARV @ Mar 9 2013, 21:44) примитивн...   Mar 9 2013, 22:37
- - sigmaN   Цитатаримитивные решения. надо многозадачную ОС дл...   Mar 9 2013, 18:01
- - sigmaN   Вообще нет, надо отечественный четырехядерник ста...   Mar 9 2013, 22:56
|- - toweroff   Цитата(sigmaN @ Mar 10 2013, 02:56) Вообщ...   Mar 10 2013, 06:33
||- - kolobok0   Цитата(toweroff @ Mar 10 2013, 10:33) ......   Mar 11 2013, 10:37
|- - PheeL   Цитата(sigmaN @ Mar 10 2013, 02:56) Вообщ...   Mar 11 2013, 13:43
- - sigmaN   Ну это само собой! RT патч только не забыть)))...   Mar 11 2013, 18:47
|- - Herz   Цитата(sigmaN @ Mar 11 2013, 20:47) P.S. ...   Mar 11 2013, 19:50
- - aivs   Решил пока освоить прерывания INT0 и INT1 для реше...   Mar 13 2013, 12:19
|- - kovigor   Цитата(aivs @ Mar 13 2013, 15:19) Что не ...   Mar 13 2013, 14:14
- - alexeyv   1) Да. Некоторые функции, в том числе и _delay_ms ...   Mar 14 2013, 02:26
- - ILYAUL   ((SYSCLK/(2*USARTSPEED))-1)= ( (F_CPU+((__pr)*8L))...   Mar 14 2013, 06:57
- - ARV   вообще говоря, есть в комплекте WinAVR готовый хид...   Mar 14 2013, 08:51
- - ILYAUL   А на хер он сдался , если так проще )   Mar 14 2013, 09:18
|- - ARV   Цитата(ILYAUL @ Mar 14 2013, 13:18) А на ...   Mar 14 2013, 17:38
- - alexeyv   Цитатавообще говоря, есть в комплекте WinAVR готов...   Mar 14 2013, 10:00
- - ILYAUL   Цитата...чтобы думать о важном, а не второстепенны...   Mar 14 2013, 18:54
- - aivs   Вопрос про прерывания. Решил для отслеживания нажа...   Mar 16 2013, 10:43
|- - Xenia   Цитата(aivs @ Mar 16 2013, 14:43) Два воп...   Mar 16 2013, 18:01
- - ILYAUL   ЦитатаХотя именно поэтому в программировании на ас...   Mar 16 2013, 18:38


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016