wie funktioniert diese Interrupt Routine?

Gast #4616910
Lesenswert?

Hallo liebes Forum,
ich verstehe folgende Interrupt Routine nicht.
http://wiki.electronics-irc.net/Avr_rc5_remote_control

Hier wird ein RC5 Code eingelesen, welches aus 14 Bit besteht und mit 
Manchester Codierung in eine Union nach data.raw eingelesen wird.
Also Bitfolge 10 --> High Bit und Bitfolge 01 --> Low Bit.
Wie erkennt er High und Low? WIe funktioniert die ISR?
Danke.
1
 SIGNAL (INT0_vect)
2
{  
3
  int pos = 0;
4
 
5
  if (!flag) {
6
    data.raw = 0;
7
 
8
    // triggers on falling edge of start bit 1.
9
    _delay_ms(0.2);
10
 
11
    while (pos < 14) {
12
      data.raw = (data.raw << 1) | ((~PIND & 0x04) >> 2);
13
      _delay_ms(1.8);
14
      pos++;
15
    }
16
 
17
    flag = 1;
18
  }
19
}
Gast #4617006
Lesenswert?

>Mir geht es darum, wie er die Manchester Codierung erkennt....

In dem gezeigten Code-Schnippsel gar nicht. Da werden nur Bits 
zusammengeklatscht, aber nicht interpretiert.


Hier lesen:

> // Do with data from the remote control here what you like.
Gast #4617068
Lesenswert?

Oben ist die Bitfolge falsch:
> Also Bitfolge 10 --> High Bit und Bitfolge 01 --> Low Bit.
Richtig ist:
Bitfolge 10 --> Low Bit und Bitfolge 01 --> High Bit

Nun kann er auch stumpf alle 1,8ms (eine xx-Bitfolge) einlesen, weil das 
2.Bit des Manchester Code für High oder Low entscheidend ist. Jetzt habe 
ich es.... :)

Danke. :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren