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
http://focus.ti.com/mcu/docs/mcuprodcodeexamples.tsp?sectionId=96&tabId=1468 Hier bekommst du alles, was du brauchst!!! Super Beispiele und auch für Anfänger verständlcih und "Kopierbar" mfg KoF
ja die Teile hab ich schon.... verstehe aber immernoch nicht, wie ich den Timer über den externen Interrupt von Pin 2.0 triggere...
Zwei Ideen: Der Flankenwechsel kann einen Port-Edge-Interrupt erzeugen, in dem dann der Timer gestartet wird und beim nächsten Wechsel wieder gestoppt wird. Bei einer etwas anderen Pinbelegung hätte man das über die Capture-Funktion des Timers erledigen können. (User Guide Chapter 11 Capture Mode) MSP430x1xx User Guide http://focus.ti.com/lit/ug/slau049f/slau049f.pdf
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 | }
|
Jetzt fehlt nur noch // continuous up (bis 0xffff) passenden Vorteiler einsetzen TACTL = TASSELx | IDx | MC2 | TACLR; // beim nächsten Portinterrupt TAR auslesen
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 }
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; }
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.