Hallo, ich nutze eine RC5 Routine aus dem Internet, siehe Anhang. Im Main fragt man so ab: if(New_IR_Code) { Tue_was(); } ... ... void Tue_was(void) { unsigned char temp; New_IR_Code = 0; //if ((HIGH(IR_Code)==VCR)) //if ((HIGH(IR_Code)==TV)) //{ temp=0; switch (LOW(IR_Code)) { case 1: temp=1; sbi(PORTD, 6);Bild = 1;break; case 0: temp=0; sbi(PORTD, 6);Bild = 0;break; }; } } Passend dazu würde ich gerne einen eigenen Sender bauen. Weiß jemand, wo ich evtl. eine gute Seite dazu finde, wo es auch C-Code Beispiele gibt? Danke im voraus... Gruß Toby
Für solche fälle hab ich früher immer einen SAA3010 verwendet. Das ist ein RC5 Sender IC an dem man seine Tasten anschließen kann. Der wird nur leider nicht mehr hergestellt. Hier findest du was mit PIC´s http://www.holger-klabunde.de/rc5send.htm und hier mit nem ATTiny http://www.a-netz.de/remote-control.de.php
Hallo, danke für die Hilfe. Das mit dem Tiny hatte ich auch schon gefunden. Funktioniert so weit ganz gut. Ich denke nur, mein Problem liegt wo anders. Ich nutze einen SFH5110-36 IR Empfänger, der aber auf einer rotierenden Platine sitzt. Die Drehzahl beträgt von 1000 - 2000 U/min. Nun nutze ich zu dem IR Empfangs Int noch einige andere Ints, so das dass IR Signal kaum noch eine Chance hat. Gruß Toby
Hallo Tobias, wir haben vor kurzen einen RC5 Sender mit bis zu 32 Tasten (Code frei wählbar) gebaut. Die Schaltung läuft mit einem Tiny26 und schläft während der Ruhepausen. Als Empfangsmodul haben wir ein TSOP1736 auf einer drehenden!! Platine (Propelleruhr) angeordnet. Die Empfansroutine nutzt einen ext.Int. Allerdings haben wir noch wichtigere Interrupts verwendet. Das Senden und Empfangen funktioniert zur vollsten Zufriendenheit. Weitere Infos gerne bei Bedarf... Gruß Matthias
Hallo. Am bestern ist es den Empfänger als Zustands Automaten zu bauen. Kann meinen Code leider nicht raus geben. Das ganze läuft in einem 222µs Takt. Vielleicht kann man sowas irgendwo finden, Sorry musst Du selber suchen. Zum Senden verwende ich wieder einen Automaten der im selben Timer Interrupt läuft. Der macht zwar nur die Pegel aber mir reicht es. Durch dieses System läuft halt alles im Hintergrund und mein Main System bekommt nur eine Meldung "neue Daten empfangen". Nur noch zur Geschwindigkeit, 222µs klingt nach schnell. Ist es auch, besonders auf einem Z8 mit 8MHz. Aber auch der bleibt nur ca. 100µs im Interrupt. Schluckt also bei der Anwendung fast 50% der Leistung. Bei anderen Systemen (AVR mit 16MHz) ist es fast zu vernachlässigen. Wünsche einen guten Rutsch.
Wenn Du das IR Signal senden willst, musst Du es Modulieren. Ich glaube es waren 36KHZ. Also einfach ein 36KHz PWM Signal und das Sende Bit auf ein UND-Gater geben. Habe mir auch nochmal die hier angebotenen Lösungen angesehen. Funktionieren tun alle, einsetzen würde ich keine davon. Sind nicht genug Fehlertolerant für mich.
Bei Bedarf kann ich meinen Quellcode für Sender und Empfänger mal bereitstellen...
Hallo, alle gut ins neue Jahr gekommen?! Ich habe mittlerweile die IR Sender/Empfänger an die UART angeschlossen. Das bringt mir 3 Vorteile: 1. Ich kann meine Datenübertragung zum EEProm beschreiben auch per IR machen 2. Kann ich per UART die gewünschten Signale auswerten / Bilder umschalten bei der Propeller Uhr 3. Könnte man einen IR Bootloader bauen / leider klappt es bis lang nicht. (versuche grade den ATMEX Tiny2313 Bootloader und Peters Bootloader umzuschreiben) Trotzdem würden mich euere IR Codes interessieren, und auch bestimmt andere Leser. Gruß Toby
Hallo Matthias, also ich (und sicher noch andere) bin daran interessiert, wenn Du Deinen Code hier einstellen würdest. Joline
Ich bin auch grad bei ner Propclock dabei.. Ich mach die Übertragung auch per IR, aber nicht moduliert, ich "morse" nur manchestercodiert hoch. Funktioniert Tadellos. Wie haste denn das mit der UART gemacht? Da hats ja zwei Datenleitungen ==> zwei IR-Leitungen?
Hallo! Also hier nun der Quellcode: zum Empfänger: Die Spannungsversorgung mit der angegebenen Batterie funktioniert noch nicht optimal. Wahrscheinlich ist diese etwas schwach für den LED-Strom. Hieran wird aber gearbeitet. zum Sender: Dieser Code läuft auf einem ATmega128, mit 16MHz Taktfrequenz. Das TSOP1736-Modul ist am ext. Int4 angeschlossen. Folgende Fkt. werden bereitgestellt: rc5_init ( address): muss einmalig aufgerufen werden, initialisiert dem Empfang. Übergabewert ist Adresse auf die "gehört" wird. Eine 255 bedeutet, jede Adresse wird akzeptiert. Eine Plausibilitätsprüfung erfolgt nicht. uint8_t read_rc5_code ( void ): Lt. RC5-Spec. kann alle ca 130ms ein neues Kommando empfangen werden. SOmit muss diese Fkt mindestens sooft aufgerufen werden. Ein Rückgabewert gleich 255 bedeutet, kein neuer Code. Sonst wird das (zuletzt) empfangene Kommando übergeben. @Muraer: Die IR-Fernbedienung für die Propelleruhr ist nur zur Bedienung gedacht. Datenaustausch mittels eines PC's (soll) wird über UART realisiert. Hieran wird aber noch gearbeitet. Geplant ist (irgend) eine Übertragung mittels IR/Funk, wobei wir eine Mindestrate von 250kBit/sek und Fullduplex benötigen. Aber wie gesagt: hieran wird gearbeitet. Ideen sind schon vorhanden.... Im Anhang ist folgendes enthalten: Schlatplan&Board des Senders als png Quellcode Sender (remote.c) Quellcode Empfänger (rc5_receive.c & *.h) Bild Propelleruhr mit Testmuster Bitte um Feedback! Gruß und alles Gute in 2007..
Hallo Matthias, zuerst viel Dank von meiner Seite für deinen IR Code. Gibt es, oder gibst Du evtl. Details zur Prop Uhr bekannt? Gruß Toby
Hallo Matthias, Du verwendest einen Mega128, 16 RGB LEDs (macht 48 Einzel LEDs). Ich gehe davon aus, das du die LEDs direkt mit den Ports ansteuerst, also ohne Porterweiterungen wie HC595 oder so. Wie machst du die Regelung bei wechselnder Drehzahl, also, wie berrechnest Du die Spaltenzeit? Bislang kenne ich 2 Möglichkeiten: 1. 16 Bit Timer, start bei Ext Int, Vergleichs Int zählt Spalten hoch, beim Ext Int vergleichen, ob zu wenig oder zu viel Spalten, ggf. OCR mehr oder weniger, 16 Bit Timer zurück setzen. 2. 16 Bit Timer und 8 Bit Timer, (aus dem Code von Armins Propeller Uhr), genau kapiert habe ich es noch nicht, aber funktioniert. Mich würde eine Regelung mit einem Timer interessieren. Quasi eine Mischung aus 1. und 2., da ich gerne eine Prop uhr mit bis zu 64 RGB LEDs realisieren würde. Momentan habe ich einen Mega8 mit 4 TPIC6C595 Schieberegister und 32 einfarbigen LEDs. Das würde aber bei 64 RGB LEDs 3x8x8 Schieberegister machen. Ich habe nun etliche MAX 7221 hier rumliegen ( 3 Stück könnten 64 RGB LEDs treiben), bis ich bemerkt habe, das die zu langsam sind, schade! Was gäbe es noch für Möglichkeiten, so viele LEDs in der Geschwindigkeit anzusteuern? Gruß Toby
Noch was, ich habe ja meine IR Sender und Empfänger an der UART angeschlossen. So wie bein ASURO. Mich würde auch ein IR Bootloader interessieren, da man über UART dann auch die Bilder umschalten könnte, und ggf. die Firmware per IR Updaten könnte. So weit... Gruß Toby
Hallo Tobi: nicht ganz. wir haben zwar 16RGB-LED's, aber das viermal (Um die Drehzahl klein zu halten). Also sind insgesamt 64*3=192 Einzelleds anzusteuern. Meine Lösung fiel aus Zeitgründen auf eine Paralellausgabe mit Einblendung der I/O-Adressen in den SRAM-Bereich. Da wir ja pro neuer Spalte somit 24Bytes (192/8) zu kopieren haben, kommen wir so auf etwa 25µsek (gemessen) für die Aktualisierung der Anzeige. Die Uhr realisiert 128Spalten, 16Zeilen. Es ist somit ein Videospeicher von 768Bytes vorhanden. Als Register habe ich den 74HC573 verwendet. Die Positionserkennung erfolgt mittels einer Encoderscheibe mit (natürlich) 128Strichen pro Umdrehung. Damit werden keine Spaltenzeiten... gebraucht. Einfach als ext. Interrupt0 verwenden und neue Daten ausgeben. Das ist Drehzahlunabhängig. Funktioniert sogar in beide Drehrichtungen. Die Idee mit dem SRG hab ich verworfen, da der Schaltkreisaufwand exakt derselbe Wäre, mir aber die parallele Lösung einfacher erschien.
Sry, dass ich diesen Thread nochmal ausgrabe... Aber bei dem Code von Matthias fehlt doch die hälfte oder? Ich wollte das jedenfalls nachbauen, habe schon auf dem Steckbrett aufgebaut und wollte nun flashen. Habe aber gesehen, dass es kein Makefile zu dem programm gibt und wohl noch so 3 dateien fehlen, die bei include aufgeführt sind. Ich bin noch ziemlicher Anfänger und wollte das ganze einfach mal nachbauen aber das geht wohl nicht wirklich ohne diese Dateien :C Kann mir vielleicht jemand helfen? Gruß, Axel
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.