Forum: Mikrocontroller und Digitale Elektronik Externer Interrupt ATA6603


von Marion (Gast)


Lesenswert?

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

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.