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.
Zeig einmal deinen Entwurf. Dann haben wir eine Diskussionsgrundlage.
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
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
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
Ich habe die Fehler verbessert.. Schonmal vielen Dank an Max
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.