Externer Interrupt ATA6603

Gast #996581
Hallo zusammen,

leider muss ich nun eine Frage stellen, bei der viele von Euch wohl die 
Augen verdrehen werden. Ich bin noch unerfahren im µC-Programmieren und 
komme mit den Interrupts nicht weiter. Eigentlich möchte ich, dass meine 
LEDs auf einen Schalter reagieren. Dazu habe ich (mit Hilfe des 
Tutorials) folgenden Code geschrieben. Ich habe hier nur den 
interruptrelevanten Teil eingefügt, da ich verschiedene c-, bzw. h-Files 
habe. Die LEDs leuchten, wenn ich sie über das Programm ein-, bzw. 
ausschalte, sie reagieren aber nicht auf den Schalter.

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include "Functions.h"
#include "Variables.h"
#include <inttypes.h>

int main (void)
{
  DDRD &= ~(1<<PD2); //PD2 als Eingang festlegen
  PORTD |= (1<<PD2); // Pullups aktivieren

  while(1)
  {
    if (DDRD & (1 << PD2))
    ein();
    else if (!(DDRD & (1 << PD2)))
    aus();
  }
   return(0);
}

void aus(void)
{
  uiPWM1Match = 0;
  InitTimer0();
  InitTimer1();
}

void ein(void)
{
  uiPWM1Match = 50;
  InitTimer0();
  InitTimer1();
}


Ich habe auch schon überlegt, ob es nicht auch mit folgender 
while-Schleife funktionieren müsste:

  while(1)
  {
    if (PD2 == 0)
    ein();
    else
    aus();
  }

Irgendwas habe ich wohl komplett falsch verstanden, denn die 
Schaltererkennung funktioniert leider gar nicht.
Ich möchte natürlich nicht, dass Ihr meine Arbeit macht aber für ein 
paar Tipps wäre ich sehr dankbar. Z.B. Habe ich nicht ganz verstanden, 
wie das mit dem Interrupt überhaupt funktioniert: Zuerst setzte ich den 
Pin auf 0, damit er als Eingang definiert ist, ist das richtig? Und 
dann? Ist es dann genau dieser Pin, den ich einlese? Das würde ja 
bedeuten, dass über den Schalter evtl. ein anderes Signal auf den Pin 
kommt als ich programmiert habe...
Ich glaube, dass hier mein Denkfehler ist aber leider komme ich allein 
nicht weiter.
Es wäre nett, wenn mir jemand helfen könnte.

Ach so: Ich benutze AVR Studio...als µC habe ich den ATA6603.

Vielen Dank im Voraus!!!
Marion

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.