#include "avr\io.h" // definiční soubor pro mikrokontrolér #include #include #include #include //--------------------------------------------------- prog_uchar sin_vzorky[256]= {130,133,135,138,140,143,145, 148,150,152,155,157,159,162,164,166,169,171,173,175,177,179, 181,184,186,188,190,191,193,195,197,199,200,202,204,205,207, 208,210,211,212,214,215,216,217,218,219,220,221,222,223,224, 224,225,226,226,227,227,227,228,228,228,228,228,228,228,228, 228,227,227,227,226,226,225,224,224,223,222,221,220,219,218, 217,216,215,214,212,211,210,208,207,205,204,202,200,199,197, 195,193,191,190,188,186,184,181,179,177,175,173,171,169,166, 164,162,159,157,155,152,150,148,145,143,140,138,135,133,130, 128,126,123,121,118,116,113,111,108,106,104,101,99,97,94,92, 90,87,85,83,81,79,77,75,72,70,68,66,65,63,61,59,57,56,54,52, 51,49,48,46,45,44,42,41,40,39,38,37,36,35,34,33,32,32,31,30, 30,29,29,29,28,28,28,28,28,28,28,28,28,29,29,29,30,30,31,32, 32,33,34,35,36,37,38,39,40,41,42,44,45,46,48,49,51,52,54,56, 57,59,61,63,65,66,68,70,72,75,77,79,81,83,85,87,90,92,94,97, 99,101,104,106,108,111,113,116,118,121,123,126,128}; int main( void ) { unsigned int i,f; unsigned int prah; long faze,delta_reg; unsigned int faze_posun; unsigned char *vzorek; char data[6]; // ******Nastaveni portu****** // DDR: 0 - vstup, 1 - výstup // PORT: 0 - "L"/Hi-Z , 1 - "H"/Pull-up DDRA = 0b11111111; PORTA = 0b00000000; DDRB = 0b00000000; PORTB = 0b00000000; DDRC = 0b11111111; PORTC = 0b00000000; DDRD = 0b00000000; PORTD = 0b00000000; TCCR0 = 0b00000001; TCNT0 = 0; OCR0 = 0; //pocatecni nastaveni kmitoctu faze = 0; f = 500; //Hz delta_reg = f*65535/31373; i = 0; prah = 255; faze_posun = 0; lcdInit(); lcdGotoXY(0,0); lcdPrintData("Generator DDS",13 ); lcdGotoXY(0,1); lcdPrintData("kmitocet:",9); itoa(f,data, 10); lcdGotoXY(9,1); lcdPrintData(data,6); lcdGotoXY(14,1); lcdPrintData("Hz",2); while(1) { // fazovy akumulator faze = faze + delta_reg; //nacteni jen 8 hornich bitu faze faze_posun = faze >> 8; //zabraneni preteceteni faze if(faze > 65534) { faze = faze - 65534; //zajisteni, aby faze plynule pokracovala prah = 0; faze_posun = 0; if(faze>65535) faze = 0; faze_posun = faze >> 8; } //zvyseni kmitoctu pri stisknuti tlacitka 1 if(!(PIND & (1<7000) f=7000; delta_reg = f*65536/31373; _delay_ms(10); lcdGotoXY(0,0); lcdPrintData("Generator DDS", 13); lcdGotoXY(0,1); lcdPrintData("kmitocet:",9); itoa(f,data, 10); lcdGotoXY(9,1); lcdPrintData(data,6); lcdGotoXY(14,1); lcdPrintData("Hz",2); } //snizeni kmitoctu pri stisknuti tlacitka 2 if(!(PIND & (1<