# IR Empfänger für SPS



## edison (26 September 2007)

Grundidee des Ganzen ist, eine normale Infrarotfernbedienung mit einer SPS zu koppeln.

Sicherlich gibt es da schon fertige Dinge,- aber vor dem Hintergrund, das das ganze hinterher Privat eingesetzt werden soll spielt der Preis halt auch eine Rolle.
(IrTrans + CP340 kommen auf ca. 400,-€ => das ist mir der Spaß nicht wert)

Eigentlich gab das es da ein fertiges IC, das mir die RC5 Infrarotsignale decodiert und ausgangsseitig als Bits ausgibt.
Leider wird dieser Baustein (SAA3049) nichtmehr hergestellt.

Durch einen anderen Thread scheint mein vorhaben doch Realisierbar:


> Zu dem IR-Empfänger der je in dem Beitrag off Topic ist kann man durchaus drüber nachdenken so was zu lösen. Ein ATmega8 mit Quarz, Spannungsregler und Co. + IR-Empfänger + Optokoppler um an die 24V der SPS zu kommen ist ja von der Hardware her nichts wildes. Man Braucht 5 Bit für die Adresse und 6 Bit für den Befehl.
> Mach doch mal einen eigenen Thread auf und wir können dort über das Projekt weiter schreiben.


 
@automationLab
Genauso hatte ich mir das vorgestellt 
Nur leider hab ich von Atmegas keinen Plan.
Plan entwerfen und das Ganze auf Lochraster bringen krig ich wohl hin aber dann ist schluß.


----------



## automationLab (26 September 2007)

Die Auswertung von RC5 mit einem ATmega ist sehr leicht im Internet zu finden. Also die Programmierung bzw. das zusammensetzen den Code Stücke und das Flashen von einem ATmega8 kann ich übernehmen. An einem ATmega32 habe ich einen IR-Empfänger schon laufen.

Hier noch zwei Links zum Thema:
http://www.roboternetz.de/wissen/index.php/RC5-Code
http://www.roboternetz.de/wissen/index.php/RC5-Decoder_für_ATMega

Die Grundschaltung des ATmega und das anschließen des Empfängers ist denke ich klar. Aber wie sollte man am besten die µC->SPS Schnittstelle realisieren?


----------



## edison (26 September 2007)

> Die Grundschaltung des ATmega und das anschließen des Empfängers ist denke ich klar. Aber wie sollte man am besten die µC->SPS Schnittstelle realisieren?


 
Ich hatte mir vorgestellt, einfach alle Bits des RC5 Codes auf SPS Eingänge zu legen.
Ist superschnell und finanziell noch vertretbar.
Alternativ könnte man natürlich auch seriell über einen Eingang die Daten an die SPS übergeben. Das wäre zwar langsamer aber eleganter und günstiger.
Die Übertragung der 14Bit RC5 nehmen ja eh schon 30ms in anspruch - da könnte man sich bei der Komminikation zu SPS wohl auch noch 100ms Zeit nehmen.

Oder wie wäre es, Dein InfoTextDisplay um die IR Funktion zu erweitern?
Zu den 8DO kämen dann noch 8DI von der SPS - noch 2-5 Taster dabei und fertig ist das HMI ... oder spinne ich jetzt rum 



> Also die Programmierung bzw. das zusammensetzen den Code Stücke und das Flashen von einem ATmega8 kann ich übernehmen


Das wäre prima.
Dann zeiche ich einen Schaltplan und bringe das Ganze auf eine Lochstreifenplatine.


----------



## automationLab (26 September 2007)

Ich würde dafür erstmal einen eigenen ATmega8 nehmen. Ich habe zurzeit beim InfoTextLCD nur noch vier I/O Pins frei. 

Die Lösung mit den 11 Datenleitungen (5=Adresse, 6=Befehl) halte ich auch für die Praktikabelste. Als Schnittstelle würde ich auf drei PC847 Optokoppler zurück greifen. Die Spannungsversorgung sollte aus den 24V der SPS gesehen damit man kein Steckernetzteil oder so was braucht.

Morgen organisiere ich mir noch einen TSOP1736 IR-Empfänger. Dann kann ich auch schon am WE damit experimentieren.


----------



## ge-nka (26 September 2007)

Wie wärs damit ?


----------



## Oberchefe (27 September 2007)

