Forum: Mikrocontroller und Digitale Elektronik 5-Ton Auswertung mit NE567 - Interrupts


von Frank (Gast)


Lesenswert?

Hallo,
ich möchte eine 5-Ton-Folgenauswertung mit NE567s und Mikrocontroller 
aufbauen. Für jede Frequenz möchte ich einen NE567 einsetzen. Mein 
Problem ist jetzt die Signalisierung an den Mikrocontroller.
Ich möchte bei jedem erkannten neuen Ton einer Folge einen Interrupt am 
Mikrocontroller (der keine Pin Change-Interrupts hat) auslösen. Im 
einfachsten Fall könnte ich ja alle Ausgänge der NE567s über ein 
AND-Gatter an den INT0-Eingang geben.

Allerdings gehen die Töne innerhalb einer Folge fast pausenlos 
ineinander über, sodass evtl. am AND-Gatter keine Flanke erzeugt wird. 
Ich dachte deshalb an an eine Schaltung, die ungefähr so aufgebaut ist:

                  |------|
Eingang 1 --------|      |
Eingang 2 --------|      |-------- INT0 Mikrocontroller
...               |  X   |
Eingang 10 -------|      |
                  |------|


Der Block X soll bei jeder positiven Flanke seinen Ausgangspegel 
wechseln.
Allerdings weiß ich nicht so recht, wie ich das machen soll. Hat jemand 
vielleicht Vorschläge?

von Klaus (Gast)


Lesenswert?

---||--|>----------- A
            |
 ---||--|>---
    .       |
    .       |
 ---||--|>---
            |
            -
           | |
           | |
           | |
            -
            |
            -

evtl so?

:)

von Frank (Gast)


Lesenswert?

Hmm, aber auch da hab ich das Problem, dass eine positive Flanke von 
Signal 2 nicht erkannt wird, wenn Signal 1 bereits auf HIGH liegt.

von was-willst-du (Gast)


Lesenswert?

Ich denke der Kondensator zwischen Eingang und dem Pull-Down-Widerstand 
sperrt Deinen High-Pegel aus.

von Jürgen A. (jaja)


Lesenswert?

Warum so kompliziert?
5-Ton Auswertung geht doch auch ohne NE567...

Grüße,
Jürgen

von Klaus (Gast)


Lesenswert?

Hi Frank,

>5-Ton-Folgenauswertung

können zwei Töne gleichzeitig auftreten?

von Frank (Gast)


Lesenswert?

@Jürgen: Ja, z. B. indem man die Zeit zwischen zwei Nulldurchgängen des 
Signals misst. Allerdings möchte ich einen Ton auch noch detektieren, 
wenn er von Rauschen überlagert ist.

@Klaus: Ja, Doppeltöne sind auch möglich. Deshalb scheidet die einfache 
Zeitmessung aus.

von Klaus (Gast)


Lesenswert?

>Ja, Doppeltöne sind auch möglich

ups ... dann wird kompliziert!

Sag doch bitte mal was zu den Frequenzen der einzelnen Töne.

von Frank (Gast)


Lesenswert?


von Frank (Gast)


Lesenswert?

Ich bräuchte so eine Art Interrupt Encoder, der jedesmal seinen 
Ausgangspegel wechselt, wenn irgendeiner seiner Eingänge eine positive 
Taktflanke erzeugt.

Die Ausgänge der NE567s sind auch parallel am Mikrocontroller 
angeschlossen. Dieser kann dann, nachdem er einen Interrupt signalisiert 
bekommen hat, überprüfen, welche Töne gerade erkannt werden.

von Klaus (Gast)


Lesenswert?

geht evtl polling?

Oder muß es über einen Int. signalisiert werden?

von Frank (Gast)


Lesenswert?

Polling scheidet leider aus, da der Mikrocontroller in der Hauptschleife 
auch mal mehrere Millisekunden mit anderen Sachen beschäftigt ist.

