Forum: Mikrocontroller und Digitale Elektronik AD Wandler ATMega8


von Thomas (Gast)


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();
  }



}

von Knut (Gast)


Lesenswert?

Dein Summer toggeln klappt nicht!

Gruß Knut

von soundmachine (Gast)


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

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.