Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte Überarbeitung Beide Seiten der Revision
private:rasperry_pi_ir-onoff [2013/01/25 22:10]
Patrick Wacker [zu Beachten / Nice to have] Zeiten bei An/Aus definiert
private:rasperry_pi_ir-onoff [2013/01/28 19:42]
Patrick Wacker [Umsetzung] angefangen
Zeile 29: Zeile 29:
   * Übertragungsfehler im IR-Signal sollten erkannt werden.   * Übertragungsfehler im IR-Signal sollten erkannt werden.
   * Automatische Erkennung von RCA und RC5   * Automatische Erkennung von RCA und RC5
 +  * Die IR-Codes (Tasten) sollten ohne den PIC neu zu Programmieren änderbar sein.
 +    * RCA und RC5 Codes zum Ein-/​Ausschalten im EEProm sichern
 +    * Updates der Codes wenn z.B. der Taster > 8s betätigt wurde.
 +      * - Taster >8s --> IR-Code aufnehmen.
 +      * - 1. "​STOP"​-Taste
 +      * - 2. "​SELECT"​-Taste
 +      * - 3. "​POWER"​-Taste
 +      * - [4. "​ANZAHL der STOP-Codes"​ (STOP so oft betätigen wie es zum einschalten genutzt werden soll) (Default: 2 (z.B. bei "​Skip"​))] ((eventuelle Erweiterung))
 +      * - [5. "​ANZAHL der STOP-Codes"​ (STOP so oft betätigen wie es zum ausschalten genutzt werden soll) (Default: 4 (z.B. bei "​Skip"​))] ((eventuelle Erweiterung))
 +      * - [6. "​ANZAHL der POWER-Codes"​ (POWER so oft betätigen wie es zum Ein-/​Ausschalten genutzt werden soll) (Default: 1 (z.B. bei "​Skip"​))] ((eventuelle Erweiterung))
 +      * Entscheidung ob RCA oder RC5 gespeichert wird innerhalb des PICs treffen
 +      * Wenn ein Code nicht gespeichert werden soll (z.B. keine "​POWER"​-Taste vorhanden) sollte dieser Abschnitt durch ein kurzes betätigen des Tasters übersprungen werden können.
 +      * Anzeige über LED ob CODE richtig entgegen genommen wurde.
 +        * und durch Blinken anzeigen welcher Code gerade eingegeben werden soll. (1-3 mal Blinken, dann ca. 3 Sekunden Pause)
 +      * Automatischer Abbruch der Aufzeichnung wenn länger als 2 Minuten keine Befehle empfangen wurden.
 +    * Taster > 20 Sekunden betätigt --> RESET der IR-Codes auf "​Standard"​ Werte!
   * PIC-Code und Schaltplan/​Layout in Subversion verwalten.   * PIC-Code und Schaltplan/​Layout in Subversion verwalten.
  
Zeile 35: Zeile 51:
     * 2x STOP, dann SELECT --> Einschalten     * 2x STOP, dann SELECT --> Einschalten
     * 4x STOP, dann SELECT --> Ausschalten     * 4x STOP, dann SELECT --> Ausschalten
 +  * Aber auch das Ein-/​Ausschalten über eine "​POWER"​-Taste auf der Fernbedienung sollte möglich sein.
  
  
