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?
---||--|>----------- A | ---||--|>--- . | . | ---||--|>--- | - | | | | | | - | - evtl so? :)
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.
Ich denke der Kondensator zwischen Eingang und dem Pull-Down-Widerstand sperrt Deinen High-Pegel aus.
Hi Frank,
>5-Ton-Folgenauswertung
können zwei Töne gleichzeitig auftreten?
@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.
>Ja, Doppeltöne sind auch möglich
ups ... dann wird kompliziert!
Sag doch bitte mal was zu den Frequenzen der einzelnen Töne.
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.
geht evtl polling? Oder muß es über einen Int. signalisiert werden?
Polling scheidet leider aus, da der Mikrocontroller in der Hauptschleife auch mal mehrere Millisekunden mit anderen Sachen beschäftigt ist.
ach mennu (sächsisch). evtl ein zweiter µC als Interruptdecoder? Viel mehr fällt mir jetzt nicht mehr ein. :(
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?
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.
@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.
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.
@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"!
Bei einigen µC gibt es auch genug interruptmöglichkeiten über den Pin Change Interrupt.
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
Hat der 567 nicht einen Open Collector-Ausgang, der bei Tonerkennung nach GND schaltet?
statt einzelner EXOR geht ein Parity-Generator 74xx180 oder CMOS 4531 http://www.alldatasheet.com/datasheet-pdf/pdf/63842/HITACHI/HD74HC180.html
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.