oder hiermit:
http://www.elektor.com/default.lynkx?pointer=1-28-16120-16345-16348-24318


----------



## Oberchefe (27 September 2007)

oder aber:
http://www.factorydirect.co.uk/factorydirectproducts/irproducts/irdecoder.html


----------



## automationLab (27 September 2007)

Ich habe gestern Abend mal etwas mit dem IR-Empfänger an meinem ATmega32 gespielt. Die Auswertung klappt soweit auch.

Test mit der TV-Fernbedienung (Philips):  
Geht prima nur bei der Taste-Null ist eben die Adresse und der Befehl auch Null. Was die erkennen auf der SPS Seite nur anhand der Adresse und des Befehls unmöglich macht. Zurzeit schalte ich die Ausgänge vom µC nach einer kurzen Zeit aus damit man in der SPS auswerten kann wie Lange in etwa die Fernbedienung betätigt ist. In µC habe ich aber die Information New Code die ich auf einem weiteren Port-Pin nach Außen führen könnte was bei der SPS allerdings auch einen Weiteren Eingang benötigen würde. Ich denke aber nicht das jemand eine TV Fernbedienung nehmen würde da diese ja auch die Fernseher mit beeinflussen würde.

Test mit der SAT-Fernbedienung (Grundig):
Das Verhalten ist unerwartet. Die sendet mit einer Taste abwechselnd verschiedene Adressen und Befehle.


----------



## edison (27 September 2007)

Danke für die Links Oberchefe,

die Polloin FB hatte ich auch schon gefunden - leider nur 8 Kanäle.
Die Elektorschaltung ist nicht schlecht, nur wollte ich nicht den Artikel kaufen und anschließend für einen fertig Programmierten Prozessor bezahlen.
Factorydirekt ist mir neu - eigentlich genau das was ich gesucht hatte (davon abgesehen, das ich das min 25 IR Decoder hätte bestellen müssen).

Die angestrebte Lösung bietet den Vorteil, das hinterher jede FB die RC5 sendet komplett mit allen Tasten nutzbar ist.
Nebenher gibts die Bauteile gibts an jeder Ecke.


----------



## edison (27 September 2007)

@ automationLab

sicherlich sendet die Grundig FB keinen RC5 code und daher kann das Programm nicht wirklich sinnvoll umwandeln.


----------



## automationLab (27 September 2007)

Ich denke das die Grundig FB schon RC5 sendet da ich ja Adresse und Befehl auslesen kann. Es ist aber so das speziell bei dieser FB z.B. beim Betätigen einer Taste "1" Der Befehl 7 empfangen wird und die Adresse zwischen 1 und 9 hin und her  Toogeld. Beim Loslassen der Taste wird zum Abschluss unter der Adresse 4 der Befehl 31 gesendet. 
Ich denke das man dies auf der µC Seite einfach wegfiltern sollte. Um es auf der SPS-Seite verarbeiten zu können ist das Toggelnde Signal eh zu schnell. Wenn man eine solche FB zur Steuerung verwenden wollte würde das eh ein spezielles Programm erfordern. Für eine Standard RC5 FB würde es nur wenige ms Unterschied bedeuten wenn man erst das Zweite Signal auswerte.

Oder wie siehst Du das?


----------



## edison (27 September 2007)

Es wird wohl nicht möglich sein, einen Decoder für alle möglichen FBs zu programmieren.
Soweit ich mich eingelesen habe, halten sich selbst innerhalb von RC5 nicht alle Hersteller an die Vorgaben.
Ausreichend sollte sein, wenn eine Universalfernbedienung so programmiert werden kann, das alle Tasten sicher erkannt werden.
Dies sollte dann auch mit Handy oder PDA Fernbedienungsprogrammen möglich sein.

Je nach Anwendungsfall könnte man sich die Adresse an der SPS sparen, um weniger Eingänge zu benötigen - von einer FB können dann immernoch alle Tasten erkannt werden.
Sehr wichtig finde ich, die Tastendruckdauer auswerten zu können um z.B. eine Lampe zu Dimmen.


----------



## edison (27 September 2007)

So, hab mir mal ein paar Schaltzeichen aus dem Netz für den Schaltplan kopiert.
Jetzt kommen da so ein paar Fragen auf:

