mikrocontroller.net

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


Autor: der Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: der Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner ne Idee?

Autor: Benjamin S. (recycler)
Datum:

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

Autor: der Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
benutz mal ein char beim senden
int ist 16bit!?

-> char tmp;

Autor: der Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Peter Dannegger (peda)
Datum:

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

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


Peter

Autor: der Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
while (!(IFG1 & 1<<UTXIFG0));

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

Autor: der Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin S. (recycler)
Datum:

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

Autor: der Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.