Software Interrupt bei AVR-µC´s

Gast #4446171
Lesenswert?
• ▲
▼
Hallo,

ich arbeite mit dem Attiny 13A und habe im Datasheet gelesen, daß es 
möglich ist, trotz Einstellung des Portpins auf "Ausgang" einen Software 
Interrupt via PCINT auszulösen.

Meine Frage ist, wie das genau funktioniert.

Ich habe im COde ein SBI PinB,X gesetzt, jedoch wird  trotz I-Flag aktiv 
und Portpin auf Eingang KEIN Interrupt ausgelöst!!!

Weiß jemand evtl. warum dies so ist?
#4446290
Lesenswert?
• ▲
▼
Mathias (Gast)


>ich arbeite mit dem Attiny 13A und habe im Datasheet gelesen, daß es
>möglich ist, trotz Einstellung des Portpins auf "Ausgang" einen Software
>Interrupt via PCINT auszulösen.

Ja.

>Meine Frage ist, wie das genau funktioniert.

Genau so, wie wenn es auf Eingang stehen würden. Denn den PIN-Zustann 
kann man immer zurücklesen. Und auch die PCINT-Logik sieht immer den 
Pinszustand, egal ob der von innen oder aussen aktiv getrieben wird.

>Ich habe im COde ein SBI PinB,X gesetzt, jedoch wird  trotz I-Flag aktiv
>und Portpin auf Eingang KEIN Interrupt ausgelöst!!!

Im Simulator? Kann sein das DORT diese Funktionalität nicht korrekt 
simuliert wird. Das echte Silizium kann es.
#4446505
Lesenswert?
• ▲
▼
Was PB5 angeht...
Es funktioniert zumindest simuliert nur mit PB0..PB4. Allerdings kenne 
ich mich mit dem Simulator nicht gut aus, wer weiß ob dort noch was 
eingestellt werden muß. Es könnte allerdings durchaus Sinn machen, PB5 
ist schließlich kein normaler IO Pin.
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
#define Pin_x PB0
5
volatile uint8_t isr_zaehler = 0 ;
6

7
int main(void)
8
{
9
  //////////////////////////////////////////////////////////////////////////
10
  // PCINTerrupt
11
  GIMSK = ( 1 << PCIE);
12
  PCMSK = ( 1 << Pin_x);
13
  //////////////////////////////////////////////////////////////////////////
14
  // PORT PINS
15
  DDRB = 0xFF;
16
  sei();
17
    while (1) 
18
    {
19
    for (int i = 0; i < 5; i++)
20
    {
21
      PORTB |= ( 1 << Pin_x);    // Pin ein
22
      //PINB |= ( 1 << Pin_0);  // Toggle Pin
23
    }
24
    for (int i = 0; i < 5; i++)
25
    {
26
      PORTB &=~ ( 1 << Pin_x);  // Pin aus
27
    }
28
    }
29
}
30

31
ISR(PCINT0_vect)
32
{
33
  isr_zaehler++;
34
}

Antwort schreiben

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.

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.