Forum: Mikrocontroller und Digitale Elektronik Signalverlauf einlesen


von Addy (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

würde mich über ein paar Tips von euch freuen.

Ich möchte den Signalverlauf, im Anhang ersichtlich, einlesen.
Wie würdet ihr dies am sinnvollsten erledigen?

Ich habe mir volgendes mal überlegt:

- Einlesen per Interrupt, z.B. INT0, dann Zeitmessung starten, warten 
bis Flanke fällt und Messung stoppen, erkennen ob 0 od. 1 , in Container 
schreiben, weiterschieben, nächstes Bit.

- Per Timer selbst mit Pinpolling, und obigem Verfahren

Nun stehe ich vor dem Problem das dies so umständlich ist.

Ich habe nur 4 Bitfolgen nach obigem Schema zu erkennen, deshalb könnte 
man eine Art Tabelle anlegen und damit vergleichen. ?? Hm.. oder auch 
nicht.

Es gibt doch noch so eine Timer Capture - Compare Funktion, kann man 
damit etwas erleichtern?

So, ich hoffe ihr könnt mir einen Rat geben um möglichst einfach zum 
Ziel zu kommen, nämlich diese 4 möglichen Bitfolgen einlesen und 
unterscheiden.

Möchte einen Atiny2313 verwenden, programiere in Bascom.
Ich will keine Komplettlösung, nur gewisse Denkanstöße ;-)

Vielen Dank
Grüße
Addy

von Sonic (Gast)


Lesenswert?

Du kannst die Impulse per Interrupt INT0 oder Inputcapture ausmessen und 
je nach Breite eine '1' oder '0' zuweisen. Ich kenne das Datenformat 
nicht, das du benutzt, du müsstest das Ganze dann in eine Integer oder 
Char-Variable 'shiften'.

von Addy (Gast)


Lesenswert?

Hallo,

habe mir das ganze mal ausgemessen und versucht was zusammen zu 
schreiben. Steh aber jetzt vor dem Problem, dass wenn ich kein 
Nutzsignal empfange, also die obrige Bitfolge, ich extreme Störungen 
habe.

Es handelt sich hierbei um einen Funkempfänger, der die 4 Tastencodes 
eines Handsenders ausgibt. Ist so ein Universal-Funkteil für Auto usw.

Mit dem Oszi kann ich die Signale beim Tstendruck sauber messen, nach 
dem loslassen empfängt der Empfänger eben den "Müll" aus der Luft.

Mein Problem ist es nun die "Nutzsignalkombination" aus dem ganzen 
rauszulesen. Im Prinzip bräuchte ich eine Art Filter.

Mit dem ICP habe ich eben probiert aber auf keinen grünen Zweig 
gekommen.
Was bewirkt die "Noise Cancel" - Funktion des ICP den eigentlich 
genaueres, habe hierzu nicht wirklich ein Beispiel gefunden.

Mit dem ICP macht mir auch die kurze Impulsdauer zu schaffen, vor allem 
wegen den Störungen.

Der originale Empängerauswertschaltung hinter dem Empfangsteil besteht 
aus einem PIC mit unbekanntem Inhalt, den ich nun gerne ersetzten 
möchte, da dieser nicht alle Tastencodes implementiert hat. Deswegen der 
Aufwand.
Die Schaltung am PIC funktionier einwandfrei, ergo muss dieser die 
Signale auch irgendwie Filtern.

Ich hoffe jemand kann mir nen Tip oder ein Beispiel geben.
Im Prinzip ist die Signalgebung wie beim DCF77 nur etwas schneller.

Vielen Dank für die Mühen
Grüße
Addy

von Hubert.G (Gast)


Lesenswert?

