Forum: Projekte & Code RC5 Sender selber bauen ???


von Tobias Tetzlaff (Gast)


Angehängte Dateien:

Lesenswert?

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

von Michael I. (iller101)


Lesenswert?

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

von Tobias Tetzlaff (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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

von Oliver (Gast)


Lesenswert?

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.

von Oliver (Gast)


Lesenswert?

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.

von Matthias (Gast)


Lesenswert?

Bei Bedarf kann ich meinen Quellcode für Sender und Empfänger mal 
bereitstellen...

von Tobias Tetzlaff (Gast)


Lesenswert?

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

von Joline (Gast)


Lesenswert?

Hallo Matthias,

also ich (und sicher noch andere) bin daran interessiert, wenn Du Deinen 
Code hier einstellen würdest.

Joline

von Muraer (Gast)


Lesenswert?

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?

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

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

von Tobias Tetzlaff (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

@Tobias:
Was willst denn wissen??

von Tobias Tetzlaff (Gast)


Lesenswert?

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

von Tobias Tetzlaff (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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.

von Axel F. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.