Kein Signal messbar | MSP430

OP #4333527
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!
OP #4333566
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!
Gast #4333637
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
#4333653
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.
OP #4334042
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren