Шим+ светодиод [решено]

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Ekzi
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн сен 22, 2008 18:46:24

Шим+ светодиод [решено]

Сообщение Ekzi »

Решение

Здравствуйте!
Я можно сказать, плохо рублю в практике, хотя активно учу теорию. Вот хочу реализовать интересную вещь, но все упирается в отсутствие знаний.
Итак, это должен быть светодиод, пусьсирующий, тоест плавное затухает, плавно зажигается. Он весит где то на высоте пол метра и должен хорошо стетить на пол(суперяркий?) Единственная проблема, это питание для него. Максимально, 2 пальчиковые.

Как мне видится решение этой проблемы.
1. Светодиод больше 5 кД.
2. Емкие батарейки, либо аккумуляторы по 2500 мА.
3. Самое сложное, контроллер с шим. Который будет заставлять светодиод пульсировать.

Вот тут то и помогите, пожалуйста. Какой контроллер взять, как управлять шимом? Как это реализовать.

Буду благодарен.
Последний раз редактировалось Ekzi Вт мар 24, 2009 22:41:16, всего редактировалось 2 раза.
Реклама
Аватара пользователя
NiTr0
Друг Кота
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua
Контактная информация:

Сообщение NiTr0 »

ATMega8 (если габариты - 28 лап - устраивают, если нет - какую-то ATtiny, по цене - они где-то на уровне, в моем городе на радиорынке по $1.5). Алгоритм примитивный :)
Светодиод через транзюк вешается на выход ШИМ. ШИМ - аппаратный. В прерывании от таймера2 (он же ШИМ) - менять значение OCR0 в большую/меньшую сторону на единицу согласно флагу направления счета (в каком-то регистре завести) вплоть до переполнения/достижения 0, после чего - менять флаг направления счета...
Последний раз редактировалось NiTr0 Пн сен 22, 2008 21:15:02, всего редактировалось 1 раз.
Реклама
Ekzi
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн сен 22, 2008 18:46:24

Сообщение Ekzi »

NiTr0 писал(а):Алгоритм примитивный :)
Вот алгоритм для меня и загадка)) На с++ пишу без проблем, а где этот ШИМ на микрухе и как прописать цикл с изменением его я без понятий. Потому и прошу помощи))
Аватара пользователя
NiTr0
Друг Кота
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua
Контактная информация:

Сообщение NiTr0 »

Ekzi писал(а):а где этот ШИМ на микрухе
В даташите все красиво описано ;)
Реклама
Эиком - электронные компоненты и радиодетали
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

Ekzi писал(а):
NiTr0 писал(а):Вот алгоритм для меня и загадка)) На с++ пишу без проблем, а где этот ШИМ на микрухе и как прописать цикл с изменением его я без понятий.
ШИМ на AVR автономная. Настраивается очень просто, потребуется всего-лишь заполнить некоторые биты в нужных регитрах. Ну и надо немного разобраться почитав принцип ШИМ и узнать с какими регистрами работать.
Реклама
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

KIP писал(а):
Ekzi писал(а): ШИМ на AVR автономная.
Не на всех. Про работу с аппаратным ШИМ я сделал задачу 8 в домашней страничке. А програмный ШИМ в задаче 13.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Реклама
pirotehnick
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж
Контактная информация:

Сообщение pirotehnick »

Ekzi писал(а):где этот ШИМ на микрухе и как прописать цикл с изменением его я без понятий. Потому и прошу помощи))
Здесь посмотри

http://www.pcports.ru/articles/avr3.php
Аватара пользователя
Mamonth
Вымогатель припоя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Под кнопкой www есть статья по ШИМ и как его заводить и как посмотреть и что в этом ШИМе куда.
Today fine night...
Ekzi
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн сен 22, 2008 18:46:24

Сообщение Ekzi »

Спасибо всем кто ответил по делу- материал увидел и изучил.
В любом случае, я всю инфу выучу и попробую все таки собрать схемку. :))
Ekzi
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн сен 22, 2008 18:46:24

Сообщение Ekzi »

На долгое время отложил решение этого вопроса, но сейчас снова стало интересно, а как же, все таки, оно должно было работать. У меня attiny13
Код беру из http://arv.radioliga.com/index.php?opti ... &Itemid=44

Кто-нибудь подскажет, как исправить код, чтобы значение шим плавно, но достаточно быстро изменялось в цикле с 255 до 0 и назад.
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

Ekzi писал(а):как исправить код, чтобы значение шим плавно, но достаточно быстро изменялось в цикле с 255 до 0 и назад.
Посмотрите "Микроконтроллеры AVR для начинающих" и другие книги в библиотеке книг для скачивания и чтения и сами сможете понимать и менять код как вам надо.

ВОЗМОЖНО вот так будет работать 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 МикроСек.

}
НЕ ПРОВЕРЯЛ, не компилировал. Просто накрапал по-быстрому.
Ekzi
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн сен 22, 2008 18:46:24

Сообщение Ekzi »

Спасибо, попытался посильно исправить ошибки. ide - avr studio
Сейчас светодиод тускленько горит и все:cry:

Код: Выделить всё

#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 МикроСек.

}
}
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

Я ж вам "изменить цикл" показал как, а вы все остальное выкинули чтоль ? Там же настройка ШИМ должна быть и ножка выходом назначена.
Аватара пользователя
бгкот
Мучитель микросхем
Сообщения: 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  
ШИМ - програмный, изменение яркости - по гармоническому закону,
что кстати, лучьше смотрится, чем по линейному. :)
Ekzi
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн сен 22, 2008 18:46:24

Сообщение Ekzi »

Вот, получилось- все работает. Привожу кривокод. Может, кто еще что подскажет по нему, или может, он поможет кому-нибудь :))

Код: Выделить всё

#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 МикроСек.


    }

}
BBC 67
Родился
Сообщения: 2
Зарегистрирован: Сб мар 06, 2010 00:10:17

Re: Шим+ светодиод [решено]

Сообщение BBC 67 »

Попытался скомпилировать сиё смотри код 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 таймере юзать "габарит" но как-то не современно, контроллер сможет и вспышки и всё что угодно.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»