www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Signalverlauf einlesen


Autor: Addy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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'.

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat der PIC vieleicht einfach noch nen Tiefpassfilter oder so was als 
Filterung?

Autor: Hubert.G (Gast)
Datum:

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

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.