MSP430 Flanke erkennen

Gast #347248
Lesenswert?

Hallo!

Ich probiere hier grade mit einem DCF 77 Modul rum und möchte erkennen
ob das eingehende Signal eine 1 oder 0 ist.

Setup: MSP430F1121A @ 1 MHZ

P2.0 DCF 77

P1.0 RS
P1.1 R/W
P1.2 E
P1.3 leer
P1.4 D4
P1.5 D5
P1.6 D6
P1.7 D7

Ich hab mir vorgestellt zu prüfen, ob pin 2.0 auf high wechselt und
beidiesem wechsel einen Timer einzuschalten, der eine Zählvariable
hochzählt... wie kann man denn die Timer ein und ausschalten?
bin für jedes bisschen Code-Beispiel dankbar

Gruß

CHRiS
Gast #347252
Lesenswert?

ja genau so hab ich es vor...
hab ich vllt grad zu schwmmig formuliert...
mir fehlt jetzt nur noch der C-Code wie ich den Timer an bzw.
ausschalten kann...
Den Interrupt-Kram für den Port habe ich schon in einem Beispiel Source
von TI gefunden...
1
  P2IE |= 0x01;                         // P2.0 interrupt enabled
2
  P2IES |= 0x01;                        // P2.0 Hi/lo edge
3
  P2IFG &= ~0x01;                       // P2.0 IFG cleared
4

5

6
#pragma vector=PORT2_VECTOR
7
__interrupt void Port_2(void)
8
{
9
  // -> Timer noch ein und ausschalten <-
10
  P2IFG &= ~0x01;                       // P2.0 IFG clearedf
11
}
Gast #347254
Lesenswert?

also so ganz kapiere ich jetzt nicht was ich hier machen soll und würde
euch bitte mir noch ein paar tipps zu geben...

muss diese zeile: TACTL = TASSELx | IDx | MC2 | TACLR;
jetzt mit in in die ISR um den Timer zu resetten und neu zu starten?

__interrupt void Port_2(void)
{
 int wert = TAR;
 TACTL = TASSEL_2 | ID_2 | MC_2 | TACLR;
 P2IFG &= ~0x01; // P2.0 IFG cleared
}
Gast #347255
Lesenswert?

Portinitialisierung wie zuvor +
int cnt;
__interrupt void Port_2(void) {
  // erster int bei high to low
  if (P2IES & 0x01) {
    TACTL = TASSEL_2 | ID_2 | MC_2 | TACLR;
    // nächster int bei low -> high
    P2IES &= ~0x01;
  } else {
    TACTL = 0;
    cnt = TAR;
    // nächster int wieder bei high -> low
    P2IES |= 0x01;
  }
  P2IFG &= ~0x01;
}

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