Forum: Mikrocontroller und Digitale Elektronik TI LaunchPad CCS 4.2 MSP430


von Umgucker (Gast)


Lesenswert?

Hallo allerseits,

ich habe das sog. "LaunchPad" von Texas Instruments erstanden und weiß 
nicht mehr weiter.
Ich bekomme bei jedem Compilierversuch eine Fehlermeldung. Nach 
mehrstündiger Google-Suche hoffe ich nun auf Eure Hilfe.

Problembeschreibung:
Ich habe gemäß Anleitung die Software Code Composer Studio 4.2 
installiert und die sog. "Worshop Labs" installiert.
Die enthaltenen Codebeispiele sind von TI, insofern gehe ich davon aus 
dass hier kein Programmierfehler vorliegt. Umsomehr verwundert mich die 
folgende Fehlermeldung nach beim Compilieren.

D:\Texas Instruments\ccsv4\utils\gmake\gmake main.obj
gmake: *** [main.obj] Error 1
Build complete for project Temperature_Sense_Demo


Hat hier irgendwer schonmal den gleichen Fehler gehabt und kann mir 
vielleicht weiterhelfen?

Für eure (eventuelle) Hilfe vorab schonmal vielen, vielen Dank!

Freundliche Grüße
der Umgucker

von Michelle K. (Firma: electronica@tdnet) (michellekonzack) Benutzerseite


Lesenswert?

Dito...

Bei mir rennt es unter WINE (Debian GNU/Linux 6.0.1/Squeeze)
und habe die gleiche Fehlermeldung.

Kann derzeit nichts machen/helfen, weil ich beim Renovieren bin.

Ich hielt es für einen Fehler wegen WINE, aber wenn Du unter
Windows (welches?) bist, sieht der Fall schon anderst aus...

Grüße
Michelle

von Umgucker (Gast)


Lesenswert?

Benutze Windows 7 (32Bit) falls das irgendwie weiterhilft. Habs aber 
auch schon an nem andren Rechner mit Windows 7 (64 Bit) versucht mit 
gleichem Error...

Echt ärgerlich das Ganze

von derChef (Gast)


Lesenswert?

Kannst du den ganzen Log posten?

von Umgucker (Gast)


Lesenswert?

Wenn du mit "Log" den Code meinst.. Klaro ;-)

Ist aber wie schon gesagt ein Code von TI. Also Fehler im Code selbst 
halte ich für unwahrscheinlich...

/*********************************************************************** 
*******
 *                  MSP-EXP430G2-LaunchPad User Experience Application
 *
 * 1. Device starts up in LPM3 + blinking LED to indicate device is 
alive
 *    + Upon first button press, device transitions to application mode
 * 2. Application Mode
 *    + Continuously sample ADC Temp Sensor channel, compare result 
against
 *      initial value
 *    + Set PWM based on measured ADC offset: Red LED for positive 
offset, Green
 *      LED for negative offset
 *    + Transmit temperature value via TimerA UART to PC
 *    + Button Press --> Calibrate using current temperature
 *                       Send character '°' via UART, notifying PC
 ************************************************************************ 
******/

#include  "msp430x20x2.h"

#define     LED0                  BIT0
#define     LED1                  BIT6
#define     LED_DIR               P1DIR
#define     LED_OUT               P1OUT



#define     BUTTON                BIT3
#define     BUTTON_OUT            P1OUT
#define     BUTTON_DIR            P1DIR
#define     BUTTON_IN             P1IN
#define     BUTTON_IE             P1IE
#define     BUTTON_IES            P1IES
#define     BUTTON_IFG            P1IFG
#define     BUTTON_REN            P1REN

#define     TXD                   BIT1                      // TXD on 
P1.1
#define     RXD                   BIT2                      // RXD on 
P1.2

#define     APP_STANDBY_MODE      0
#define     APP_APPLICATION_MODE  1

#define     TIMER_PWM_MODE        0
#define     TIMER_UART_MODE       1
#define     TIMER_PWM_PERIOD      2000
#define     TIMER_PWM_OFFSET      20

#define     TEMP_SAME             0
#define     TEMP_HOT              1
#define     TEMP_COLD             2

#define     TEMP_THRESHOLD        5

//   Conditions for 9600/4=2400 Baud SW UART, SMCLK = 1MHz
#define     Bitime_5              0x05*4                      // ~ 0.5 
bit length + small adjustment
#define     Bitime                13*4//0x0D

#define     UART_UPDATE_INTERVAL  1000


unsigned char BitCnt;


unsigned char applicationMode = APP_STANDBY_MODE;
unsigned char timerMode = TIMER_PWM_MODE;

