динамическая индикация
IMHO использовать delay для таких вещей, не позволительная растрата мипсов. Если КОТ поторопится, то моя статья как раз о этом на Си должна появиться на сайте.
- Реклама
- Сообщения: 68
- Зарегистрирован: Вт июл 24, 2007 23:34:23
Не хочу объяснять уже разжёваное, но надо
Читай статьи и обучалку.
- Сообщения: 68
- Зарегистрирован: Вт июл 24, 2007 23:34:23
ты пример приведи чтоб понятно было
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Реклама
Mr.Moss, ну дык и просвети всех, чего пустозвонством-то заниматься?
Вон, Spider уже статью написал, а ты чего межуешься?
Вон, Spider уже статью написал, а ты чего межуешься?
Оптимизм х (Опыт + Знания) = const
- Сообщения: 68
- Зарегистрирован: Вт июл 24, 2007 23:34:23
Сорри, поспешил с созданием темы
Дело в следующем, понадобилось мне както сделать индикацию на четырех семисигментных индикаторах. Дело то конечно не хитрое, но вот я подумал что задержку писать не стоит, зачем тратить время на пустые циклы и нашел вот такое решение, попытаюсь оъбяснить на словах, если будет не понятно выложу код (ейчас немогу не затем компом).
Как всем извесно для реализации динамической индикации необходимо использовать прерывание таймера, в данном случае это прерывание остается, для каждого индикатора пишется подпрограмма которая выводит в порт код для индикации и включает анод(катод) этого индикатора, при этом порт не обнуляется, а сигнал на нем висит пока не сработает прерывание и не перейдет на следующую подпрограмму, выходит что сементы светятся в промежутке между прерываниями, а прерывание по таймеру всеголиш по очереди переходит на одну из этих четырех подпрограмм
Дело в следующем, понадобилось мне както сделать индикацию на четырех семисигментных индикаторах. Дело то конечно не хитрое, но вот я подумал что задержку писать не стоит, зачем тратить время на пустые циклы и нашел вот такое решение, попытаюсь оъбяснить на словах, если будет не понятно выложу код (ейчас немогу не затем компом).
Как всем извесно для реализации динамической индикации необходимо использовать прерывание таймера, в данном случае это прерывание остается, для каждого индикатора пишется подпрограмма которая выводит в порт код для индикации и включает анод(катод) этого индикатора, при этом порт не обнуляется, а сигнал на нем висит пока не сработает прерывание и не перейдет на следующую подпрограмму, выходит что сементы светятся в промежутке между прерываниями, а прерывание по таймеру всеголиш по очереди переходит на одну из этих четырех подпрограмм
- Сообщения: 68
- Зарегистрирован: Вт июл 24, 2007 23:34:23
- Сообщения: 68
- Зарегистрирован: Вт июл 24, 2007 23:34:23
- Сообщения: 68
- Зарегистрирован: Вт июл 24, 2007 23:34:23
У меня в часах стоит ВЛИ - так я решил проблему просто - поставил фоторезистор и транз в цепь накала. То же самое можно впринципе сделать и с светодиодными индикаторами, ШИМ здесь - ненужное нагромождение
Mr.Moss, не шуми! 
Вполне себе нормальная реализация, кстати, имеет право на жизнь. Наверное, даже сделаю так когда-нибудь
У меня иногда случается, что таймеров под динамику уже не хвататет, тогда просто пишу функцию типа "показывать такие-то цифры в течение ххх мс" и пользую ее вместо обычных delay.
WildCat, т.е. предлагается поставить транзистор в цепь общего катода (анода) индикатора? Причем не в ключевом режиме? При токе потребения порядка 0.5А греться будет достаточно сильно... Не очень хороший вариант.
А если в ключевом - получаем тот же ШИМ.
Вполне себе нормальная реализация, кстати, имеет право на жизнь. Наверное, даже сделаю так когда-нибудь
WildCat, т.е. предлагается поставить транзистор в цепь общего катода (анода) индикатора? Причем не в ключевом режиме? При токе потребения порядка 0.5А греться будет достаточно сильно... Не очень хороший вариант.
А если в ключевом - получаем тот же ШИМ.
Оптимизм х (Опыт + Знания) = const
- Сообщения: 3
- Зарегистрирован: Чт сен 21, 2006 14:27:35
- Сообщения: 68
- Зарегистрирован: Вт июл 24, 2007 23:34:23
Mr.Moss, не обижайтесь, это я так, к слову...
RexeR, мысль интересная. В принципе, я можно то же самое сделать и на 74HC595
RexeR, мысль интересная. В принципе, я можно то же самое сделать и на 74HC595
Оптимизм х (Опыт + Знания) = const
И снова воскресим тему 
Собрал я "табло" из 9ти 8ми сегментных индикаторов. Естественно всё динамически. Но вот беда. Яркость диодов упала, а упала видать в 9 раз по сравнению с обычным статическим свечением диода.
Ну думаю, щас как ток задеру у диодов - будут знать как выпендриваться тут. Взял да и уменьшил сопротивление, ограничивающее ток диодов, а яркость не изменилась. Тогда я давай было грешить на неспособность меги отдать ток, достаточный для свечения диодов, и перевесил диоды на транзисторы, последними уже управляет мега. И снова ничего. Как светились тускло, так и продолжают. Тут пришла мысль, что спалил я диоды и они "устали". Выпаял я один из них и подключил к БП, выставив 15мА, светится аж слепит.
Что же это? Не судьба или я что-то не так делаю?
ЗЫ. Частота мецания 100Hz.
Собрал я "табло" из 9ти 8ми сегментных индикаторов. Естественно всё динамически. Но вот беда. Яркость диодов упала, а упала видать в 9 раз по сравнению с обычным статическим свечением диода.
Ну думаю, щас как ток задеру у диодов - будут знать как выпендриваться тут. Взял да и уменьшил сопротивление, ограничивающее ток диодов, а яркость не изменилась. Тогда я давай было грешить на неспособность меги отдать ток, достаточный для свечения диодов, и перевесил диоды на транзисторы, последними уже управляет мега. И снова ничего. Как светились тускло, так и продолжают. Тут пришла мысль, что спалил я диоды и они "устали". Выпаял я один из них и подключил к БП, выставив 15мА, светится аж слепит.
Что же это? Не судьба или я что-то не так делаю?
ЗЫ. Частота мецания 100Hz.
- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
Ну сам проект сильно велик, и я пока отлаживаю на макетке.
Макетка представляет собой 1 диод символизирующий собой как бы 1 разряд.
проц запущен с кварцем 10MHz
Макетка представляет собой 1 диод символизирующий собой как бы 1 разряд.
Код: Выделить всё
#include <avr>
#include <avr>
ISR(SIG_OUTPUT_COMPARE1A)
{
static uint16_t pwm_cnt;
OCR1A += 0x0163; //1Hz
pwm_cnt++;
if (pwm_cnt>=225) {
pwm_cnt=0;
PORTD |= _BV(PD4);
} else
if (pwm_cnt>=25) {
PORTD &= ~_BV(PD4);
}
}
void timer1_start(void){
OCR1A = 0x0163; //22.5kHz
TCNT1 = 0;
TIFR |= _BV(OCF1A);
TIMSK |= _BV(OCIE1A);
TCCR1B = _BV(CS10);
}
int main(void) {
PORTB = 0;
DDRB = 0;
PORTC = 0;
DDRC = 0;
PORTD=_BV(PD4);
DDRD=_BV(PD4);
TCCR1B = 0;
timer1_start();
sei();
while(1) {
}
return 0;
}
- Вложения
-
- LED.png
- Макетка для отладки
- (1.9 КБ) 359 скачиваний
-
- osc.PNG
- Вот так вот диод шимится
- (14.48 КБ) 497 скачиваний
- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
Ну и схема, а питание куда подается, лапы контроллера куда? Вас же просили привести реальнуюю. Пусть макетка, Вы нарисуйте как она подключена где питание, какое и т.п. А то Вы и свое и чужое время попусту тратите.Spider писал(а):Ну сам проект сильно велик, и я пока отлаживаю на макетке.
Макетка представляет собой 1 диод символизирующий собой как бы 1 разряд.
...
Теперь по делу. В код не вдавался, но как я понимаю вы просто включаете диод на некоторое время, судя по диаграмме на порту сигнал нормальный.
Теперь по схеме- зачем верхний транзистор? Если через него подается + напряжения питания и вы думаете что на диод оно все приходит, то вы ошибаетесь. Падение напряжения на верхнем транзисторе составит величину, равную напряжению завор-исток необходимому для открытия транзистора, т. е. от 2 В, возможно больше в зависимости от типа транзистора.


