Atmega 128 und ADC

Gast #2513521
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
}
Gast #2513692
das sind nur die mains.
die einzelnen funktionen sind selbst natürlich auch noch definiert.

Wollte allerdings nicht alles Posten, da ich das noch abgeben muss.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.