Forum: Mikrocontroller und Digitale Elektronik MSP430 Auslesen einer Impulsdauer mit Capture


von Johannes (Gast)


Lesenswert?

Guten Tag,
an meinem MSP430 Board liegt eine Signalsequenz aus drei verschiedenen 
Signalen (a-b-c-a-b-c...) an. Wie kann ich die 3 unterschiedlichen, 
positiven Halbwelle auswerten? Ist dort die Capture Funktion des Timers 
anzuwenden? Es soll bei einer ansteigenden Flanke ein Timer loszählen 
und bei fallender Flanke aufhören zu zählen. -> Auslesen des Wertes -> 
Vergleichen der drei Fälle (Signale) -> Anzeigen des Signals (a,b oder 
c) durch 3 LED's.

von go msp (Gast)


Lesenswert?

Zeig einmal deinen Entwurf. Dann haben wir eine Diskussionsgrundlage.

von Johannes (Gast)


Lesenswert?

In dem Code ist noch keine derartige Funktion. Ich brauche ein Beispiel 
wie ich eine Capture Funktion für einen Eingangspin (P1.3, Edge 
rising/falling) aufbaue. Aus dem TI User's Guide werde ich einfach nicht 
schlau...
Vielen Dank

von Max G. (l0wside) Benutzerseite


Lesenswert?

Die Beschreibung des Capture Mode im Family User´s Guide (ich habe den 
für die MSP430F53xx) ist tatsächlich äußerst mager. Beispiele scheint TI 
auch nicht zu stellen. Seltsam, sonst sind sie immer ganz fleißig 
unterwegs.

Arbeitsskizze:
* Timer initialisieren (wie man das macht, ist hinreichend beschrieben; 
kannst ja mal testen, ob du eine PWM hinbekommst)
* Pin konfigurieren: Auf Input (PxDIR), Pullup/Pulldown einstellen 
(PxREN und PxOUT), Funktion statt GPIO (PxSEL auf 1) und ggf. Mapping 
einstellen (PxMAPy).
* Timer konfigurieren: In TAxCCTLn CM = 11b setzen, CCIS passend setzen, 
SCS und SCCI auf Null lassen, CAP = 1, CCIE = 1.
* ISR schreiben. Nach jedem Capture wird jetzt der Timerwert in TAxCCRn 
geschrieben und anschließend die ISR aufgerufen.

In der ISR kannst du den Wert dann beim ersten Aufruf abspeichern und 
beim zweiten Aufruf auswerten.


Schreibe mal auf dieser Basis deinen Code und melde dich noch mal. Ach 
ja, und verrate mal das Device, das du einsetzt.

Max

von Johannes (Gast)


Lesenswert?

G2553
Danke schonmal, ich werde es mal versuchen.

von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Hier der erste Ansatz...

von Max G. (l0wside) Benutzerseite


Lesenswert?

Au weia. Sorry.

* Die Registereinträge solltest du mit OR reinschreiben. Nicht so:
  TA1CCTL1= CM_3;
  TA1CCTL1= CAP;
...da bleibt von dem CM_3 nicht viel übrig. Mache TA1CCTL1 |= CAP draus.
Ggf. kommt das noch öfter vor, habe nicht en détail geprüft.
*  TA1CCTL1= CAP;
   CCTL1= CCIE;
   Diese Sequenz ist unlogisch. Sollte da nicht ebenfalls TA1CCTL1 
stehen?
* Den G2253 kann nur P1.1 und P1.2 auf CCI mappen (Datenblatt S. 16). 
Dein Programmcode versucht das nach meinem Verständnis an P1.3, das wird 
so nichts.
* Dein Main Loop ist ok, nur nicht gerade energiesparend.
* Die Variable "durchlauf" kannst du dir sparen. Im CCTL-Register steht 
drin, ob der Pin gerade High oder Low ist -> User´s Guide lesen
* Die globalen Variablen besser als volatile deklarieren, sonst 
optimiert der Compiler hier die ggf. weg.
* Warum setzt du am Ende des Timer Interrupts den Port 
Interruptvektor zurück?

Du könntest alternativ auch auf das CCR-Register verzichten, den Timer 
freilaufend machen und mit dem Port-Interrupt arbeiten. Dann musst du 
eben in der ISR den aktuellen Timer-Wert auslesen. Sollte keinen 
Unterschied machen, wenn du als ersten Befehl in der ISR den aktuellen 
Registerwert sicherst.
Oder auf den Interrupt ganz verzichten und in der Main Loop jedesmal 
Portstatus und Registerwert auslesen. Du hast ja keine weiteren 
Interrupts im Programm.

Max

: Bearbeitet durch User
von Johannes (Gast)


Lesenswert?

Ich habe die Fehler verbessert.. Schonmal vielen Dank an Max

von go msp (Gast)


Lesenswert?

Max G. schrieb:
> Die Beschreibung des Capture Mode im Family User´s Guide (ich habe den
> für die MSP430F53xx) ist tatsächlich äußerst mager.

Hhhmmm, was soll denn da noch drin stehen?
http://www.ti.com/lit/pdf/slau144
Ich finde, Capture ist vollständig erklärt. Hilfreich ist auch die 
symbolische Darstellung des Timers am Kapitelanfang.



Johannes schrieb:
> Wie kann ich die 3 unterschiedlichen,
> positiven Halbwelle auswerten?

1. auf positive Flanke triggern
2. Timer löschen, Capture scharf schalten: fallende Flanke
3. bei Capture Zeit berechnen
1.
...

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.