Forum: Mikrocontroller und Digitale Elektronik nur im debugen funzt es.


von der Jens (Gast)


Lesenswert?

Hallo!

Ich beschäftige mich seit geraumer Zeit mit dem MSP430F449. Ich habe mir 
ein Programm in C# geschrieben welches Daten die über COM0 kommen 
anzeigt.

Das Problem ist folgendes: wenn ich im Debug-Modus Zeile für Zeile 
durchgehe arbeitet alles so wie es soll. Lass ich das Programm 
selbstständig arbeiten (ohne Breakpoints und so..) kommt nur Mist am PC 
an. Allerdings ist immer der selbe Mist zu sehen!!

hier der Codeausschitt:

#pragma vector = PORT2_VECTOR
__interrupt void PORT2(void)
{
  for(int i=0;i<2000;i++){} // wenn diese Zeile nich da ist, schickt er 
endlos "0" rüber. keine Ahnung warum...

  int tmp;
  tmp=1;
  sent(tmp);

  if(P2IFG & BIT0){//Interrupt bei PIN 79
    // TODO
    P2IFG &= ~BIT0; // Flag wider aus
  }
  else
  if(P2IFG & BIT1){//Interrupt bei PIN 78
    // TODO
    P2IFG &= ~BIT1; // Flag wider aus
  }
  else
  if(P2IFG & BIT2){//Interrupt bei PIN 77
    P2IE &= ~BIT2;//Interrupt PIN77 aus
    if((~P2IES) & BIT2){//prüfe ob von 0 auf 1 ist
      tmp = 2;
      sent(tmp);
      P2IES |= BIT2; // ändere Flanke
    }else{
      tmp = 3;
      sent(tmp);
      P2IES &= ~BIT2; // ändere Flanke
    }
    P2IFG &= ~BIT2; // Flag aus
    P2IE |= BIT2; // Interrupt PIN 77 an
  }
  else
  if(P2IFG & BIT3){//Interrupt bei PIN 76
    // TODO
    P2IFG &= ~BIT3; // Flag wider aus
  }
  tmp=4;
  sent(tmp);
}

void sent(int x){
  while (!(IFG1 & UTXIFG0));
  TXBUF0 = x;
}


Vielen Dank!

MFG

von der Jens (Gast)


Lesenswert?

keiner ne Idee?

von Benjamin S. (recycler)


Lesenswert?

Ein tip:
Mach mal eine Minimalbeispiel. Irgendetwas funktioniert mit deinem 
Timing nicht.
While Schleifen und senden macht man nicht in einer ISR

von der Jens (Gast)


Lesenswert?

Danke für die Antwort!

Ja, ich weiss das da keine while schleifen hinkommen. Vielleicht hat das 
auch mit meinem eigentlich Problem zu tun!?!? :-/

Minimalbeispiel? Wie meinst das? ein kleines Programm das überhaupt mal 
was zum PC sendet?? Das hab ich! Funktioniert auch tadellos! Es treten 
nur Fehler auf wenn ich mit diesem Interrupts arbeite...

Was meinst du mit Timing??

gz

von Benjamin S. (recycler)


Lesenswert?

benutz mal ein char beim senden
int ist 16bit!?

-> char tmp;

von der Jens (Gast)


Lesenswert?

Stimmt! Int müsste 16 Bit sein.

Habe jetzt mal auf Char geändert. Hatte aber leider keinerlei 
Auswirkung.

Bei meinem Minimalbeispiel hatte es auch mit Int funktioniert....

Vielleicht noch ne andere Idee??

Besten Dank nochmal!!

von Peter D. (peda)


Lesenswert?

Also beim AVR-GCC sind die Bitnamen keine Masken, sondern die 
Bitposition (0..7).

Vielleicht macht es Dein MSP-Compiler ja auch.
Also:
1
void sent(char x){
2
  while (!(IFG1 & 1<<UTXIFG0));
3
  TXBUF0 = x;
4
}


Peter

von der Jens (Gast)


Lesenswert?

>Also beim AVR-GCC sind die Bitnamen keine Masken, sondern die
>Bitposition (0..7).

ich weiss nich was du mir damit sagen möchtest!??! BIT2 ist doch nichts 
anderes als 0000 0100 oder in dezimal ne 4. Oder Hex 0x04.
1
while (!(IFG1 & 1<<UTXIFG0));

das bewirkt bei mit nur das jetzt garnichts mehr gesendet werden kann. 
Ich komm nicht mal in die ISR rein.....

von der Jens (Gast)


Lesenswert?

Problem gelöst!

Habe von woanders einmal den Tip bekommen nur nur in LPM1 zu gehen. (Ich 
hatte LPM2). Denn muss ich jetzt wohl nochmal nachschauen wo da genau 
die unterschiede waren!

Ich bedanke aber trotzdem für eure Hilfe!

MfG

der Jens

von Benjamin S. (recycler)


Lesenswert?

wie oft gehst du in den lpm2?
der oscilator braucht einige zeit um stabil zu werden, nachdem du den 
prozessor zurückholst.

von der Jens (Gast)


Lesenswert?

oft!!

der MSP wird nachher mit 4 Taster betrieben und soll auf alle 
Schaltzustände (also 8) reagieren und sich dann wieder "schlafen legen".

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.