PWM в ATtiny2313.
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
PWM в ATtiny2313.
Нужно включить режим Fast PWM в Attiny2313. Что нужно записать в TCCR0A и TCCR0B? Даташит читал, но он меня и запутал сильнее...
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Реклама
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: PWM в ATtiny2313.
Пытаюсь организовать что-то типа управления частотой светодиода кнопкой. Но больно пока не получается. Что не так? Светодиод ведет себя немного странно. Выкладываю исходник и проект в Протеусе. Исходник:
Код: Выделить всё
#include<iotn2313.h>
#include<util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
main()
{
DDRB=255;
PORTB=0;
DDRD=0;
TCCR0B=0b00000100;
OCR0A=255;
TIMSK=0b00000001;
sei();
while(1)
{
if((PIND &(1<<0))==0)
{
OCR0A-=50;
if(OCR0A==5)
{
OCR0A=255;
}
}
}
}
ISR (TIMER0_COMPA_vect)
{
TCNT0=0;
PORTB^=(1<<0); //инвертируем сигнал на выводе PB0
}- Вложения
-
- pwm.rar
- (12.75 КБ) 181 скачивание
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: PWM в ATtiny2313.
На китайском? Вы уж простите, но в теме про таймер0 тиньки вам насоветовали достаточно много. Видимо, напрасно..Pika4u писал(а): Даташит читал, но он меня и запутал сильнее...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: PWM в ATtiny2313.
Прощаю. Согласен, насоветовали много и по делу. Но тут я пытаюсь сделать что-то сам и у меня возникли трудности
.
.
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: PWM в ATtiny2313.
Попробуйте вот так, может придется подправить под свой компилятор:
Но лучше всего будет подключить управление пином OC0A и убрать прерывания от таймера.
Настройка периферии хорошо разжевана в литературе. Читайте книги.
Код: Выделить всё
#include<iotn2313.h>
#include<util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
main()
{
DDRB = (1 << DDB0); // настройка порта B
TCCR0A = (1 << WGM01) | (1 << WGM00); // выбор режима Fast PWM
TIMSK = (1 << OCIE0A) | (1 << TOIE0); // разрешение прерываний
sei();
TCCR0B = (1 << CS02); // запуск таймера с делителем 1024
while(1)
{
if((PIND &(1<<0))==0)
{
OCR0A-=50;
if(OCR0A==5)
{
OCR0A=255;
}
}
}
}
ISR (TIMER0_COMPA_vect)
{
PORTB &= ~(1 << PORTB0); // 0
}
ISR (TIMER0_OVF0_vect)
{
PORTB |= (1 << PORTB0); // 1
}Код: Выделить всё
DDRB = (1 << DDB2);
TCCR0A = (1 << COMA1) | (1 << WGM01) | (1 << WGM00); // выбор режима Fast PWM- Реклама