von Klaus (Gast)


Lesenswert?

ach mennu (sächsisch).

evtl ein zweiter µC als Interruptdecoder?
Viel mehr fällt mir jetzt nicht mehr ein. :(

von Schnuddel (Gast)


Lesenswert?

Ich denk mal, dass du dir nen FME selber bauen willst.
Hab das auch mal mit nem PIC gemacht, hab da noch irgendwo die Sourcen 
und nen Schaltplan rumliegen ist aber in Assembler, wenn dich das nicht 
stört und kann nur eine Schleife auswerten (Haben bei uns im Ort nur ne 
Sirene).
Intresse?

von Mitleser (Gast)


Lesenswert?

Kennst du das ?

http://www2.produktinfo.conrad.com/datenblaetter/175000-199999/177202-da-01-en-NE_567.pdf

Da ist auch ein Beispiel für die Auswertung von 10 Tönen bei.

von Frank (Gast)


Lesenswert?

@Schnuddel: Eine Decodierung im Mikrocontroller habe ich auch schon 
gemacht. Hier gehts mir aber um die Nutzung vom NE567, damit die 
Erkennung auch noch funktioniert, wenn dem Nutzsignal ein recht starkes 
Rauschen oder andere Störgeräusche überlagert sind.

@Mitleser: Das Datenblatt kenn ich. Die Anwendung hilft mir aber bei 
meinem Problem nicht weiter. Im Beispiel werden DTMF-Töne dekodiert, bei 
denen in der Regel eine Pause zwischen den Tönen ist. Da kann ich alle 
10 Ausgänge an ein AND-Gatter schalten, welches mir dann im 
Mikrocontroller den Interrupt auslöst.
In einer 5-Ton Folge ist meist aber keine Pause oder nur eine äußerst 
geringe zwischen den Einzeltönen. So kann sich die Erkennung von zwei 
aufeinander folgenden Tönen durch die NE567s überschneiden und der 
Mikrocontroller erhält kein Interrupt-Signal.

von Klaus (Gast)


Lesenswert?

Hi Mitleser,

das decodieren der Töne ist nicht das Problem, wenn ich Frank
richtig verstanden habe.

Ich habs so verstanden: wenn sich die
Freq. ändert muß >ein< Interrupteingang sich ändern. (auch bei
Mischfrequenzen) um abfragen zu können welche Int.-quelle es war.

von Klaus (Gast)


Lesenswert?

Ich komme immer mehr zu dem Schluß:

Nimm einen µC der Pin-Change-"Ereignisse" erkennt!
Dann bist Du die zusätzliche Hardware und Deine Probleme los.

von Frank (Gast)


Lesenswert?

@Klaus:
Der Interrupteingang muss sich ändern, sobald ein neuer Ton anliegt. 
Welcher Ton das dann ist, kann der Mikrocontroller auslesen, weil alle 
NE567-Ausgänge auch am Mikrocontroller anliegen. So gesehen stellen 
Mischfrequenzen nicht das Problem dar.
Wichtig ist nur, dass ein Interrupt bei jedem neuen Ton erzeugt wird. 
Und wie ich das lösen soll, weiß ich noch nicht. Ich wollte die 
NE567-Ausgänge neben dem Mikrocontroller auch noch parallel an ein 
AND-Gatter schalten. Dieses sollte dann den Interrupt-Impuls erzeugen. 
Das könnte aber zu Problemen führen. Es kann ja sein, dass sich das Ende 
von Ton 1 und der Anfang von Ton 2 überschneiden. So sieht das 
AND-Gatter nur einen durchgehenden HIGH-Pegel und erzeugt keinen 
Interrupt-Impuls.

von Frank (Gast)


Lesenswert?

Wenn sich keine Lösung findet, werde ich das wohl machen müssen. 
Allerdings etwas ärgerlich, weil dann die umfangreiche bestehende 
Software eventuell abgeändert werden müsste.

von Ulrich (Gast)


Lesenswert?

Die Idee mit den Dioden ist schon nicht schlecht, allerdings besser ohne 
die Kondesatoren, oder wenn schon, dann mit zusätzlichen pulldown 
Widerständen. Dazu sollte man aber auch die Signale der NE567 direkt an 
den µC schicken. Über den einen gemeinsamen Eingang kann man dann 
erkennen ob überhaupt was kommt und dann per Polling abfragen, welcher 
Ton.

Wenn man etwas an rechenzeit übrig hat, könnte man die 5 Töne auch in 
Software erkennen:  Das Signal per AD Wandler erfassen und dann parallel 
5 einfache Bandpaßfilter in Software laufen lassen. klingt nach relativ 
viel Rechenleistung, hält sich aber in Grenzen. Man wird nur den AD 
Wandler recht häufig brauchen.  Wenns unbedingt sein muß könnte man das 
auch auf einen 2 ten µC auslagern, wäre wohl immer noch kleiner als 5 
mal NE567.

von Klaus (Gast)


Lesenswert?

Hi Ulrich,

>Über den einen gemeinsamen Eingang kann man dann
>erkennen ob überhaupt was kommt und dann per Polling abfragen, welcher
>Ton.

das Problem ist eine "Zustandsänderung" während der "Zustandsänderung"!

von Ulrich (Gast)


Lesenswert?

Bei einigen µC gibt es auch genug interruptmöglichkeiten über den Pin 
Change Interrupt.

von Heiko (Gast)


Lesenswert?

Für den Block 'X' ein (oder mehrere) EXOR-Gatter? Die sollten bei jedem 
Zustandswechsel, egal an welchem Eingang, den Ausgangszustand wechseln, 
wenn ich gerade nicht vollkommen falsch liege...

Dann muss natürlich der INT0 auf beiden Flanken ausgelöst werden -> 
eventuell im ISR umkonfigurieren, wenn er das nicht von selbst kann.

MfG, Heiko

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Hat der 567 nicht einen Open Collector-Ausgang, der bei Tonerkennung 
nach GND schaltet?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

statt einzelner EXOR geht ein Parity-Generator 74xx180 oder CMOS 4531
http://www.alldatasheet.com/datasheet-pdf/pdf/63842/HITACHI/HD74HC180.html

von Peter (Gast)


Lesenswert?

Auch wenn der µC keinen Change-Interrupts hat, aber einen Interrupt für 
eine steigende und fallende Flanke was spricht dageben, das du den 
Interrupt nach einer steigenden Flanke auf eine fallende Flanke 
umprogrammierst. So hatte ich es bei den Atmels mal gemacht die auch 
keinen Change Modus hatten.

von STK500-Besitzer (Gast)


Lesenswert?

>Auch wenn der µC keinen Change-Interrupts hat, aber einen Interrupt für
>eine steigende und fallende Flanke was spricht dageben, das du den
>Interrupt nach einer steigenden Flanke auf eine fallende Flanke
>umprogrammierst. So hatte ich es bei den Atmels mal gemacht die auch
>keinen Change Modus hatten.

Der Unterschied zwischen einen INT-Eingang und PinChange-Interrupt ist, 
dass man mehrere Pins beim PinChange-Inetrrupt so maskieren kann, dass 
mehrere Pins einen Interrupt auslösen. Ein einzelner INT-Eingang kann 
nur einen Pin "verwalten". Deswegen auch die Zusammenschaltung des 
NE567-Ausgänge. Im Prinzip handelt es sich bei der gesuchten Schaltung 
um eine externe PinChange-Auswertung.

Die einzige Alternative, die mir AVR-intern einfällt ist ein Pollig per 
Timer.

Um Impulse am Eingan zu erzeugen wäre die einfachste Lösung wirklich die 
mit den Kondensatoren wie sie oben schon aufgeführt (und erweitert) 
wurde.

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.