Part Number:MSP430F5172
dear all,
The internal clock of MCU is only 1M, which is a bit slow. I want to realize the internal master clock frequency multiplier. How should I set it?
Best regards,
Jeff wong
Part Number:MSP430F5172
dear all,
The internal clock of MCU is only 1M, which is a bit slow. I want to realize the internal master clock frequency multiplier. How should I set it?
Best regards,
Jeff wong
Part Number:MSP430FR6989
I have read that it's recommended to use differential mode to reduce noise injection. But If my input ranges from 0V (GND) to Vr+, I have no need to use single ended mode, but because of noise injection I'd rather to use differential mode. And then my issue is: Is there some advantage in using differential connecting the Vin- to GND? I mean: Is it also efficient to noise injection, or that is the same of using single ended mode?
Part Number:MSP432P401R
Tool/software:TI-RTOS
Hey, Guys
I Have problem with MSP432 Launchboard
first of all,
I created (imported) with empty_MSP_EXP432P401R_nortos_ccs project from Resource View.
then,
I started making application kind of temperature sensor.
the process is simple
1) boot -> 2) adc data (temperature) -> 3) record to sd card -> 4) deep sleep or shut down mode -> 5) awake & repreat
even if I started with no-rtos , I need sd-card function ( I realize fatfs is only including in TI-RTOS )
So, I added TI-RTOS setting into the project
header include, dependency include.. blahblah
After long time, I did run it.
Everything is ok so far.
However, problem is that Interrunpt Service routines(ISR) are never called.
Naturally, It works fine with eliminating TI-RTOS setting.
Here is TI-RTOS setting that i added
1) project setting
2) modify .cmd file ( .intvecs & .resetVect )
3) add interrupt keyword to IRQ function (picture above)
Somen help me plz.
Part Number:MSP-FET430UIF
I am an absolute novice to all this but I have received a new firmware which I want to program into my electronic test instrument. I was told that this could be done by using a suitable software like FETPRO430 or UNIFLASH
I bought the MSP-FET430UIF jtag interface and it has 4 connections GND, RST, VCC and TST , on the jtag layout on the circuit diagram for my device it has an 8 pin connector with 7 designated it has VCC and GND so they are self explanatory but it also has TDI, TDO, TNS, TCK and ANA_RST
I would like to know how I interface the RST and TST on the jtag interface to the connections on the circuit board of my test instrument, i.e.which of the pins on the instrument do RST and TST connect too.
The micro on the instrument is a MSP430F149
Thank you in advance for your help
Part Number:MSP432P401R
Tool/software:TI-RTOS
Hello, Guy
I need another help.
I posted "Interrupt Service Routine (ISR) never called in NO-RTOS based project ( after including TI-RTOS)" (https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/622382
In Opposite way, I tested that
first of all,
I created TI-RTOS based project ( empty_MSP_EXP432P401R_tirtos_ccs project from Resource View )
In this time, the problem is when the sensor enter deep sleep or shutdown mode (LPM 3, 3.5, 4, 4.5)
can awake it by GPIO interrupts ? I found example source code only using sleep mode (LPM0) ( MSP432P401R Launchboard Red 2.X > TI Drivers > powersleep )
It shows that toggle between AM & LPM0 mode by using P1.1 button.
In Register Level Example, I found that button input is well at LPM3.5 mode
Please Some help me, plz
Thank you in advance.
Part Number:MSP-FET430UIF
Tool/software: Code Composer Studio
CCS is no longer finding my USB_FET. It appears to be a problem with the driver. When I tried using a new device I got a driver installation problem as shown below.
None of the other forum posts have helped so far. Where do I start for trouble shooting this problem?
Thanks,
Travis
Part Number:MSP430F6779
Now I am learning about emeter on EVM430-F6779-3 EVM. And I have some problems to understand the analog input part which belongs to the hardware design.
in the 3.2 on page 6 of document slaa577g the schematic is :
my question is why there is no differential adc driver just like ths4521 to drive the SD24 in MSP430?
In my opinion ,if the current signal is a high frequency but not 50/60Hz, here may need a driver,
so when should we need a driver to dirve the SDADC in MSP4306779? Pls give some analysis with foumulas and calculations ,thanks !
(I have know the input resistor of SDADC in the datasheet)
I am new to TI controllers. Can i use MSP FET flash emulator with CCS7?
Also can this device be used to burn txt file on controller using UniFlash V4??
Plz help.
Hi,
we will measure the three phase energy data after the Variable Frequency Drive (VFD) and its line frequency will vary from 20 to 60 Hz. so we can't measure the energy data after the VFD.
Here i have given our design inputs FYR. Kindly suggest your Part Number for this requirement and its operate in variable line frequency, not in fixed 50/60 Hz.
Design inputs:
Measuring parameters:
Awaiting for your valuable reply.
Thanks in advance.
Part Number:MSP430G2553
I teach a lab course in interfacing using the Launchpad (MSP430G2553) at UNH in Manchester. One of the first exercises is of course - blinking an LED. The code is essentially setting up P1.0 as an output, then going into a loop where they XOR #BIT0, &P1OUT to change the state, then set a register to a number and decrement/loop until it reaches 0 (as a delay) and do all of that indefinitely. The light blinks. I ask them to measure it on a scope, estimate the instruction time and the guess how fast you can toggle the LED without the delay.
They then take out the delay so the code is basically:
Loop
XOR #BIT0, &P1OUT
JMP Loop
This blinks the red LED, cycling once every 11.5 uSec or so. One lab group then changed the code to use #BIT6 instead to blink the green LED. Same two instructions in the loop and the group measured 12.6 uSec instead. They wondered why the same two instructions take longer when you toggle bit 6 instead of bit 0. I have no clue - does anyone have any idea?
Thanks in advance for any suggestions!
Part Number:MSP432P401R
Hello collegues,
I would be grateful for the example of using DMA_INT0_SRCFLG register
I know that in DMA INT_DMA_INT0 interrupt is used as OR (common) interupt for all DMA cases, but DMA source is written in DMA_INT0_SRCFLG register,
has anybody a C code example of it?
Thanks
Part Number:MSP430G2553
Hello, I'm trying this debounce code. The reset switch (S1) and the launchpad switch P1.3 (S2) are used. When S1 is pressed, the green led lights up. When S2 is pressed, the red LED lights up. If one of the two switches is pressed for more than 1.5 seconds, the two LEDs light up and when the switch is released the two LEDs are switched off. This works perfectly. I added an external switch and connected it to P2.1 (S3). Its functionality is the same as the launchpad's S2. When the button P2.1 (S3) is pressed, the pulsation is detected and the red led lights up. Then I release the button but the red led does not turn off and after 1.5s (approximately) the green LED also lights up. After this action, the other two buttons (S1 and S2) continue to operate correctly, but S3 no longer detects any pulsation. The behavior is as if it was not detected that the button P2.1 has been released and then it seems that the interruption in P2.1 is disabled.
To make it easier to find the error, the code part I added is the 'InitialiseSwitch2' method and the last two watchdog ISR lines:
#include "msp430g2553.h" #define FLIP_HOLD (0x3300 | WDTHOLD) // flip HOLD while preserving other bits #define S1 1 // Switch 1 Flag Mask #define S2 2 // Switch 2 Flag Mask #define BOTH 3 // Both switches Flag Mask #define PRESSDURATION 47 // Long press duration 47*32ms = 1.5s /* Events */ #define SWITCH1 0 #define SWITCH2 1 volatile char PressCountS1 = 0; volatile char PressCountS2 = 0; volatile char SwitchState = 0; // Flag used internally within the interrupts to store the current switch state volatile char Pressed = 0; // Flag used to indicate a Switch Press volatile char PressRelease = 0; // Flag used to indicate a Switch Press and Release volatile char LongPress = 0; // Flag used to indicate a Switch Long Press void ConfigureWDT(void); void InitialiseSwitch2(void); // Switch P1.3 void InitialiseSwitch3(void); // Switch P2.1 void main (void) { ConfigureWDT(); BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz DCOCTL = CALDCO_1MHZ; // Set DCO to 1MHz P1DIR |= (BIT0|BIT6); // Set the LEDs on P1.0 and P1.6 as outputs P1OUT |= (BIT0|BIT6); // Turn on P1.0 and P1.6 LEDs to indicate initial state InitialiseSwitch2(); // Initialize Switch 2 which is attached to P1.3 InitialiseSwitch3(); // Initialize Switch 2 which is attached to P2.1 while(1){ if (PressRelease) { PressRelease &= ~(S1 + S2); // Clear switch flag to indicate that the switch press has been serviced } __bis_SR_register(LPM0_bits + GIE); } } void ConfigureWDT(void){ // The Watchdog Timer (WDT) will be used to debounce s1 and s2 WDTCTL = WDTPW + WDTHOLD + WDTNMIES + WDTNMI; //WDT password + Stop WDT + detect RST button falling edge + set RST/NMI pin to NMI IFG1 &= ~(WDTIFG + NMIIFG); // Clear the WDT and NMI interrupt flags IE1 |= WDTIE + NMIIE; // Enable the WDT and NMI interrupts } /* This function configures the button so it will trigger interrupts * when pressed. Those interrupts will be handled by PORT1_ISR() */ void InitialiseSwitch2(void){ P1DIR &= ~BIT3; // Set button pin as an input pin P1OUT |= BIT3; // Set pull up resistor on for button P1REN |= BIT3; // Enable pull up resistor for button to keep pin high until pressed P1IES |= BIT3; // Enable Interrupt to trigger on the falling edge (high (unpressed) to low (pressed) transition) P1IFG &= ~BIT3; // Clear the interrupt flag for the button P1IE |= BIT3; // Enable interrupts on port 1 for the button } void InitialiseSwitch3(void){ P2DIR &= ~BIT1; // Set button pin as an input pin P2OUT |= BIT1; // Set pull up resistor on for button P2REN |= BIT1; // Enable pull up resistor for button to keep pin high until pressed P2IES |= BIT1; // Enable Interrupt to trigger on the falling edge (high (unpressed) to low (pressed) transition) P2IFG &= ~BIT1; // Clear the interrupt flag for the button P2IE |= BIT1; // Enable interrupts on port 1 for the button } // isr to detect make/break of s1 at the nRST/NMI pin // Note the occurrence of an NMI interrupt automatically disables the NMI interrupt enable. #pragma vector = NMI_VECTOR __interrupt void nmi_isr(void) { if (IFG1 & NMIIFG) // Check if NMI interrupt was caused by nRST/NMI pin { IFG1 &= ~NMIIFG; // clear NMI interrupt flag if (WDTCTL & WDTNMIES) // falling edge detected { P1OUT |= BIT6; // Turn on P1.0 red LED to indicate switch 1 is pressed SwitchState |= S1; // Set Switch 1 State to pressed Pressed |= S1; // Set S1 pressed flag PressCountS1 = 0; // Reset Switch 2 long press count WDTCTL = WDT_MDLY_32 | WDTNMI; // WDT 32ms delay + set RST/NMI pin to NMI // Note: WDT_MDLY_32 = WDTPW | WDTTMSEL | WDTCNTCL // WDT password + Interval mode + clear count // Note: this will also set the NMI interrupt to trigger on the rising edge } else // rising edge detected { P1OUT &= ~(BIT6+BIT0); // Turn off P1.6 and P1.0 LEDs SwitchState &= ~S1; // Reset Switch 1 Pressed flag PressRelease |= S1; // Set Press and Released flag WDTCTL = WDT_MDLY_32 | WDTNMIES | WDTNMI; // WDT 32ms delay + falling edge + set RST/NMI pin to NMI } __bic_SR_register_on_exit(LPM0_bits); //Wake CPU } // Note that NMIIE is now cleared; the wdt_isr will set NMIIE 32ms later else {/* add code here to handle other kinds of NMI, if any */ } } #pragma vector=PORT1_VECTOR __interrupt void PORT1_ISR(void) { if (P1IFG & BIT3) // Chequeamos que se ha pulsado el pulsador conectado al P1.3 { P1IE &= ~BIT3; // Disable Button interrupt to avoid bounces P1IFG &= ~BIT3; // Clear the interrupt flag for the button if (P1IES & BIT3) { // Falling edge detected P1OUT |= BIT0; // Turn on P1.0 red LED to indicate switch 2 is pressed SwitchState |= S2; // Set S2 state to press Pressed |= S2; // Set Switch 2 Pressed flag PressCountS2 = 0; // Reset Switch 2 long press count } else { // Rising edge detected P1OUT &= ~(BIT0+BIT6); // Turn off P1.0 and P1.6 LEDs SwitchState &= ~S2; // Reset Switch 2 state PressRelease |= S2; // Set Press and Released flag } P1IES ^= BIT3; // Toggle edge detect IFG1 &= ~WDTIFG; // Clear the interrupt flag for the WDT WDTCTL = WDT_MDLY_32 | (WDTCTL & 0x007F); // Restart the WDT with the same NMI status as set by the NMI interrupt __bic_SR_register_on_exit(LPM0_bits); //Wake CPU } } #pragma vector=PORT2_VECTOR __interrupt void PORT2_ISR(void) { if (P2IES & BIT1) // Chequeamos que se ha pulsado el pulsador conectado al P2.1 { P2IE &= ~BIT1; // Disable Button interrupt to avoid bounces P2IFG &= ~BIT1; // Clear the interrupt flag for the button if (P2IES & BIT1) { // Falling edge detected P1OUT |= BIT0; // Turn on P1.0 red LED to indicate switch 2 is pressed SwitchState |= S2; // Set S2 state to press Pressed |= S2; // Set Switch 2 Pressed flag PressCountS2 = 0; // Reset Switch 2 long press count } else { // Rising edge detected P1OUT &= ~(BIT0+BIT6); // Turn off P1.0 and P1.6 LEDs SwitchState &= ~S2; // Reset Switch 2 state PressRelease |= S2; // Set Press and Released flag } P2IES ^= BIT1; // Toggle edge detect IFG1 &= ~WDTIFG; // Clear the interrupt flag for the WDT WDTCTL = WDT_MDLY_32 | (WDTCTL & 0x007F); // Restart the WDT with the same NMI status as set by the NMI interrupt __bic_SR_register_on_exit(LPM0_bits); //Wake CPU } } // WDT is used to debounce s1 and s2 by delaying the re-enable of the NMIIE and P1IE interrupts // and to time the length of the press #pragma vector = WDT_VECTOR __interrupt void wdt_isr(void) { if (SwitchState & S1) // Check if switch 1 is pressed { if (++PressCountS1 == PRESSDURATION ) // Long press duration 47*32ms = 1.5s { P1OUT |= BIT0; // Turn on the P1.1 LED to indicate long press LongPress |= S1; //Set S1 bit in long press flag __bic_SR_register_on_exit(LPM0_bits); //Wake CPU } } if (SwitchState & S2) // Check if switch 2 is pressed { if (++PressCountS2 == PRESSDURATION ) // Long press duration 47*32ms = 1.5s { P1OUT |= BIT6; // Turn on the P1.2 LED to indicate long press LongPress |= S2; //Set S2 bit in long press flag __bic_SR_register_on_exit(LPM0_bits); //Wake CPU } } IFG1 &= ~NMIIFG; // Clear the NMI interrupt flag (in case it has been set by bouncing) P1IFG &= ~BIT3; // Clear the button interrupt flag (in case it has been set by bouncing) IE1 |= NMIIE; // Re-enable the NMI interrupt to detect the next edge P1IE |= BIT3; // Re-enable interrupt for the button on P1.3 P2IFG &= ~BIT1; // Clear the button interrupt flag (in case it has been set by bouncing) P2IE |= BIT1; // Re-enable interrupt for the button on P2.1 }
Thanks in advance.
Best regards,
Fran Martin
Part Number:MSP432P401R
Today, all of a sudden, my MSP432 would not run its program without the Launchpad being plugged into the computer. Previously, I was always able to power it externally without any power from the debugger side of the Launchpad and the code would run perfectly. However, the MSP432 now waits in some sort of halted state until I plug the USB cable that runs from the debug side of the board into my computer. As I am not powering it through the debug side, I do not think this is a power issue. In addition, once the code starts after plugging the USB cable in, I can unplug the USB cable and the code will continue to run.
I have removed the 3V3 and 5V jumper pins from the debugger to the MSP432 side as I am powering the MPS432 from an eternal source. However, the debugger pins are still connected. It seems like the MSP432 is waiting in a halted state until it gets some sort of signal from the debugger. Is this possible?
Part Number:MSP430F5529
Tool/software:TI-RTOS
Hi,
when I use the RTOS I2C driver, the program will block if the I2C device not connect. If my machine's i2c device bad, the machine will hang because i2c driver block. It can't be accepted.
Is there any RTOS I2C driver with timeout examples?
tirtos_msp43x_2_20_00_06 and bios_6_46_00_23
Part Number:MSP430F427
Dear All,
I have always seen that approx all programmers in metering industry, including me, uses to accumulate 4096 samples of ADC and then take its average.
Even I am using to accumulate 4096 samples, (I just accepted as standard), then take its average, but I am still not sure why 4096 samples.
I have not seen any difference is accuracy if even taking as 5000 samples or even at 450 samples.
But I have seen in standard programs that this values is always 4096.
Please clear my curiosity. If there is some logic or it is just a standard practice.
Thanks in advance.
Part Number:MSP430F5438
We are implementing the Modbus in our design wherein the requirement is to support the Modbus speed of 38400 baud. Currently we are using ACLK of 32.768KHz for MSP430 which can reasonable bit-slice up to 9.6K baud. To support 38.4Kbps baud rate in UART, crystal frequency has to be selected accordingly.
By theory UART clock needs to have 16X greater than the Baud rate, which means UART frequency has to be min 614.4Kbps (38.4 kbps X16) wherein the crystal frequency comes to 9.83040MHz to achieve the desired baud rate. However such high frequency clock may likely to impact the EMC performance. Hence need to know the exact clock requirement for MSP430 UART to achieve this baud rate to avoid any errors in communication.(variation due to crystal tolerance, jitter ignored).
As per SLA0049 application note, it is found that we can use MCLK of 1.048MHz to generate UART baud rate of 38.4Kbps. Does this mean that we need to use this crystal frequency? Please confirm.
Also what change needs to be done in SW to handle this change?
Thanks,
Ajit
Part Number:MSP430G2452
Tool/software: Code Composer Studio
Hello,
I have NSP430G2452 value line launch pad. I am trying to use CCS Cloud to build my first project on my macbook pro. I have connected launch pad with my macbook using USB cable. When I try to run my project, it gets compiled, but I get error shown below. How can I resolve this error?
Thanks,
Kaustubh
Part Number:MSP430G2553
Tool/software: Code Composer Studio
Hi guy.
Well I want to download MSP_math.h library but I've noticed that I have to download CSS again. So I need to know, How can I download ONLY msp430_math library without download CCS again?
Regards.
Part Number:MSP430FR59941
I'm trying to configure my msp430 as an I2C slave and I want it to work the same way you would read a register out of any other slave. Usually by sending the device address, register address, issuing a restart, and then reading the data back. So far I'm able to write the register address and receive it in the MSP430, but after my master issues a restart and again sends the device address as a read, I do not get an ack.
Do I have to switch modes somewhere in order to send bytes out?
Here's my setup code:
void setup_slave_i2c(void){ // Configure GPIO P6SEL0 |= BIT4 | BIT5; P6SEL1 &= ~(BIT4 | BIT5); // Configure USCI_B2 for I2C mode UCB3CTLW0 = UCSWRST; // Software reset enabled UCB3CTLW0 |= UCMODE_3 | UCSYNC; // I2C mode, sync mode UCB3I2COA0 = 0x38 | UCOAEN; // own address is 0x48 + enable UCB3CTLW0 &= ~UCSWRST; // clear reset register UCB3IE |= UCRXIE | UCTXIE0 | UCSTPIE; // transmit,stop interrupt enable }
Here's my interrupt handler code:
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector = EUSCI_B3_VECTOR __interrupt void USCI_B3_ISR(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(EUSCI_B3_VECTOR))) USCI_B3_ISR (void) #else #error Compiler not supported! #endif { switch(__even_in_range(UCB3IV, USCI_I2C_UCBIT9IFG)) { case USCI_NONE: break; // Vector 0: No interrupts case USCI_I2C_UCALIFG: break; // Vector 2: ALIFG case USCI_I2C_UCNACKIFG: break; // Vector 4: NACKIFG case USCI_I2C_UCSTTIFG: UCB3IFG &= ~UCSTPIFG; /* Clear address and receive buffer */ __bic_SR_register_on_exit(LPM0_bits); break; // Vector 6: STTIFG case USCI_I2C_UCSTPIFG: break; // Vector 8: STPIFG case USCI_I2C_UCRXIFG3: break; // Vector 10: RXIFG3 case USCI_I2C_UCTXIFG3: break; // Vector 12: TXIFG3 case USCI_I2C_UCRXIFG2: break; // Vector 14: RXIFG2 case USCI_I2C_UCTXIFG2: break; // Vector 16: TXIFG2 case USCI_I2C_UCRXIFG1: break; // Vector 18: RXIFG1 case USCI_I2C_UCTXIFG1: break; // Vector 20: TXIFG1 case USCI_I2C_UCRXIFG0: // Vector 22: RXIFG0 UCB3IFG &= ~UCRXIFG; //clear rx ifg //UCB3CTLW0 |= UCTXSTP; // I2C stop condition //*RXData= UCB3RXBUF; *RXSlaveData = UCB3RXBUF; RXSlaveData++; //*RXData++; __bic_SR_register_on_exit(LPM0_bits); // Exit LPM0 break; case USCI_I2C_UCTXIFG0: // Vector 24: TXIFG0 UCB2TXBUF = 0xAA; __bic_SR_register_on_exit(LPM0_bits); // Exit LPM0 break; case USCI_I2C_UCBCNTIFG: break; // Vector 26: BCNTIFG case USCI_I2C_UCCLTOIFG: break; // Vector 28: clock low timeout case USCI_I2C_UCBIT9IFG: break; // Vector 30: 9th bit default: break; } }
What did I miss? Any advice is always appreciated.
Thank you