mikrocontroller.net

Forum: Projekte & Code Erweiterter NEC IR Empfänger


Autor: Patrick Weggler (pw-sys) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nachdem ich für avr-gcc nichts passendes lauffähiges fand habe ich 
anhand von 
http://www.obersomer.com/furios-power/index.php?vi...

und
http://www.sbprojects.com/knowledge/ir/nec.htm

einen auf einem ATmega32 lauffähigen Code erstellt.

Die Adresse wird als uint16_t variable ausgespuckt und der Befehl als 
uint8_t, solange die Daten richtig erkannt wurden.

Die lcd.h und lcd.c sind Teil der lib von Peter Fleury

Gruß
Patrick

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... und was möchtest Du uns damit sagen ?

Autor: Dampfmaschin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bestimmt, daß er den Quelltext noch nachreicht...

Autor: Jan K. (madengineer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Patrick,
habe bin gerade durch Zufall hier gelandet und habe festegestellt, dass 
ich gerade vor dem selbem Problem stehe...

Das ganze ist Teil meines Moodlight-Projekts, wofür ich eine 
Fernbedienung gekauft habe. Und nach einer Runde reverse-engineering und 
recherche weiß ich nun, dass sie mit dem NEC-Code sendet.
Weitere Infos hier:
http://madengineer.de/projekte/moodlight/

Ich würde mich freuen, wenn du deinen Code zur Verfügung stellen 
könntest...

Viele Grüße
Jan

Autor: Glühweinkenner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, der code wäre suuper!

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
könnte bascom code anbieten,

Autor: Jan K. (madengineer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja einen Bascom Link findet man schon in der PDF, die er oben verlinkt 
hat:
http://www.mcselec.com/index.php?option=com_conten...

Das Problem an diesem Code ist, dass er Interrupt gesteuert ist, hier 
könnte man dann Probleme mit Störungen bekommen, die dann den µC 
blockieren. Ich arbeite an einem Timerbasiertem Code, welchen ich in 
meine Soft-PWM integrieren kann.
Aber das Prinzip ist das gleiche:
Am Anfang der Routine wird der Port abgefragt, wenn sich im Vergleich 
zum Vorherigem Aufruf nichts geändert hat, dann wird die Routine wieder 
verlassen. Nach dieser Flankenerkennung könnte man dann den 
IRQ-basierten Code weiterverwenden.

Autor: Bernhard M. (boregard)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ihr einen Code wollt, der "im Prinzip" auf Peters RC5 decoder 
aufbaut, hier...

Es werden alle 32 empfangenen Bit zurückgegeben, bei der weiteren 
Auswertung kann man dann entscheiden, ob man Standard oder Erweiterten 
Code annimmt (8 oder 16 Bit Adresse) und ob man die Negierung zur 
Fehlererkennung ausnutzt...
    // read remote...
    necdata = get_nec_data();
    if (necdata != IRNEC_NOREC)
    {
        set_cursor(0,0);
        lcd_pstring (PSTR ("NEC: "));

        if ((((uint8_t)(necdata >> 8) & 0xff) ^ (uint8_t)(necdata & 0x00ff)) != 0xff)
        {
           lcd_pstring (PSTR ("error"));
        }
        else
        {
            tmp = (necdata >> 24) & 0xff;
            print_hex (tmp);
            lcd_data (' ');
            tmp = (necdata >> 16) & 0xff;
            print_hex (tmp);
            lcd_data (' ');
            tmp = (necdata >> 8) & 0xff;
            print_hex (tmp);
            lcd_data (' ');
            tmp = necdata & 0xff;
            print_hex (tmp);
        }
    }

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei mir werden interrupt nur zum wecken aus dem powerdown mode und der 
timer nur während des empfangens benutzt.
Wird ein spike empfangen, kann der code auswerten, ob ein Startbit 
empfangen wurde (9ms pause)

Bricht eine übertragung ab, gibt es ff,ff,ff,ff als ergebniss

$regfile = "m88def.dat"
$crystal = 16000000
'10khz
Config Timer2 = Timer , Prescale = 8
Const Timer2vorgabe = 56
On Timer2 Timer2_irq
Disable Timer2
'Remote variables
Dim Byte1 As Byte
Dim Byte2 As Byte
Dim Byte3 As Byte
Dim Byte4 As Byte
Dim Count As Byte
Dim B     As Byte
'interrupt nur für wakeup!
Config Portd.3 = Input
R_in1 Alias Pind.3
Config Int1 = Low Level
On Int1 Rx_remo


'main program
do
if r_in1=0 then gosub nec_rx
loop
end


Rx_remo:
Gosub Set_hw
return

nec_rx:
Do
Loop Until R_in1 = 0

Count = 0
Start Timer2

Do
Loop Until R_in1 = 1
Stop Timer2


If Count > 74 Then                                          'Start condition received??

Count = 0
Start Timer2
Do
Loop Until R_in1 = 0
Stop Timer2

Byte1 = 0
Byte2 = 0
Byte3 = 0
Byte4 = 0

For B = 0 To 7
Count = 0
Do
Loop Until R_in1 = 1
Start Timer2

Do
Loop Until R_in1 = 0 Or Count > 100
Stop Timer2


If Count > 8 Then Byte1.b = 1
Next

For B = 0 To 7
Count = 0
Do
Loop Until R_in1 = 1
Start Timer2


Do
Loop Until R_in1 = 0 Or Count > 100
Stop Timer2

If Count > 8 Then Byte2.b = 1
Next

For B = 0 To 7
Count = 0
Do
Loop Until R_in1 = 1
Start Timer2

Do
Loop Until R_in1 = 0 Or Count > 100

Stop Timer2
If Count > 8 Then Byte3.b = 1
Next


For B = 0 To 7
Count = 0
Do
Loop Until R_in1 = 1
Enable Timer2

Do
Loop Until R_in1 = 0 Or Count > 100

Disable Timer2
If Count > 8 Then Byte4.b = 1
Next
Gosub Remo_auswert
End If                                                    'start condition

Return

Set_hw:
Enable Interrupts
'Enable Timer0
'Start Timer0
Enable Timer2
Stop Timer2
Disable Timer1
Disable Spi
Stop Adc
Stop Ac
Disable Twi
Disable Int0
Disable Int1
Enable Urxc
Return



Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry der fehlt noch:

Timer2_irq:
Timer2 = Timer2vorgabe
Incr Count
Return

Autor: Jan K. (madengineer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  Bernhard,
vielen Dank für deinen Code. Habe leider derzeit ein Hardwareproblem zu 
lösen, so dass ich das noch nicht testen könnte..


viele Grüße
Jan

Autor: Patrick Weggler (pw-sys) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Komplett den Anhang vergessen - Sorry wegen der Verspätung!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.