Forum: Mikrocontroller und Digitale Elektronik AVR - Externer Interrupt an beliebigem Pin?


von Ulli (Gast)


Lesenswert?

Ich habe hier einen Atmega324PB in einer bestehenden Schaltung.
Hier würde ich gerne nachträglich noch ein DCF77-Modul hinzufügen.

Leider sind INT0-INT2 für die externen Interrupts bereits belegt. Frei 
wäre noch PE5 (SDA1). Lässt sich dieser dazu verwenden?

von Anselm (Gast)


Lesenswert?

Schau im Datenblatt nach PCINT

von S. Landolt (Gast)


Lesenswert?

PE5 gehört leider zu dem Ausnahmen laut 'Table 6-1. PORT Function 
Multiplexing'.

von Ulli (Gast)


Lesenswert?

Geht demnach also nicht, weil der PORTE die Funktion nicht unterstützt 
wenn ich das im DB richtig verstehe. Pech gehabt.

von S. Landolt (Gast)


Lesenswert?

Der gesamte PORT E? - PE0: PCINT32, PE1: PCINT33.

von Peter D. (peda)


Lesenswert?

Ulli schrieb:
> Hier würde ich gerne nachträglich noch ein DCF77-Modul hinzufügen.

Dazu nimmt man typisch einen Timerinterrupt, um bequem die Pulsdauern zu 
zählen. Für DCF77-Dekodierung eignet sich gut ein Raster von 10ms.
Den Timerinterrupt braucht man außerdem als Uhr bei Empfangsstörungen.

Externe Interrupts verwendet man nur für schnelle Sachen (<10µs) oder 
zum Aufwachen beim Stromsparen.

von Einer K. (Gast)


Lesenswert?

S. Landolt schrieb:
> PE5 gehört leider zu dem Ausnahmen laut 'Table 6-1. PORT Function
> Multiplexing'.

Nicht alles ungeprüft glauben!

Fangfrage: Welcher Pin bedient PCINT37?

von Oliver S. (oliverso)


Lesenswert?

Arduino Fanboy D. schrieb:
> Fangfrage: Welcher Pin bedient PCINT37?

Den Pin gleich neben dem von PCINT38...

Oliver

von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

> Fangfrage: Welcher Pin bedient PCINT37?

Tut mir leid, Arduino Fanboy, ich finde im Datenblatt keinen PCINT37.

von Einer K. (Gast)


Lesenswert?

S. Landolt schrieb:
> Tut mir leid, Arduino Fanboy, ich finde im Datenblatt keinen PCINT37.
Och, ich schon ....


https://ww1.microchip.com/downloads/en/DeviceDoc/40001908A.pdf
> Bits 0, 1, 2, 3, 4, 5, 6 –
> PCINT32, PCINT33, PCINT34, PCINT35, PCINT36, PCINT37,
> PCINT38: Pin
> CDS40001908A-page 85

von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

Sehr schön!
Fragt sich jetzt, was von beidem stimmt - ohne ATmega324PB kann ich es 
leider nicht ausprobieren. Aber wir haben ja Ulli.

von Hugo H. (hugo_hu)


Lesenswert?

Arduino Fanboy D. schrieb:
> https://ww1.microchip.com/downloads/en/DeviceDoc/40001908A.pdf
>> Bits 0, 1, 2, 3, 4, 5, 6 –
>> PCINT32, PCINT33, PCINT34, PCINT35, PCINT36, PCINT37,
>> PCINT38: Pin
>> CDS40001908A-page 85

Papier ist geduldig. Ich vertraue da eher auf das "alte" 
Atmel-Datasheet.

https://www.e-lab.de/downloads/DOCs/mega324PB.pdf

Hast Du das mit PCINT32 ff. mal ausprobiert?

: Bearbeitet durch User
von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

> Ich vertraue da eher auf das "alte" Atmel-Datasheet.

Aber das sieht doch noch merkwürdiger aus, mit diesem komischen PCINT7 
auf der siebten Position. Eigenartig.
  Und in beiden wird unter PCICR bzw. PCIFR ein PCINT39 angeboten.
1
Hier wendet sich der Gast mit Grausen:
2
»So kann ich hier nicht ferner hausen,
3
Mein Chip kannst du nicht weiter sein.«

von Hugo H. (hugo_hu)


Lesenswert?

S. Landolt schrieb:
>> Ich vertraue da eher auf das "alte" Atmel-Datasheet.
>
> Aber das sieht doch noch merkwürdiger aus, mit diesem komischen PCINT7
> auf der siebten Position. Eigenartig.
>   Und in beiden wird unter PCICR bzw. PCIFR ein PCINT39 angeboten.
> Hier wendet sich der Gast mit Grausen:
> »So kann ich hier nicht ferner hausen,
> Mein Chip kannst du nicht weiter sein.«

Na ja. In PCIE.. sind Gruppen von Interrupt-Pins auf Interrupts 
zusammengefasst. Davon gibt es keine 38 oder so sondern nur genau 5.

Es gibt auch PCMSK4 - nur denen ist blöderweise nur PE0 und PE1 
zugeordnet. Weiter geht es halt nicht - es sei denn jemand beweist das 
Gegenteil :-). Das man bei den maskierten Interrupts immer schauen muss, 
von welchem PIN der Interrupt kommt muss ich hier wohl keinem 
Beteiligten erklären.

von c-hater (Gast)


Lesenswert?

Hugo H. schrieb:

> Papier ist geduldig. Ich vertraue da eher auf das "alte"
> Atmel-Datasheet.

Ja, die MC-bearbeiteten strotzen leider nur so von Fehlern.

> https://www.e-lab.de/downloads/DOCs/mega324PB.pdf

Allerdings gibt es auch hier den "Widerspruch", dass für etliche PCINTs 
zwar Maskenbits existieren, die entsprechende Funktion aber nicht in der 
IO-MUX-Tabelle auftaucht.

Sowas gab es schon immer und es ist auch nicht wirklich ein Widerspruch. 
Es zeigt bei einem Auftreten in den allermeisten Fällen nur eins: dass 
es wohl in der Familie einen Controller gibt (oder zumindest ein 
solcher mal geplant war), bei dem es die entsprechende Funktion 
tatsächlich gibt. Aber bei dem konkreten Controller gibt es sie halt 
nicht.

Also, nach meiner Erfahrung würde ich das so zusammenfassen: Primäre 
Informationsquelle sollte die MUX-Tabelle sein, denn die stimmt fast 
immer.

Aber da bleibt das "fast". Und um dies auszuräumen, muss man es halt 
machen, wie es auch S. Landolt macht: man probiert es schlicht und 
einfach aus. Ist ja nun kein Hexenwerk, ein kleines Testprogramm zu 
schreiben, um sowas zu ermitteln.

von (prx) A. K. (prx)


Lesenswert?

Ulli schrieb:
> Lässt sich dieser dazu verwenden?

Wie Peter schon schrieb: Wieso Interrupt, statt Timer-gestützter 
Abfrage?

Ich hatte auch schon ein DCF77-Modul, dass prellte ähnlich wie ein 
Schalter, weil die Flanke des Signals rotzmies war. Bei Polling ist das 
egal, bei Interrupt nicht.

von Einer K. (Gast)


Lesenswert?

S. Landolt schrieb:
> Sehr schön!
> Fragt sich jetzt, was von beidem stimmt - ohne ATmega324PB kann ich es
> leider nicht ausprobieren. Aber wir haben ja Ulli.
Ja.

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.