Forum: Mikrocontroller und Digitale Elektronik Kein Signal messbar | MSP430


von Jo T. (trilli)


Lesenswert?

#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!

von Outmode (Gast)


Lesenswert?

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.

von Jo T. (trilli)


Lesenswert?

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!

von wv (Gast)


Lesenswert?

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

von Clemens L. (c_l)


Lesenswert?

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.

von Outmode (Gast)


Lesenswert?

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.

von Jo T. (trilli)


Lesenswert?

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
Noch kein Account? Hier anmelden.