#include <msp430fr5739.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= BIT0; //P1.0 zu OUTPUT P1SEL0 |= BIT0; //TimerA wählen CSCTL0 = CSKEY; CSCTL1 |= 0x0006; //DCO 8MHz CLOCK CSCTL2 |= SELS__DCOCLK; //DCOCLK FOR SMCLK CSCTL3 |= DIVS__8; // DIV 8 TO GET 1MHz TA0CTL |= MC_0; //Stop timer TA0CTL |= TACLR; TA0CCR0 = 500; TA0CCR1 = 500; TA0CCTL0 |= OUTMOD_3; //set-reset //TA0CCTL0 |= OUT; TA0CTL |= TASSEL_2 + MC_1; //SMCLK,mode,clear register for(;;) { } } Abend, wollte eigentlich ein Programm schreiben, welches den MSP mit Hilfe des Timers ein Rechtecksignal über einen definierten Pin ausgeben lässt. Hab es eigentlich so gemacht, wie es in den Beispielprogrammen erklärt ist, es funktioniert aber nicht. also zuerst setze ich den pin, laut datenblatt muss das auch der p1.0 sein. dann stelle ich smclk so ein, dass ich 1mhz bekommen. dann halte ich den timer an, cleare ( was ich ja nicht unbedingt machen muss) setze dann die register, damit ich ein signal von 1khz bekommen, setze set/rest modus, dann wird der up mode gesetzt und als clock wird smclk ausgewaählt. jetzt erwarte ich, dass wenn ich über p1.0 ne spannung mit dem oszilloskop messe, ich ein rechtecksignal mit 1khz frequenz sehe. was ich sehe, ist aber nichts. es ist absolut keine spannung messbar. ich hab auch mal versucht den ausgang nur auf high zu setzen, also outputmode_0 und dann output setzen. aber hier kann ich auch nichts messen. habe ich einen dummen fehler gemacht, irgendwas vergessen oder habe ich es mir zu einfach vorgestellt und kann so ein signal nicht mit dem msp generieren? vielen dank für eure hilfe!
Jo T. schrieb: > OUTMOD Dafür passt deine Initialisierung nicht. Wirf einen Blick in den Family User Guide. Dort findest du beim Timer die Erklärung: Die alternate pin function muss genutzt werden.
also ich hab mir den family user guide gerade nochmal angeguckt kann aber dazu weder im timer abschnitt, noch im rest was finden. dort stellt lediglich, dass ich den timer für den output benutzen kann, aber nichts weiter. könntest du mir vllt. etwas genauer sagen, was ich falsch gemacht habe? danke auf jeden fall für die schnelle antwort!
Hallo Jo, setz mal den TA0CCR1 auf 250. TA0CCR0 bestimmt die Frequenz (abhängig vom clock), TA0CCR1 bestimmt das Tastverhältnis. Es muß immer 0 < TA0CCR1 < TA0CCR0 sein. Bei TA0CCR1 = TA0CCR0 siehst Du natürlich ein Strich auf dem Oszi, da das Tastverhältnis dann 100% ist. Gruß wv
Jo T. schrieb: > TA0CTL |= MC_0; //Stop timer Dieser Code tut gar nichts, weil MC_0 den Wert 0 hat. Um den Timer anzuhalten, brauchst du "TA0CTL &= ~MC_3". > TA0CTL |= TASSEL_2 + MC_1; //SMCLK,mode,clear register Statt TASSEL_2 solltest du lieber TASSEL__SMCLK schreiben, und statt MC_1 MC__UP. Und "clear register" ist gelogen. Wie du P1SEL0 und P1SEL1 setzten musst, steht nicht im Family User's Guide, sondern im Datenblatt des MSP430FR5739.
Jo T. schrieb: > was ich falsch > gemacht habe 1. Groß-/Kleinschreibung!!! http://www.ti.com/lit/ug/slau272c/slau272c.pdf Kapitel 8.2.5, 11.2.5 http://www.ti.com/lit/ds/symlink/msp430fr5739.pdf Table 4-1. z. B. TA0.1 Table 6-8. (Device Output Signal) 7.1 und Table 7-1.
Vielen Dank für die ganzen Tipps Leute!!! Ich habe jetzt anstatt TA0CCTL0 |= OUTMOD_3; TA0CCTL1 |= OUTMOD_3; gesetzt und es klappt, kriege einen schönes Rechtecksignal, die Frequenz stimmt auch. Mit TACCR0 = 1000 und TACCR1= 500 bekomme ich eine Frequenz von 1Khz. Danke nochmal, wart echt eine sehr große Hilfe! War schon am verzweifeln :D
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.