Forum: Mikrocontroller und Digitale Elektronik Analogeingang auf pin change interrupt wechseln bei AVR


von Katrin (Gast)


Lesenswert?

Hi,

ich benutze bei einem AVR einen ADC Pin um ein analoges Signal zu lesen,
möchte aber in einem bestimmten Modus über diesen Pin einen Trigger 
empfangen,
wofür ich normalerweise einen Pin-Change-Interrupt verwenden würde.

Ich könnte jetzt versuchen, programmatisch das Analogsignal auf 
Flankenverhalten zu untersuchen, aber das fühlt sich irgendwie falsch, 
umständlich an.

Alternativ dachte ich, ob ich einfach bei Modusänderung den Pin auf PCIR 
umstelle. Allerdings frag ich mich, ob ich Interrupts innerhalb eines 
Interrupt-Handlers überhaupt einstellen kann (die Modusänderung findet 
durch ein anderes Pin Change Event statt).

Habt ihr Tipps, wie man sowas elegant lösen kann?

Hintergrund: Es geht um ein Synthesizer-Modul in dem ein Eingang in 
einem Modus die Kontrollspannung für einen LFO, in einem anderen einen 
Trigger für einen Envelope Generator bekommen soll.

von EAF (Gast)


Lesenswert?

Einfach machen!

Ich kann die Geister nicht erkennen, welche du da siehst.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Aus meinen alten Versuchen mit einem resistiven Touchpanel weiss ich, 
das Umschalten von Analogeingang zu Digitaleingang oder -ausgang 
problemlos funktioniert. Es spricht nichts dagegen, das man nach dem 
Umschalten auch gleich einen PinChange Interrupt aktiviert. Es kann 
allerdings sein, das ein IRQ ausgelöst wird, wenn der Pin noch am Ändern 
des Pegels ist. Also sicherheitshalber nochmal das IRQ Flag löschen.
Aktivieren und Scharfschalten eines Interrupts in einem anderen 
Interrupt funktioniert jedenfalls - habe ich schon oft gemacht.

von Hermann Kokoschka (Gast)


Lesenswert?

Matthias S. schrieb:
> Also sicherheitshalber nochmal das IRQ Flag löschen.

Genau DAS stimnmt! Sonst kannn der PC-Int ev. direkt nach der 
Modusumschaltung bereits feuern. Also ERST das PCINT-Flag löschen und 
DANN den PCINT aktivieren.

Klappt natürlich alles nur, wenn der AVR PCINTS auf dem ADC-PORT 
unterstützt, tun nicht alle und der AVR-TYP wurde ja nicht genannt.

von Hashan (Gast)


Lesenswert?

Komparator (AIN0 - AIN1) könnte klappen.

https://www-user.tu-chemnitz.de/~heha/hsn/chm/ATmegaX8.chm/
Suche unter Analogvergleicher

von Kurt (Gast)


Lesenswert?

Ein Moduswechel solte fehlervermeidend durchgeführt werden und kostet 
dann halt einige µC-Takte:

Vor dem Aktivieren einer geänderten Interrupt-Quelle im laufenden 
Programm wird das zugehörige Interrupt-Request-Flag gelöscht. Im 
einfachsten Fall heißt das: Flag-Register lesen und (evtl. über eine 
AND-Maskierung) wieder schreiben! - Kostet 2, oder 3 zusätzliche 
µC-Takte. Oder mehr, wenn für den Vorgang Register "gerettet" werden 
müssen.

Die andere Richtung Digital-In nach ADC-In ist zeitaufwändiger: Hier 
empfiehlt es sich meist, den ersten ADC-Sample zu verwerfen, was gern 
mal 20 µC-Takte, oder auch eine Sample-Periode kosten kann...

Wenn das zeitlich nicht reicht, braucht man mehr I/O-Pins, oder einen µC 
mit
mehr I/O-Pins.

von Katrin (Gast)


Lesenswert?

mir scheint, dass ich durch die Beschaltung des Analogeingangs jetzt da 
irgendwie keinen Interrupt mehr ausgelöst bekomme (Levelanpassung von 
Eurorack Gatespannung und Schutz gegen Negativspannung). Vielleicht bin 
ich auch nur zu doof das richtig zu programmieren.

Hab mir jetzt damit geholfen, dass ich Gate on und off analog messe und 
auf den Wechsel reagiere, also keine Interrupts dafür nutze. 
Timing-kritisch ist das ganze eh nicht, da ich irgendwo im 
Subaudio-Bereich unterwegs bin.

von Kurt (Gast)


Lesenswert?

Wenn dein Signal nicht unter 1/3 bzw. über 2/3 der Betriebsspannung 
geht, lässt es sich digital nicht sicher auswerten. 40% zu 60% reichen 
manchmal, aber nicht IMMER.
Schön, dass du einen Behelf gefunden hast.

von c-hater (Gast)


Lesenswert?

Kurt schrieb:

> Ein Moduswechel solte fehlervermeidend durchgeführt werden und kostet
> dann halt einige µC-Takte:

Nein, das ist Unsinn. Es muss nämlich überhaupt keinen Moduswechsel 
geben. Es ist problemlos möglich, PCINT und Analog an einem Eingang 
gleichzeitig zu betreiben, sprich: der ADC kann schlicht durchlaufen und 
der PCINT nach Bedarf maskiert oder nicht maskiert werden. Die 
Demaskierung (also Aktivierung) ist dabei der längste Vorgang und kostet 
schlimmstenfalls 6 Takte (wenn beide beteiligten Register im 
MMIO-Bereich liegen).

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.