www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Externer Interrupt ATA6603


Autor: Marion (Gast)
Datum:

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

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.