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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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
snayperAlfa
 
Сообщения: 163
Зарегистрирован: 05 июн 2008, 22:03
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 7