Forum: Compiler & IDEs Atmega8-16 ADC-ISR


von Bertram M. (Gast)


Lesenswert?

Ich nutze ein ATmega8 16MHz und wollte den ADC-Interrupt mal versuchen 
ihn umzusetzen ,nachdem ich das ADC-Tutorial erfolgreich umsetzen 
konnte.
die Geschichte mit dem interrupt da happerts, ich bekomme als ausgabe 
nur immer Null anstatt den ADC-Wert.

Die uart-funktionen hab ich jetzt mal nicht mit angehängt.

vielleivht weiß einer von euch wass ich hier falsch mach
1
 uint16_t adcval;
2
 volatile uint16_t ADC_wert;
3
4
ISR(ADC_vect)
5
{ 
6
 ADC_wert = ADCW;
7
} 
8
9
void ADC_Init(void)
10
{
11
  ADMUX = (0<<REFS1) | (1<<REFS0);
12
  ADCSRA =  (1<<ADEN) | (1<<ADSC) |(1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) |    (1<<ADPS0);     // Frequenzvorteiler auf 128
13
}
14
15
int main(void)
16
{  
17
18
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
19
20
  ADC_Init();
21
22
  sei();                                   //Globale Interrupts Freigeben
23
24
 for (;;)
25
 {   
26
  adcval = ADC_wert;
27
  
28
  uint8_t HighBytex = adcval >> 8;
29
  uint8_t LowBytex  = adcval;
30
31
  uart_putc(HighBytex); //High-Byte?
32
  uart_putc(LowBytex);   //Low-Byte 
33
 }
34
}

von Oliver S. (oliver_s)


Lesenswert?

Hi,

mit deinem Code wird genau eine Wandlung durchgeführt. Wenn die beendet 
ist, wird das ADSC-Bit in ADCSRA von der Hardware zurückgesetzt und es 
findet keine Wandlung mehr statt. Um mehr Wandlungen zu machen, musst du 
entweder nach jeder Wandlung das ADSC-Bit neu setzen oder du benutzt den 
Free-Running-Mode (ADFR in ADCSRA), dann wird kontinuierlich (unabhängig 
von ADSC) gewandelt.

Viele Grüße
Oliver

von Uwe (de0508)


Lesenswert?

Hallo Bertram M.

Dein Hauptprogramm kommuniziert nicht mit der ADC ISR Routine - wann 
weiß es also, wann ein neuer Messwert vorliegt ?

Stichwort: Boolesche Variable , Trigger , volatile

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.