unsigned char tempMode;
unsigned char calibrateUpdate = 0;
unsigned char tempPolarity = TEMP_SAME;
unsigned int TXByte;

/* Using an 8-value moving average filter on sampled ADC values */
long tempMeasured[8];
unsigned char tempMeasuredPosition=0;
long tempAverage;

long tempCalibrated, tempDifference;



void InitializeLeds(void);
void InitializeButton(void);
void PreApplicationMode(void);                     // Blinks LED, waits 
for button press
void ConfigureAdcTempSensor(void);
void ConfigureTimerPwm(void);
void ConfigureTimerUart(void);
void Transmit(void);
void InitializeClocks(void);

void main(void)
{
  unsigned int uartUpdateTimer = UART_UPDATE_INTERVAL;
  unsigned char i;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  InitializeClocks();
  InitializeButton();
  InitializeLeds();
  PreApplicationMode();                     // Blinks LEDs, waits for 
button press

  /* Application Mode begins */
  applicationMode = APP_APPLICATION_MODE;
  ConfigureAdcTempSensor();
  ConfigureTimerPwm();

  __enable_interrupt();                     // Enable interrupts.


  /* Main Application Loop */
  while(1)
  {
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion 
start
    __bis_SR_register(CPUOFF + GIE);        // LPM0 with interrupts 
enabled


    /* Moving average filter out of 8 values to somewhat stabilize 
sampled ADC */
    tempMeasured[tempMeasuredPosition++] = ADC10MEM;
    if (tempMeasuredPosition == 8)
      tempMeasuredPosition = 0;
    tempAverage = 0;
    for (i = 0; i < 8; i++)
      tempAverage += tempMeasured[i];
    tempAverage >>= 3;                      // Divide by 8 to get 
average

    if ((--uartUpdateTimer == 0) || calibrateUpdate )
    {
      ConfigureTimerUart();
      if (calibrateUpdate)
      {
        TXByte = 248;                       // A character with high 
value, outside of temp range
        Transmit();
        calibrateUpdate = 0;
      }
      TXByte = (unsigned char)( ((tempAverage - 630) * 761) / 1024 );
      Transmit();
      uartUpdateTimer = UART_UPDATE_INTERVAL;
      ConfigureTimerPwm();
    }


    tempDifference = tempAverage - tempCalibrated;
    if (tempDifference < -TEMP_THRESHOLD)
    {
      tempDifference = -tempDifference;
      tempPolarity = TEMP_COLD;
      LED_OUT &= ~ LED1;
    }
    else
    if (tempDifference > TEMP_THRESHOLD)
    {
      tempPolarity = TEMP_HOT;
      LED_OUT &= ~ LED0;
    }
    else
    {
      tempPolarity = TEMP_SAME;
      TACCTL0 &= ~CCIE;
      TACCTL1 &= ~CCIE;
      LED_OUT &= ~(LED0 + LED1);
    }

    if (tempPolarity != TEMP_SAME)
    {
      tempDifference <<= 3;
      tempDifference += TIMER_PWM_OFFSET;
      TACCR1 = ( (tempDifference) < (TIMER_PWM_PERIOD-1) ? 
(tempDifference) : (TIMER_PWM_PERIOD-1) );
      TACCTL0 |= CCIE;
      TACCTL1 |= CCIE;
    }
  }
}

void PreApplicationMode(void)
{
  LED_DIR |= LED0 + LED1;
  LED_OUT |= LED0;                          // To enable the LED 
toggling effect
  LED_OUT &= ~LED1;

  BCSCTL1 |= DIVA_1;                        // ACLK/2
  BCSCTL3 |= LFXT1S_2;                      // ACLK = VLO

  TACCR0 = 1200;                             //
  TACTL = TASSEL_1 | MC_1;                  // TACLK = SMCLK, Up mode.
  TACCTL1 = CCIE + OUTMOD_3;                // TACCTL1 Capture Compare
  TACCR1 = 600;
  __bis_SR_register(LPM3_bits + GIE);          // LPM0 with interrupts 
enabled
}

void ConfigureAdcTempSensor(void)
{
  unsigned char i;
  /* Configure ADC Temp Sensor Channel */
  ADC10CTL1 = INCH_10 + ADC10DIV_3;         // Temp Sensor ADC10CLK/4
  ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;
  __delay_cycles(1000);                     // Wait for ADC Ref to 
settle
  ADC10CTL0 |= ENC + ADC10SC;               // Sampling and conversion 
start
  __bis_SR_register(CPUOFF + GIE);          // LPM0 with interrupts 
enabled
  tempCalibrated = ADC10MEM;
  for (i=0; i < 8; i++)
    tempMeasured[i] = tempCalibrated;
  tempAverage = tempCalibrated;
}


