Шим+ светодиод [решено]
Шим+ светодиод [решено]
Решение
Здравствуйте!
Я можно сказать, плохо рублю в практике, хотя активно учу теорию. Вот хочу реализовать интересную вещь, но все упирается в отсутствие знаний.
Итак, это должен быть светодиод, пусьсирующий, тоест плавное затухает, плавно зажигается. Он весит где то на высоте пол метра и должен хорошо стетить на пол(суперяркий?) Единственная проблема, это питание для него. Максимально, 2 пальчиковые.
Как мне видится решение этой проблемы.
1. Светодиод больше 5 кД.
2. Емкие батарейки, либо аккумуляторы по 2500 мА.
3. Самое сложное, контроллер с шим. Который будет заставлять светодиод пульсировать.
Вот тут то и помогите, пожалуйста. Какой контроллер взять, как управлять шимом? Как это реализовать.
Буду благодарен.
Здравствуйте!
Я можно сказать, плохо рублю в практике, хотя активно учу теорию. Вот хочу реализовать интересную вещь, но все упирается в отсутствие знаний.
Итак, это должен быть светодиод, пусьсирующий, тоест плавное затухает, плавно зажигается. Он весит где то на высоте пол метра и должен хорошо стетить на пол(суперяркий?) Единственная проблема, это питание для него. Максимально, 2 пальчиковые.
Как мне видится решение этой проблемы.
1. Светодиод больше 5 кД.
2. Емкие батарейки, либо аккумуляторы по 2500 мА.
3. Самое сложное, контроллер с шим. Который будет заставлять светодиод пульсировать.
Вот тут то и помогите, пожалуйста. Какой контроллер взять, как управлять шимом? Как это реализовать.
Буду благодарен.
Последний раз редактировалось Ekzi Вт мар 24, 2009 22:41:16, всего редактировалось 2 раза.
- Реклама
- NiTr0
- Друг Кота
- Сообщения: 3051
- Зарегистрирован: Пт авг 10, 2007 12:49:55
- Откуда: kr.ua
- Контактная информация:
ATMega8 (если габариты - 28 лап - устраивают, если нет - какую-то ATtiny, по цене - они где-то на уровне, в моем городе на радиорынке по $1.5). Алгоритм примитивный 
Светодиод через транзюк вешается на выход ШИМ. ШИМ - аппаратный. В прерывании от таймера2 (он же ШИМ) - менять значение OCR0 в большую/меньшую сторону на единицу согласно флагу направления счета (в каком-то регистре завести) вплоть до переполнения/достижения 0, после чего - менять флаг направления счета...
Светодиод через транзюк вешается на выход ШИМ. ШИМ - аппаратный. В прерывании от таймера2 (он же ШИМ) - менять значение OCR0 в большую/меньшую сторону на единицу согласно флагу направления счета (в каком-то регистре завести) вплоть до переполнения/достижения 0, после чего - менять флаг направления счета...
Последний раз редактировалось NiTr0 Пн сен 22, 2008 21:15:02, всего редактировалось 1 раз.
ШИМ на AVR автономная. Настраивается очень просто, потребуется всего-лишь заполнить некоторые биты в нужных регитрах. Ну и надо немного разобраться почитав принцип ШИМ и узнать с какими регистрами работать.Ekzi писал(а):NiTr0 писал(а):Вот алгоритм для меня и загадка)) На с++ пишу без проблем, а где этот ШИМ на микрухе и как прописать цикл с изменением его я без понятий.
- Реклама
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Не на всех. Про работу с аппаратным ШИМ я сделал задачу 8 в домашней страничке. А програмный ШИМ в задаче 13.KIP писал(а):Ekzi писал(а): ШИМ на AVR автономная.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
-
pirotehnick
- Потрогал лапой паяльник
- Сообщения: 327
- Зарегистрирован: Пт фев 08, 2008 13:46:03
- Откуда: Воронеж
- Контактная информация:
Здесь посмотриEkzi писал(а):где этот ШИМ на микрухе и как прописать цикл с изменением его я без понятий. Потому и прошу помощи))
http://www.pcports.ru/articles/avr3.php
На долгое время отложил решение этого вопроса, но сейчас снова стало интересно, а как же, все таки, оно должно было работать. У меня attiny13
Код беру из http://arv.radioliga.com/index.php?opti ... &Itemid=44
Кто-нибудь подскажет, как исправить код, чтобы значение шим плавно, но достаточно быстро изменялось в цикле с 255 до 0 и назад.
Код беру из http://arv.radioliga.com/index.php?opti ... &Itemid=44
Кто-нибудь подскажет, как исправить код, чтобы значение шим плавно, но достаточно быстро изменялось в цикле с 255 до 0 и назад.
Посмотрите "Микроконтроллеры AVR для начинающих" и другие книги в библиотеке книг для скачивания и чтения и сами сможете понимать и менять код как вам надо.Ekzi писал(а):как исправить код, чтобы значение шим плавно, но достаточно быстро изменялось в цикле с 255 до 0 и назад.
ВОЗМОЖНО вот так будет работать 1 ШИМ
Код: Выделить всё
вверху проги,
// в CVAVR так: #include <delay>
#include <util> // библиотеки пауз
// там где переменный объявляются
char pwm_val = 255;
char pwm_rastet = 0;
// изменить цикл for (;;) вот так:
for (;;){
if(pwm_rastet){ // если ШИМ должен расти
pwm_val ++; // увеличить ШИМ
if (pwm_val==255) // если ШИМ достиг 255
pwm_rastet = 0; // его надо будет уменьшать
}
else{ // если ШИМ должен уменьшаться
pwm_val --; // уменьшить ШИМ
if (!pwm_val) // если ШИМ достиг 0
pwm_rastet = 1; // его надо будет увеличивать
}
OCR0A = pwm_val; // вывести вычесленное значение ШИМ
// в CVAVR так delay_us(100);
// пауза определяет как часто будет меняться величина ШИМ
_delay_us(100); // Пауза 100 МикроСек.
}Спасибо, попытался посильно исправить ошибки. ide - avr studio
Сейчас светодиод тускленько горит и все
Сейчас светодиод тускленько горит и все
Код: Выделить всё
#include <util>
#include <avr>
//#include <util> // библиотеки пауз
// там где переменный объявляются
char pwm_val = 255;
char pwm_rastet = 0;
// изменить цикл for (;;) вот так:
int __attribute__((naked)) main (void) {
DDRB = (1<<PB0); // выход ШИМ
for (;;){
if(pwm_rastet){ // если ШИМ должен расти
pwm_val ++; // увеличить ШИМ
if (pwm_val==255) // если ШИМ достиг 255
pwm_rastet = 0; // его надо будет уменьшать
}
else{ // если ШИМ должен уменьшаться
pwm_val --; // уменьшить ШИМ
if (!pwm_val) // если ШИМ достиг 0
pwm_rastet = 1; // его надо будет увеличивать
}
OCR0A = pwm_val; // вывести вычесленное значение ШИМ
// пауза определяет как часто будет меняться величина ШИМ
_delay_us(100); // Пауза 100 МикроСек.
}
}- бгкот
- Мучитель микросхем
- Сообщения: 450
- Зарегистрирован: Пт фев 20, 2009 21:45:04
- Откуда: Болгария
- Контактная информация:
Вот как выглядит решение задачки на пик-бейсике:
Код: Выделить всё
; любой PIC 12,16
; переменные:
j VAR BYTE
led VAR PortB.0 ; вывод управления светодиодом
; константы:
slow CON 16 ; определяет скорость изменения
; вот и програмка:
OUTPUT led ; вывод определяется как выход
WHILE 1 ; безконечный цикл
led = ~led ; переключение в противоположное состояние
PAUSEUS (127 + SIN j) * slow ; пауза в микросекундах
led = ~led ; переключение в противоположное состояние
PAUSEUS (127 - SIN j) * slow ; пауза в микросекундах
j = j + 1
WEND
что кстати, лучьше смотрится, чем по линейному.
Вот, получилось- все работает. Привожу кривокод. Может, кто еще что подскажет по нему, или может, он поможет кому-нибудь
Код: Выделить всё
#include <avr>
#include <util>
char pwm_val = 255;
char pwm_rastet = 0;
// прерывание по переполнению таймера
ISR(TIM0_OVF_vect){}
int __attribute__((naked)) main (void) {
DDRB = (1<<PB0); // выход ШИМ
// настройка таймера
TCCR0A = 0b10110011; // Fast-PWM, выходы А и В в противофазе
TCCR0B = 0b00000001; // без предделителя
// настройка прерываний
TIMSK0 = (1<<TOIE0); // по переполнению таймера
sei (); // разрешаем глобально
// главный цикл
for (;;){if(pwm_rastet){ // если ШИМ должен расти
pwm_val ++; // увеличить ШИМ
if (pwm_val==255) // если ШИМ достиг 255
pwm_rastet = 0; // его надо будет уменьшать
}
else{ // если ШИМ должен уменьшаться
pwm_val --; // уменьшить ШИМ
if (!pwm_val) // если ШИМ достиг 0
pwm_rastet = 1; // его надо будет увеличивать
}
OCR0A = pwm_val; // вывести вычесленное значение ШИМ
// пауза определяет как часто будет меняться величина ШИМ
_delay_us(1000); // Пауза 100 МикроСек.
}
}
Re: Шим+ светодиод [решено]
Попытался скомпилировать сиё смотри код Ekzi [ Вт мар 24, 2009 22:28:03 ]
из под IAR 5.4 , не получилось:
Fatal Error[Pe005]: could not open source file "avr" E:\CBB\sreda programm\lib for stop\MK\psw led3\main.cpp 1
Error while running C/C++ Compiler
цитата:
На долгое время отложил решение этого вопроса, но сейчас снова стало интересно, а как же, все таки, оно должно было работать. У меня attiny13
Код беру из http://arv.radioliga.com/index.php?opti ... &Itemid=44
Кто-нибудь подскажет, как исправить код, чтобы значение шим плавно, но достаточно быстро изменялось в цикле с 255 до 0 и назад.
Меняю библиотеку "avr"на "ioavr" под attiny13, не помогает
...подскажите плиз что там "внутри"??, перебирать все подряд сил уже нет.
...утешает другая цитата:
Вот, получилось- все работает. Привожу кривокод. Может, кто еще что подскажет по нему, или может, он поможет кому-нибудь
Идея старая но очень хочется: сделать для габаритов шим, а stop на прямую в обход МК на транзистор ...
можно конечно и на 555 таймере юзать "габарит" но как-то не современно, контроллер сможет и вспышки и всё что угодно.
из под IAR 5.4 , не получилось:
Fatal Error[Pe005]: could not open source file "avr" E:\CBB\sreda programm\lib for stop\MK\psw led3\main.cpp 1
Error while running C/C++ Compiler
цитата:
На долгое время отложил решение этого вопроса, но сейчас снова стало интересно, а как же, все таки, оно должно было работать. У меня attiny13
Код беру из http://arv.radioliga.com/index.php?opti ... &Itemid=44
Кто-нибудь подскажет, как исправить код, чтобы значение шим плавно, но достаточно быстро изменялось в цикле с 255 до 0 и назад.
Меняю библиотеку "avr"на "ioavr" под attiny13, не помогает
...подскажите плиз что там "внутри"??, перебирать все подряд сил уже нет.
...утешает другая цитата:
Вот, получилось- все работает. Привожу кривокод. Может, кто еще что подскажет по нему, или может, он поможет кому-нибудь
Идея старая но очень хочется: сделать для габаритов шим, а stop на прямую в обход МК на транзистор ...
можно конечно и на 555 таймере юзать "габарит" но как-то не современно, контроллер сможет и вспышки и всё что угодно.


