Forum: Mikrocontroller und Digitale Elektronik Komparator von Mega8 führt ISR immer 2x aus


von jürgen (Gast)


Angehängte Dateien:

Lesenswert?

hallo,

ich habe mir mit einem mega8, ein mikro(am AnalogkomparatorAIN0) und 
einem Spannungsteiler(am Analogkomparator AIN1) einen Klatsch-schalter 
gebaut.

Funktioniert alles soweit - bis auf das, dass meine 
Analog-Komparator-ISR bei jedem "Klatschen"  also Interrupt, zweimal 
aufgerufen wird(d.h. mein Indikator,eine LED, blinkt zweimal).

Habe extra eine lange Warteschleife eingebaut - aber es hilft nichts.

Warum wird der Analog-Komparator-Interrupt generell 2x ausgeführt??

Danke
J.

von Matthias Kölling (Gast)


Lesenswert?

Hallo,

könnte es sein, dass dein Komparator bei Über- und Unterschreiten des 
Vergleichswertes anspricht? Kann mich dunkel erinnern, dass es diese 
Möglichkeitem beim ATmega48 gibt.

Gruß Matthias

von jürgen (Gast)


Lesenswert?

nein nur beim überschreiten. muss jetzt aber etwas hinzufügen : manchmal 
führt er die ISR nur einmal aus. Verwunderlich ist aber warum er sie 
manchmal auch nach einer Sekunde wartezeit wieder aufruft - obwohl der 
Schall am Mikro durch ein Klatscherer schon längst verstummt ist !

von Peter P. (bonsaibaum)


Lesenswert?

ev. ein echo ?

halt doch mal ein oszi an den eingang ... wäre interressant was da 
ankommt ....

von AVRFan (Gast)


Lesenswert?

>Verwunderlich ist aber warum er sie
>manchmal auch nach einer Sekunde wartezeit wieder aufruft - obwohl der
>Schall am Mikro durch ein Klatscherer schon längst verstummt ist !

Daran ist überhaupt nichts verwunderlich - im Gegenteil.  Du hast 
offenbar nicht verstanden, wie Interrupts funktionieren.

Ich würde einfach den Output des Analog Comparators alle 10 ms 
(Beispielwert) zyklisch abfragen.  Nach dem ersten Ereignis mittels 
eines Zählers die Ergebnisse während der darauffolgenden 50 Zyklen 
ignorieren, dann wieder freischalten - fertig.

(Warum glauben manche Leute, sie müssten alles mit Interrupts machen?)

von Hannes L. (hannes)


Lesenswert?

AVRFan wrote:

> (Warum glauben manche Leute, sie müssten alles mit Interrupts machen?)

Vermutlich wollen sie nur den Timer-Interrupt meiden...

;-)

...

von AVRFan (Gast)


Lesenswert?

lach Daran wirds liegen... zurückgrins

@Jürgen:

Man sollte nicht alles mit Interrupts machen, aber auf den 
TIMER-Interrupt nur verzichten, wenn es gute Gründe dafür gibt.  Ein 
Timer eröffnet einem Programmierer die Möglichkeit, den µC in 
REGELMÄßIGEN Zeitabschnitten Dinge tun lassen zu können. Das ist von 
unschätzbarem Wert, weil ein Programm, in dem möglichst viele Aufgaben 
synchron und zeitlich geordnet "von Tick zu Tick" abgearbeitet werden, 
viel leichter zu verstehen und zu kontrollieren ist.  Will oder muss man 
darüberhinaus aus speziellen Gründen etwas asynchron abwickeln, kann man 
DAS dann prima über die Interrupts erledigen.

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.