Wird ein Quarz benötigt?
Welche Ausgangspins werden welches Bit schalten?
Hab mal in den Reichelt Katalog geschaut - 8 oder 16 MHz?


----------



## automationLab (27 September 2007)

Mal aus dem holen Bauch raus würde ich so sagen:


```
PIN  Funktion
 1    Reset    
 2    RXD    Option
 3    TXD    Option
 4    IR     OUT vom TSOP1736
 5        
 6        
 7    5V    
 8    GND    
 9    Quarz (16MHz)    
10    Quarz (16MHz)    
11        
12        
13        
14    SPS 1    Taste Aktiv
15    SPS 2    Adresse 2^0
16    SPS 3    Adresse 2^1
17    SPS 4    Adresse 2^2 (MOSI)
18    SPS 5    Adresse 2^3 (MISO)
19    SPS 6    Adresse 2^4 (SCK)
20    5V    
21        
22    GND    
23    SPS 7    Befehl 2^0
24    SPS 8    Befehl 2^1
25    SPS 9    Befehl 2^2
26    SPS 10   Befehl 2^3
27    SPS 11   Befehl 2^4
28    SPS 12   Befehl 2^5
```
Auf den Adress Leitungen, würde noch der ISP landen. Also MOSI, MISO und SCK.


----------



## edison (28 September 2007)

Hausaufgaben gemacht, Elektronik ist nicht so ganz mein Schwerpunkt also bitte mal kritisch beäugeln


----------



## automationLab (4 Oktober 2007)

Ich habe gestern mal eine RC5-Auswertung auf meiner kleinen "IR-Strickplatiene" implementiert.

Ich habe mich nicht an die Belegung gehalten die ich in meinem letzten Post vorgeschlagen habe. Da es sich aber nur um die Bitzuordnung geht ändert sich deswegen recht nichts an der Hardware. 

Hier die aktuelle Belegung:
	
	



```
PIN  Funktion
 1    Reset    
 2    RXD    Option
 3    TXD    Option
 4    IR     OUT vom TSOP1736
 5        
 6        
 7    5V    
 8    GND    
 9    Quarz (16MHz)    
10    Quarz (16MHz)    
11        
12        
13        
14    SPS 1    Befehl 2^0
15    SPS 2    Befehl 2^1
16    SPS 3    Befehl 2^2
17    SPS 4    Befehl 2^3 (MOSI)
18    SPS 5    Befehl 2^4 (MISO)
19    SPS 6    Befehl 2^5 (SCK)
20    5V    
21        
22    GND    
23    SPS 7    Adresse 2^0
24    SPS 8    Adresse 2^1
25    SPS 9    Adresse 2^2
26    SPS 10   Adresse 2^3
27    SPS 11   Adresse 2^4
28    SPS 12   Taste Aktiv
```
Bei meiner Platine habe ich die Ausgänge Low=aktiv verwendet.
	
	



```
PortPin  ___   LED  +5V
            o-|___|--|<---o
               1k
```
Das würde in deiner Hardware eine Änderung an den Optokopplern nach sich ziehen. 

```
+5Vo
         |
        .-.
        | |
        | |
        '-'
         |     |
         |   |/
         V ->|
         -   |>
         |     |
         o
   PortPin
```
Die Ursprüngliche Aufgabe ist Software seitig realisiert. Im nächsten Schritt würde ich die RS232 Schnittstelle angehen und den Empfänger quasi lernbar machen.  Damit man mit weniger als 12 I/Os an der SPS klar kommt. In dem man den Empfänger so konfiguriert das er nur die "gültigen" Codes an die SPS weiter gibt. Dann kann man entscheiden wie viele Eingänge man an der SPS verwenden will ich denke das 5 Eingänge also 31 (0 -> kein Befehl) verschiedene Befehle reichen.

Dazu müsste dann aber an die Hardware noch ein max232 + Kondensatoren  gelötet werden. Was aber bei einer Lochrasterplatine nicht sonderlich schlimm wäre.

Übrigens war es bei mir nicht leicht RC5-FBs zu finden ich habe ca. einen Schuhkarton voll mit FBs und nur zwei davon senden in RC5. Aber es gibt ja kostengünstige universal FBs. 

Ich habe mal ein Bild von der Platine gemacht (siehe Anhang). Zur Erklärung rote LEDs -> Befehl, grüne LEDs -> Adresse, gelbe LED -> Taste aktiv.
Die derzeitige Software ist als Hex-File im Anhang (txt zu hex umbennen).


