Hallo, mein zweites Projekt soll ein Aufwecken des PCs mittels der Medion X10 werden. Es soll also nur überprüft werden, ob die Power-Taste an der Fernbedienung gedrückt wird. Anschließend werden 2 Pins auf dem Mainboard kurz kurzgeschlossen und der PC startet. Als Hardware habe ich: Tiny2313 RFM12S Rev. 3.0 Medion X10 P/N 40009936 Ich habe mich schon durch diverse Dokumentationen gewühlt. Laut RFM12 benötige ich das SPI-Interface mit: nSEL, SDO, SDI und SCK Diese konnte ich so zu meinem AVR zuordnen: nSEL: beliebiger Port SDO: MOSI (PB5) SDI: MISO (PB6) SCK: UCSK (PB7) Soweit ich das nun durchschaut habe, habe ich nun alle Veraussetzungen, um auf den RFM12 zuzugreifen und ihn zu initialisieren. Nun fehlt mir noch das Wissen (und vor allem Dokus), wie ich 1. Daten vom MC über das SPI zum RFM12 übertrage und 2. mit welchen Befehlen ich den RFM12 steuere Zu beiden Punkten fehlen mir im Moment die elementarsten Infos. Die Beispielanwendung "RFM12 (Empfangen)" aus dem Pollin Datenblatt arbeitet anscheinend nicht nur mit dem SPI, sondern auch mit nIRQ. Für alle Informationen bin ich dankbar! Mit freundlichen Grüßen Tobi
...fraglich, ob du nicht besser den empfänger der x10 über usb versorgst und eine logikverknüpfung a la "rechner aus, aber empfänger empfängt was, also starte ich den pc" machst - sparst du dir den funkkram und viel arbeit. ist doch das 433mhz ding von po**in? Klaus.
Klaus R. wrote: > ...fraglich, ob du nicht besser den empfänger der x10 über usb versorgst > und eine logikverknüpfung a la "rechner aus, aber empfänger empfängt > was, also starte ich den pc" machst - sparst du dir den funkkram und > viel arbeit. Da habe ich allerdings erst recht keine Idee, wie ich das bewerkstelligen soll. Denn diese Logikschaltung müsste dann zwischen USB-Empfänger und PC geschaltet werden? Wenn du dazu weiterführende Ideen/Lektüren hast, wäre auch dies eine Idee. > ist doch das 433mhz ding von po**in? Richtig. Vielen Dank für die schnelle Antwort Tobi
Du brauchst noch eine Leitung vom DATA Ausgang zum InputCapture Eingang (wenn der Tiny den hat) um die Pulse/Pausen zu messen. Das RFM ist nämlich eigentlich für FSK (Frequenzmodulation) entworfen und mit ASK eigentlich unterfordert. Es geht aber trotzdem, man kann eine Signalschwelle einstellen und kriegt dann am Data Ausgang das Signal Träger/kein Träger. Ich habe da auch mal eine Auswertung angefangen, funktioniert mit Mega32 und nutzt den ICP Eingang. In der InputCapture ISR wird das Signal ausgemessen. Ich hänge den Code mal dran, ist aber 'as is' und weitere Auswertungen sind selbst zu bauen. Der Code ist etwas umfangreicher und beinhaltet noch eine .NET Applikation für Windows um einige Einstellungen am RFM online vornehmen zu können.
@Tobi: da auf 433Mhz immer etwas los ist wird der PC bei so einer einfachen Lösung wohl ständig eingeschaltet werden, halte für keine gute Idee. Ich würde nur statt des Tiny einen Mega8 nehmen das man den wenigstens ordentlich in C programmieren kann.
JojoS wrote: > @Tobi: da auf 433Mhz immer etwas los ist wird der PC bei so einer > einfachen Lösung wohl ständig eingeschaltet werden, halte für keine gute > Idee. Wenn man das aber an den Tastencode des Power-Buttons bindet, sollte es klappen, oder ist die "Streustrahlung" so groß, dass auch dieser Code durch Zufall erreicht wird? >Ich würde nur statt des Tiny einen Mega8 nehmen das man den > wenigstens ordentlich in C programmieren kann. Den Tiny kann man doch auch gut in C programmieren. Zumindest hatte ich bei meinem letzten Projekt keine Probleme und würde nur sehr ungern auf den Mega8 umsteigen, da soweit ich weiß, mein Board den nicht unterstützt. Tobi
Wenn man den Code richtig auswertet wird der Empfang schon recht sicher, zumal der Code auch min. 3x nacheinander gesendet wird. Das bezog sich mehr auf den Vorschlag von Klaus den USB Empfänger irgendwie mit Logik anzuzapfen. Der Tiny hat auch einen ICP habe ich im Datenblatt gesehen, von daher wird das auch mit der ISR aus meinem Code gehen. Mit C-Code ist der Tiny nur schnell voll, aber für diese Anwendung wird es reichen.
Hi JojoS, erstmal vielen Dank für den Code. Ich versuche gerade durchzusteigen. In der Endlosschleife von main.c: DispatchMessage(); ClearMessage(); sendet Daten entweder an RFM oder SFR oder 1. (was ist das) Den zweiten Teil mit den TimeStamps verstehe ich gar nicht. Was ist da der Zweck? Wenn ich mich mal auf mein Vorhaben konzentriere: Mit rf12_rxdata kann man Daten empfangen? In der rf12.c muss ich die #define(s) ändern: Wenn SDI bei mir an PB6 liegt, dann sollte es so aussehen: #define RF_PORT PORTB #define SDI 6 Denn: sbi(RF_PORT, SDI); welches dann quasi: sbi(PORTB6) entspricht. Nun ist die Frage, was es mit RF_PIN und RF_DDR auf sich hat. Wäre super, wenn Du mir dabei etwas auf die Sprünge helfen könntest :) Vielen Dank Tobi
Die Messages kommen seriell rein von der .Net App, darüber wird eben ein Register im RFM gesetzt oder ein beliebiges SFR im Prozessor, habe ich nur als Testausgabe auf PortC vom STK500 verwendet. Und eine Message startet den Bootloader um ein neues Programm über die serielle reinzuschieben. Das brauchst du nicht, nur die richtige Init Sequenz für das RFM Modul, die müsste im main noch passen. Und eben die ISR. rf12_rxdata empfängt Daten, aber nur wenn man das mit Fifo verwendet. Und das geht eben nicht bei ASK, siehe mein erstes Posting. Also den ICP Pin am Tiny verwenden und Interrupt Routine aus 'decoder.c'. Wenn etwas passendes empfangen wurde steht das in BitCode drin, die Timestamps hatte ich zum Ausmessen des Signals mitgeschrieben, kann man auch weglassen.
Hi, ich habe mich erstmal um eine Verbindung vom MC zum PC über RS232 gekümmert, damit ich Statusangaben, bzw. den BitCode auf dem Rechner angezeigt bekommen kann. Nun sitze ich wieder vor deinem Code. > Das brauchst du nicht, nur die richtige Init Sequenz für > das RFM Modul, die müsste im main noch passen. Und eben die ISR. RFM initialisieren und dann ISR aufrufen. > Also den ICP Pin am Tiny verwenden und Interrupt Routine aus 'decoder.c'. > Wenn etwas passendes empfangen wurde steht das in BitCode drin. Den ICP Pin am Tiny habe ich gefunden, aber leider weiß ich nicht, an welchen Pin beim RFM12 ich ihn anschließen muss. Im Internet habe ich auch nichts gefunden. Dort gab es ein AVR Funkmodul Board, aber auch dort wurde PD6(ICP) nicht verwendet. So wie ich dich nun verstehe, müsste ich anschließend den BitCode auf den Rechner übertragen. Dort bekomme ich dann den Tastencode der jeweiligen Tasten an der Fernbedienung. Mit dem Code kann ich dann abhängige Ereignisse basteln. Vielen Dank Tobi
Nochmal: PC Status auswerten, also ob an oder aus (12V zB). Dann per 5Vsb USB Spg (die ist immer da) den Funkempfänger versorgen, in diesem den empf Datenstrom abzapfen. Vergleich auf den Code des Powerbuttons, Atmel schaltet PC ein. Du sparst zusätzl. Funkstrecke, kompl. Einbau in FB. Logik: Wenn Rechner aus & Datenstrom des X10 Empfängers = Tastendruck "ON" an der FB -> schalte Rechner über Optokoppler ein. Wo ist das Problem? Gelten lasse ich allenfalls die 5Vsb USB, aber Saft brauchst du ja EH. BTW: Bist du mit der FB ansonsten zufrieden? Hab sie auch gestern mal bestellt... Klaus.
Hi Klaus, Problem gibt es dabei nur aufgrund meiner mangelnden Erfahrung. Denn mit USB kenne ich mich nicht aus. Ich müsste Pin 2+3 an den MC anschcließen und auswerten. Leider weiß ich, zum Beispiel, nicht, wie ich Softwaremäßig alle Daten vom Pin2 über USART an meinen Rechner übetragen kann. Ansonsten ist deine Idee natürlich sehr gut. Ich denke es gibt viele Wege, die zum Ziel führen. Warum ich mich erstmal für den Weg mit dem RFM12 entschieden habe, war folgender Gedanke: Evtl. möchte ich später mit der Fernbedienung auch meine Boxen steuern. Damit bräuchte ich dann einen "Funkempfänger" der auch bei angeschaltetem PC geht. Parallel werde ich mich aber auch mit deiner Idee befassen. Danke! Tobi
Klaus R. wrote: > BTW: Bist du mit der FB ansonsten zufrieden? Hab sie auch gestern mal > bestellt... Auf jeden Fall. Sie hat ausreichend Tasten. Die Verbindung ist immer gut. Du brauchst, aufgrund des Funks, keinen Empfänger am Fernseher, der optisch stört. Tobi
....ne, nix usb - ich meinte schon, den x10 empfänger zu öffnen und den datenstrom mit nem oszi und genauem hinschauen zu finden :) das mit den boxen hab ich nicht so ganz kapiert, auch nicht, wofür man die usart des uC braucht - aber gut :) deine lösung macht natürlich sinn, wenn du 2 unabhängige empfänger mit der selben FB steuern willst (boxen). @x10: gut, dann freu ich mich mal, dass ich in meiner verwinkelten altbauwohnung bald quer durch alle räume die mussik umschalten kann (ir geht nicht mehr...) Klaus.
Mein späteres Vorhaben soll so aussehen: Mikrocontroller ist an PC und Boxen angeschlossen. Die Boxen haben im Moment noch eine manuelle Lautstärkesteuerung, das heißt, ich muss immer hinlaufen. Diese ersetze ich durch den MC. Somit kann ich dann mit der FB den Pc anschalten (wenn Power gedrückt wird), und mit Vol+ und Vol- die Lautstärke der Boxen regeln. Dementsprechend brauche ich doch einen eigenständigen Funkempfänger, denn bei deiner Idee mit dem X10 Empfänger geht dieser doch nicht mehr, wenn der Rechner an ist, denn das Signal geht dann per USB zum PC? Oder habe ich da deine Idee noch nicht richtig verstanden. Tobi
...hast du nicht :) also, nochmal: mag sein, dass wir aneinander vorbei reden - ICH würde den datenstrom anzapfen, den der x10 empfänger INTERN bietet, also nicht usb. die FB und der empf funktionieren ja normal weiter, nur würde ich den datenstrom so auswerten, dass ein uC zusatzaufgaben wie zB rechner an/aus und box laut/leise übernimmt. mit der genannten logik verbaut man sich ja NICHT auch die mgl, die boxen zu setuern - das ist ja alles nur software im UC FB -> X10empf -> USB (ganz normal) '-> Datenstrom anzapfen -> uC -> Boxen / Rechner I/O AUSSER, du willst zu den Boxen AUCH eine Funkverbindung - dann würde ich aber immer noch nicht den Umweg über RFM12 gehen, sondern einen weiteren Empfänger "besorgen", um die FB direkt auszuwerten (du brauchts ja NUR den anlogen teil, der die 433MHz empf, den rest macht dein EIGENER uC) Klaus.
Jaaa. Jetzt habe ich es verstanden! Danke!! Das ist auch eine Überlegung wert. Ich denke, ich werde zweigleisig verfahren, da es mir auch um Wissen geht und nicht, es möglichst schnell fertig zu bekommen. Tobi
Habe mir auch schon überlegt die FB zu kaufen und sie so wie Klaus geschrieben hat zu verwenden. Leider war ich mir nicht sicher, ob da nur ein USB mit integrierten µC im Empfänger verwendet wird. Wie sieht denn der Empfänger aus? Könnt ihr da vielleicht mal ein Bild zur Verfügung stellen? Gruß Manuel
"ein USB mit integrierten µC im Empfänger verwendet wird." Ja was denn sonst? da ist ein 0815 433er empf drin und ein ic, der den datenstrom auf usb oder "seriell usb a la ft232" wandelt - das wars. ohne es je gesehen zu haben :) Klaus.
Es gibt ja mindestens folgende Möglichkeiten: 1. USB Transceiver + µC (cypress,..) 2. µC mit integriertem USB (pic18f2550,...) 3. µC mit ft232, hid, ... Bei 1. und 3. kann man die Signale anzapfen. Bei 2. nicht. Deshalb meine vielleicht etwas mißverständliche Frage. Gruß Manuel
...bei 2 nicht? Soso :) Wie gesagt: du wertest DIREKT den Datenstrom aus, der vom analogteil kommt und in deinen all-in-one uC geht...quasi "Rohdaten", das geht IMMER. Klaus.
Hier die Bilder: http://img167.imageshack.us/my.php?image=vornehr5.jpg http://img88.imageshack.us/my.php?image=hintenkl8.jpg Hier der Chip: http://www.icfinder.co.kr/pdffile/pdffile_001/3274.pdf Es scheint, als ob Pin 8 der Datenkanal wäre, oder irre ich? Tobi
...da ist ja (fast) nix drin :) Ja, Pin8 ist korrekt. Klaus.
Es gibt aber anscheinend mehrere unterschiedliche Empfängervarianten. Meiner (bei Pollin bestellt) wird über Kabel mit dem PC verbunden. Bei dem hat die Platine auf beiden Seiten verlöteten Abdeckungen. Im Netz habe ich Photos vom Vorgänger gefunden, bei dem die Platine größer und nur teilweise geschirmt ist. Mit diesen Empfängern gab es anscheinend teilweise Empfangsprobleme (die sich durch Neuabstimmung beheben ließen). Gibt es eigentlich irgendwo im Netz eine Codeliste für diese Fernbedienung?
So. Was ich getan habe: 1) 5+ und GND des USB Empfänger mit meinem Entwicklungsboard verbunden 2) Pin 8 des Empfängers an einen PD2 angeschlossen
1 | DDRD=0x00; |
2 | PORTD=0x00; |
3 | bPortD = PIND; |
4 | while(1) |
5 | {
|
6 | USART_transmit_str(PIND); |
7 | }
|
Dann kommen kryptische Zeichen: ..3&x.H(.ÿ .@P.$. Dþhu.þ ..þ! ..3&x.H(.ÿ .@P.$. Dþhu.þ ..þ! ..3&x.H(.ÿ .@P.$. Dþhu.þ ..þ! Dies ist unabhängig davon, ob PD2 angeschlossen ist. Gleichzeitig geht ein Test am Taster PD5, der "Test" ausgibt ohne Probleme. Somit sollten Fehler in der Baudrate etc. ausgeschlossen sein. Tobi
> Diese konnte ich so zu meinem AVR zuordnen: > > nSEL: beliebiger Port > SDO: MOSI (PB5) > SDI: MISO (PB6) > SCK: UCSK (PB7) SDO -> MISO MOSI -> SDI
...str != PIND -> Problematik mit Pointern etc? Mach nen ordentlichen Umweg über ne Variable und gib die als 1 oder 0 aus. Prinzipiell aber genau der richtige Ansatz. Power & Lautstärke +/- "samplen", in den Code einbauen, vergleichen und dann Aktionen (zB digitalpoti) auslösen, fertig. Klaus.
[c] DDRD=0x00; PORTD=0x00; bPortD = PIND while(1) { if (debounce(&PIND, PD5)) // Falls Taster an PIN PD5 gedrueckt.. { USART_transmit_str("Test"); } // USART_transmit_str(PIND); USART_transmit_str(bPortD); } Das hilft auch nichts: .þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[.þ.[ .þ. Sowas habe ich schon gesehen, als die Baudrate nicht gestimmt hat. Evtl übertrage ich es so schnell, dass nicht der richtig ASCII Code übertragen wird, sondern nur Bruchstücke, die dann obiges Bild ergeben? Tobi
@JojoS: Ich würde mich weiterhin über Hilfe bei "deinem" Weg freuen: Beitrag "Re: [Tiny2313] RFM12 + Medion X10 Fernbedienung" Danke Tobi
>Den ICP Pin am Tiny habe ich gefunden, aber leider weiß ich nicht, an >welchen Pin beim RFM12 ich ihn anschließen muss. >Im Internet habe ich auch nichts gefunden. Dort gab es ein AVR Funkmodul >Board, aber auch dort wurde PD6(ICP) nicht verwendet. steht in meiner ersten Antwort hier, ICP muss an DATA (ist ein programmierbarer Pin und heisst in der RFM12 Doku genauer FSK/DATA/nFFS). In den verschiedenen Projekten hier wird der nicht benutzt weil das für FSK Übertragungen eben nicht nötig ist, aber das erkläre ich jetzt nicht nochmal.
Hallo, so ich habe deinen Code für den Tiny2313 angepasst. Das Einzige, was ich geändert habe, ist Folgendes: // TIMSK |= _BV(TICIE1); // | _BV(OCIE1A); // von dir TIMSK |= _BV(ICIE1); // | _BV(OCIE1A); // von mir Beidesmal sollte aber ein Input Capture interrupt entstehen. Hier ist die main.c: http://rafb.net/p/pZVQ1V26.html Nun will er leider nichts anzeigen. Der BitCode scheint also leer zu sein. Was ist da falsch? Kann ich irgendwie "schrittweise" herausfinden, ob der RFM12 überhaupt angesteuert wird? Vielen Dank Tobi
So sieht meine Zuordnung aus: RFM12 Tiny2313 SDI PB6(MISO/DO/PCINT6) SCK PB7(UCSK/SCL/PCINT7) nSEL PB4(beliebig gewählt) SDO PB5(MOSI/DI/SDA/PCINT5) DATA PD6(ICP)
am DATA Ausgang muss das Signal von der FB zu sehen (Oszi, Soundkarte) oder zu hören sein (über einen paar k Widerstand einen Ohrhöhrer oder Soundkarte dranhängen). Und die Initialisierung aktiviert auch den 10Mhz Takt am Clockausgang vom RFM12. Den Mega32 hatte ich mit 12Mhz laufen, die Konstanten in der ISR sind fest dafür ausgelegt. Könnte man natürlich auch schöner lösen...
nSel hatte ich glaube nicht benutzt, braucht man nur wenn man mehrere SPI Geräte am Bus hat. Aber in den RF-Routinen wird das auch gesetzt, die Bitnummern müssen nur in rf12.c angepasst werden.
EDIT: Nachdem ich nun die richtigen Ports auch in der rfm12.c eingetragen habe, bekomme ich bei einem Tastendruck: ................................ Daraufhin habe ich itoa verwendet, um dies zu bekommen: ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö..ö.. ö.-33-33-65-65-129-129-257-257-513-513.-1025-1025-2049 -2049-4097-4097-8193-8193-16385-163853276732767-1-1-1-1-1.-1-1-1-2-2-3-3 -5-5-9-9-17-17-33-33-65-65-65-65-65-65-65-65-65-65-65-65-65-65þ.T_Ã-65-6 5-130-130-259- 259-517-517-1033-1033-2065-2065-4129-4129-8257-8257-16513-16513325113251 1-513-513-1025-1025-2049-2049-4097-4097-8193-8193-16385-163853276732767- 1-1-1-1-1-1-1-1- 1-1-1-1-1*-1-1-1-1-1-2-2-3-3-5-5-10-10-19-19-37-37-73-73-145-145-289-289 -577-577-1153-1153-2305-2305-4609-4609-9217-9217-18433-184332867128671-8 193-8193-16385- 163853276732767-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-2-2-3-3-5-5-9-9-17-1 7-33-33-65-65-129-129-257-257-513-513-1025-1025-2049-2049-4097-4097-8193 -8193-16385-1638 53276732767-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1. á-1-1-1-1-1-1-1-1-2-2-3-3-5-5-9-9-17-17-33-33-65-65-129-129-257-257-513- 513-1025-1025-2 049-2049-4097-4097-8193-8193-16385-163853276732767-1-1-1-1-1-1-2-2-3-3-5 -5-9-9-17-17-33-33-65-65-129-129-257-257-513-513-1025-1025-2049-2049-409 7-4097-8193-8193 -16385-163853276732767-1-1-1-1-1-1-1-1-1-2-2-3-3-5-5-9-9-17-17-33-33-65- 65-129-129-257-257-513-513-1025-1025-2049-2049-4097-4097-8193-8193-16385 -163853276732767 -1Á-1-1-2-2-3-3-6-6-11-11-21-21-41-41-81-81-161-161-321-321-641-641-1281 -1281-2561-2561-5121-5121-10241-10241-20481-204812457524575-16385-163853 2767-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-2-2-4-4-7-7-13-13-25-25-49-49-97-97 -193-193-385-385-769-769-1537-1537-3073-3073-6145-6145-12289-12289-24577 -245771638316383 3276732767-1-1-1-1-1-1-1-1-2-2-4-4-7-7-13-13-25-25-49-49-97.============ ======================================================================== ================ ======================================================================== ======================================================================== ================ ======================================================================== ======================================================================== ================ ======================================================================== ======================================================================== ================ ======================================================================== =========================================================-97-193-193-385 -385-769-769-153 7-1537-3073-3073-6145-6145-12289-12289-24577-2457716383163833276732767-1 -1-1-1-1-1==-1-1-2-2-3-3-5-5-9-9-17-17-3 Was sagen mir die nun? Zwischenzeitlich war ich der Meinung, dass 4097 der Code von der PowerTaste ist, aber dann kam das große Chaos, indem ich keine Ordung entdecken konnte. Danke Tobi
JojoS wrote:
> Mit welchem Takt läuft der Tiny denn nun?
Er läuft mit 7,3728Mhz.
Das Einzige, was ich bei ISR(TIMER1_CAPT_vect) als Einstellung der
Frequenz sehe ist:
if ((diff > 400) && (diff < 900) && (TCCR1B & _BV(ICES1)))
Muss ich den Diff Bereich anpassen?
Danke
Tobi
@Tobias Kaminsky: Hattest du Erfolg mit der X10 und dem RFM12 Modul? Ich plane in etwa das selbe, habe die Hardware bereits aufgebaut (Atmega32, Computer hängt an nem Relais, RFM12 ist dran) und getestet. Ich müsste nur noch die Empfangssoftware für die X10 Bedienung schreiben, naja und bin dann über diesen Thread gestolpert. Bin über alle Erfahrungsberichte und gerne auch C Beispielcode dankbar. gruß, david
@David Gräff ich werde erst am Wochenende dazu kommen, dir genauer zu antworten. Tobi
Hallo! Ich habe auch vor die x10 Signale auszuwerten, hat jemand das Problem inzwischen gelöst? Grüße, Matthias
Hi, hat das einer von euch zum laufen gebracht ? Würde gerne meinen VDR mit einer Medion X10 aufwecken können. -lg Robert
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.