.


:




:

































 

 

 

 


 

:

3097/1

:

 

 


7 .

, .

... 261,63

充.... 293,67

腅....329,63

.349,23

.392,00

.440.00

腅.493,88


́ (. Synthesizer) , () . ( ) ( ). , , . MIDI- , , MIDI-. , , . (, Reason), - ( , , , , , MIDI-), .

 

.

, : -/standalone . . , , , , , .. , , , . , , - , . . , .

.

ATMEGA 1280

. - ,


  3,4,5,6

  3,4,5,6


This program was produced by the

CodeWizardAVR V2.03.4 Standard

Automatic Program Generator

Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

 

Project:

Version:

Date: 28.04.2013

Author:

Company:

Comments:

 

 

Chip type: ATmega1280

Program type: Application

Clock frequency: 8,000000 MHz

Memory model: Small

External RAM size: 0

Data Stack size: 2048

*****************************************************/

 

#include <delay.h>

#include <math.h>

#include <mega1280.h>

 

#define dt 125 // us (8)

#define speed_delay 5 // us

 

 

#define F_1 261.63 // Hz

#define F_2 293.67 // Hz

#define F_3 329.63 // Hz

#define F_4 349.23 // Hz

#define F_5 392.00 // Hz

#define F_6 440.00 // Hz

#define F_7 493.88 // Hz

 

#define note_1 PIND.0

#define note_2 PIND.1

#define note_3 PIND.2

#define note_4 PIND.3

#define note_5 PINE.4

#define note_6 PINE.5

#define note_7 PINE.6

 

int intr=0;

 

// External Interrupt 0 service routine

interrupt [INT0] void ext_int0_isr(void)

{

intr=1;

 

}

 

// External Interrupt 1 service routine

interrupt [INT1] void ext_int1_isr(void)

{

intr=2;

}

 

// External Interrupt 2 service routine

interrupt [INT2] void ext_int2_isr(void)

{

intr=3;

 

}

 

// External Interrupt 3 service routine

interrupt [INT3] void ext_int3_isr(void)

{

intr=4;

 

}

 

// External Interrupt 4 service routine

interrupt [INT4] void ext_int4_isr(void)

{

intr=5;

 

}

 

// External Interrupt 5 service routine

interrupt [INT5] void ext_int5_isr(void)

{

intr=6;

}

 

// External Interrupt 6 service routine

interrupt [INT6] void ext_int6_isr(void)

{

intr=7;

}

 

// External Interrupt 7 service routine

interrupt [INT7] void ext_int7_isr(void)

{

// Place your code here

 

}

 

// Declare your global variables here

 

void main(void)