----------



## edison (4 Oktober 2007)

So, Ausgänge Low=aktiv habe ich umgesetzt - wenn ich Deine Zeichnung richtig verstanden habe.



> Damit man mit weniger als 12 I/Os an der SPS klar kommt


 Was hältst Du davon, die Daten Seriell über 2Bit zu übertragen (Takt/Daten) oder ein Nibble oder ein Byte?
Wäre alles besser als volle 12 I/O
Taktrate dann via 232 einstellbar.

Bin immernoch angetan von Deinem InfoTextDisplay, evtl. lässt sich das Ganze ja doch noch so zusammenstreichen, das beides zusammen realisierbar ist?

Edit:
Übrigens, Danke für Deine Mühen


----------



## automationLab (5 Oktober 2007)

edison schrieb:


> Was hältst Du davon, die Daten Seriell über 2Bit zu übertragen (Takt/Daten) oder ein Nibble oder ein Byte?


Davon halte ich nichts, da es zu langsam wird. Man müsste dann ja jedes Bit ungefähr die doppelte Zykluszeit der SPS anstehen lassen. Gerade bei SPSen mit einer geringe Performance und eine Variable Zykluszeit (also eine kleine von Siemens) wird das zu Problemen führen. 
Aber noch wichtiger wäre an der Ecke das man ca. 14 Bit Übertragen müsste was wohl bei 28 SPS Zyklen landen würde. Dann noch ein "Taste aktiv" Auswertung zu machen kann bei langsamen SPSen unbrauchbar werden. 



edison schrieb:


> Bin immernoch angetan von Deinem InfoTextDisplay, evtl. lässt sich das Ganze ja doch noch so zusammenstreichen, das beides zusammen realisierbar ist?


Das höre ich doch gerne. Da gäbe es zwei Richtungen die man einschlagen könnte. 

1. Anstelle eines ATmega8 einen ATmega32 verwenden. Der hat mehr I/Os.

2. Es gibt da einen Trick wie man die Datenleitungen vom LCD als Digital in benutzen kann. Somit hätten wir wieder 4 Pin mehr frei. Beim InfoTextLCD sind zurzeit 4 Pins frei und 4 kämen dazu einen brauchen wir für den IR-Empfänger. Wenn man jetzt via Hyperterminal eine Parametrierung vornehmen würde und 63 Wertepaare (Adresse + Befehl) könnte man über 6 I/Os einen Befehl an die SPS weitergeben solange der ansteht ist die Taste an der Fernbedienung gedrückt ansonsten wird Null ausgegeben.

Die Bauteile kosten ja nicht die Welt. Man kann es auch bei zwei separate Projekte beibehalten. Gerade bei dem IR2PLC könnte ich mir vorstellen das man default einfach die 12 Bits raus gibt und wer will kann mit dem Terminal den Empfänger auf eine RC5-Fernbedienung einlernen.

PS: Nichts zu Danken es ist ein Hobby.


----------



## edison (5 Oktober 2007)

> Es gibt da einen Trick wie man die Datenleitungen vom LCD als Digital in benutzen kann.


 
In der Hoffnung, mich nicht zu weit aus dem Fenster zu lehnen - was hältst Du davon: ?
http://www.mikrocontroller.net/articles/Port-Expander_PCF8574

Ist evtl. noch die 3. Variante
So wären alle Portprobleme dahin


----------



## automationLab (5 Oktober 2007)

Hallo edison,
Port Expander sind ja ganz nett. Aber es kommt weder preislich noch platzmäßig an einem ATmega32 heran. Zumal wenn man nur einen nimmt braucht "gewinnt" man ja gerade mal 6 I/O-Pins (8 - 2 (für den I²C)) und der ATmega32 hat gegenüber einem ATmega8, bei der Konfiguration wie wir es anstreben mit Quarz und ISP, ganze 12 I/O-Pins mehr. Dann noch mehr Programmspeicher usw. Also wenn bei dem ATmega32 die Pins nicht reichen würde ich zu den Port Expander greifen. Bei einem ATmega8 würde das IMHO nicht viel bringen. Nur zur Info man kann von dem Typ 8 Stück an einen I²C Bus hängen aber preislich ist es wohl erst interessant wenn der ATmega32 nicht mehr reicht.

