Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
03.03.2012, 23:46
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
Но я как бы хотел, что бы лишнее падение ныпряжение переходило именно на полевик а точней его нагрев не применяя сопротивления.
MisterDi я с тобой вполне согласен и опыт это бесценное качество каждого из нас.
Мир сейчас стал совсем жестоким и напрямую связанный с деньгами. И многие люди считают, что если он поделиться опытом, то кто то за счет его опыта сколотит себе состояние, я с этим не согласен, и сам если нужно помогаю людям.
Но мир не без добрых людей и я всех благодарю за помощь, над реализацией моего шедевра !!!!!!!!!
Про сторожевой таймер я читал и по моему он просто выставлялся в фузах МК или я ошибаюсь ? Я опять повторюсь что с МК знаком месяц и наверное для сторожевого тайменя существует какое либо прерывание но с этим я думаю в дальнейшем разобраться!
Буду использовать питание 5в так как сам МК на 5 да и лампы чуть ниже 5в так 5в мне с головой.
|
|
|
|
03.03.2012, 23:50
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
Но я только сейчас вспомнил что МК не может на выходе дать меньше чем 5в и пинцип шим заключается в скорости открытия этой 1 или 0 но в любом случае на выходе будет 5в или 0в, это я как то пропустил
|
|
|
|
03.03.2012, 23:53
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: И снова ШИМ
Сообщение от SAHA_T
|
Но я как бы хотел, что бы лишнее падение ныпряжение переходило именно на полевик а точней его нагрев не применяя сопротивления.
|
Ик ... мосфет в ШИМ работает ключом , а не как вы думаете . Падение напряжения в открытом состоянии крайне мало .
И все таки погадаю.
Это подсветка приборной панели ?
И уже готовая ?
Что мешает яркие светодиоды с рассеивателем поставить ?
Или отрезки светодиодной ленты ?
И рулить ими ШИМ через ключи ?
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 03.03.2012 в 23:57.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
04.03.2012, 00:12
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
Лады расскажу секрет!
Решил родителям сделать подарок.
Они стоят на рынке и я хочу сделать электронного табло *Добро подаловать !* только с готовыми буквами буквы уже сделал и накидал диоды. Доды соединены параллельно. Каждая буква имеет разное количество светодиодов т.е как я писал ранее и эти фразы были непонятны многим на каждую букву мне нужно ставить определенное сопротивление в зависимости от тока потребления т.е ток для каждого светодиода я брал примерно 10-15мл т.е 40 светодиодов в 1 букве это 600мл и сопротивление примерно 8ом
Некоторые буквы состояли всего ил 10 светодиодов т.е там сопротивление нужно по больше до 18 ом.
И заодно хотел сделать что бы эти буквы по очереди зажигались и гасли в случайном порядке но это мелочи но также я хотел сделать что бы эти буквы зажигались плавно и гасли плавно.
Вот и поэтому я подумал что Шим можно применить для 1 буквы но как же применить шим для 15 букв.
И это просто подарок для родителей, за вес что они мне дали!!!!!!!!!
Но я хотел что бы это осталось секретом
Теперь хотел бы выслушать ваше мнение как мне это лучше реализовать!!!
Еще раз спасибо всем людям которые отозвались !
Сейчас я понял что баластные сопротивления придется все равно ставить как не крути.
В моей ситуации как мне лучше сделать ?
|
|
|
|
04.03.2012, 00:18
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: И снова ШИМ
Ёёёёёёёё . Ну нельзя было сразу все расписать ?
1. каждый диод один фиг через резистор токо_ограничивающий .
2. Делайте ШИМ софтовый или BAM , что я дал или Стас.
3. Управляя ШИМ(BAM) по таблице эффектов , в ней учтете как и яркость групп ( для букв) так и ваши световые эффекты .
И я так понял - 15 ШИМ , один на букву ? А восклицательный знак ? Итого 16 .
Без помощи месяц писать будете ...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 04.03.2012 в 00:24.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо dosikus за это сообщение:
|
|
|
04.03.2012, 00:28
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: И снова ШИМ
Короче - таблица яркостей : 16 байт Х на количество световых эффектов.
256 градаций яркости . ‹- И то слишком много.
Продумывайте скорость смены эффектов . От этого будет зависит размер таблицы.
Хотя можно и не жестко забивать эффекты , а рассчитывать их по ходу .
Гы ... Я счас подобным занимаюсь . Но на PIC.
Ни чего там страшного нет . ШИМ софтовый однозначно. Частота ШИМ ~ 100 ГЦ, период 10 мс.
Этот период делим на желаемое число градаций , получаем период прерывания.
В прерывании по таймеру выводим ШИМ из буфера сразу на два порта . В основном цикле через промежутки равные скорости световых эффектов кидаем данные в буфер...
С BAM немного сложней с перекодировкой в буфер , зато меньше долбить таймеру....
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 04.03.2012 в 00:43.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
04.03.2012, 00:35
|
|
Частый гость
Регистрация: 04.10.2007
Адрес: Запорожье
Сообщений: 43
Сказал спасибо: 8
Сказали Спасибо 14 раз(а) в 13 сообщении(ях)
|
Re: И снова ШИМ
Фуух.. Наконец-то. Совершенно согласен с уважаемым dosikus по всем пунктам, особенно с п.1. Быстрее, наверное, будет наваять ШИМ. Где-то у меня в закромах есть программка на 18 каналов, если хотите, поищу. Хотя ВАМ, конечно, интересней, но головоморочней (недавно делал на нем проект, поэтому еще свежо )
|
|
|
Сказали "Спасибо" leartis
|
|
|
04.03.2012, 00:48
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: И снова ШИМ
Я сейчас много раз прочитал то что вы написали *Частота ШИМ ~ 100 ГЦ, период 10 мс.Этот период делим на желаемое число градаций , получаем период прерывания.
В прерывании по таймеру выводим ШИМ из буфера сразу на два порта . В основном цикле через промежутки равные скорости световых эффектов кидаем данные в буфер...*
Но я повторюсь что с МК знаком очень мало и на примере было бы как то проще
давайте я скину пример для того что бы разобрать его на запчасти
Прежде всего нужно инициализировать таймер:
void init_timer()
{
TCCR1A = (0 ‹‹ WGM10) | (0 ‹‹ WGM11);
TCCR1B = (0 ‹‹ CS12) | (1 ‹‹ CS11) | (1 ‹‹ CS10) | (1 ‹‹ WGM12) | (0 ‹‹ WGM13);
OCR1A = 128;
TIMSK |= _BV(OCIE1A);
sei();
}
Обработчик таймера должен выглядеть примерно так:
static volatile uint8_t arr_value = 128,
led_value = 0,
led_value_bit = 0;
ISR(TIMER1_COMPA_vect)
{
// изменение задержки
OCR1A = (uint16_t) arr_value;
arr_value = arr_value / 2;
// проверяем первый бит яркости
if (led_value & 0x80)
LED_PORT &= ~LED_BIT; // 0 - выкл диод
else
LED_PORT |= LED_BIT; // 1 - вкл диод
led_value ‹‹= 1; // сдвиг значения яркости на бит влево
led_value_bit++; // запоминаем текущий бит
// если посмотрели все 8 битов, то сбрасываемся и берем значение яркости заново
if (led_value_bit › 7) {
led_value = led_brightness;
led_value_bit = 0;
arr_value = 128;
}
}
А теперь основная программа
#include ‹avr/io.h›
#include ‹avr/delay.h›
#include ‹avr/interrupt.h›
#include ‹inttypes.h›
#define LED_PORT PORTB
#define LED_DDR DDRB
#define LED_BIT (1‹‹PB4)
#define LED_GREEN (1‹‹PB3)
void main()
{
LED_DDR |= LED_BIT | LED_GREEN;
init_timer();
while (1) {
_delay_ms(20);
LED_PORT ^= LED_GREEN; // моргаю зеленым. так, для красоты.
led_brightness = 1;
led_value = led_brightness; // делаем копию для прерывания
/*
//медленно изменяем яркость туда-сюда
if (led_direction › 0) { led_brightness++; } else { led_brightness--; }
if (led_brightness == 255) led_direction = 0;
if (led_brightness == 0) led_direction = 1;
*/
}
return 0;
}
leartis мне очень интересно взглянуть на твой проект но мне еще интересней разобраться самому и так как ты недавно это делал я буду благодарен если ты мне поможешь в данной задаче
|
|
|
|
04.03.2012, 00:52
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: И снова ШИМ
Код:
|
static unsigned char Counter ;
static unsigned char Data = 0;
PWM_PORT = Data;
if((Counter++)›=PWM_MAX)Counter=0;
Data = 0;
if (Counter ‹ PWM_val[0]) Data |= 0x01;
if (Counter ‹ PWM_val[1]) Data |= 0x02;
if (Counter ‹ PWM_val[2]) Data |= 0x04;
if (Counter ‹ PWM_val[3]) Data |= 0x08;
if (Counter ‹ PWM_val[4]) Data |= 0x10;
if (Counter ‹ PWM_val[5]) Data |= 0x20;
if (Counter ‹ PWM_val[6]) Data |= 0x40;
if (Counter ‹ PWM_val[7]) Data |= 0x80; |
Код исполняемый в прерывании . Пока для одного порта .
Counter - число градаций .
Причем если число градаций степень двойки , можно юзать такой счетчик :
Например число градаций 128 - 0b10000000.
Код:
|
#define PWM_MAX 0x7F // 0b01111111
Counter++;
Counter &= PWM_MAX; |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 04.03.2012 в 01:01.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:13.
|
|