AD Wandler ATMega8

Gast #1980318
Lesenswert?
• ▲
▼
Hallo,

ich folgenden Code programmiert, dieser funzt leider nicht. Wenn ich das 
ganze in AVR Studio simuliere bleibt der im ADC Interrupt hängen. 
Warum???
Warum geht er nicht ins Hauptprogramm zurück?

Vielen Dank für eure Hilfe


#include <avr/io.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>




volatile unsigned char tick,adcwert;

void init_timer0 (void)
{
  TCCR0 = 0x03;    // Prescaler OSC/Takt /64 = 57600 Hz
  TIMSK = 0x01;    // Setzt Interrupt für Timer0 1
  TCNT0 = adcwert;   // Startwert setzen

}

void ADC_init (void)
{
  ADMUX = 0x00;  // Channel 0
  ADCSRA = 0xDD;  // Prescaler /32 Int Enable; Single Shot Betrieb
}


ISR(TIMER0_OVF_vect)

{


  TCNT0 = adcwert;   // Startwert von AD Wandler übernehmen
  PORTB=!0x01;  // Summer ein/ausschalten, wenn er aus/an ist

}

ISR(ADC_vect)
{
  adcwert = ADCL;    // ADC Wert der Variable adcwert zuweisen
  ADMUX = 0x00;    // Channel 0 auswählen
  ADCSRA = 0xDD;    // AD Wandler neu starten
}



void main (void)
{


    SREG=0x80;  // alle Interrupts neu einschalten
    DDRB=0x07;  // PortB Pin 0,1,2 als Ausgang schalten
    ADC_init();  // ADC Initialisieren


  while(1)
  {
    if (ADIF==1)

      init_timer0();
  }



}
Gast #1980422
Lesenswert?
• ▲
▼
HI, ich bin jetzt nicht soooo der fachmann, dennoch fallen mir ein paar 
sachen auf die ich nicht verstehe-->ergo es daran leigen könnte.


wieso stellst du die interrupts VOR die main loop, macht man die aufrufe 
der isr nicht normalerweise DAHINTER. In assembler ist das ja durch 
Sprungmarken etc. klar definiert, aber was macht C daraus?

2. Wieso ist dein 1024 bit ADC Wert als Charvariable deklariert?

3. Wieso liest du nur die 8 untreren Bit deiner ADC Wandlung aus,,,,die 
8 oberen könnte ich ja vielleicht noch verstehen aber das macht keinen 
sinn.

 und als letztes. dein ADIF wird erst DANN zurückgesetzt wenn du high 
UND low ausgelesen hast.


Hoffe in einem der Punkte liegt der Fehler...schönen Abend noch

Antwort schreiben

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.

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.