Bleibt aber immer noch die Frage ob man eine größere oder lieber mehrere kleiner Applikationen baut.


----------



## automationLab (9 Oktober 2007)

Im Anhang die FuseBit Einstellung. Die bei mir läuft.


----------



## automationLab (10 Oktober 2007)

Hallo edison,
im Anhang findest Du das abgeänderte Programm (txt -> hex). Nun werden die Ausgänge des µC nach einer kleinen Zeit zurückgesetzt.

Übrigens würde ich gerne mal ein Bild von Deiner Platine sehen.


Gruß
 Marcus


----------



## edison (10 Oktober 2007)

Wow, schon über 650 Hits auf diesen Thread - und dabei schreiben nur 2 Personen hinein.
Scheint ja doch Interesse vorhanden zu sein.
Aber wer outet sich schon, das Er eine SPS privat einsetzt.

Mal ein kleiner Zwischenbericht:
Schaltung ist Fertig, auf Lochrasterplatine aufgebaut und getestet.
Programm auf dem Atmega aufgespielt und getestet.
Alles zusammen provisorisch im Wohnzimmer montiert.
S7 Programm ist in Arbeit.


----------



## Ralle (10 Oktober 2007)

Wie jetzt, die Kiste ist in deinem Wohnzimmer, was sagt deine Frau dazu?


----------



## BodyKra (11 Oktober 2007)

*Ich Oute mich...*



> Wow, schon über 650 Hits auf diesen Thread - und dabei schreiben nur 2 Personen hinein.
> Scheint ja doch Interesse vorhanden zu sein.
> Aber wer outet sich schon, das Er eine SPS privat einsetzt.


 
Ich hab ne S7-224 (Ich denke die reicht aus.vor allem vom platzaufwand) am laufen.Funst super hab ein TP177micro im Flur.
Bin gerade an der Heizungssteuerung Planung (Steckdosen und Licht sind ja am Laufen) . Die Realisierung mit s7 ist wesentlich günstiger als wie eib.
Die verkablung ist eben aufwendiger.


----------



## automationLab (11 Oktober 2007)

edison schrieb:


> S7 Programm ist in Arbeit.


Ich würde Das so machen:

Programm
	
	



```
FUNCTION FC123 : INT
TITLE = 'IR2PLC'
VERSION : '0.1'
AUTHOR  : AutoLab
NAME    : IR2PLC
FAMILY  : BASIC

VAR_INPUT
  DB_No     :INT;           (* Nummer des Datenbausteins    *)      
  IRcmd0    :BOOL;  
  IRcmd1    :BOOL;  
  IRcmd2    :BOOL;  
  IRcmd3    :BOOL;  
  IRcmd4    :BOOL;  
  IRcmd5    :BOOL;  
  IRaktiv   :BOOL;
END_VAR

VAR_TEMP
  // temporäre Variablen
  myCMD       :INT;     (* Kommando von der IR-FB       *)
  myByteNo    :INT;     (* Bytenummer im DB             *)
  myBitNo     :INT;     (* Bitnummer  im DB             *)
  myDB_No     :WORD;    (* Datenbausteinnummer intern   *)

END_VAR

  // Anweisungsteil
  myCMD := 0;
  IF IRcmd0 THEN myCMD := myCMD +  1; END_IF;
  IF IRcmd1 THEN myCMD := myCMD +  2; END_IF;  
  IF IRcmd2 THEN myCMD := myCMD +  4; END_IF;
  IF IRcmd3 THEN myCMD := myCMD +  8; END_IF;
  IF IRcmd4 THEN myCMD := myCMD + 16; END_IF;  
  IF IRcmd5 THEN myCMD := myCMD + 32; END_IF;  

  myByteNo := myCMD DIV 8;
  myBitNo  := myCMD MOD 8;
  myDB_No  := INT_TO_WORD(DB_No);

  WORD_TO_BLOCK_DB(myDB_No).DD[0] := 0;  
  WORD_TO_BLOCK_DB(myDB_No).DD[4] := 0;  
  WORD_TO_BLOCK_DB(myDB_No).DX[myByteNo, myBitNo] := IRaktiv;  

  IF NOT IRaktiv THEN 
    myCMD := -1;
  END_IF;

  FC123 := myCMD;
END_FUNCTION
```
Datenbaustein:
	
	



