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
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'.
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
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.
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
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.
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
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