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?
@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.
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.
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?
@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.
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.
@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.
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.
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.
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"!
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
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.
>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.