www.mikrocontroller.net

Forum: GCC Atmega8-16 ADC-ISR


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Bertram M. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

 uint16_t adcval;
 volatile uint16_t ADC_wert;

ISR(ADC_vect)
{ 
 ADC_wert = ADCW;
} 

void ADC_Init(void)
{
  ADMUX = (0<<REFS1) | (1<<REFS0);
  ADCSRA =  (1<<ADEN) | (1<<ADSC) |(1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) |    (1<<ADPS0);     // Frequenzvorteiler auf 128
}

int main(void)
{  

  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 

  ADC_Init();

  sei();                                   //Globale Interrupts Freigeben

 for (;;)
 {   
  adcval = ADC_wert;
  
  uint8_t HighBytex = adcval >> 8;
  uint8_t LowBytex  = adcval;

  uart_putc(HighBytex); //High-Byte?
  uart_putc(LowBytex);   //Low-Byte 
 }
}

Autor: Oliver S. (oliver_s)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Uwe S. (de0508)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net