Forum: Mikrocontroller und Digitale Elektronik interrupt problem


von Thorran M. (kleineronkel)


Angehängte Dateien:

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.

von (geloescht) (Gast)


Lesenswert?

(Dieser Beitrag wurde geloescht)

von Simon K. (simon) Benutzerseite


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 ;)

von Simon K. (simon) Benutzerseite


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.

von Thorran M. (kleineronkel)


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?

von Rolf Magnus (Gast)


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.

von Thorran M. (kleineronkel)


Lesenswert?

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

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.