Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Генератор синуса на микроконтроллере ATtiny2313

Отправлено babkin 19 ноября 2008 г. 14:57


Генерация происходит путем модуляции ШИМа. Текст программы написан на СИи скомпилирован в CodeVision. При нажатии на кнопку должны чередоваться частоты на выходе 1кГц и 2кГц. Вместо того я получаю после RC цепи частоты 919Гц и 1546 Гц. В чем проблема?
Текст программы
#include <tiny2313.h>
#include <delay.h>
// Declare your global variables here
char a=0;
char b=0;
char t=0;
flash int x[64]={32, 35, 38, 41, 44, 47, 49, 52, 54, 56, 58, 60,
61, 62, 63, 63, 63, 63, 62, 61, 60, 59, 57, 55, 53, 51, 48,
45, 43, 40, 37, 34, 30, 27, 24, 21, 19, 16, 13, 11, 9, 7, 5,
4, 3, 2, 1, 1, 1, 1, 2, 3, 4, 6, 8, 10, 12, 15, 17, 20, 23,
26, 29, 32};
interrupt [TIM1_OVF] void timer1_ovf_isr(void){
if(a==1)
{
++t;
if(t<=63){OCR1B=x[t];}
else {t=0;
OCR1B=x[t];}
b=1;
}
if(a==0)
{
if(b==1){b=0;}
else{++t;
if(t<=63){OCR1B=x[t];}
else {t=0;
OCR1B=x[t];}
b=1;}
}
}

void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x18;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x20;
DDRD=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Fast PWM top=00FFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x23;
TCCR1B=0x19;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x3F;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x80;
SREG=0x80;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

while (1){

if(!PIND.5){};
delay_us(500);
if(!PIND.5){++a; if(a>1){a=0;}}
else{};
delay_us(500);

}
}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

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

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru