Hallo, ich (Anfänger) möchte auf meinem PIC 22kHz modulierte Signale erkennen. Es handelt sich um DiSEqC, d.h. moduliert wird mit einer Art On- Off-Keying. Dazu müssen Bursts mit einer Gesamtlänge von einem einzelnen Burst 1,5ms (22kHz, 0 Bit 22 Zyklen in 1ms und 0,5ms Pause, 1 Bit 11 Zyklen in 0,5ms und 1ms Pause) detektiert werden. Jetzt die alles entscheidende Frage : Um die Bits 0 und 1 erkennen zu können, reicht es dem Signal die jeweiligen Zyklen des 0/1er Bit-Bursts zu erkennen oder muss ich auch noch die Pausenintervalle zwischen den Zyklen berücksichtigen? Wenn ich die Erkennung der Pausen weglassen könnte würde das viel Aufwand sparen. Wäre für Erfahrungen von anderen dankbar. Gruß Wolf
@daniel Vielen Dank für deine Antwort! Den Sprut kenne ich schon. Mir geht es eher in Richtung Protokoll um die Bits erkennen zu können. Das Signal an sich, die Bursts mit 22kHz erkenne ich ja schon, nur will ich wissen ob ich wirklich zu jedem zugehörigen Bit die jeweilige Sendepause erkennen muss. Bei dem 0er Bit ist die Pause 0,5ms lang, beim 1er Bit 1 ms. Ich dachte es reicht, wenn kurz festgestellt werden kann, ob zwischen den jeweiligen Zyklen eine kurze Sendepause gewesen ist. Denn wenn man zu jedem Bit ein eigenen Programmteil schreibt um die jeweilige Pause erkennen zu können, kostet das natürlich auch Ressourcen, und der ist in einem Interrupt begrenzt, ich will nicht in einen "worse case" gelangen weil ich zuviele unnötige Unterprogramme im Interrupt ablaufen lasse. Grüße Wolf
Hier habe ich mal eine grafische Darstellung wie die Bursts aussehen: http://www.satshop.com/dis61.gif Hier ein komplettes PDF über DiSEqC : http://www.spaun.de/files/8df79_de_DiSEqC_fur_Techniker_.pdf auf Seite 5 ist nochmal die Grafik etwas größer. Gruß Wolf
> Um die Bits 0 und 1 erkennen zu können, reicht es dem Signal die > jeweiligen Zyklen des 0/1er Bit-Bursts zu erkennen oder muss ich auch > noch die Pausenintervalle zwischen den Zyklen berücksichtigen? Wenn ich das richtig verstehe fragst du ob es reicht die Dauer der angeschalteten Modulation (22kHz da) zu ermitteln oder ob noch zusätzlich die Zeit mit der ausgeschalteten Modulation ermittelt werden soll?
@Jörg S. Ja genau! Wenn ich nur die Zeit nehme, wo das 22kHz Signal da ist, um zu erkennen ob es ein 0 oder 1 Bit ist, müsste das eigentlich ausreichen? Dann wäre die Pause zwischen dem Signal irrelevant, d.h. es reicht wenn die Pause zwischen den Signalen sehr klein ist. Somit könnte man doch auch den Empfang unempfindlicher machen gegen Übertragungsstörungen jeglicher Art. Zumal es ein Haufen Resourcen kostet für jedes Bit eine bestimmte Zeit detektieren zu müssen, das wäre ganz schön aufwendig.
Na ja, für so aufwenig halte ich das jetzt nicht wirklich. Einen DiSEqC Slave hab ich locker in einen 1kB MSP430 reinbekommen. > Somit könnte man doch auch den Empfang unempfindlicher machen gegen > Übertragungsstörungen jeglicher Art. Kommt darauf an wie man es sieht. Kommt eine Störung innerhalb der "Ruhepause" (22kHz aus) würdest du sofort wieder (fälschlicherweise) mit einem neuen Bit anfangen. Wenn man aber weiss das man innherhalb der Ruhepause ist (Timer abfrage) kann man diese Störung erkennen.
Hallo, die Bit erkennung könnte man gut mit dem ccp modul (capture mode) des pic´s machen (siehe pic datasheet seite 78) gruß Dennis
@Jörg S. Ahja, interessant, naja ich meinte mit Resourcen eher den "worse case", ich will nicht so viele Befehle in der Interruptroutine haben, ich detektiere nämlich vorher schon die 22kHz als zusätzliches Programm, d.h. ich warte bis an einem Pin der Interrupt ausgelöst wird. Da muss ich nun einen Zeitschlitz von ungefähr 50µs in der Interrupt-Routine beachten (22kHz=45µs pro Periode). > Kommt darauf an wie man es sieht. Kommt eine Störung innerhalb der > "Ruhepause" (22kHz aus) würdest du sofort wieder (fälschlicherweise) mit > einem neuen Bit anfangen. Wenn man aber weiss das man innherhalb der > Ruhepause ist (Timer abfrage) kann man diese Störung erkennen. Das ist mir klar aber : Bei jedem Pin-Interrupt zähle ich einen Zähler auf der mir die Anzahl der Zyklen (Perioden) des Signals wiedergibt (0 Bit = 22 Zyklen, 1Bit = 11 Zyklen). Da wäre doch deine Vermutung mit ausgeschlossen ? Eine Störung, die genau 22 oder 11 Zyklen hinterlässt wäre die Wahrscheinlichkeit eher gering ? @w124Dennis >die Bit erkennung könnte man gut mit dem ccp modul (capture mode) des >pic´s machen damit habe ich mich noch nicht beschäftigt, könntest du bitte etwas genauer erläutern was du meinst ? Danke im Voraus. PS. Danke für die Antworten habe schon gedacht ich schreibe als Anfänger zuviel Kauderwelsch ;) Gruß
> Bei jedem Pin-Interrupt zähle ich einen Zähler auf der mir die Anzahl > der Zyklen (Perioden) des Signals wiedergibt Ach so, ich dachte du gehst "den üblichen Weg" wo das aktive 22kHz Signal gleichgerichtet wird.
@Jörg S. > Ach so, ich dachte du gehst "den üblichen Weg" wo das aktive 22kHz > Signal gleichgerichtet wird. Den üblichen Weg kenne ich leider nicht, ich habe halt ein Projekt und versuche halt mit meinem Wissen was zu realisieren ;-) Irgendwelche Schaltungen vor dem Microcontroller sollen nicht dazukommen, nur einen Filter den ich schon designed habe.
Hallo, Positive Flanke -> Capture modul fängt an zu zählen (timout starten) Negative Flanke -> Interrupt und capture modul auslesen Falls keine flanke mehr kommen weisst du über den timeout das ein bit zuende ist und kannst dann die empfangenen signale auswerten, oder auch einfach nur die gesamtzeit. Die ext interrupt variante geht natürlich auch. aber natürlich ohne die genaue information über die länge der burstimpulse. möchtest du
Hallo Wolf, bist du schon weitergekommen bei diesem Projekt? Funktioniert deine Auswertung? Gruß Günther
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.