Примерно так:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Сергей Борщ 27 ноября 2006 г. 15:34
В ответ на: Пипл, хелп!!! У кого есть рабочий код по реализации синусоиды ШИМом, бо у меня нихрена пока не выходит!!! отправлено shkiper 27 ноября 2006 г. 13:41

sin_wave из сообщения по ссылке. Режим таймера "phase& freq corect", так гармоник меньше. Вроде должно работать.


#include < ioavr.h >
#include < inavr.h >

extern __flash unsigned char sin_wave[256];
#define PWM_TICKS 256
#define PWM OCR1B

void main (void) {
__enable_interrupt();
for(;;);
}
uint8_t Phase;

#pragma vector = TIMER1_OVF_vect
__root __interrupt void PWM_Handler (void) {
// sinus generator
PWM = SinTable[ ++Phase ];
}


char __low_level_init() {

PORTB = (0 << 7)|(0 << 6)|(1 << 5)|(0 << 4)|(0 << 3)|(0 << 2)|(0 << 1)|(0 << 0);
DDRB = (0 << 7)|(0 << 6)|(1 << 5)|(1 << 4)|(1 << 3)|(1 << 2)|(1 << 1)|(1 << 0);


// use Capture B as PWM generator
TCCR1A = (0 << COM1A1)|(0 << COM1A0)|(1 << COM1B1)|(1 << COM1B0)|(0 << WGM11)|(0 << WGM10);
TCCR1B = (0 << ICNC1)|(0 << ICES1)|(1 << WGM13)|(0 << WGM12)|(0 << CS12)|(0 << CS11)|(1 << CS10);
ICR1 = PWM_TICKS * 2; // Set PWM frequency
PWM = PWM_TICKS; // generate 0.5 Vcc level

// Enable Timer0 ints, system timer
TIMSK = (0 << OCIE2)|(0 << TOIE2)|(0 << TICIE1)|(0 << OCIE1A)|(0 << OCIE1B)|(1 << TOIE1)|(0 << TOIE0);
return 1;
}



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
URL изображения: 
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 89:


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание