Frequenzschalter

#867841
Lesenswert?

Aus einem Funkempfänger kommt im Ruhezustand ein Impulssignal 3,65V 
Tastgrad ~33% f~7Hz.
Wenn ein Taste des Senders betätigt wird, kommt ein wechselndes 
Bitmuster f=2kHz mit 20ms Pause am ende.
Wenn dieses Signal ( Taste gedrückt ) anliegt, möchte ich ein High-Pegel 
(TTL) am Ausgang des uC haben.

Meine Idee wäre so ne Art "Frequenzschalter" der ab ca. 1,5kHz 
durchschaltet und einen 30ms "Nachlauf" für die Pause hat.
Hat jemand en Programmvorschlag?

Mit welchen µC könnte man sowas machen??
ATtiny15L wäre vom Aufbau (2 Timer) und Bauform (DIL 8) ideal!

Gruß Dennis
#867912
Lesenswert?

Schon berechnet und ausprobiert!
Geht nicht a)wegen der 40ms-Pause am Ende des Bitmusters, b)wegen 
aufeinander folgenden "0" im Muster ( ...10100100...), c) Signal bricht 
bei zu "großer" Belastung zusammen( Impedanzwandler geht auch nicht ).
Ein weiteres pro uC ist, auf der Platine ist Ub=5V schon vorhanden.

Klar, würde bestimmt irgendwie gehn, jedoch mit einer größeren Anzahl 
von Bauteilen.
#867920
Lesenswert?

Dennis,

Bei der relativ kleinen Signalfrequenz sehe ich da keine Probleme.
Ich würde das mit einem Tiny15 im Timer-Interupt pollen und entsprechend 
auswerten. Ich persönlich mache sowas immer für IR-Fernbedienungen, die 
dann also im Hintergrund abgefragt werden. Das klappt tadellos sogar mit 
höheren Signalraten, als Du sie hast.

Jochen Müller
Gast #868721
Lesenswert?

jo genau die meinte ich... ich verstehe jetzt nicht mehr genau wo du was 
ansteuern willst? Wenn am Sender eine Taste gedrückt wird, soll am 
empfänger ein Highpegel anliegen?  oder soll dieser Highpegel im sender 
einen uC ansteuen?  erläuter mal bitte genauer.
#868736
Lesenswert?

Wenn ich am Sender eine Taste drücke/halte, wird vom Sender aus dieses 
Bitmuster gesendet. Dieses kommt am Empfänger an. Ob dieses Muster ( wie 
schon gesagt, variieren einzelne Bits ) am Ausgangspin des Empfängers 
anliegt, möchte ich mittels uC anfragen. Wenn ja, möchte ich einen 
HIGH-Pegel am Ausgang des uC, welchen ich dann in einer TTL-Schaltung 
weiter verarbeite.

Vom Prinzip her:
Taste gedrückt/gehalten > LED an
Keine Taste gedrückt > LED aus
#868843
Lesenswert?

Vom Tiny15 konnte ich jetzt auf die Schnelle kein Datenblatt
bei Atmel finden.

Der hat doch sicherlich auch einen Input Capture (ICP) auf einem
Timer?
Wenn ja, dann ist das doch einfach:
Input Capture auf fallende Flanke und jeweils mit dem Timer die
Zeit von einer fallenden Flanke zur nächsten feststellen.
Liegt sie unter einem Grenzwert, dann liegt die schnelle
Schwingung an -> Ausgang schalten.
Liegt sie 2, 3, 4, ..., 10 mal in Folge über den Grenzwert,
dann ist die schnelle Schwingung weg -> Ausgang in die andere
Richtung schalten.

Fettich.
#868927
Lesenswert?

Hab noch nicht so viel Praxis mit uC.
Ich will nicht, dass mir jemand ein fertiges Programm für mein Problem 
liefrt, jedoch wäre es super, wenn jemand ein Referenzprojekt hätte.
Ich finde für meine Wünsche einfach kein passenden bzw. ansatzweise 
passneden Quellcode...
Angehängte Dateien:
#869194
Lesenswert?

Das ganze ist für mein Auto...

Wenn ich am Handsender eine Taste drücke, erzeugt die "Blackbox" nach 
dem Empfänger einen schliess- bzw. öffnen- Impuls von 0,5 sec.

Ich möchte, wenn ich AUF bzw. ZU gedrückt halte meine Fenster AUF bzw. 
ZU steuern.

                +---------------+
AUF-Impuls _____I___+-------+   I
                    +   &   +   I
                    +       +---+--- AUF-Signal zum eFH
Dauersignal_________+       +
                    +-------+

                +---------------+
ZU-Impuls  _____I___+-------+   I
                    +   &   +   I
                    +       +---+--- ZU-Signal zum eFH
Dauersignal_________+       +
                    +-------+