Zeile 81: Zeile 98:
         * Timer-Reset         * Timer-Reset
         * Bit setzen das "​1"​ Empfangen wurde         * Bit setzen das "​1"​ Empfangen wurde
 +      * ansonsten:
 +        * Timer-Reset
 +        * Bit löschen das "​1"​ Empfangen wurde
 +
 +=== Andere Möglichkeit ===
 +
 +  * Timer auf 8.2ms
 +  * Bei fallenden Flanke (On-Change-Interrupt IR-Data=0) den Timer-Wert vergleichen
 +    * Wenn <= 1.5ms --> 0 Empfangen
 +    * Wenn > 1.5ms und <= 2.5ms --> 1 Empfangen
 +    * Wenn > 2.5ms und <= 8.0ms --> Start-Bit
 +    * Wenn > 8.0ms (Timer-Interrupt) --> Pause zwischen den Telegrammen
 +
 +=== Weitere Möglichkeit ===
 +
 +Muss nochmal überdacht werden, war ein kurzfristiger Einfall der nicht zu Ende gedacht wurde!
 +Wenn keine Logik hinter diesem erkannt werden kann, einfach diesen Punkt entfernen und nicht weiter drüber nachdenken!
 +
 +  * Timer auf 1.6ms
 +  * Interrupt-On-Change (also bei fallender und steigender Flanke)
 +  * Start-Erkennung:​
 +    * Int-Change: Timer-An
 +    * Int-Timer: ​ IR-Data muss noch low sein
 +    * --> Start erkannt wenn zwischenzeitlich kein Int-On-Change eingetreten ist!
 +    * Jetzt müssen 6.5ms/1.6ms (**4**) Timer-Interrupts auftreten.
 +      * --> wenn mehr dann Fehler! Warten bis mehr als 8ms/1.6ms (**5**) Timer aufgetreten sind Timer-Reset bei jedem On-Change-Interrupt!
 +    * BitCounter auf 0 setzen
 +  * Bit-Erkennung:​
 +    * Timer Reset wenn IR-Data = "​0"​ bei On-Change-Interrupt
 +    * Bei Timer-Interrupt:​
 +      * eine "​1"​ an die empfangenen Daten anhängen
 +      * BitCounter incrementieren
 +      * Bit setzen das "​1"​ Empfangen wurde
 +    * Bei On-Change-Interrupt:​
 +      * Wenn IR-Data = "​0"​
 +        * Timer-Reset
 +        * eine "​0"​ an die empfangenen Daten anhängen
 +        * BitCounter incrementieren
 +      * Wenn IR-Data = "​1"​
 +        * sollte eigentlich nicht vorkommen
 +      * Wenn Bit für "​1"​ nicht gesetzt ist:
 +        * eine "​0"​ an die empfangenen Daten anhängen
 +        * und BitCounter incrementieren
 +        * Timer-Reset
 +        * 
       * ansonsten:       * ansonsten:
         * Timer-Reset         * Timer-Reset
Zeile 95: Zeile 157:
  
 ==== Technisat DigiPal 2 - DBV-T Fernbedienung ==== ==== Technisat DigiPal 2 - DBV-T Fernbedienung ====
 +
 +Codierung der einer Taste auf der DigiPal 2 (ohne '​e'​) Fernbedienung (RC5 - Format)
 +
 +{{svg>​private:​rasperry_pi_ir-onoff:​timing_digipal_remote}}
 +
 +Die nachfolgenden Zeiten wurden mit dem Oszilloskop ermittelt.
 +
 +| **Timings** ^  t_low  ^  t_high ​ ^  t_puls ​ ^ __t_soll__ ^
 +^  Start      |   0.9ms |    0.9ms |    1.8ms |     x.y ms |
 +^  "​0" ​       |   0.9ms |    0.9ms |    1.8ms |     x.y ms |
 +^  "​1" ​       |   0.9ms |    0.9ms |    1.8ms |     x.y ms |
 +
 +
  
  
Zeile 123: Zeile 198:
  
 ===== Umsetzung ===== ===== Umsetzung =====
 +
 +==== Verwendete Module ====
 +
 +  * TIMER0: Increment alle 32µs (Bei 4MHz --> Prescaler 1:32), Overflow bei 8,192ms
 +    * Zur Zeitmessung des IR-Data-Signals
 +  * TIMER1: Increment alle 8µs (Bei 4MHz --> Prescaler 1:8), Overflow bei 524,288ms
 +    * Zur Erkennung von Button-Presses und Zeitmessungen für Sleep/​CMD-Ende
 +  * 
  
 ==== Schaltplan ==== ==== Schaltplan ====
Projektwerkzeuge