{

int i=0;

//

int N_1=(20*8000/F_1);

int N_2=(20*8000/F_2);

int N_3=(20*8000/F_3);

int N_4=(20*8000/F_4);

int N_5=(20*8000/F_5);

int N_6=(20*8000/F_6);

int N_7=(20*8000/F_7);

//

int signal_1[N_1];

int signal_2[N_2];

int signal_3[N_3];

int signal_4[N_4];

int signal_5[N_5];

int signal_6[N_6];

int signal_7[N_7];

 

// Crystal Oscillator division factor: 1

#pragma optsize-

CLKPR=0x80;

CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

 

// Input/Output Ports initialization

// Port A initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTA=0x00;

DDRA=0xFF;

 

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P

PORTB=0x00;

DDRB=0x00;

 

// Port C 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

PORTC=0x00;

DDRC=0x00;

 

// Port D 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

PORTD=0xFF;

DDRD=0x00;

 

// Port E 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

PORTE=0xFF;

DDRE=0x00;

 

// Port F 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

PORTF=0x00;

DDRF=0x00;

 

// Port G initialization

// Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State5=T State4=T State3=T State2=T State1=T State0=T

PORTG=0x00;

DDRG=0x00;

 

// Port H 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

PORTH=0x00;

DDRH=0x00;

 

// Port J 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

PORTJ=0x00;

DDRJ=0x00;

 

// Port K 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

PORTK=0x00;

DDRK=0x00;

 

// Port L 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

PORTL=0x00;

DDRL=0x00;

 

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0A output: Disconnected

// OC0B output: Disconnected

TCCR0A=0x00;

TCCR0B=0x00;

TCNT0=0x00;

OCR0A=0x00;

OCR0B=0x00;

 

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// OC1C 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

// Compare C Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

OCR1CH=0x00;

OCR1CL=0x00;

 

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2A output: Disconnected

// OC2B output: Disconnected

ASSR=0x00;

TCCR2A=0x00;

TCCR2B=0x00;

TCNT2=0x00;

OCR2A=0x00;

OCR2B=0x00;

 

// Timer/Counter 3 initialization

// Clock source: System Clock

// Clock value: Timer 3 Stopped

// Mode: Normal top=FFFFh

// Noise Canceler: Off

// Input Capture on Falling Edge

// OC3A output: Discon.

// OC3B output: Discon.

// OC3C output: Discon.

// Timer 3 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

// Compare C Match Interrupt: Off

TCCR3A=0x00;

TCCR3B=0x00;

TCNT3H=0x00;

TCNT3L=0x00;

ICR3H=0x00;

ICR3L=0x00;

OCR3AH=0x00;

OCR3AL=0x00;

OCR3BH=0x00;

OCR3BL=0x00;

OCR3CH=0x00;

OCR3CL=0x00;

 

// Timer/Counter 4 initialization

// Clock source: System Clock

// Clock value: Timer 4 Stopped

// Mode: Normal top=FFFFh

// OC4A output: Discon.

// OC4B output: Discon.

// OC4C output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 4 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

// Compare C Match Interrupt: Off

TCCR4A=0x00;

TCCR4B=0x00;

TCNT4H=0x00;

TCNT4L=0x00;

ICR4H=0x00;

ICR4L=0x00;

OCR4AH=0x00;

OCR4AL=0x00;

OCR4BH=0x00;

OCR4BL=0x00;

OCR4CH=0x00;

OCR4CL=0x00;

 

// Timer/Counter 5 initialization

// Clock source: System Clock

// Clock value: Timer 5 Stopped

// Mode: Normal top=FFFFh

// OC5A output: Discon.

// OC5B output: Discon.

// OC5C output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 5 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

// Compare C Match Interrupt: Off

TCCR5A=0x00;

TCCR5B=0x00;

TCNT5H=0x00;

TCNT5L=0x00;

ICR5H=0x00;

ICR5L=0x00;

OCR5AH=0x00;

OCR5AL=0x00;

OCR5BH=0x00;

OCR5BL=0x00;

OCR5CH=0x00;

OCR5CL=0x00;

 

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Falling Edge

// INT1: On

// INT1 Mode: Falling Edge

// INT2: On

// INT2 Mode: Falling Edge

// INT3: On

// INT3 Mode: Falling Edge

// INT4: On

// INT4 Mode: Falling Edge

// INT5: On

// INT5 Mode: Falling Edge

// INT6: On

// INT6 Mode: Falling Edge

// INT7: On

// INT7 Mode: Falling Edge

EICRA=0xAA;

EICRB=0xAA;

EIMSK=0xFF;

EIFR=0xFF;

// PCINT0 interrupt: Off

// PCINT1 interrupt: Off

// PCINT2 interrupt: Off

// PCINT3 interrupt: Off

// PCINT4 interrupt: Off

// PCINT5 interrupt: Off

// PCINT6 interrupt: Off

// PCINT7 interrupt: Off

// PCINT8 interrupt: Off

// PCINT9 interrupt: Off

// PCINT10 interrupt: Off

// PCINT11 interrupt: Off

// PCINT12 interrupt: Off

// PCINT13 interrupt: Off

// PCINT14 interrupt: Off

// PCINT15 interrupt: Off

// PCINT16 interrupt: Off

// PCINT17 interrupt: Off

// PCINT18 interrupt: Off

// PCINT19 interrupt: Off

// PCINT20 interrupt: Off

// PCINT21 interrupt: Off

// PCINT22 interrupt: Off

// PCINT23 interrupt: Off

PCMSK0=0x00;

PCMSK1=0x00;

PCMSK2=0x00;

PCICR=0x00;

 

// Timer/Counter 0 Interrupt(s) initialization

TIMSK0=0x00;

// Timer/Counter 1 Interrupt(s) initialization

TIMSK1=0x00;

// Timer/Counter 2 Interrupt(s) initialization

TIMSK2=0x00;

// Timer/Counter 3 Interrupt(s) initialization

TIMSK3=0x00;

// Timer/Counter 4 Interrupt(s) initialization

TIMSK4=0x00;

// Timer/Counter 5 Interrupt(s) initialization

TIMSK5=0x00;

 

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

ADCSRB=0x00;

 

 

//

for(i=0;i<N_1;i++) signal_1[i]=125+125*sin((2*PI*i*dt*0.000001)*F_1);

for(i=0;i<N_2;i++) signal_2[i]=125+125*sin((2*PI*i*dt*0.000001)*F_2);

for(i=0;i<N_3;i++) signal_3[i]=125+125*sin((2*PI*i*dt*0.000001)*F_3);

for(i=0;i<N_4;i++) signal_4[i]=125+125*sin((2*PI*i*dt*0.000001)*F_4);

for(i=0;i<N_5;i++) signal_5[i]=125+125*sin((2*PI*i*dt*0.000001)*F_5);

for(i=0;i<N_6;i++) signal_6[i]=125+125*sin((2*PI*i*dt*0.000001)*F_6);

for(i=0;i<N_7;i++) signal_7[i]=125+125*sin((2*PI*i*dt*0.000001)*F_7);

//

#asm("sei")

//

while (1)

{

// note_1

if(intr==1)

{

while(note_1==0)

{

for(i=0;i<N_1;i++)

{

PORTA=signal_1[i];

delay_us(dt-speed_delay);

}

}

intr=0;

PORTA=0x00;

}

// note_2

if(intr==2)

{

while(note_2==0)

{

for(i=0;i<N_2;i++)

{

PORTA=signal_2[i];

delay_us(dt-speed_delay);

}

}

intr=0;

PORTA=0x00;

}

// note_3

if(intr==3)

{

while(note_3==0)

{

for(i=0;i<N_3;i++)

{

PORTA=signal_3[i];

delay_us(dt-speed_delay);

}

}

intr=0;

PORTA=0x00;

}

// note_4

if(intr==4)

{

while(note_4==0)

{

for(i=0;i<N_4;i++)

{

PORTA=signal_4[i];

delay_us(dt-speed_delay);

}

}

intr=0;

PORTA=0x00;

}

// note_1

if(intr==5)

{

while(note_5==0)

{

for(i=0;i<N_5;i++)

{

PORTA=signal_5[i];

delay_us(dt-speed_delay);

}

}

intr=0;

PORTA=0x00;

}

// note_6

if(intr==6)

{

while(note_6==0)

{

for(i=0;i<N_6;i++)

{

PORTA=signal_6[i];

delay_us(dt-speed_delay);

}

}

intr=0;

PORTA=0x00;

}

// note_7

if(intr==7)

{

while(note_7==0)

{

for(i=0;i<N_7;i++)

{

PORTA=signal_7[i];

delay_us(dt-speed_delay);

}

}

intr=0;

PORTA=0x00;

}

 

 

}

}


 

 

.


1. Datasheet ATMEGA 1280

2. Datasheet DAC800

3. .., ..

 

 



<== | ==>
| 10153-10154
:


: 2015-09-20; !; : 487 |


:

:

, , .
==> ...

1697 - | 1371 -


© 2015-2024 lektsii.org - -

: 0.168 .