Um dies zu realisieren, greife ich das Bitmuster zwischen 
433MHz-Empfänger und "Blackbox" ab und führe es auf meinen uC.
Zusätzlich greife ich die AUF- bzw. ZU-Impulse am Ausgang der "Blackbox" 
ab.

Wenn ich recht überlege, kann mein uC eigentlich alles erledigen...
3 Eingänge und 2 Ausgänge hat er ja. Fehlt nur noch das Programm!
Dann kann ich die TTL-Schaltung weg lassen.
Angehängte Dateien:
#869197
Lesenswert?

Dennis Hoh wrote:

Na ja. Mit dem Datenblatt kommst du nicht sehr weit. Das ist so,
als ob du einen BWM reparieren willst und dazu die Hochglanzbroschüre
vom Autohändler benutzt.

> Dein Vorschlag ist duch ne Impulsbreitenmessung?

Genau darauf läuft es hinaus.
Und am einfachsten geht das mit einem Timer, der Input Capture
unterstützt.
Timer so konfigurieren (Prescaler), dass die erwarteten Impulsbreite
schön unterscheidbare Werte liefern.
Den ICP auf fallende Flanke konfigurieren
ICP beim Timer freischalten
Einen Interrupt Handler für das ICP Event installieren.
Im Eventhandler den momentanen Timer-Zählwert vom vorhergehenden
subtrahieren (damit hat man dann ein Mass für die Impulsbreite)
und für die Hauptschleife bereitstellen. Zusätzlich für die
Hauptschleife noch ein Flag setzen, dass eine Messung vorliegt.

In der Hauptschleife däumchen drehen, bis das Flag anzeigt,
dass ein Messwert vorliegt.
Ist der Messwert kleiner als eine Schranke, dann Output auf Low setzen.
Ist er größer, dann einen Zähler um 1 hochzählen, wenn der Zähler
nicht sowieso schon größer als 10 war. Erreicht der Zähler 10,
dann den Output auf High setzen.

Das wars so ungefähr in groben Zügen.
Problem könnte jetzt nur sein, wenn der Tiny kein ICP auf einem
seiner Timer unterstützt. Dann müsste man das feststellen der
Impulsbreite per Polling eines Eingangspins machen.
#869210
Lesenswert?

Meinem derzeitigen Kenntnisstand nach, unterstützt der Tiny15L kein ICP.

Kann man nicht sowas machen:

pos. Flanke auf Zähler "Z" > nach Zeit x Zähler "Z" auslesen > wenn "Z" 
kleiner y passiert nix, wenn größer y Ausgang HIGH > nach jedem auslesen 
"Z" löschen

Könnte mich auch mit nem Tiny2313 anfreunden...
Damit kann man ja sicher all meine Wünsche realisieren...
#869215
Lesenswert?

Dennis Hoh wrote:
> Meinem derzeitigen Kenntnisstand nach, unterstützt der Tiny15L kein ICP.
>
> Kann man nicht sowas machen:
>
> pos. Flanke auf Zähler "Z" > nach Zeit x Zähler "Z" auslesen > wenn "Z"
> kleiner y passiert nix, wenn größer y Ausgang HIGH > nach jedem auslesen
> "Z" löschen

Wenn du kein ICP hast, yep das ist in etwa das was man machen würde
wenn man kein ICP hat.
Nur eine kleine Anmerkung:
  "passiert nix"
Das kann so natürlich nicht gehen, denn irgend eine Logik muss den
Ausgang ja auch wieder auf LOW zurückbringen. In deiner groben
Übersicht geht der Ausgang einmal auf HIGH aber dann nie wieder
auf LOW zurück.

(Gefällt mir: Jetzt fängst du an am Problem zu arbeiten)
#872709
Lesenswert?

So, Code hab ich noch net angefangen, jedoch folgenen Plan:

Ausgelegt für Tiny15L 1,6 MHz
Der kürzeste Impuls, welcher erfasst werden muss, ist ca. 400µs lang.
Also denk ich net, das ich da ein zeitkritisches Problem bekomm.

Der Impuls geht auf PB2, ausgewertet wird die fallende Flanke auf T0.
T0 wird nach 10ms-delay ausgelesen nach R17 und gelöscht.
R17 mit R18(konst. 5) verglichen. Wenn (R17 >= R18),
R19 eins addieren, R17 löschen.
Wenn (R19 = R18) wird PB0 HIGH, und R19 gelöscht.

T1 wird auf 60ms ausgelegt und von (R19 = R18) zurückgesetzt.
Wenn 60ms abgelaufen sind, wird PB0 wieder LOW.

Könnte das funktionieren?
#874614
Lesenswert?

Tach,

mein Problem hat sich gelöst... Naja, vorerst mal.

Eben is mir beim Messen der Frequenz etwas aufgefallen.
Es ist doch kein Wechselcode! Somit ist diese Sache fürs Auto erstmal 
gestorben.

Werd mir sicherlich nix mit statischem Code einbaun. Kannich ja gleich 
die Fenster offen lassen...

Danke erst ma soweit...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren