Страница 2 из 3
Добавлено: Вс май 24, 2009 00:10:53
NiTr0
st4lk3r0k писал(а):чёто у меня с ШИМом не получается

Пробую на лампочке, она просто моргает... может ктонить дать простейший код (на Си, работаю в AvrStudio) для атмеги8? там ШИМ (судя по даташиту) тока на таёмере2 есть а он навороченный какой то я даже не знаю где искать проблему
ну или если не код то хотяб объясните мне тупому что там и как....
Она и будет моргать, если частота низкая. Шим есть и на 1 и на 2 таймере, лучше пользовать таймер2 - т.к. 8битный.
Инициализируется таймер в режиме ШИМ, на нужную частоту (предделитель), указывается в OCR2 значение, и собссно он запускается. Коэф заполнения = 256/(1-OCR2) если не ошибаюсь.
Добавлено: Вс май 24, 2009 00:32:50
st4lk3r0k
А сможешь скинуть строку определения таймера как fast PWM ? у меня там почему то СТС выставляется...
я уже кучу настроек перепробовал

не хочет лампочка быстро моргать и всё тут... правда на данный момент использую 16битный таймер (таймер1)
Добавлено: Вс май 24, 2009 00:50:35
NiTr0
outi TCCR2, 0b01111010 ;timer2 - fast PWM, set 1 on MATCH and 0 on TOP, prescaler = 8
outi TCNT2,0 ;timer = 0
outi OCR2,0x80 ;PWM = 50%
Добавлено: Вс май 24, 2009 00:54:48
st4lk3r0k
уже гораздо быстрее, но не достаточно, можно ещё как то ускорить моргание?
Добавлено: Вс май 24, 2009 01:00:04
NiTr0
Тут делитель = 8, если память не подводит - младшие биты (3) регистра. Поставьте 000.
А вообще - в даташите это все прекрасно описано.
Добавлено: Вс май 24, 2009 01:09:07
st4lk3r0k
Так, походу мы друг друга недопоняли
у меня от ноги PB3 проводок идёт к резистору 330 Ом, а от него к лампочке... если младшие биты поставить на 010 и в OCR2 запихнуть 255
то лампочка горит прекрасно, а вот если поставить в OCR2 скажем 200, то лампочка начинает моргать.... в способе описанном тут
http://extremeelectronics.co.in/avr-tut ... s-part-ii/
есть видео там лампочка плавно загорается и тухнет

как мне сделать также?
Добавлено: Вс май 24, 2009 01:50:14
NiTr0
Она и будет моргать

Только с частотой ШИМ (тактовая частота/(256*делитель)).
Добавлено: Вс май 24, 2009 02:23:07
st4lk3r0k
Ну тогда всё нормуль

при нажатии на кнопочки частота морганий лампочки меняется... А как дальше? надо как то БП регулировать... но это же не лампочка... не поможете?

Добавлено: Вс май 24, 2009 12:32:57
NiTr0
Частота морганий меняться не должна, должно меняться время в течение которого лампочка светится.
Управлять - почитайте о импульсных преобразователях напряжения. И без обратной связи с выхода (через АЦП) здесь - никак.
Добавлено: Вс май 24, 2009 14:18:36
st4lk3r0k
Частота морганий меняться не должна, должно меняться время в течение которого лампочка светится.
А это не одно и тоже?
...лана пойду читать

Добавлено: Вс май 24, 2009 14:32:53
st4lk3r0k
Мде... однако сложно искать когда не знаешь что ищешь...
Поясните пожалуйста что собственно надо сделать чтобы мой девайс заработал... Тока если кто решится пояснить то с учётом того что электроникой я начал серьёзно заниматься... в четверг. Боюсь что без нормального объяснения не справлюсь

Добавлено: Вс май 24, 2009 14:40:22
NiTr0
st4lk3r0k писал(а):А это не одно и тоже?
Нет. Таймер считает от 0 до 255, при этом лампочка загорается при TCNT2=OCR2, и тухнет при обнулении таймера. Или - наоборот, загорается при 0 и тухнет при TCNT2=OCR2
Добавлено: Вс май 24, 2009 15:09:08
st4lk3r0k
Так, вот это было отличное пояснение

теперь хоть понял как ШИМ работает. Спасибо!
А вот с преобразователем всё ещё не ясно. Можно какойнить пример что ли? Ну или хотяб где о них почитать можно? в гугле у меня найти ничего не получилось.
Добавлено: Вс май 24, 2009 15:27:09
st4lk3r0k
Код: Выделить всё
#define F_CPU 8000000
#include <avr>
#include <util>
void intializePWM(){
TCCR2 = 0b01111010;
TCNT2 = 100;
DDRB |= (1<<PB3);
}
void setOutput(uint8_t num){
OCR2 = num;
}
int main(void)
{
uint8_t brightness=0;
intializePWM();
while(1){
for(brightness=0;brightness<255>0;brightness--){ setOutput(brightness); _delay_loop_2(3200); }
for(brightness=255;brightness>0;brightness--){ setOutput(brightness); _delay_loop_2(3200); }
}
return 1;
}
Плиз попробуйте ктонить симулировать сей код в протеусе, что то он меня смущает ( атмега8 )
Добавлено: Вс май 24, 2009 15:31:23
NiTr0
st4lk3r0k писал(а): Можно какойнить пример что ли?
http://www.toroid.ru/ivanov-ciganov2.html
Добавлено: Вс май 24, 2009 15:51:28
st4lk3r0k
Жаль пиво по майлу отослать не получится! Огромное спасибо. А как с кодом? там всё ок?
Добавлено: Вс май 24, 2009 15:54:21
NiTr0
Смущает условие brightness<255>0. Почему бы просто не сделать одну проверку - <255 ?
Добавлено: Вс май 24, 2009 16:16:36
st4lk3r0k
Привычка
Просто если brightness по какой то причине свалится ниже нуля то и функция работать не будет, а значит я сразу узнаю что я дебил и что то где то намудрил...
З.Ы.
А нет более быстрого способа разобраться с БП, чем вы предложили?

просто я логику не совсем понимаю, пойму логику - смогу доделать девайс

Добавлено: Вс май 24, 2009 16:33:34
NiTr0
Более быстрый способ - внешний ЦАП либо ЦАП из аппноута с использованием АЦП. Который формирует постоянное напряжение, и этим напряжением уже управляется импульсный либо линейный стабилизатор. Такая система надежнее, но сложнее.
Добавлено: Вс май 24, 2009 17:09:28
st4lk3r0k
А какую систему использовали бы вы?
Есть в сети какие нибудь примеры подобных систем?
Если подумать то мне просто нужно собрать кокой то "блок" который будет принимать ШИМ и в зависимости от частоты ШИМ увеличивать/уменьшать сопротивление на БП, я правильно понял?
Снова повторюсь я в электронике не совсем не силён и как собрать "преобразователь" понятия не имею...