void ConfigureTimerPwm(void)
{
  timerMode = TIMER_PWM_MODE;

  TACCR0 = TIMER_PWM_PERIOD;                              //
  TACTL = TASSEL_2 | MC_1;                  // TACLK = SMCLK, Up mode.
  TACCTL0 = CCIE;
  TACCTL1 = CCIE + OUTMOD_3;                // TACCTL1 Capture Compare
  TACCR1 = 1;
}

void ConfigureTimerUart(void)
{
  timerMode = TIMER_UART_MODE;               // Configure TimerA0 UART 
TX

  CCTL0 = OUT;                               // TXD Idle as Mark
  TACTL = TASSEL_2 + MC_2 + ID_3;            // SMCLK/8, continuous mode
  P1SEL |= TXD + RXD;                        //
  P1DIR |= TXD;                              //
}

// Function Transmits Character from TXByte
void Transmit()
{
  BitCnt = 0xA;                             // Load Bit counter, 8data + 
ST/SP
  while (CCR0 != TAR)                       // Prevent async capture
    CCR0 = TAR;                             // Current state of TA 
counter
  CCR0 += Bitime;                     // Some time till first bit
  TXByte |= 0x100;                        // Add mark stop bit to TXByte
  TXByte = TXByte << 1;                 // Add space start bit
  CCTL0 =  CCIS0 + OUTMOD0 + CCIE;          // TXD = mark = idle
  while ( CCTL0 & CCIE );                   // Wait for TX completion
}



// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  if (timerMode == TIMER_UART_MODE)
  {
    CCR0 += Bitime;                           // Add Offset to CCR0
    if (CCTL0 & CCIS0)                        // TX on CCI0B?
    {
      if ( BitCnt == 0)
        CCTL0 &= ~ CCIE;                        // All bits TXed, 
disable interrupt
      else
      {
        CCTL0 |=  OUTMOD2;                    // TX Space
        if (TXByte & 0x01)
        CCTL0 &= ~ OUTMOD2;                   // TX Mark
        TXByte = TXByte >> 1;
        BitCnt --;
      }
    }
  }
  else
  {
    if (tempPolarity == TEMP_HOT)
      LED_OUT |= LED1;
    if (tempPolarity == TEMP_COLD)
      LED_OUT |= LED0;
    TACCTL0 &= ~CCIFG;
  }
}

#pragma vector=TIMERA1_VECTOR
__interrupt void ta1_isr(void)
{
  TACCTL1 &= ~CCIFG;
  if (applicationMode == APP_APPLICATION_MODE)
    LED_OUT &= ~(LED0 + LED1);
  else
    LED_OUT ^= (LED0 + LED1);

}

void InitializeClocks(void)
{

  BCSCTL1 = CALBC1_1MHZ;                    // Set range
  DCOCTL = CALDCO_1MHZ;
  BCSCTL2 &= ~(DIVS_3);                         // SMCLK = DCO / 8 = 
1MHz
}

void InitializeButton(void)                 // Configure Push Button
{
  BUTTON_DIR &= ~BUTTON;
  BUTTON_OUT |= BUTTON;
  BUTTON_REN |= BUTTON;
  BUTTON_IES |= BUTTON;
  BUTTON_IFG &= ~BUTTON;
  BUTTON_IE |= BUTTON;
}


void InitializeLeds(void)
{
  LED_DIR |= LED0 + LED1;
  LED_OUT &= ~(LED0 + LED1);
}

/* *************************************************************
 * Port Interrupt for Button Press
 * 1. During standby mode: to exit and enter application mode
 * 2. During application mode: to recalibrate temp sensor
 * *********************************************************** */
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
  BUTTON_IFG = 0;
  BUTTON_IE &= ~BUTTON;            /* Debounce */
  WDTCTL = WDT_ADLY_250;
  IFG1 &= ~WDTIFG;                 /* clear interrupt flag */
  IE1 |= WDTIE;

  if (applicationMode == APP_APPLICATION_MODE)
  {
    tempCalibrated = tempAverage;
    calibrateUpdate  = 1;
  }
  else
  {
    applicationMode = APP_APPLICATION_MODE; // Switch from STANDBY to 
APPLICATION MODE
    __bic_SR_register_on_exit(LPM3_bits);
  }
}

#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void)
{
    IE1 &= ~WDTIE;                   /* disable interrupt */
    IFG1 &= ~WDTIFG;                 /* clear interrupt flag */
    WDTCTL = WDTPW + WDTHOLD;        /* put WDT back in hold state */
    BUTTON_IE |= BUTTON;             /* Debouncing complete */
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
  __bic_SR_register_on_exit(CPUOFF);        // Return to active mode
}

