Interupt INT0 geht bei Tiny25 nicht?

Gast #1347170
Hallo,

ich versuche den INT0 des Tiny25 in Betrieb zu nehmen, aber leider 
klappt es nicht. Mit dem INT0 will ich einen Puls ausmessen

Port vorbereiten..

DDRB  &= ~(1<<DDB0);  /* Pin PB0 als Eingang */
PORTB |= (1<<PB0);    /* internen Pull-Up an PB0 aktivieren */

/* Int0 steigende Flanke / INT0 enable PB0 */
MCUCR = 0x03;
GIMSK = (1 << INT0);
sei();

in der Routine sollte der Einsprung erfolgen wenn ein Flankenwechsel 
kommt...

SIGNAL(SIG_INTERRUPT0)
{
  if( MCUCR == 0x03) // Testen auf steigende Flanke
  {
  TCNT1 = 0; // Timer1 Reset
  TCCR1 = ( 1 << CS10 | 1 << CS12 );
  MCUCR = 0x02; // INT0 fallende Flanke
  return;
  }

  if( MCUCR == 0x02 ) // Testen auf fallende Flanke
  {
  TCCR1 = 0x00; // Timer1 Stoppen
  Pulsdauer = TCNT1; // Timer1 Wert = Pulsdauer
  MCUCR = 0x03; // INT0 auf steigende Flanke
  return;
  }
}

das gleiche hatte ich schon mit einem Tiny13 gemacht und da geht es ohne 
Problem, beim Tiny25 reagiert aber der Int nicht auf einen 
Flankenwechsel am Pin (mit Oszi nachgemessen..)

was mach ich falsch???

Gruss Patrick
Gast #1347192
Fehler über Fehler....

Patrick schrieb:
> ich versuche den INT0 des Tiny25 in Betrieb zu nehmen, aber leider
> klappt es nicht. Mit dem INT0 will ich einen Puls ausmessen

Feststellung: INT0 liegt auf PB2

> Port vorbereiten..
>
> DDRB  &= ~(1<<DDB0);  /* Pin PB0 als Eingang */
> PORTB |= (1<<PB0);    /* internen Pull-Up an PB0 aktivieren */

Feststellung: Auf PB0 liegt nicht INT0 sondern PCINT0

> /* Int0 steigende Flanke / INT0 enable PB0 */
> MCUCR = 0x03;
> GIMSK = (1 << INT0);
> sei();
>
> in der Routine sollte der Einsprung erfolgen wenn ein Flankenwechsel
> kommt...
>
> SIGNAL(SIG_INTERRUPT0)

In "meinem" Datenblatt nennt sich das "INT0". Und wenn ich mich nicht 
irre, ist SIGNAL veraltet.
Gast #1347209
aua.. schande über mein Haupt... stimmt ich hab den PCINT0 mit dem INT0 
verwechselt. Kann ich mit dem PCINT0 überhaupt einen Puls ausmessen?

Gruss Patrick
Gast #1347214
Natürlich kannst du das. PCINT0 reagiert auf jeden Flankenwechsel .
D.h. der Interrupt wird sowohl bei 0->1 als auch bei 1->0 Wechseln 
ausgelöst.
Gast #1347224
Patrick schrieb:
> und wie bekomme ich mit ob es eine steigende Flanke oder fallende war?

Prüfe in der ISR den Zustand des Pins. Wen der Pin high ist, war es eine 
positive Flanke. Ist der Pin LOW, war es eine negative.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.