Atmega 128 und ADC

Gast #2513521
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren