Hi, ich brauche etwas Hilfe. Könnte jemand sagen ob der Folgende Code so einigermaßen in Ordnung ist? Ich bin noch Neuling in diesem Bereich. Aufgabenstellung :http://mit.eit.h-da.de/Labor/400_und_500_ADCInterruptTimer.pdf Ab seite 7.
1 | #include "ledsw.h" |
2 | #include "LabIncludes.h" |
3 | #include "adc.h" |
4 | #include <avr/interrupt.h> |
5 | |
6 | |
7 | |
8 | int main(void) |
9 | {
|
10 | |
11 | main_ag1(); |
12 | |
13 | |
14 | } |
15 | |
16 | int main_ag1(void) |
17 | {
|
18 | initPort_AInBOut(); //Ports initialisieren |
19 | init_ADC(1); //Free running |
20 | start_ADC(); |
21 | while(1) //Polling |
22 | {
|
23 | wait_adc(); |
24 | showBar(read_adc(2)); //höchstwertige 8 bit ausgeben |
25 | } |
26 | |
27 | return 1; |
28 | |
29 | } |
30 | |
31 | int main_ag2(void) |
32 | {
|
33 | initPort_AInBOut(); //Ports initialisieren |
34 | init_ADC(0); //Single Shot |
35 | |
36 | while(1) //Polling |
37 | {
|
38 | start_ADC(); |
39 | wait_adc(); |
40 | showBar(read_adc(3)); //10 Bit ausgeben |
41 | } |
42 | return 1; |
43 | } |
44 | |
45 | int main_ag3(void) |
46 | {
|
47 | initPort_AInBOut(); //Ports initialisieren |
48 | init_ADC(1); //Single Shot |
49 | while(1) //Polling |
50 | {
|
51 | start_ADC(); //ADC starten |
52 | wait_adc(); //Warten bis Wandlung abgeschlossen |
53 | showBarBlink(read_adc(3)); //LED 7 wird zusätzlich zum Blinken gebracht. |
54 | } |
55 | |
56 | return 1; |
57 | |
58 | } |
59 | |
60 | |
61 | |
62 | ISR( ADC_vect) |
63 | |
64 | { //ISR = Interrupt Service Routine
|
65 | |
66 | TIMSK = 0x00; //output compare interrupt ausschalten. |
67 | //Initial value ist überall 0. |
68 | putByteLED_B(read_adc(2)); //die höchstwertigen 8 Bit ausgeben. |
69 | } |
70 | |
71 | |
72 | int main_ag4(void) |
73 | {
|
74 | initPort_AInBOut(); //Ports initialisieren |
75 | init_ADC(1); //Free Runnning |
76 | initPort_AInBOut(); //Ports initialisieren |
77 | start_ADC(); //ADC starten |
78 | |
79 | //erst das OCIE-Bit (Output Compare Interrupt Enable) im Register TIMSK und |
80 | //das ADIF(ADc Interrupt Flag) eins ist wird der Interrupt ausgelöst |
81 | // Interrupt bei Output Compare Match |
82 | TIMSK|= (1<<OCIE0); |
83 | sei(); //Im Status-Register wird das Global Interrupt Enable Bit gesetzt, d.h. Interrupts werden zugelassen |
84 | |
85 | |
86 | while(1); //muss auf jeden fall sein. da sonst das prog |
87 | //beendet wird und die ISR nicht ausgeführt wird |
88 | } |
89 | //////////////////////////////////////// |
90 | |
91 | ISR( ADC_vect1) |
92 | |
93 | { //ISR = Interrupt Service Routine
|
94 | |
95 | TIMSK = 0x00; //output compare interrupt ausschalten. |
96 | //Initial value ist überall 0. |
97 | showBar(read_adc(3)); //10 Bit ausgeben als Balken anzeigen. |
98 | } |