Warum suchst du dir in der Codesammlung nicht einen DCF77 Dekoder und 
passt ihn an. Die Auswertung der 0 und 1 kannst du ja selbst definieren 
indem du festlegst eine 0 ist von 395 bis 405µsek und eine 1 von 995 bis 
1005µsek. Damit hst du schon den ersten Filter, was da nicht hineinpasst 
wird weggeworfen. Ausserdem wird es noch eine Startsequenz geben und 
wenn die Bitfolge ungültig ist wird diese ebefalls verworfen. 
Störimpulse ausserhalb des Zeitrahmen ignorieren. Das wären schon die 
wichtigsten Filter.

von Addy (Gast)


Lesenswert?

ok, danke das klingt logisch ;-)

war gestern schon müde gg

und stimmt wenn ich die 4 Nutzsignale vergleiche, haben alle bei den 
ersten 18 Bits das gleiche. (ist mir gar nicht so aufgefallen)

Werd ich mal probieren.

Also müsste falls die Auswertung die ersten Impulse erkennt und die 
zufällig in das Schema passen und dann Fehlimpulse kommen, sofort 
abgebrochen werden um dann wieder neu zu starten.

Also nicht erst die 26 bit abwarten und vergleichen, sondern direkt bit 
für bit direkt vergleichen.
Was meint ihr. Letzteres kann schneller ausschliessen, bzw reagieren.

Vielen Dank
Grüße
Addy

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hat der PIC vieleicht einfach noch nen Tiefpassfilter oder so was als 
Filterung?

von Hubert.G (Gast)


Lesenswert?

Ich würde die Startsequenz einlesen und auswerten, wenn diese OK ist die 
nächsten 8 Bit einlesen und verlgeichen.

von Addy (Gast)


Lesenswert?

Ok, danke euch zweien.

@laeubi
Also das Signal geht direkt in den PIC ohne Vorbeschaltung, ausßer dass 
intern etwas geschaltet werden kann, denke aber nicht.

@Hubert
Danke, werd ich so mal probieren.

von Michael U. (Gast)


Lesenswert?

Hallo,

schau Dir die Signale nochmal genau an. Eigentlich sollten zuerst einige 
Impulse (Sync-Bits) kommen, die nur dazu dienen, daß die 
Empfänger-Regelung einschwingt.

Vor den Daten sollte eine eindeutige identische Bitfolge (Start-Bits) 
auftauchen, an der zu erkennen ist, daß jetzt die Daten kommen. Danahc 
sollten die Datenbits kommen.

Es ist nie sicher, wieviele Sync-Bits wirklich durchkommen, weil es von 
der Empfangsqualität abhängt.

Das muß jetzt bei Dir nicht so sein, ist aber die übliche Methode, um 
solch eine Übertragung halbwegs zuverlässig zu gestalten.

Falls es so ist: die Bits in ein Register schieben und nach jedem Bit 
vergleichen, ob die Startkombination aufgetaucht ist. Dann danach die 
Daten einsammeln.
Falls es nur die Daten gibt, weil es dem Hersteller bei den 4 Bitmustern 
als sicher genug erschien, dann eben jeweils direkt auf diese 
vergleichen.

Wenn Du weist, wieviele Bits Dein Datenwort hat, brauchst Du ja nur 
diese Anzahl zum Test, den Rest dann eben wieder wegwerfen.

Gruß aus Berlin
Michael

von Addy (Gast)


Lesenswert?

Hallo,

juhu, habs geschafft.
Hab ein paar Sachen kombiniert.

- Startbedingung abwarten = 20ms Pause im Signal
- Code einlesen, gleichzeitig zwischen 0 und 1 differenzieren
- Filterung von zu kurzen bzw. langen Impulsen
- In Puffer shiften
- Nach geforderter Länge = 25 Bits vergleich mit Referenz
- Falls gleich, Freigabe zur Verwendung, ansonsten Beginn von vorne.

Vielen Dank für die Denkanstöße.

Ich wollte dies mit der ICP lösen, bin aber auf keinen grünen Zweig 
gekommen, habs nun auf einen normalen INT geklemmt und zähle selbst.

Grüße
Addy

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.