www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD Wandler ATMega8


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
  }



}

Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Summer toggeln klappt nicht!

Gruß Knut

Autor: soundmachine (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.