Страница 1 из 1

ШИМ на 2313

Добавлено: Вт июн 06, 2006 08:43:40
Zhmak
Нужно завести аппаратный ШИМ на 2313. Не подскажите последовательность действий?
Я, конечно, понимаю, что это есть в даташите ;) Но пока разберусь, что к чему.... Просто скажите: в этот регистр порог счета, в этот регистр устанавливаем набор бит, переключающий счетчик в шим, а здесь его запускаем. Или пример готового на асме ;)

Заранее спасибо!

Добавлено: Вт июн 06, 2006 09:37:32
Serega
Блин, вот что я никогда не делал на 2313 - так это аппаратный ШИМ... Товарищ, честно - все в ДШ, разжевано-пережевано!
Если не ошибаюсь, нужно правильно настроить таймеры, а именно - регистры TCCR1A и TCCR1B, там есть биты отвечающие за работу ШИМа (PWM по-ихнему).

Добавлено: Вт июн 06, 2006 14:07:03
Spider
Вот кусок кода для mega8. Имхо работать будет без изменений ни на 2313.

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

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

void init_pwm(unsigned char comp) {
	PORTB &= ~_BV(PB3);
	DDRB |= _BV(PB3); // setup PortB for output 	
	TCCR2 = _BV(WGM21) | _BV(COM20) | _BV(CS20);
	OCR2 = comp; 
	TCNT2 = 0x00; 
}

int main(void){
init_pwm(53); //125kHzl;
while(1);
return 0;
}
Перевести на ASM я думаю не составит труда.

Добавлено: Чт ноя 01, 2007 10:25:57
alex2103
Можно ли прокомментировать приведенный листинг? Пока ничего не понятно :)

Добавлено: Пт ноя 02, 2007 02:48:10
Negor
Вобщем так... Для настройки аппаратных средств контроллера необходимо записывать биты в регистры. Каждый бит в таких регистрах что-то включает и выключает. Информацию о регистрах, битах, и т.д. можно почерпнуть из даташитов. Так вот. В нашем случае надо сделать так, чтобы таймер работал в так: досчитывал до значения в регистре OCR2 и счёт сбрасывался. Для удобства пишутся названия битов, но при компиляции они заменяются номерами. За установку вышепреведённого режима работы отвечает бит WGM21. Но что бы таймер начал считать надо установить пределитель. Тут есть варианты - каждый тик таймера может быть при каждом тике внутреннего генераторя, после 8, 32, 64, 128, 256 и 1024 тиков внутренего генератора. За это отвечают комбинации битов CS20 CS21 CS22. Spider видимо описАлся, установив два раза бит CS20... для указанной частоты надо установить биты СS20 и CS22. Все эти биты относятся к регистру TCCR2. Это касательно теории настройки переферии МК. Теперь методы записи в Си. Запись _BV(n) эквивалентна значению 8-разрядной переменной в которой установлен бит номер n. Допустим _BV(3) <-> 0b00001000. Тогда запись TCCR2 = _BV(WGM21) | _BV(COM20) | _BV(CS22) означает
TCCR2=0b01000000 | 0b00000001 | 0b00000100 .
Символ "|" означает "ИЛИ" т.е.
TCCR2=0b01000101.
Вроде всё объяснил... Правда может что-то непонятно)))

Re: ШИМ на 2313

Добавлено: Пт ноя 02, 2007 08:45:38
tych
Zhmak писал(а):Нужно завести аппаратный ШИМ на 2313.

Не подскажите последовательность действий?
Подскажу с удовольствием ! Вот подробно - ШИМ в AVR на примерах по шагам.

Добавлено: Пт ноя 02, 2007 08:57:26
alex2103
Negor, спасибо! именно такого рассказа я и ждал. Немного проясняется теперь :)

tych, сейчас почитаю...

Добавлено: Пт ноя 02, 2007 09:08:09
tych
Negor писал(а):Вобщем так... Для настройки аппаратных средств контроллера необходимо записывать биты в регистры.

Вроде всё объяснил... Правда может что-то непонятно)))
ШИМ сигнал только не получить по этому описанию :cry: :cry: :cry:

Я сичтаю что лучше подсказать человеку где написано как сделать
так чтоб работало :lol:

Добавлено: Пт ноя 02, 2007 09:10:37
tych
alex2103 писал(а):Negor, спасибо! именно такого рассказа я и ждал. Немного проясняется теперь :)
А вы попробуйте получить ШИМ по этому описанию ...

Добавлено: Пт ноя 02, 2007 09:54:18
alex2103
tych, сейчас повторяю предложенную задачу :)

Добавлено: Пт ноя 02, 2007 10:19:31
Negor
tych кстати прав, а я за подробным описанием забыл что программа должна делать. Действительно - аппаратного ШИМа тут не получится. Я бы даже сказал - всё должно быть не так. Автору темы заодно тренировка - мы уже разобрали как настраивать переферию - а теперь попробуй сделать тоже самое, но таймер надо настроить на режим fast PWM (для начала покатит). Возьми даташит - и вперёд. Если что - помогу.
Я сичтаю что лучше подсказать человеку где написано как сделать
так чтоб работало
А я терпеть не могу такого подхода. Я считаю что если человек задаёт какойто вопрос и есть возможность ответить сдесь и сейчас, то нужно так и делать. Мне не лень написать простым языком простые вещи.

Добавлено: Пт ноя 02, 2007 10:26:18
tych
Negor писал(а):если человек задаёт какойто вопрос и есть возможность ответить сдесь и сейчас, то нужно так и делать.
Конечно - если возможно ответить ПРАВИЛЬНО то да.

Я когда даю линк где написано - то точно знаю что там
Я написал ПРАВИЛЬНО ! И проверил код.

Когда пишешь быстро ответ в топике, тем более развернутый, навеняка налепишь ошибок и неточностей.

А спрашивающий будет ходить по разложеным вами граблям вместо чтения того как сделать правильно и получения нужного ему результата.

Кстати Админ считает вот как:
Serega писал(а): Товарищ, честно - все в ДШ, разжевано-пережевано!
Я то еще по-божески РУССКИЙ текст предлагаю почитать ...