Forum: Mikrocontroller und Digitale Elektronik Atmega 128 und ADC


von fplumari@gmx.de (Gast)


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
}
von franki (Gast)


Lesenswert?

Beitrag bitte löschen
von Hubert G. (hubertg)


Lesenswert?

Ich sehe kein Init des ADC
Soll das Programm so lauffähig sein?
von franki (Gast)


Lesenswert?

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.
von Hubert G. (hubertg)


Lesenswert?

So wird dir aber niemand sagen könne ob es funktioniert.
Noch dazu mit den vielen toten Funktionen drinnen.
von Alexander S. (esko) Benutzerseite


Lesenswert?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.