Forum: Mikrocontroller und Digitale Elektronik Frequenzschalter


von Dennis H. (hoh)


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

von Dennis H. (hoh)


Angehängte Dateien:

Lesenswert?

Das Ruhesignal mit Übergang ins Bitmuster.

von Dennis H. (hoh)


Angehängte Dateien:

Lesenswert?

Das Bitmuster ( 2x das Gleiche )
Da es sich um einen Wechelcodesender handelt, können einige Bit´s 
variieren! Dies ist jedoch nicht von Bedeutung, da die Gesamtlänge und 
die Bitanzahl gleich bleibt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Im einfachsten Fall ganz ohne Controller: Hochpass mit einer Eckfrequenz
von 1 kHz und ein Gleichrichter hintendran.

von Dennis H. (hoh)


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.

von Jochen M. (taschenbuch)


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

von Dennis H. (hoh)


Lesenswert?

Danke Jochen,

hättest du evt. en Musterprogramm, von dem ich etwas lernen könnte?

Gruß Dennis

von Elektrolyt (Gast)


Lesenswert?

lass mich raten, du willst ein IC mit der Bezeichnung 2262 oder 2260 
nachbauen bzw benutzen?

von Dennis H. (hoh)


Lesenswert?

Meinst du PT`s?
Remote Control Encoder?

Ne, will einfach nur ne kleine TTL-Schaltung ansteuern, wenn eine Taste 
gedrückt/gehalten wird.

von Elektrolyt (Gast)


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.

von Dennis H. (hoh)


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

von Karl H. (kbuchegg)


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.

von Dennis H. (hoh)


Angehängte Dateien:

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

von Dennis H. (hoh)


Lesenswert?

Ich wurschtel mich seit 3 Tagen durchs AVR-Tutorial...

Dein Vorschlag ist duch ne Impulsbreitenmessung?

von Elektrolyt (Gast)


Lesenswert?

wo kommen denn die impulse raus? aus einem IC oder nicht? das sieht 
schon sehr nach einem PT impuls aus? wundert mich ein wenig. Vielleicht 
kannst du die Schaltung mal grob hochladen?

von Dennis H. (hoh)


Angehängte Dateien:

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.

von Karl H. (kbuchegg)


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.

von Dennis H. (hoh)


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

von Karl H. (kbuchegg)


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)

von Dennis H. (hoh)


Lesenswert?

Karl heinz Buchegger wrote:
> (Gefällt mir: Jetzt fängst du an am Problem zu arbeiten)

Danke für dein Lob!

Klar, wenn "Z" kleiner y Ausgang LOW

Werd mal ein Code zusammen basten, und auf euer Urteil warten...

von Dennis H. (hoh)


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?

von Klaus (Gast)


Lesenswert?

Früher hat man solche Trivial-Aufgaben mit einem nachtriggerbaren 
Monoflop erledigt, da musste nix programmiert werden.

von Dennis H. (hoh)


Lesenswert?

Dennis Hoh wrote:
> Schon berechnet und ausprobiert!
> ...
> ... c) Signal bricht
> bei zu "großer" Belastung zusammen( Impedanzwandler geht auch nicht ).

Diese Antwort passt auch hierzu...
Hab nicht herraus gefunden, warum es nicht geht.
74HCT123 mit dem hab ichs versucht.

von Dennis H. (hoh)


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

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.