Ich habe folgendes Programm programmiert, welches sechs Töne nacheinander in aufsteigender Tonleiter auf einem Lautsprecher ausgeben soll, jedoch kommen nur Tiefe und Hohe Töne durcheinander aber nicht nach der reihe. Was mache ich falsch?
1 | /*
|
2 | * melodiengong.c
|
3 | *
|
4 | * Created: 01.10.2012 13:56:27
|
5 | * Author: Florian
|
6 | */
|
7 | |
8 | #define F_CPU 8000000
|
9 | #include <avr/io.h> |
10 | #include <util/delay.h> |
11 | #include <math.h> |
12 | #include <avr/interrupt.h> |
13 | |
14 | #define int overflow=0,i=1;
|
15 | |
16 | |
17 | void sleep ( uint8_t ms ) |
18 | {
|
19 | for(; ms > 0; ms--) _delay_us(1); |
20 | }
|
21 | |
22 | void melodie_spielen(float periode) |
23 | {
|
24 | DDRB = 0xff; |
25 | PORTB |= (1<<PB2);// high halbe Periodendauer |
26 | sleep(periode/2); |
27 | PORTB &= ~(1<<PB2);// low halbe Periodendauer |
28 | sleep(periode/2); |
29 | |
30 | |
31 | }
|
32 | int main(void) |
33 | {
|
34 | sei(); |
35 | TIMSK = (1<<TOIE0); |
36 | TCCR0 = (1<<CS02); |
37 | TCNT0 = 0x00; |
38 | while(1) |
39 | {
|
40 | while(i==1) |
41 | melodie_spielen(3370); |
42 | while(i==2) |
43 | melodie_spielen(3370); |
44 | while(i==3) |
45 | melodie_spielen(3030); |
46 | while(i==4) |
47 | melodie_spielen(2840); |
48 | while(i==5) |
49 | melodie_spielen(2525); |
50 | while(i==6) |
51 | melodie_spielen(2273); |
52 | }
|
53 | return 0; |
54 | }
|
55 | |
56 | ISR(TIMER0_OVF_vect) // Timer interrupt |
57 | {
|
58 | if(overflow <=61) |
59 | {
|
60 | overflow++; |
61 | }
|
62 | else
|
63 | {
|
64 | if(i==6) |
65 | {
|
66 | i=1; |
67 | }
|
68 | |
69 | else
|
70 | {
|
71 | i=i+1; |
72 | }
|
73 | overflow = 0; |
74 | }
|
75 | }
|