PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] ATtiny13A: Pin Change Interrupt vs. INT0



Bernd_Stein
08.03.2020, 17:21
Hallo zusammen,

was ist der Sinn dieser 3 kaskadierten D-Flip-Flops, ich meine wofür braucht man die dreifache Verzögerung?

34887


Überhaupt, wozu brauche ich die PCINT, wenn ich doch die INT0 per :


" Any logical change on INT0 generates an interrupt request "


konfigurieren kann?

Gut, eine PCINT kann ich an jedem beliebigen Portpin haben und die INT0 ist an PB1 gebunden, aber das kann doch nicht der Grund für die Existenz der PCINT sein?

Bernd_Stein

Klebwax
09.03.2020, 08:49
Solche D-Flip-Flops dienen eigentlich nicht zur Verzögerung. Sie sind dazu da, asynchrone Signale für synchrone Schaltungen zu konditionieren. In synchronen Schaltungen, und eigentlich alle komplexen Schaltungen in einem Chip sind heutzutage synchron, dürfen sich Signale nicht zu jedem Zeitpunkt ändern. Bei den linken beiden FFs sieht man das deutlicher. Da findet man den Signalnamen "pin_sync", der das andeuted. An den rechten findet man ebenfalls Signalnamen. Wenn man den inneren Aufbau des Prozessors genauer kennt, könnte man Vermutungen über deren Funktion anstellen.

Der Pin-Change Interrupt ist eigentlich ein suboptimales Konzept. Wenn der Eintritt, muß der Interrupthandler erstmal feststellen, welcher Pin da gezuckt hat. Bis das passiert, kann schon etwas Zeit ins Land gegangen sein und der Pin ist möglicherweise längst wieder in den Anfangszustand zurückgegangen. Nun weiß der Interrupthandler nicht, wer den Interrupt ausgelöst hat. Oder es hat sich inzwischen ein anderer Pin geändert. Sinn macht er eigentlich nur, wenn man ein Bündel von Signalen überwachen will. So z.B. wenn man mehrere Bausteine mit Interrupt-Ausgängen hat, die aktiv bleiben, bis sie der µC aktiv zurück setzt. Das entspricht in etwa dem Konzept von Shared Interrupts auf dem PCI-Bus.

Bei einem einfachen Interrupt ist klar was los war, selbst wenn der Auslöser ein relativ kurzer Puls (wegen der linken Flipflops mindesten ein Takt lang) war.

MfG Klebwax

avr_racer
11.03.2020, 18:55
https://ww1.microchip.com/downloads/en/devicedoc/doc2535.pdf

Seite 45 9.2 und 9.2.1 stehn die Antworten drin. Wird der KERN in einem Sleepmode geschickt welcher den Takt anhält gibt es für synchronisierte Signale keine Möglichkeit erfasst zu werden bzw den µC aufzuwecken. Somit hat man die PCINT ins Leben gerufen wenn der LOW-Level an INT0 nicht genutzt werden kann aber man möchte den µC wecken, wird dies über asynchrone Signale umgesetzt an anderen PINs. Somit haat man sich mehr Bandbreite geschaffen zu REAGIEREN.

Die PCINT haben nur einen Nachteil das sie vom Prinzip her nur eine INT-Handler haben, heist alle PCINT's laufen dort auf. Speichrt man in dem PCINT-Handler das Flag des PINS der diesen ausgelöst hat kann man daraus mehrer SUB-Handler generieren und kann z.B. so per "gemultiplexten" PCINT verschiedene Aktionen vorrangig zum Hauptprogramm behandeln.

Klebwax
12.03.2020, 10:49
Wird der KERN in einem Sleepmode geschickt welcher den Takt anhält gibt es für synchronisierte Signale keine Möglichkeit erfasst zu werden bzw den µC aufzuwecken.

Sleep hatte ich gar nicht auf dem Radar, benutze es zu selten. Aber du hast recht, das ist ein wichtiger Unterschied zwischen den anderen Interrupten und dem Pinchange Interrupt.

MfG Klebwax

Bernd_Stein
12.03.2020, 20:14
Danke an euch beide für eure Ausführungen.

" Note that if a level triggered interrupt is used for wake-up from Power-down, the required level must be held long enough for the MCU to complete the wake-up to trigger the level interrupt. "

Wie lange muss denn das Level beim INT0 gehalten werden um den IRQ auszulösen - also wie viele Takte, wenn der µC erwacht ist?

Gibt es eine Interrupt bei den AVR's, die erst auftritt, wenn ein Pegel eine gewisse Zeit vorhanden ist?

Ich bräuchte so etwas, um den AVR erst dann aus dem Power-Down-Mode zu wecken, wenn der Low-Pegel länger als 8ms anhält.

Es geht um die Auswertung einer Funksteckdose, die vermutlich auf dem CY800 basiert.

Siehe auch :

https://www.mikrocontroller.net/topic/487338#6099487


Bernd_Stein

avr_racer
12.03.2020, 20:44
Seite 46 unter 9.3 lesen

Flankenwechsel minimum 1 clock
Level bsi der Int angesprungen wird.

Bernd_Stein
12.03.2020, 21:18
Seite 46 unter 9.3 lesen

Flankenwechsel minimum 1 clock
Level bsi der Int angesprungen wird.

Danke.
Richtig blöd, dass man sich die Informationen aus verschiedenen Stellen des Datenbuches zurechtsuchen muss.
Hätten die auch mal in der generellen Beschreibung mit reinpacken können.


Bernd_Stein

Bernd_Stein
17.04.2020, 16:17
1. Wie lange muss denn das Level beim INT0 gehalten werden um den IRQ auszulösen - also wie viele Takte, wenn der µC erwacht ist?

2. Gibt es eine Interrupt bei den AVR's, die erst auftritt, wenn ein Pegel eine gewisse Zeit vorhanden ist?

3. Ich bräuchte so etwas, um den AVR erst dann aus dem Power-Down-Mode zu wecken, wenn der Low-Pegel länger als 8ms anhält.


Zu 1.
Hatte ich mal den ATtiny13A im Auslieferungszustand untersucht :
Bei 12,15µs wird die INT0-ISR also noch nicht angesprungen.
Erst bei einer Low-Pegelzeit von 12,20µs geschieht dies.

Zu 2.
Eine gewisse Zeit schon, aber nicht wie ich es brauchte.
Detailierter hier -> kurz über 7.1 Sleep Modes lesen :

https://www.edv-dompteur.de/forum/index.php?page=Thread&postID=3832#post3832

Zu 3.
Habe ich mittels retriggerbarem Monoflop ( 4538 ) gelöst.


Bernd_Stein