```
DATA_BLOCK "IR2PLC_DB"
TITLE =
VERSION : 0.1
  STRUCT    
    IRcmd00    : BOOL ; //IR Kommando 0    
    IRcmd01    : BOOL ; //IR Kommando 1    
    IRcmd02    : BOOL ; //IR Kommando 2    
    IRcmd03    : BOOL ; //IR Kommando 3    
    IRcmd04    : BOOL ; //IR Kommando 4    
    IRcmd05    : BOOL ; //IR Kommando 5    
    IRcmd06    : BOOL ; //IR Kommando 6    
    IRcmd07    : BOOL ; //IR Kommando 7    
    IRcmd08    : BOOL ; //IR Kommando 8    
    IRcmd09    : BOOL ; //IR Kommando 9    
    IRcmd10    : BOOL ; //IR Kommando 10    
    IRcmd11    : BOOL ; //IR Kommando 11    
    IRcmd12    : BOOL ; //IR Kommando 12    
    IRcmd13    : BOOL ; //IR Kommando 13    
    IRcmd14    : BOOL ; //IR Kommando 14    
    IRcmd15    : BOOL ; //IR Kommando 15    
    IRcmd16    : BOOL ; //IR Kommando 16    
    IRcmd17    : BOOL ; //IR Kommando 17    
    IRcmd18    : BOOL ; //IR Kommando 18    
    IRcmd19    : BOOL ; //IR Kommando 19    
    IRcmd20    : BOOL ; //IR Kommando 20    
    IRcmd21    : BOOL ; //IR Kommando 21    
    IRcmd22    : BOOL ; //IR Kommando 22    
    IRcmd23    : BOOL ; //IR Kommando 23    
    IRcmd24    : BOOL ; //IR Kommando 24    
    IRcmd25    : BOOL ; //IR Kommando 25    
    IRcmd26    : BOOL ; //IR Kommando 26    
    IRcmd27    : BOOL ; //IR Kommando 27    
    IRcmd28    : BOOL ; //IR Kommando 28    
    IRcmd29    : BOOL ; //IR Kommando 29    
    IRcmd30    : BOOL ; //IR Kommando 30    
    IRcmd31    : BOOL ; //IR Kommando 31    
    IRcmd32    : BOOL ; //IR Kommando 32    
    IRcmd33    : BOOL ; //IR Kommando 33    
    IRcmd34    : BOOL ; //IR Kommando 34    
    IRcmd35    : BOOL ; //IR Kommando 35    
    IRcmd36    : BOOL ; //IR Kommando 36    
    IRcmd37    : BOOL ; //IR Kommando 37    
    IRcmd38    : BOOL ; //IR Kommando 38    
    IRcmd39    : BOOL ; //IR Kommando 39    
    IRcmd40    : BOOL ; //IR Kommando 40    
    IRcmd41    : BOOL ; //IR Kommando 41    
    IRcmd42    : BOOL ; //IR Kommando 42    
    IRcmd43    : BOOL ; //IR Kommando 43    
    IRcmd44    : BOOL ; //IR Kommando 44    
    IRcmd45    : BOOL ; //IR Kommando 45    
    IRcmd46    : BOOL ; //IR Kommando 46    
    IRcmd47    : BOOL ; //IR Kommando 47    
    IRcmd48    : BOOL ; //IR Kommando 48    
    IRcmd49    : BOOL ; //IR Kommando 49    
    IRcmd50    : BOOL ; //IR Kommando 50    
    IRcmd51    : BOOL ; //IR Kommando 51    
    IRcmd52    : BOOL ; //IR Kommando 52    
    IRcmd53    : BOOL ; //IR Kommando 53    
    IRcmd54    : BOOL ; //IR Kommando 54    
    IRcmd55    : BOOL ; //IR Kommando 55    
    IRcmd56    : BOOL ; //IR Kommando 56    
    IRcmd57    : BOOL ; //IR Kommando 57    
    IRcmd58    : BOOL ; //IR Kommando 58    
    IRcmd59    : BOOL ; //IR Kommando 59    
    IRcmd60    : BOOL ; //IR Kommando 60    
    IRcmd61    : BOOL ; //IR Kommando 61    
    IRcmd62    : BOOL ; //IR Kommando 62    
    IRcmd63    : BOOL ; //IR Kommando 63    
               
  END_STRUCT ;  
BEGIN
    IRcmd00    := FALSE; 
    IRcmd01    := FALSE; 
    IRcmd02    := FALSE; 
    IRcmd03    := FALSE; 
    IRcmd04    := FALSE; 
    IRcmd05    := FALSE; 
    IRcmd06    := FALSE; 
    IRcmd07    := FALSE; 
    IRcmd08    := FALSE; 
    IRcmd09    := FALSE; 
    IRcmd10    := FALSE; 
    IRcmd11    := FALSE; 
    IRcmd12    := FALSE; 
    IRcmd13    := FALSE; 
    IRcmd14    := FALSE; 
    IRcmd15    := FALSE; 
    IRcmd16    := FALSE; 
    IRcmd17    := FALSE; 
    IRcmd18    := FALSE; 
    IRcmd19    := FALSE; 
    IRcmd20    := FALSE; 
    IRcmd21    := FALSE; 
    IRcmd22    := FALSE; 
    IRcmd23    := FALSE; 
    IRcmd24    := FALSE; 
    IRcmd25    := FALSE; 
    IRcmd26    := FALSE; 
    IRcmd27    := FALSE; 
    IRcmd28    := FALSE; 
    IRcmd29    := FALSE; 
    IRcmd30    := FALSE; 
    IRcmd31    := FALSE; 
    IRcmd32    := FALSE; 
    IRcmd33    := FALSE; 
    IRcmd34    := FALSE; 
    IRcmd35    := FALSE; 
    IRcmd36    := FALSE; 
    IRcmd37    := FALSE; 
    IRcmd38    := FALSE; 
    IRcmd39    := FALSE; 
    IRcmd40    := FALSE; 
    IRcmd41    := FALSE; 
    IRcmd42    := FALSE; 
    IRcmd43    := FALSE; 
    IRcmd44    := FALSE; 
    IRcmd45    := FALSE; 
    IRcmd46    := FALSE; 
    IRcmd47    := FALSE; 
    IRcmd48    := FALSE; 
    IRcmd49    := FALSE; 
    IRcmd50    := FALSE; 
    IRcmd51    := FALSE; 
    IRcmd52    := FALSE; 
    IRcmd53    := FALSE; 
    IRcmd54    := FALSE; 
    IRcmd55    := FALSE; 
    IRcmd56    := FALSE; 
    IRcmd57    := FALSE; 
    IRcmd58    := FALSE; 
    IRcmd59    := FALSE; 
    IRcmd60    := FALSE; 
    IRcmd61    := FALSE; 
    IRcmd62    := FALSE; 
    IRcmd63    := FALSE; 
END_DATA_BLOCK
```
Dann kannst Du im restlichen Programm einfach mit dem BOOL aus dem DB arbeiten als wäre es ein Taster.


