Подсветка дисплея на ATtiny13 (как сделать)
01.02.2015, 02:52
|
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Сообщение от omercury
|
|
А что мешает сделать из него же System Tick ?
|
И что это даст? Типа круто? Те же яйца, только Фаберже.
(Дрожите, адэпты! Сейчас упомяну страшное слово, STM!)
Если делать типа по крутому (почти хадварно), берём полукопеечный STM8S003, один таймер тупо под PWM, на вход другого таймера тупо вешаем кнопку (подтяжку можно внутреннюю, фильтр антидребезга присутствует). По одному прерыванию рулим таймером PWM, по другому сваливаемся в слип. В майне инит и пустой цикл.
|
|
|
|
01.02.2015, 03:49
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Сообщение от prosto_andriy
|
|
так и не понял
|
Выше по ссылке и алгоритм и даже код.
Сообщение от STM32F0
|
|
И что это даст? Типа круто? Те же яйца, только Фаберже.
|
В данном случае, кроме равномерности опроса кнопки ничего не даст.
Но, научившись однажды, в дальнейшем вопрос как можно управлять несколькими времязависимыми процессами имея всего один таймер уже не возникнет.
|
|
|
|
12.02.2015, 20:05
|
|
|
Гражданин KAZUS.RUN
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Всем доброго времени суток
На один таймер, можно навесить кучу счетчиков. Нужно просто задаться отрезками длительности, установить прерывание по переполнению на заданный отрезок (подогнать легко, если при выходе из прерывания записать какое-то число в TCNTn, чтобы отсчет начинался с него. И объявить переменные таймеров в оперативе, если не много, то можно использовать свободные регистры. И в прерывании прибавлять 1 во все счетчики таймеров. А где-то в программе обнуляем регистр нужного таймера и во время отсчета сравниваем с нужным значением. Вот и все.
|
|
|
|
28.04.2015, 03:18
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Хоть тема и давнишняя...
А можно вообще без таймеров и прерываний:
|
PHP код:
|
#include ‹io.h›
#include ‹delay.h›
#define BUTTON 0b00000010
unsigned char PWM[] = {20,38,71,135,254};
unsigned char b = 0;
unsigned char i = 0;
unsigned int t = 0;
void main(void)
{
DDRB = 0b00000001;
PORTB = 0b00000010;
// Timer Period: 2,048 ms
// Mode: Fast PWM top=0xFF
// OC0A output: Non-Inverted PWM
TCCR0A = (1‹‹COM0A1) | (1‹‹WGM01) | (1‹‹WGM00);
TCCR0B = (1‹‹CS01) | (1‹‹CS00);
TCNT0 = 0x00;
OCR0A = 0xFF;
OCR0B = 0x00;
TIMSK0 = 0;
ACSR = (1‹‹ACD);
begin:
if((PINB & BUTTON) == 0) {
if(b == 0) {
OCR0A = PWM[i];
i++;
if(i › 4) i = 0;
}
if(b == 19) {
OCR0A = 0xFF;
i = 0;
}
if(b ‹ 20) b++;
t = 0;
}
else b = 0;
if(t › 9000) {
OCR0A = 0xFF;
i = 0;
}
else t++;
delay_ms(100);
goto begin;
}
|
Вернее, таймер используется только для генерации ШИМ.
Последний раз редактировалось Godzilla82; 28.04.2015 в 03:20.
|
|
|
|
28.04.2015, 10:37
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Подсветка дисплея на ATtiny13 (как сделать)
Сообщение от Godzilla82
|
Хоть тема и давнишняя...
А можно вообще без таймеров и прерываний:
...
Вернее, таймер используется только для генерации ШИМ.
|
Можно, но если таймер всё равно используется, отчего бы его не использовать и для генерации интервалов.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:45.
|
|