Forum: Mikrocontroller und Digitale Elektronik wie funktioniert diese Interrupt Routine?


von Suchender (Gast)


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
}

: Verschoben durch User
von int (Gast)


Lesenswert?

>Wie erkennt er High und Low?
>(~PIND & 0x04)

von Suchender (Gast)


Lesenswert?

>>Wie erkennt er High und Low?
>(~PIND & 0x04)

Genau, hier liest der µC am PortD das 3.Bit --> PD2 aus.
Mir geht es darum, wie er die Manchester Codierung erkennt....

von int (Gast)


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.

von Dieter F. (Gast)


Lesenswert?

Suchender schrieb:
> Genau, hier liest der µC am PortD das 3.Bit --> PD2 aus.

.. und packt das Ergebnis (high/low) in die Struktur der 
Manchester-Codierung - Bit für Bit

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

Wenn Du den von Dir eingestellten Link auch liest (Englisch kannst Du ja 
wohl) kommst Du auch weiter.

von Suchender (Gast)


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

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.