www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzschalter


Autor: Dennis Hoh (hoh)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Ruhesignal mit Übergang ins Bitmuster.

Autor: Dennis Hoh (hoh)
Datum:
Angehängte Dateien:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:

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

Autor: Jochen Müller (taschenbuch)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Jochen,

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

Gruß Dennis

Autor: Elektrolyt (Gast)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst du PT`s?
Remote Control Encoder?

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

Autor: Elektrolyt (Gast)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:
Angehängte Dateien:

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

Autor: Dennis Hoh (hoh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wurschtel mich seit 3 Tagen durchs AVR-Tutorial...

Dein Vorschlag ist duch ne Impulsbreitenmessung?

Autor: Elektrolyt (Gast)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:
Angehängte Dateien:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:

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

Autor: Klaus (Gast)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:

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

Autor: Dennis Hoh (hoh)
Datum:

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

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.