Hallo,
folgende Situation:
Ich bin stolzer Besitzer von einem Harman/Kardon Resiver.
Jetzt möchte ich ihn zu einem Wecker aufrüsten.
Problem: Er hat keine Weckfunktion und wenn ich ihn einsteck geht er in
den Standby-Modus. Jetzt habe ich mir überlegt, das Gerät an eine
Schaltzeituhr anzuschließen und wenn diese angeht, ein Einschaltsignal
über die IF-Schnittstelle zu senden.
Seit gestern morgen sitze ich schon. Nach langen suchen habe ich
herausgefunden das Harman das NEC Protokoll verwendet. (Hoffe ich
zumindest) Nach weiterem suchen habe ich leider die Befehlsliste des
Protokolls nicht gefunden.
Kann mir vielleicht jemand helfen?
Danke,
Jürgen
PS: Ich weis, meine Rechtschreibung ist nicht gerade die beste;-)
Jürgen schrieb:> Problem: Er hat keine Weckfunktion und wenn ich ihn einsteck geht er in> den Standby-Modus.
damit meinst Du den Stecker reinstecken?
kann der Receiver aus den Stand-By per IR Fernbedienung eingeschaltet
werden?
Axel
Hubert G. schrieb:> Vielleicht hilft dir das:> http://www.sbprojects.com/knowledge/ir//ir.htm
Das habe ich auch schon gefunden. Allerdings steht nirgends der Befehl
Standby.
Es fehlt auch welche Adresse ich für einen Resiver senden muss.
Dennoch danke für den Hinweis.
Düsendieb schrieb:> damit meinst Du den Stecker rein stecken?
Genau das meine ich.
Düsendieb schrieb:> kann der Receiver aus den Stand-By per IR Fernbedienung eingeschaltet> werden?
Die original Fernbedienung kann es.
Für weitere Tipps bin ich dankbar.
Jürgen schrieb:> Das habe ich auch schon gefunden. Allerdings steht nirgends der Befehl> Standby.
Standby suchst du nicht, denn du brauchst ja das Gegenteil.
Herumgooglen nach Codes sieht eigentlich positiv aus. Man findet in
speziellen Foren die Codes für dieses Gerät im CCF Format für die sog.
Philips Pronto remote control.
Und es gibt Tools/Seiten, um Codes aus dem CCF Format in etwas
Lesbareres zu wandeln, aus dem man dann die Adresse und das Kommando
entnehmen kann. Teilweise gibt es solche Decoder sogar mit Sourcecode.
> Es fehlt auch welche Adresse ich für einen Resiver senden muss.> Dennoch danke für den Hinweis.
Hast du eine Original-Fernbedienung für deinen Harman AVR3550, um deren
Befehle zu sniffen? Es gibt in der Codesammlung ein Projekt für einen
IR-Code Sniffer bzw. Selbstlernende IR-FB.
Hast du schon überlegt, wie du letztlich von dem Selbstbau aus das IR
Kommando senden willst?
Ich würde in Betracht ziehen, eine preiswerte Universal-FB zu schlachten
und einfach z.B. über Relais oder µC deren Tasten zu betätigen. Das
würde das Gefummel mit den Hexcodes, das Sniffen und die Synthese
eigener IR-Signale umgehen.
Im Anhang wäre mal so eine Decoderausgabe eines größeren AV-Systems in
dem neben anderen AV-Geräten auch ein Harman AVR3550 steckt. Ich vermute
die NEC1 Kommandos im Anfang des Listings sind die interessanten.
Jürgen schrieb:> Keiner eine Idee?IRMP
Mit dem IRMP das Signal für Standby\play\Radio oder was auch immer
aufzeichnen und dann mit dem IRSND senden lassen.
Danke für eure Antworten.
Stefan B. schrieb:> Man findet in> speziellen Foren die Codes für dieses Gerät im CCF Format für die sog.> Philips Pronto remote control.
Hast du mir einen Link dazu?
Stefan B. schrieb:> Und es gibt Tools/Seiten, um Codes aus dem CCF Format in etwas> Lesbareres zu wandeln, aus dem man dann die Adresse und das Kommando> entnehmen kann.
Auch hier wär mir ein Link eine große Hilfe.
Die Original-Fernbedienung habe ich. Alerdings habe ich kein
Speicherozi. Sonnst hätte ich schon längst eine Lösung.
Folgendes habe ich geplant:
Im Gerät habe ich 5V gefunden die nach dem einstecken vorhanden sind.
Diese ändern sich auch nicht wen das Gerät läuft. An diese schließe ich
einen attiny25 an. Den habe ich gerade rumligen. Dan habe ich aus einer
alten Fernbedienung eines Videorekorders eine IF-LED ausgeschlachtet.
Diese schließe ich natürlich über einen Vorwiederstand an einen Ausgang.
µC bekommt beim einstecken seine Versorgung, wartet kurtz, sendet das
Komando, Gerät läuft. So zumindest die Idee.
Danke auch Stefan B.
Werde es jetzt mal mit Device: 112 Komando: 159 versuchen.
Was denkt Ihr. Habe ich das richtige rausgesucht?
Hallo noch mall,
bin ein kleines Stück weiter.
Hab es gewagt den AVR 3550 aufzuschrauben und an den IF Empfänger drei
Drähte anzulöten. Mit meinem Oszi (Analog Grüpel) konnte ich feststellen
dass das Signal der FB ankommt. Das meiner LED aber nicht.
Muss also erstmal genauer forschen wie die LED überhaupt angesteuert
werden möchte.
Dann holl ich mir morgen das Speicher-Oszi aus dem Geschäft, sniffe mit
und schreib es auf meinen Tiny. Hoffentlich klaps.
Danke für eure Hilfe.
Gute Nacht
Hast du die 38 kHz Trägerfrequenz beachtet?
Beim NEC Protokoll ist ein 38 kHz Trägersignal vorgesehen, welches mit
dem AN/AUS Timing gemäß den Bitwerten für Datentelegramm moduliert wird.
Wenn bereits überhaupt nix aus dem IR-Empfänger kommt, erkennt der kein
IR-Signal mit richtiger Trägerfrequenz.
Üblicherweise zieht der IR-Empfänger eine Leitung LOW. Bei korrekter
Trägerfrequenz und einkommenden Signalen müsstest du auf dieser Leitung
560µs lange LOW-Phasen sehen.
Die Auswertung des aufmodulierten Datenstroms anhand der Abstände der
LOW-Phasen ist wieder eine andere Sache.
Das soll folgendes heisen:
Ich steuer die LED über einen Vorwiederstand an. Mit einer Videokamera
sehe ich, dass die LED leuchtet( dauerhaft). Wenn ich diese jetzt auf
den IR-Empfänger im AVR 3550 richte, wird sich das Signal am Empfänger
nicht ändern, da die 38 kHz Trägerfrequenz nicht eingehalten wird.
Richtig?
Mann ist das ein Schrott. :-( Wär ich doch nie auf so eine dumme Idee
gekommen.
Geh jetzt erstmal frustriert ins Bett und morgen holl ich das Oszi.
Werde meinem Tiny die Signale beibringen und erneut versuchen.
Wenns nicht klappt melde ich mich nochmal.
(Wenn ich darf)
Gute Nacht
Hallo,
so langsam vergeht mir der Spass an der Sache.
Folgendes habe ich gemacht:
-Speicher-Oszi an Empfänger angeschloßen
-Auf der original FB An Taste gedrückt und aufgezeichnet
-Signal nachprogramiert und auf den Tiny gespielt.
-Zwischendurch aus dem Tiny ausgeschlossen. Falsche Fuses gesetzt
(Externe Taktquele anstatt Ext Cristal osc.)
-Externe Taktquelle mit einem weiterm Tiny erstellt und Fuses repariert
-Feststellen müßen das es nicht funktioniert
-Grund rausgefunden:
Lass ich folgendes Program laufen dauert ein High 1.62 s und ein Low
1.62 s.
1
#include<stdint.h>
2
#include<avr/io.h>
3
#include<util/delay.h>
4
5
6
intmain(void)
7
{
8
9
DDRB=0xff;
10
11
while(1)
12
13
{
14
_delay_ms(200);
15
PORTB=0xff;
16
_delay_ms(200);
17
PORTB=0x00;
18
}
19
20
}
Die Bilder zeigen welche Einstellungen ich gemacht habe.
Ein 4 MHz Quarz wird verwendet.
Wie bekomme ich die 200ms hin?
Hab ich was falsch gemacht?
Michael H. schrieb:> Jürgen schrieb:>> Hab ich was falsch gemacht?> CLKDIV8 Fuse löschen. Sie teilt den Takt durch 8, dein uC lief also mit> 500kHz.
Danke, das war eine große Hilfe.
Jetzt dauert ein High nur noch 202 ms.
Wie genau muss die Zeit beim NEC Protokoll sein?
Jürgen schrieb:> Wie genau muss die Zeit beim NEC Protokoll sein?
Das weiß keiner so genau...
Aber vergiss mal die 38kHz nicht. Nur mit _delay zu arbeiten, ist Mist.
Zaunpfahlwink: alle vorkommenden Zeiten sind Vielfache von 560us.
Michael H. schrieb:> Jürgen schrieb:>> Wie genau muss die Zeit beim NEC Protokoll sein?> Das weiß keiner so genau...> Aber vergiss mal die 38kHz nicht. Nur mit _delay zu arbeiten, ist Mist.>> Zaunpfahlwink: alle vorkommenden Zeiten sind Vielfache von 560us.
Hab jetzt schnell in meinen Unterlagen gekramt und folgende
Interup-Routine gefunden. Hab im Datenblatt geschaut und die Routine
umgeschrieben.
Aber die LED LEDt nicht.
Habe ich was übersehen oder vergessen?
Das des so ausartet hätte ich nicht gedacht.
Danke für eure gedult.
Jürgen
Jürgen schrieb:> Aber die LED LEDt nicht.> Habe ich was übersehen oder vergessen?
* timerms wird nie verändert.
* Du initialisierst 2 Interrupts, fängst aber keinen in einer ISR ab. ->
dein uC hängt beim Interrupt.
Generell als Idee: Bau dir einen Timer im CTC, der alle 650us auslöst
und einen zweiten Timer im PWM-Mode, der dir 38kHz generiert. (Überlauf
mit 76kHz und als Mode "Toggle Pin").
Im CTC-Timer-Interrupt entscheidest du anhand einer Zeichenkette, ob du
den anderen Timer anschaltest oder nicht. Die Zeichenkette bestimmt den
IR-Code.
fertig.
Oder du liest vielleicht doch endlich mal das hier:
Beitrag "Re: NEC Protokoll für Harman AVR3550"
Okay, der Interupt läuft.
Aber ich habe das grundsätzliche Problem erkannt. Ich weis nicht was
eine Trägerfrequenz ist.
Werde mich jetzt erstmall damit auseinandersetzten müßen.
Bin ja mall gespannt wie das funktioniert. Eine Frequenz auf einen Pin
zujagen und gleichzeitig noch Informationen auf den selben zu schicken.
Ich berichte wenn ich nich weiter komme.
Jürgen schrieb:> Okay, der Interupt läuft.
Sehr schön!
> Aber ich habe das grundsätzliche Problem erkannt. Ich weis nicht was> eine Trägerfrequenz ist.> Werde mich jetzt erstmall damit auseinandersetzten müßen.http://www.sbprojects.com/knowledge/ir//ir.htm
bewährt!
Hallo,
Michael H. schrieb:> Generell als Idee: Bau dir einen Timer im CTC, der alle 650us auslöst> und einen zweiten Timer im PWM-Mode, der dir 38kHz generiert. (Überlauf> mit 76kHz und als Mode "Toggle Pin").>> Im CTC-Timer-Interrupt entscheidest du anhand einer Zeichenkette, ob du> den anderen Timer anschaltest oder nicht. Die Zeichenkette bestimmt den> IR-Code.> fertig.
Genau das versuche ich gerade umzusetzten und bleibe am PWM Signal schon
hängen.
Der Timer läuft. Allerdings falsch.
Wenn ich richtig rechne brauch ich für 38 kHz ein Signal das 13.15789474
µS High ist und die selbe Zeit Low ist. Also nehme ich den Prescaler der
mir den Takt 4mHz durch 4 teilt => 1µS. Lade das Register OCR1A mit 0x0D
(also 13) Somit bekome ich am Pin eine Frequenz von max. 38.4 kHz.
Richtig?
Oder geht das genauer?
Folgenden Code habe ich dazu geschrieben:
Lass ich diesen aber laufen, bekomme ich an Pin 6 folgendes Signal:
Ein High von 13µS und ein Low von 242µS zusammen also 255µS. Wo muss ich
das Low definieren?
Michael H. schrieb:> Oder du liest vielleicht doch endlich mal das hier:> Beitrag "Re: NEC Protokoll für Harman AVR3550"
Das habe ich überflogen aber werde es nicht umsetzten. Weil ich nicht
alle Teile da habe und ich dort auch nur Programe aufspielen muss ohne
zu wiesen was sie überhaupt tun. Wenn ich es selber schreibe habe ich
noch einen Lerneffekt dabei.
Jürgen schrieb:> Wenn ich richtig rechne brauch ich für 38 kHz ein Signal das 13.15789474> µS High ist und die selbe Zeit Low ist. Also nehme ich den Prescaler der> mir den Takt 4mHz durch 4 teilt => 1µS. Lade das Register OCR1A mit 0x0D> (also 13) Somit bekome ich am Pin eine Frequenz von max. 38.4 kHz.> Richtig?
Das wäre schon sehr okay. Hier mal die Empfindlichkeit eines
Infrarotempfängers abhängig von der Tragerfrequenzabweichung:
http://www.mikrocontroller.net/attachment/81600/Clipboard.png
Lässt du den Prescaler bei 1, kommst du sogar noch näher an die
Wunschzeiten.
> Ein High von 13µS und ein Low von 242µS zusammen also 255µS. Wo muss ich> das Low definieren?
Die müssten eigentlich genau gleich lang sein. Ich vermute den Fehler
woanders...
> Folgenden Code habe ich dazu geschrieben:
[...]
Dein Code sieht erst mal richtig aus.
Aber setz mal in deine main() noch ein
1
while(1);
damit der uC nicht resettet, denn vermute, dass genau das passiert, weil
er "nichts" zu tun hat.
> nur Programe aufspielen muss ohne> zu wiesen was sie überhaupt tun. Wenn ich es selber schreibe habe ich> noch einen Lerneffekt dabei.
Gefällt mir!
Jetzt hat er was zu tun! :-)
Den Prescaler habe ich auf 1 gesetzt und Lade nun mit 53 vor.
Folgende veränderung:
High = ca.13µS Low= 51µS. Zusammen 64µS.
Passt also auch nicht.
Sonnst noch ne Idee?
Jetzt ist zwar High und low identisch mit 64µS (also insgesamt 128µS)
aber der Wert von OCR1A wird ignoriert. Selbst wenn ich da 00 oder ff
reinschreibe bleiben die 64µS.
Kann das Leben den so schwer sein?
Welchen von den PWM Modi möchtest du denn benutzen?
Es gibt von den 16 theoretischen Modi nur vier bei denen OCR1A
berücksichtigt wird. Siehe im Datenblatt Tabelle 'Waveform Generation
Mode Bit Description'
Naja, der Code stimmt ja offensichtlich nicht.
>> Das habe ich überflogen aber werde es nicht umsetzten. Weil ich nicht>> alle Teile da habe und ich dort auch nur Programe aufspielen muss ohne>> zu wiesen was sie überhaupt tun. Wenn ich es selber schreibe habe ich>> noch einen Lerneffekt dabei.
Also ich hoffe jetzt nicht zu viel zu spoilern, aber in dem Datenblatt
ist sind Formeln zur Berechnung der Frequenz an dem Ausgangspin OC1A in
Abhängigkeit vom PWM-Modus, von der Taktrate (F_CPU bzw. tatsächlich
benutztem Takt) und vom Prescaler. Die Auswahl des PWM-Modus richtet
sich nach der gewünschten Signalform und bedingt dann die Art wie die
Signalform beeinflusst wird also z.B. die Grenzen beim Vergleich mit
TCNT1...
Jürgen schrieb:> Verstehe kein Wort.
Langsam gehts mir genauso.
Ist es dem Tiny25 nicht beizubringen, den Pin OC1A abhängig vom
OCR1A-Wert toggeln zu lassen?
Eine PWM ist kein Problem, aber getoggelt wird nur beim Überlauf des
Timers.
Ich hab das Datenblatt in der letzten viertel Stunde jetzt 2 mal
gelesen...
@Stefan: Die von dir angesprochenen Modi werden so im Datenblatt nicht
für Timer1 erwähnt.
So... beim dritten Lesen ist es mir aufgefallen.
Mittels OCR1A lassen sich tatsächlich nur PWMs erzeugen. Für den
CTC-Mode (Clean Timer on Compare (Match)) gibt es bei diesem Tiny ein
extra Register, nämlich OCR1C. Und dieses verflixte C hab ich jedes
mal überlesen.
Auf alle Fälle:
Ich komme etwas spät, die Dinge sind ja schon fortgeschritten, aber:
Das Gerät hat doch auch eine serielle Schnittstelle? Kann man es nicht
darüber einschalten?
Sowas habe ich mir nämlich gerade eben gebastelt: eine Art "Dongle" der
einen AVR gleich einschaltet. Den Strom klaut er sich auch aus dem
seriellen Port, etwas tricky. Das ist ein ATTiny25, drei Dioden, zwei
Kondensatoren, ein Widerstand. Interesse?
(Das Programm in meinem tut noch etwas mehr: Wenn das Gerät an ist fragt
es unablässig den Audiostatus ab und zieht eine Leitung, wenn das
Mehrkanal ist. Damit will ich die (externen) Endstufen für Rear, Center,
Sub schalten lassen.)
Jörg