von derChef (Gast)


Lesenswert?

Sorry, ich meinte den Build log. Also die komplette Ausgabe bis dein 
Error erscheint.
Ich hoffe mal das:
D:\Texas Instruments\ccsv4\utils\gmake\gmake main.obj
gmake: *** [main.obj] Error 1
Build complete for project Temperature_Sense_Demo
nicht die einzige ausgabe ist.

von Umgucker (Gast)


Angehängte Dateien:

Lesenswert?

Also während des Compilierens erscheinen kurz folgende Zeilen (siehe 
Anhang).
Ich hab während des Compilierens einen Screenshot gemacht.

Nach dem Compilieren stehen nur die Zeilen da, die ich oben 
beschriebenen Zeilen mit denen ich wenig anfangen kann...


**** Build of configuration Debug for project Temperature_Sense_Demo 
****

D:\Texas Instruments\ccsv4\utils\gmake\gmake -k all
gmake: *** [main.obj] Error 1
gmake: Target `all' not remade because of errors.
Build complete for project Temperature_Sense_Demo

von Michelle K. (Firma: electronica@tdnet) (michellekonzack) Benutzerseite


Lesenswert?

Auf Deinem Screenshoot ist aber kein wirklicher Fehler zu sehen...
Das ist das "remake".

Den
    gmake: [clean] Error 1

kannste ignorieren (hatte ich auch), aber wo sind die anderen Fehler?

Kompiliere das Projekt nochmal durch und poste das, was im unteren
Fenster drin ist KOMPLETT.

Ich habe dort gut 20 Zeilen an Fehler gehabt...

Leider konnte ich unter WINE das nicht kopieren. Das hat sich 
geweigert

Grüße
Michelle

von Umgucker (Gast)


Angehängte Dateien:

Lesenswert?

Wenn ichs das erste mal kompiliere steht im unteren Fenster 
ausschließlich das was ich schon gepostet habe.

Ich habs auch nochmal angehängt. Dort siehst du auch keine 
Scrollmöglichkeit oder so... Die kurze Meldung ist alles was ich krieg.


**** Build of configuration Debug for project Temperature_Sense_Demo 
****

D:\Texas Instruments\ccsv4\utils\gmake\gmake -k all
gmake: *** [main.obj] Error 1
gmake: Target `all' not remade because of errors.
Build complete for project Temperature_Sense_Demo



(Noch nicht mal nen nichtssagenden Fehlercode F3983-45_347 ala Windows 
nachdem man wenigstens leicht googlen könnte ;-)

von derChef (Gast)


Lesenswert?