----------



## edison (13 Oktober 2007)

Die Empangenen Codes als Bits in einem DB aufzuschlüsseln finde ich eine schöne Sache, Danke
Darauf war ich noch garnicht gekommen.


> IF IRcmd1 THEN myCMD := myCMD + 2; END_IF;


Feine Sache
SCL beherrsche ich leider nicht somit hab ich meine FC in AWL geschrieben.
Hier mal mein Code, auf das Auswerten der Adresse hab ich erstmal verzichtet ggfs. später.

```
FUNCTION "IR2PLC" : VOID
TITLE =
VERSION : 0.1
 
VAR_INPUT
  EW : WORD ; //Eingangswort IR2PLC
END_VAR
VAR_OUTPUT
  Adresse : BYTE ; 
  Befehl : BYTE ; 
END_VAR
VAR_TEMP
  eing : WORD ; 
  Bef : BYTE ; 
  Adr : BYTE ; 
  Taste_aktiv : BOOL ; 
END_VAR
BEGIN
NETWORK
TITLE =Fernbedienungscodes einlesen und auswerten
//Befehl auslesen
      L     #EW; 
      SLW   2; 
      SRW   10; 
      T     #Bef; 
//Adresse auslesen
      L     0; 
      T     #Adr; 
      L     #EW; 
      SRW   14; 
      T     #Adr; 
      L     #EW; 
      SLW   13; 
      SRW   13; 
      L     #Adr; 
      +I    ; 
      T     #Adr; 
//Tastendruck aktiv
      L     #EW; 
      T     #eing; 
      U     L      1.3; 
      SAVE  ; 
//Ausgang schreiben
      U     L      1.3; 
      SPBNB high; 
      L     #Adr; 
      T     #Adresse; 
      L     #Bef; 
      T     #Befehl; 
      SPA   end; 
high: NOP   0; 
      L     0; 
      T     #Adr; 
      T     #Befehl; 
end:  NOP   0; 
NETWORK
TITLE =Befehle auswerten
      L     #Bef; 
      L     16; 
      ==I   ; 
      U     L      1.3; 
      =     "IR_Empfangsbits".Licht_auf; 
      L     #Bef; 
      L     17; 
      ==I   ; 
      U     L      1.3; 
      =     "IR_Empfangsbits".Licht_ab; 
      L     #Bef; 
      L     32; 
      ==I   ; 
      U     L      1.3; 
      =     "IR_Empfangsbits".Rollaeden_auf; 
      L     #Bef; 
      L     33; 
      ==I   ; 
      U     L      1.3; 
      =     "IR_Empfangsbits".Rollaeden_ab; 
      L     #Bef; 
      L     13; 
      ==I   ; 
      U     L      1.3; 
      =     "IR_Empfangsbits".Licht_aus; 
 
END_FUNCTION
```


