Как это сделать не знаю
Помогите начинающиму кодом на С!!!
В приложенном файле исходник на асмpyzh_man писал(а):Тогда уж и исходник PICa.
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "TableSin.h"
int main( void )
{
//инициализация портов
PORTB = 0;
DDRB = 0xff;
//инициализация таймера Т0
TIMSK = (1<<OCIE0);
//реж. - fast pwm, вывод OC0 - неинверт. шим, предделитель - на 8
TCCR0 = (1<<WGM01)|(1<<WGM00)|(1<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(0<<CS00);
//обнуляем счетный регистр и регистр сравнения
TCNT0 = 0;
OCR0 = 0;
//разрешаем прерывания
sei();
while(1);
return 0;
}
//**********************************************************
//Прерывание таймера/счетчика Т0
ISR(TIMER0_COMP_vect)
{
static unsigned char i = 0;
//считываем элемент массива из флэш памяти и записываем в регистр сравнения
OCR0 = pgm_read_byte(&TableSin[i]);
i++;
if (i == 130) i = 0;
}Если прямоугольники с той частотой, которая должна быть, надо смотреть файл с данными синусоиды. А вот если с достаточно высокой частотой, это ШИМ так работает.geniusbsd писал(а):Вот кусок кода для генерации синусойды, но осциилограф показывает не синусойду а прямоугольник. Моделирую в протеусе
Поставил сопротивление 470 и кондер 1мк и пошда синусойдаellioh писал(а):geniusbsd писал(а):ВНадо какую-то интегрирующую схему поставить, хотя бы подключить через резистор конденсатор (все параметры надо подбирать) и снимать напряжение с конденсатора.
Код: Выделить всё
TIMSK = (1<<OCIE0|1<<OCIE2|1<<OCIE1A );
//реж. - fast pwm, вывод OC0 - неинверт. шим, предделитель - на 8
TCCR0 = (1<<WGM01)|(1<<WGM00)|(1<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(0<<CS00);
TCCR2 = 0x6A;
TCCR1A = 0xA1;
//обнуляем счетный регистр и регистр сравнения
TCNT0 =0;
OCR0 = 0;
TCNT2 = 0;
OCR2 = 0;
TCNT1=0x00;
OCR1A=0x00;
...................
ISR(TIMER1A_COMP_vect)
{
static unsigned char i = 0;
//считываем элемент массива из флэш памяти и записываем в регистр сравнения
OCR1A = pgm_read_byte(&TableSin[i]);
i++;
if (i == 115) i = 0;
}