Umgucker schrieb:
> gmake: Target `all' not remade because of errors.

Wäre trotzdem gut zu wissen was für errors das sind.
Muss man vielleicht bei den Projekt Einstellungen das -v flag 
hinzufügen?

von Christian R. (supachris)


Lesenswert?

Mach mal Project -> Clean. Dann baut er alles neu und zeigt auch die 
Fehler an. Ist so eine Eclipse-Macke...

von A. N. (bastelmaniac)


Lesenswert?

Ist das richtige Target eingestellt?

Sieht nicht so aus.

Bzw. hängt da überhaupt ein MSP430 inkl. FET am PC?

von Christian R. (supachris)


Lesenswert?

Wenn ich in den Quelltext noch ein

#include "msp430.h"

oben einfüge, kopiliert es. Ohne fehlen seltsamerweise die Deklarationen 
der Timer A Register. Target steht auf MSP430G2232. Ob der jetzt 
angeschlossen ist oder nicht, ist ja fürs kompilieren egal.

von Umgucker (Gast)


Lesenswert?

Also, nochmals vielen Dank für die reichlichen Hilfestellungen.

Zum Target:
In der Originalversion von TI stand da: #include  "msp430x20x2.h"
Ich habs mal auf den entsprechenden Controller geändert der aktuell 
verwendet wird, hat aber auch nix gebracht (deswegen war das noch in der 
Version die ich hochgeladen hab)

Und ob mit oder ohne angeschlossenem MSP is auch Wurst, gibt immer den 
selben Error. Echt zum K...

Zum Clean:
Danke für den Tip, wenn ich die Clean Funktion nutze steht im Log 
Fenster folgendes:

**** Clean-only build of configuration Debug for project 
Temperature_Sense_Demo ****

D:\Texas Instruments\ccsv4\utils\gmake\gmake -k clean
DEL /F  "Temperature_Sense_Demo.out"
gmake: [clean] Error 1 (ignored)
DEL /F ".\main.obj"
gmake: [clean] Error 1 (ignored)
DEL /F ".\main.pp"
gmake: [clean] Error 1 (ignored)
gmake: [clean] Error 1 (ignored)
Build complete for project Temperature_Sense_Demo

von derChef (Gast)


Lesenswert?

Und jetzt, nach dem clean wieder neu builden

von Umgucker (Gast)


Lesenswert?

Nope, geht auch nicht. Dann hab ich wieder nur

D:\Texas Instruments\ccsv4\utils\gmake\gmake main.obj
gmake: *** [main.obj] Error 1
Build complete for project Temperature_Sense_Demo

von Vlad T. (vlad_tepesch)


Lesenswert?

sieht für mich nach einem UAC Problem aus.
Kann es sein, dass die Anwendung keine Rechte hat, in dem Verzeichnis 
was zu ändern und deswegen das clean abbricht?

geh mal in den Ordner und ändere die Rechte so, dass auch alle Benutzer 
vollzugriff haben

von Umgucker (Gast)


Lesenswert?

Achso, und egal ob ich die

#include "msp430.h"

einbinde oder nicht, der Fehler ist immer derselbe. Wenns bei Dir klappt 
und bei mir nicht, dann kann es doch nur an irgendwelchen externen 
Dingen liegen oder? Also ka.. Irgendwelche Einstellungen vielleicht beim 
Projektanlegen oder so!?

von Umgucker (Gast)


Lesenswert?

Ähm... Wie mach ich das denn mit dem Vollzugriff? Sorry für die dumme 
Frage...

von Vlad T. (vlad_tepesch)


Lesenswert?

rechts auf den ordner klicken und dort unter sicherheit auf den 
bearbeiten button klicken. Hier sollte eine UAC-Bestätigung erorderlich 
sein.

[Rechnername]/Benutzer oder so auswählen und dann unten das Häkchen bei 
Vollzugriff setzen.

Ich weiß allerdings nicht, ob das bei irgendwelchen Home-Versionen 
eingeschränkt ist.
So gut kenne ich mich mit Win7 nicht aus.

Du könntest auch versuchen die Samples in den Benuterdaten-Ordner zu 
verschieben/kopieren und von dort aus öffnen.

oder du versuchst eclipse als adminisrator zu starten (prinzipiell ist 
sowas immer nicht zu empfehlen)

Ist aber nur geraten - obs wirklich daran liegt weiß ich nicht.

von Umgucker (Gast)


Lesenswert?

ok, hab ich auch probiert und klappte auch nicht.
ABER: Beim Rechtsklick auf den Ordner ist mir aufgefallen dass der 
komplette Ordner schreibgeschützt ist (warum auch immer). Der Versuch 
dieses Häkchen Schreibgeschützt zu entfernen scheint auch alles gut zu 
klappen, also keine Fehlermeldung oder so, aber wenn ich dann wieder 
gucke ist das Häkchen wieder gesetzt.

Könnte es daran liegen und wenn ja wie zur Hölle krieg ich dieses 
Häkchen da weg?

von Umgucker (Gast)


Lesenswert?

PS. Bitte verzeiht mir die ganzen grammatikalischen Exzesse ;-) Ich weiß 
auch nicht was mit mir los is... Vielleicht auch ein Error löl

von MSP (Gast)


Lesenswert?

Umgucker schrieb:
> Könnte es daran liegen und wenn ja wie zur Hölle krieg ich dieses
> Häkchen da weg?

Ja, es wird am Schreibschutz liegen. Alle Anwendungen schließen, die 
Zugriff auf den Ordner, Unterordner Dateien daraus haben. Dann wirds 
was.

von Umgucker (Gast)


Lesenswert?

Oh man, ich kotz gleich! Ich krieg dieses verf... Häkchen nicht weg. Der 
tut so als macht er was (also er rechnet irgendwas und man sieht einen 
doofen bearbeitungsbalken) Aber wenn ich dann nochmal mit der rechten 
maustaste auf den ordner gehe ist es wieder da.
Hab eben extra nochmal neu gestartet, hilft auch nicht!

Doofe Frage, hab ich bei der Installation was falsch gemacht? Wüsste 
jetz auch nicht was man da falsch machen kann aber ich habe diesen 
Ordner nie als schreibgeschützt deklariert oder so. Ich versteh nicht 
wieso der schreibgeschützt ist...

von MSP (Gast)


Lesenswert?

Umgucker schrieb:
> hab ich bei der Installation was falsch gemacht?

Als Admin installiert?

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.