----------



## edison (4 Dezember 2007)

> Wie jetzt, die Kiste ist in deinem Wohnzimmer, was sagt deine Frau dazu?


 
 Die macht da das Licht an oder öffnet die Rolläden  - und ist der Meinung, das da doch noch ein paar Funktionen mehr machbar sein sollten 

Das Ganze funktioniert jetzt bald schon seit 4 Wochen und der Wunsch kommt auf, das will ich auch im Arbeitszimmer, Schlafzimmer,...
Doch da werden dann doch die benötigten Eingänge knapp - war ja klar.

@AutomationLab
Wie wärs mit einer Version, bei der die SPS einen Takt vorgibt und der Atmega sendet über einen Ausgang seriell die Empfangenen Bits?


----------



## BigStephan (28 Juli 2009)

*Lebt das noch?*

Hallo Leute,

habe heute diesen thread hier entdeckt und frage mich inwieweit eure Sachen nun noch laufen...gibts Weiterentwicklungen? Ist gar jemand auf die Idee gekommen das ganze auf ne richtige Platine zu routen und fertigen zu lassen? Wäre schöne wenns das Ding fertig programmiert gäbe, so daß man es nur noch an die SPS schließen muß....

Grüße

BigStephan


----------



## edison (31 Juli 2009)

Weiterentwicklung keine, funktioniert aber nach wie vor prächtig


----------



## wulfen (7 Januar 2011)

Hallo zusammen, ich bin neu im Forum und auch was SPS & Co betrifft (gut nicht neu aber es sit schon sehr sehr lange her) aber das mit der Fernbedienung klingt sehr interessant zumal ich auch an einem ähnlichen Projekt "bastel". Ist es möglich z.B. zwei Tasten einer Fernbedienung (RC5-Code) in den Atmega ein zulesen und ihn so zu programmieren das er auch nur diese beiden Befehle befolgt? Die beiden Codes quasi im Atmega abspeichern?


----------



## Oberchefe (9 Januar 2011)

hier beispielsweise gibt es Code zum Decodieren, er Rest sollte relativ einfach sein:

http://www.mikrocontroller.net/topic/12216

Ansonsten mal Google bemühen (AVR RC5)


----------



## mariob (14 Januar 2011)

Hallo,
hier gibt es sowas fast fertig für wenlg Geld:
http://www.pollin.de/shop/dt/NTc5OT...ze/8_Kanal_IR_Fernbedienungs_Bausatz_IR8.html

Ich weiß nur nicht ob man da die Quellen für Modifikationen kriegt.

Gruß
Mario


----------



## schrauber (10 März 2011)

Hallo,
Ich habe diese Beiträge als Vorlage genommen, bin jedoch aufgrund meiner begrenzten Programierkenntnisse einen anderen Lösungsweg gegangen.

Bei meiner Version dekodiert der Atmel den RC5 Code, vergleicht den Code und schaltet dann einen entsprechenden Ausgang.
Der Atmel hat bei meiner Version 28 Ausgänge
An diese Ausgange Wird eine DI Baugruppe angebunden.


----------

