mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik interrupt problem


Autor: Thorran Microlovic (kleineronkel)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wollte mal einen Interrupt mit meinem tiny13 realisieren, leider
funktioniert es nicht.
Es soll, wenn PB0(PCINT0) eine LOW-Flanke "sieht" in die ISR
gesprungen werden, leider tut mein tiny dies nicht. Sitze jetzt schon 4
Stunden dran und ich finde den Fehler nicht. Vieleicht kann mir ja
jemand weiterhelfen, danke schon mal im vorraus.

Autor: (geloescht) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(Dieser Beitrag wurde geloescht)

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du den Programmieradapter auch abgezogen ? Oder einen 244er
Programmieradapter ? (mit Latch)

In MCUCR muss für falling edge ("low flanke" wie du sagst) bit ISC00
gelöscht und bit ISC01 besetzt sein.
Also:
MCUCR = (1<<ISC01) oder MCUCR = 0b00000010

PCMSK muss gelöscht sein, da hier nur Pinchange Interrupts definiert
werden
PCMSK = 0

Außerdem setze mal in DDRB alles auf 0, und in PORTB Bit0 auf 1 (Pullup
(falls benötigt)). Ansonsten extern Pullup!

Außerdem nach "isr" noch ein paar befehle einfügen ;)

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An PB0 ist kein PCINT (=Pin Change Interrupt) sondern ein INT
(Interrupt).

Pinchange interrupts reagieren immer auf jede high/low transition.
Interrupts reagieren auf das, worauf man sie programmiert.

Autor: Thorran Microlovic (kleineronkel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, ich muss dazu sagen daß ich ein blutiger anfänger bin, und dies mein
erstes Programm mit einem interrupt ist. Natürlich habe ich es erst
einmal mit dem Datenblatt brobiert (4Stunden lang), leider habe ich es
nicht hinbekommen. Könnte mir nicht jemand sagen wie der code aussehen
müsste? bzw ein Codebeispiel schicken?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> An PB0 ist kein PCINT (=Pin Change Interrupt) sondern ein INT
> (Interrupt).

Nein. Der INT0 ist auf PB1.

@Thorran:

Du mußt dir zunächst mal überlegen, was du genau willst. Das, was du in
deinem Ursprungsposting geschrieben hast, geht so nämlich nicht. PCINT
und INT0 sind zwei verschiedene, voneinander unabhängige Interrupts. Da
du in deinem Code beide kunterbunt mischst, nehme ich an, daß dir das
nicht bewusst war.
Bei PCINT kannst du einstellen, auf welche I/O-Pins er triggern soll,
dafür triggert er aber immer auf beide Flanken.
INT0 ist fest mit PB1 verdrahtet, aber dafür kann man einstellen, auf
welche Flanke(n) er triggern soll.

Autor: Thorran Microlovic (kleineronkel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke euch allen für die Antworten, bin halt ein anfänger, was solls
jetzt funktioniert es.

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.