www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD16_A liefert messwerte nur im debug modus.


Autor: Wahib F. (wahib_f)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich versuche über 2 shunts der stromverbrauch zu messen, dazu verwende 
ich den s.g SD16_A Modul, MSP430F47166.

im Debug modus funktioniert alles wunderbar, im freilaufenden mode 
bekommen ich immer null, sprich beim auslesen der SD16MEM0 und SD16MEM1 
wird irgendwie nicht richtig ausgeführt, ist unten in Blau markiert.

das folgende Quellcode bietet einen überblick über meine kodierung.
ich bin für jeden Hinweis dankbar.

LG


unsigned int ChA0Value , ChA1Value
void main()
{

  SD16CTL = SD16REFON+SD16SSEL_0;     // 1.2V ref, ACLK
  // CH A0.0+
 SD16INCTL0|=SD16INCH_0+SD16INTDLY0;  //Interrupt on 4th sample
  SD16CCTL0  |= SD16UNI;              // Enable interrupt
 // SD16CCTL0  |= SD16UNI + SD16SC +SD16SNGL+SD16IE;

  // CH A1.0+
  SD16INCTL1|=SD16INCH_1+SD16INTDLY0; //Interrupt on 4th sample
  SD16CCTL1  |= SD16UNI;              // Enable interrupt
  //SD16CCTL1  |= SD16UNI + SD16SC +SD16SNGL+SD16IE;

  for (int i = 0; i < 0x3600; i++);    // Delay for 1.2V ref startup

 currentMeasurement();

while(1)
{
  _NOP();
}

}

void currentMeasurement()
{
  /*
  //spgdiff   = ((A0-A1)*0,6)/65535   ==> in V
  //stromdiff = spgdiff / 10ohm       ==> in A
  //stromdiff = stromdiff * 10000000  ==> in uA
  */

  A0_HIGH();
  A1_HIGH();

  SD16CCTL1|=SD16SC;
  SD16CCTL0|=SD16SC;

  usCurrentConsumeuA=0;
  ChA0Value=0;
  ChA1Value=0;


>>ChA0Value = SD16MEM0;                       // save A0 value
>>ChA1Value = SD16MEM1;                       // save A1 value

  usCurrentConsumeuA  = (unsigned long)(ChA0Value - ChA1Value)*6;
  usCurrentConsumeuA *= 10000;
  usCurrentConsumeuA /= 0xFFFF;

  A0_LOW();                             // disable A0
  A1_LOW();                             // disable A1
}

Autor: Wahib F. (wahib_f)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ideen?
hat niemanden Erfahrung damit gemacht?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahib F. schrieb:
> Keine Ideen?
> hat niemanden Erfahrung damit gemacht?

Eines vorweg.
Von deinem µC hab ich keine Ahnung.

Aber wenn sich Programme im Release Modus (also mit Optimierung) nicht 
so verhalten wie im Debug Modus, dann ist das meistens eine von 3 
Ursachen

* man hat etwas programmiert, was in C nicht definiert ist.
  Der Compiler kann dann im Release Modus etwas anderes daraus
  machen, wie im Debug Modus

* uninitialisierte Variablen

* Timing Sachen, die über ungenügende Hilfsmittel realisiert werden


Und in deinem Code sticht sofort das hier ins Auge:

  for (int i = 0; i < 0x3600; i++);    // Delay for 1.2V ref startup


Im Debug mag die Schleife eine bestimmte Zeit brauchen. Im release Mode 
ist die Zeit aber eine andere. Bis hin zu effektiv 0, weil der Optimizer 
das komplett rauswirft.

Autor: Wahib F. (wahib_f)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem selber gelöst,

es lag einfach daran, dass die SD covension ein bisschen zeit braucht, 
ich lese praktisch bevor die Hardware fertig ist.

Lösung:

 while ((SD16CCTL1 & SD16IFG)==0); //warten bis die SD covension fertig 
ist

>  hal_SD16_ChA0Value = SD16MEM0;
>  hal_SD16_ChA1Value = SD16MEM1;

  SD16CCTL0 &=~(SD16IFG + SD16SC);
  SD16CCTL1 &=~(SD16IFG + SD16SC);


LG

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.