динамическая индикация
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
ты пример приведи чтоб понятно было
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Сорри, поспешил с созданием темы
Дело в следующем, понадобилось мне както сделать индикацию на четырех семисигментных индикаторах. Дело то конечно не хитрое, но вот я подумал что задержку писать не стоит, зачем тратить время на пустые циклы и нашел вот такое решение, попытаюсь оъбяснить на словах, если будет не понятно выложу код (ейчас немогу не затем компом).
Как всем извесно для реализации динамической индикации необходимо использовать прерывание таймера, в данном случае это прерывание остается, для каждого индикатора пишется подпрограмма которая выводит в порт код для индикации и включает анод(катод) этого индикатора, при этом порт не обнуляется, а сигнал на нем висит пока не сработает прерывание и не перейдет на следующую подпрограмму, выходит что сементы светятся в промежутке между прерываниями, а прерывание по таймеру всеголиш по очереди переходит на одну из этих четырех подпрограмм
Дело в следующем, понадобилось мне както сделать индикацию на четырех семисигментных индикаторах. Дело то конечно не хитрое, но вот я подумал что задержку писать не стоит, зачем тратить время на пустые циклы и нашел вот такое решение, попытаюсь оъбяснить на словах, если будет не понятно выложу код (ейчас немогу не затем компом).
Как всем извесно для реализации динамической индикации необходимо использовать прерывание таймера, в данном случае это прерывание остается, для каждого индикатора пишется подпрограмма которая выводит в порт код для индикации и включает анод(катод) этого индикатора, при этом порт не обнуляется, а сигнал на нем висит пока не сработает прерывание и не перейдет на следующую подпрограмму, выходит что сементы светятся в промежутке между прерываниями, а прерывание по таймеру всеголиш по очереди переходит на одну из этих четырех подпрограмм
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
Mr.Moss, не шуми!
Вполне себе нормальная реализация, кстати, имеет право на жизнь. Наверное, даже сделаю так когда-нибудь
У меня иногда случается, что таймеров под динамику уже не хвататет, тогда просто пишу функцию типа "показывать такие-то цифры в течение ххх мс" и пользую ее вместо обычных delay.
WildCat, т.е. предлагается поставить транзистор в цепь общего катода (анода) индикатора? Причем не в ключевом режиме? При токе потребения порядка 0.5А греться будет достаточно сильно... Не очень хороший вариант.
А если в ключевом - получаем тот же ШИМ.
Вполне себе нормальная реализация, кстати, имеет право на жизнь. Наверное, даже сделаю так когда-нибудь
WildCat, т.е. предлагается поставить транзистор в цепь общего катода (анода) индикатора? Причем не в ключевом режиме? При токе потребения порядка 0.5А греться будет достаточно сильно... Не очень хороший вариант.
А если в ключевом - получаем тот же ШИМ.
Оптимизм х (Опыт + Знания) = const
- Spider
- Опытный кот
- Сообщения: 732
- Зарегистрирован: Чт дек 29, 2005 07:29:25
- Откуда: Омск
- Контактная информация:
И снова воскресим тему
Собрал я "табло" из 9ти 8ми сегментных индикаторов. Естественно всё динамически. Но вот беда. Яркость диодов упала, а упала видать в 9 раз по сравнению с обычным статическим свечением диода.
Ну думаю, щас как ток задеру у диодов - будут знать как выпендриваться тут. Взял да и уменьшил сопротивление, ограничивающее ток диодов, а яркость не изменилась. Тогда я давай было грешить на неспособность меги отдать ток, достаточный для свечения диодов, и перевесил диоды на транзисторы, последними уже управляет мега. И снова ничего. Как светились тускло, так и продолжают. Тут пришла мысль, что спалил я диоды и они "устали". Выпаял я один из них и подключил к БП, выставив 15мА, светится аж слепит.
Что же это? Не судьба или я что-то не так делаю?
ЗЫ. Частота мецания 100Hz.
Собрал я "табло" из 9ти 8ми сегментных индикаторов. Естественно всё динамически. Но вот беда. Яркость диодов упала, а упала видать в 9 раз по сравнению с обычным статическим свечением диода.
Ну думаю, щас как ток задеру у диодов - будут знать как выпендриваться тут. Взял да и уменьшил сопротивление, ограничивающее ток диодов, а яркость не изменилась. Тогда я давай было грешить на неспособность меги отдать ток, достаточный для свечения диодов, и перевесил диоды на транзисторы, последними уже управляет мега. И снова ничего. Как светились тускло, так и продолжают. Тут пришла мысль, что спалил я диоды и они "устали". Выпаял я один из них и подключил к БП, выставив 15мА, светится аж слепит.
Что же это? Не судьба или я что-то не так делаю?
ЗЫ. Частота мецания 100Hz.
- Spider
- Опытный кот
- Сообщения: 732
- Зарегистрирован: Чт дек 29, 2005 07:29:25
- Откуда: Омск
- Контактная информация:
Ну сам проект сильно велик, и я пока отлаживаю на макетке.
Макетка представляет собой 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;
}
проц запущен с кварцем 10MHz
Spider писал(а):Ну сам проект сильно велик, и я пока отлаживаю на макетке.
Макетка представляет собой 1 диод символизирующий собой как бы 1 разряд.
...
Ну и схема, а питание куда подается, лапы контроллера куда? Вас же просили привести реальнуюю. Пусть макетка, Вы нарисуйте как она подключена где питание, какое и т.п. А то Вы и свое и чужое время попусту тратите.
Теперь по делу. В код не вдавался, но как я понимаю вы просто включаете диод на некоторое время, судя по диаграмме на порту сигнал нормальный.
Теперь по схеме- зачем верхний транзистор? Если через него подается + напряжения питания и вы думаете что на диод оно все приходит, то вы ошибаетесь. Падение напряжения на верхнем транзисторе составит величину, равную напряжению завор-исток необходимому для открытия транзистора, т. е. от 2 В, возможно больше в зависимости от типа транзистора.