roboforum.ru

Технический форум по робототехнике.

485 кГц->Тини13->синус 100 Гц

485 кГц->Тини13->синус 100 Гц

snayperAlfa » 23 апр 2009, 23:12

Усем привет!
Поменялись тут условия задачки. Подмогните плиз способ ее решения.
Есть внешний генератор на 485 кГц. Частота поступает на Тини13. На выходе необходимо получить положительные полуволны синуса частотой 100 Гц. Это как синус 50 Гц после диодного моста без конденсаторов. Такую вот форму сигнала надо получить. Частоту к сожалению изменить нельзя. Количество отсчетов изменить впринципи можно, главное чтобы это не сильно плохо повлияло на синус.

Вот код который я сообразил, но к сожалению не работает так как надо. :(

Код: Выделить всёРазвернуть
#include <tiny13.h>

//flash char mas_256[]={1,3,6,9,12,15,18,21,24,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,108,111,114,117,120,122,125,128,130,133,136,138,141,144,146,149,151,154,156,159,161,164,166,168,171,173,175,177,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,211,213,215,216,218,220,221,223,224,226,227,229,230,231,233,234,235,236,237,238,239,241,242,242,243,244,245,246,247,248,248,249,250,250,251,251,252,252,253,253,253,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,253,253,253,252,252,251,251,250,250,249,248,248,247,246,246,246,244,243,242,241,240,239,238,236,235,234,233,232,230,229,227,226,225,223,222,220,218,217,215,214,212,210,208,206,205,203,201,199,197,195,193,191,189,187,185,182,180,178,176,173,171,169,167,164,162,159,157,154,152,149,147,144,142,139,136,134,131,128,126,123,120,118,115,112,109,106,103,101,98,95,92,89,86,83,80,77,74,71,68,65,62,59,56,53,50,47,44,41,38,35,31,28,25,22,19,16,13,10,7,3};

//flash char mas_32[]={22,48,72,96,120,139,160,179,196,211,223,234,243,249,253,254,253,250,244,235,226,213,198,181,162,144,122,99,75,51,28,2};

flash char mas_128[]={1,1,1,2,3,4,5,6,6,8,8,9,10,11,12,13,14,14,15,16,17,18,19,19,20,21,21,22,23,24,24,25,26,26,27,28,28,29,29,30,30,31,31,32,32,32,33,33,34,34,34,35,35,35,35,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,35,35,35,35,34,34,34,33,33,33,32,32,31,31,30,30,29,29,28,28,27,26,26,25,24,24,23,22,22,21,20,19,19,18,17,16,15,14,14,13,12,11,10,9,8,8,7,6,5,4,3,2,1,1};

bit in=0;
int next = 0;

interrupt [TIM0_COMPA] void a1(void)
{

if(in==0){
  PORTB.0=0;
  in=1;
  OCR0A=mas_128[next];

   if(next<128){
     next++;
   }
   else{
     next=0;
   }
}

else{ 
   PORTB.0=1;
   OCR0A=37-mas_128[next];
   in=0;   

   
}


void main(void)
{
#asm("cli")
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x00;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

DDRB.0=0b11111;

TCNT0=0;
OCR0A=60;

TCCR0A=(0<<7 )| (0<<6) | (0<<5) | (0<<4)  | (1<<1) | (0<<0);
TCCR0B=(0<<7 )| (0<<6)  | (0<<3) | (0<<2) | (0<<1) | (1<<0);

TIMSK0=(1<<2);

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
      };
}


Компилятор: CV AVR 2.03.4
485 kHz.rar
Симуляция в Протеусе и прошивка
(11.89 КиБ) Скачиваний: 13


Rambler\'s Top100 Mail.ru counter