Jump to content


Popular Content

Showing most liked content since 01/20/2018 in all areas

  1. 3 points
    I worked on a new servicing routine for my kit oscilloscope's quadrature rotary encoder, and decided to write it all up and post it on Github. Included are routines for periodic polling and for pin-interrupt servicing. Hardware switch debouncing is not needed. The routines are for general use, but I wrote testing code for the MSP430G2231 installed on the Launchpad. The scope guys have used the "lookup table" state transition routine that most people use today, but it doesn't work very well on the scope, and I haven't found it to work very well generally. My routines are designed to avoid all effects of switch bouncing, and seem to work very well and efficiently. Everything is explained in the PDF file in the repo. All the testing code is also included, both source code and executable hex files, and I'm afraid it's all in assembler. But I hope it wouldn't be too difficult to create Energia versions if anyone is interested. I've provided hex files for both types of encoders - those with the same number of pulses as detents per revolution, and those with half as many pulses as detents. The code produces one "tick" per detent in both cases. https://github.com/gbhug5a/Rotary-Encoder-Servicing-Routines
  2. 3 points
    Rei Vilo

    iMeter BoosterPack

    The iMeter BoosterPack features the INA226, an iteration of the INA219 I've been using in various projects like the I²C Voltage-Current-Power INA219 Sensor and the Volt-Amp-Watt-Meter for Grove.Compared to the INA219, the INA226 operates on the same I²C bus but can now perform the measures on the high- or low-side, when the INA219 could only measure on the high-side. The library for Energia was then easy to develop thanks to the prior experience with the INA219. I tested the iMeter BoosterPack on a MSP430FR4133 LaunchPad and a MSP430FR6989 LaunchPad with the built-in segmented LCD, leveraging the alpha-numeric LCD to display the units and the buttons to select the different measures (V, A, W) and toggle between units (V, mV). References INA219 Review INA226 BoosterPack full review Library for Energia
  3. 2 points
    I have been searching for a FatFs Energia library for the FR5969 a while and haven't come across anything that worked, so I decided to try make one. If there is one out there.... ahhhhhhhhhhghhghgh. The library is called Jaffl: Just another FatFs library It is located at: https://github.com/geometrikal/Jaffl Details: It is written for the MSP430FR5969, mainly because transmit and receive SPI bytes routines hard coded to USCB0. If someone can make this more generic it would be welcome. The Jaffl wrapper is based on the FatFs wrapper by David Sirkin. The latest FatFs version (ff11) is used, but not all functions may have made it to the wrapper. The diskio.c MMC interface comes from the TI example code for the MSP430F5529 LaunchPad with a few changes: 1. there were extra functions added to attach the SPI init / change speed / cs routines. 2. Class 6 and 10 cards weren't initialising, so instead of sending CMD0 once before failing (during disk_initialization()) it keeps sending every 1ms until it gets the right response, or one second has passed. f_printf was changed to f_vprintf in ff.c and modified to accept va_list instead of the normal variable argument designator (the dots: ...) . This is because Jaffl.printf wraps it, and needs to pass the variable arguments as va_list. A quick test example: #include "SPI.h" #include "Jaffl.h" int counter = 0; void setup() { Serial.begin(57600); Serial.println("Startup"); Serial.print("Begin, return code: "); Serial.println(Jaffl.begin(P3_0)); Serial.print("Open file, return code: "); Serial.println(Jaffl.open("test.txt", FA_WRITE | FA_CREATE_ALWAYS)); } void loop() { Serial.print("Print file, return code: "); Serial.println(Jaffl.printf("Hello world: %d\r\n", counter++)); Serial.print("Sync, return code: "); Serial.println(Jaffl.sync()); delay(1000); } The code isn't polished, but seems to work. I will be doing on going testing as this will be used in another project, but I've put it up now to get feedback and help spot bugs. 99% of the code came from other sources so thanks to those people. Its all on github so if you have changes do a pull request. 2015-03-18 - Added MISO internal pull up to get some cards to work.
  4. 2 points

    Upload firmware code using Energia

    This is device without SBW support, so firmware can be uploaded only by master device that support full JTAG connection (TI MSP-FET or MSP-FET430UIF), not by Launchpads. This device is with UART BSL, but AFAIK Energia (by default) doesn't support this. However, if you are fine with using BSL, than customized command line for flashing, for TI BSL_Scripter can be inserted inside Energia, and firmware can be uploaded by IDE button. I explained similar thing here... https://forum.43oh.com/topic/9337-where-do-i-find-the-script-that-runs-after-clicking-upload/
  5. 1 point

    Hi from dannyf

    Hi, new here. I worked professionally with lots of luminary and then ti chips. Still have trays of lm3s628, 801, and 811s. Got some of the earliest lm4f120 chips and launchpads. Loved their features. Not crazy about the adc however. My interests now are mainly in creating a generic framework for Arduino (the software). I had previously ported Arduino to a variety of chips, from stm8, pic24, and tm4c chips, including msp432. My recent work in progress is xduino, a generic framework for Arduino on a diverse group of chips. Nice to share my learning with you all. You can find me at dannyelectronics.wordpress.com
  6. 1 point
    Unfortunately, this things must be analyzed with scope and on board modification until (almost) perfect signal shape is found. https://electronics.stackexchange.com/questions/33372/spi-bus-termination-considerations
  7. 1 point
    Not that P2_2, etc are "friendly" names only that map to a pin number and point into the arrays digital_pin_to_port[], digital_pin_to_bit_mask[], etc. On a side note, It is discouraged to use these friendly names since they are not portable between all launchpads. Instead use pin numbers. With that said, in order to use the pins currently exclusive to the LCD, you need to add them to the following arrays in pins_energia.h: digital_pin_to_port[] digital_pin_to_bit_mask[] Add them to the end of the arrays. You will have to choose which pin goes at which position in the array. The position in the array determines the pin number you use in your Sketches for a particular pin. e.g. if you were to add P2.2 to the end of the arrays it would look something like this: const uint8_t digital_pin_to_port[] = { NOT_A_PIN, /* 0 - pin count starts at 1 */ ..... P2, /* 21 - P2.4 */ P2, /* 22 - P2.3 */ P4, /* 23 - P4.0 */ P1, /* 24 - P1.2 */ P2, /* 25 - P2.6 */ P2, /* 26 - P2.2 */ }; const uint8_t digital_pin_to_bit_mask[] = { NOT_A_PIN, /* 0 - pin count starts at 1 */ ...... BV(4), /* 21 - P2.4 */ BV(3), /* 22 - P2.3 */ BV(0), /* 23 - P4.0 */ BV(2), /* 24 - P1.2 */ BV(6), /* 25 - P2.6 */ BV(2), /* 26 - P2.2 */ }; With this addition you can use P2.2 as pin 26 in your Sketch as GPIO. void setup() { pinMode(26, OUTPUT); digitalWrite(26, HIGH); } Be careful with modifying the core since it is controlled by Energia. An update to the core will undo all the changes. Robert
  8. 1 point
    I've added a second PDF file describing an efficient polling routine for servicing multiple momentary push-button switches.
  9. 1 point

    MSP430F149 Board

    @Fmilburn Thanks for the feedback. I did a little bit of research on the tradeoffs between the two methods, both from a readability standpoint and a performance standpoint. It wins on the readability and can be faster executing in many cases than the if/then approach. I will "switch" the code the next time I work on it.
  10. 1 point

    MSP430F149 Board

    A while back @omnicron generously offered up some surplus boards sporting a MSP430F149 and a good mix of conditioned I/O on the board including a couple of 5.8psi pressure transducers. I feel that this, along with the programming header on the board, makes it a good all-around board for general purpose projects. The board also supports a standby NiMH battery (6v, 1800mAh) with charging/discharging capability and voltage monitoring all controlled by the MCU. The battery switches in via a relay upon primary power loss. One of the pushbuttons is configured in hardware to be used as a soft power on/off and requires just a little bit of code to work. One of the concerns upon getting the board is that, even though it has a programming header, the fuse may have been blown to protect the original code. With the fuse setup on the MSP430F149 that would be a show stopper and the board would have been a paper weight. Thankfully, when I connected my MSP-FET I was able to talk to the MCU as well as program it. So what does one do when presented with a new piece of hardware? Write code to flash LEDs and exercise the hardware, of course. Since I wanted to make this a general purpose, “throw it at a project” kind of board, I wanted to write some functions to simplify the main program code. So far I have routines for digital I/O, analog in, chip temperature and a function to display a binary result on the eight LEDs on the board. One downside to the way this particular board was designed is the lack of easily accessible serial ports. One way around this is to solder directly to the MCU pins to utilize the secondary serial ports , but that wasn't very attractive. Looking at the schematic I found that by removing three passives from each of the two serial lines, I could repurpose what were originally a couple of digital outputs and have a serial port (UART only, no I2C on this MCU). SPI is also possible using the same technique, but a little more cumbersome to implement. I haven't written the functions for serial yet and will probably wait until I actually need serial I/O. The video demonstrates my demo code that utilizes soft power using the switch shown at the bottom left. Default power up behavior is the 8 LEDs chasing up and down. The next switch to the right of the power switch toggles the beeper which, when activated, sounds every time the LED furthest to the left (LSB) lights up. The next switch to the right toggles the speed of the LEDs and the final button displays the chip temp in binary (75 degrees in this case), pauses to allow it to be read and then resumes the LED chasing. There… hardware reasonably exercised. J I have included pictures of the front and back of the board as well as a PDF schematic. If you have the inclination I welcome feedback on the code and the resulting opportunity to learn to code more efficiently. // Since I used portions of TI’s MSP430ware examples in two functions (chiptemp and analogIN) I am //including the TI copyright notice below: /* --COPYRIGHT--,BSD_EX * Copyright (c) 2012, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ******************************************************************************* * * MSP430 CODE EXAMPLE DISCLAIMER * * MSP430 code examples are self-contained low-level programs that typically * demonstrate a single peripheral function or device feature in a highly * concise manner. For this the code may rely on the device's power-on default * register values and settings such as the clock configuration and care must * be taken when combining code from several examples to avoid potential side * effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware * for an API functional library-approach to peripheral configuration. * * --/COPYRIGHT--*/ #include <msp430.h> #define ana_ch_a 0x01 // Port 6.0, A0 #define ana_ch_b 0x02 // Port 6.1, A1 #define ana_batt 0x03 // Port 6.2, A2 #define ana_9v 0x04 // Port 6.3, A3 #define ON 0x01 #define OFF 0x00 #define LED_1 0x01 // Port 2.0 #define LED_2 0x02 // Port 2.1 #define LED_3 0x03 // Port 2.2 #define LED_4 0x04 // Port 2.3 #define LED_5 0x05 // Port 2.4 #define LED_6 0x06 // Port 2.5 #define LED_7 0x07 // Port 2.6 #define LED_8 0x08 // Port 2.7 #define LED_9 0x09 // Port 3.0 #define LED_10 0x0A // Port 3.1 #define valve_a 0x0B // Port 3.2 #define valve_b 0x0C // Port 3.3 #define pump_a 0x0D // Port 3.4 #define pump_b 0x0E // Port 3.5 #define charge 0x0F // Port 3.6 #define discharge 0x10 // Port 3.7 #define beep 0x11 // Port 4.0 #define chkbatt 0x12 // Port 4.1 #define VCCEN 0x13 // Port 4.2 //array and variables to support functions const int BitValue[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; unsigned int var1; unsigned int var2; unsigned int var3; unsigned int var4; unsigned int a; unsigned int b; unsigned int c; unsigned int ADCvalue; int long IntDegF; void PostLEDValue (unsigned int Var4); void chiptemp(int long degree_f); void analogIN(unsigned int var3); // values= ana_ch_a/b, ana_batt, ana_9v void digitalWrite(unsigned int var1, unsigned int var2); // values = LED_1-10, valve_a/b, pump_a/b, beep, charge, discharge, chkbatt, VCCEN, and var2 = ON, OFF volatile unsigned int i=0; unsigned int led_count; volatile unsigned int j; unsigned int l=2; unsigned int sw_press = 0; unsigned int beep_status = 0; unsigned int speed = 6000; int long temp; void main() { WDTCTL = WDTPW + WDTHOLD; DCOCTL = DCO0 + DCO1; BCSCTL1 = RSEL0 + RSEL1 + RSEL2; P1DIR |= 0x00; P4DIR |= BIT0 + BIT1 + BIT2; P4OUT |= 0x00; P4OUT |= 0x04; // Set P4.4 to 1 (VCCEN) P2DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7; P2OUT &=~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7); P2OUT |= (BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7)& 0xFF; P3DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7; P3OUT &=~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7); P3OUT |= (BIT0 + BIT1) & 0xF; P1IES |= 0x00; P1IFG |= 0x00; P1IE |= (BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7); _enable_interrupt(); // MAIN CODE STARTS HERE ---------------------------------------------------------- l=2; do { led_count = 11; do { led_count--; j = speed; // Delay 6000 or 1500 do (j--); while (j != 0); if (led_count == 9){ led_count = 8;} if (led_count == 7){ led_count = 6;} digitalWrite(led_count, ON); } while (led_count != 1); i = 45000; do (i--); while (i != 0); if (sw_press == 3) { // Toggle beep at LSB transistion beep_status ^= 0x01; sw_press = 0; } digitalWrite(beep, beep_status); i = 5000; do (i--); while (i != 0); // Delay 5000 digitalWrite(beep, OFF); if(sw_press == 1) { // Soft Power Down P4OUT ^= 0x04; sw_press = 0;} if (sw_press == 4 && speed == 6000) { //Toggle LED chase speed speed = 1500; sw_press = 0;} if (sw_press == 4 && speed == 1500) { speed = 6000; sw_press = 0;} if (sw_press == 5) { sw_press = 0; chiptemp(0);} led_count = 0; do { led_count++; j = speed; // Delay 6000 or 1500 do (j--); while (j != 0); if (led_count == 7){ led_count = 8;} if (led_count == 9){ led_count = 10;} digitalWrite(led_count, OFF); } while (led_count != 10); i = 50000; do (i--); while (i != 0); // Delay 50000 } while (l != 0); } // MAIN CODE ENDS HERE ------------------------------------------------------------------------------------ #pragma vector=PORT1_VECTOR __interrupt void PORT1_ISR(void){ _disable_interrupt(); if(P1IFG & BIT0) { sw_press = 1; P1IFG &= ~BIT0; } if(P1IFG & BIT1) { sw_press = 2; P1IFG &= ~BIT1; } if(P1IFG & BIT2) { sw_press = 3; P1IFG &= ~BIT2; } if(P1IFG & BIT3) { sw_press = 4; P1IFG &= ~BIT3; } if(P1IFG & BIT4) { sw_press = 5; P1IFG &= ~BIT4;} if(P1IFG & BIT5) { sw_press = 6; P1IFG &= ~BIT5; } if(P1IFG & BIT6) { sw_press = 7; P1IFG &= ~BIT6; } if(P1IFG & BIT7) { sw_press = 8; P1IFG &= ~BIT7; } _enable_interrupt(); } #pragma vector=ADC12_VECTOR __interrupt void ADC12ISR (void) { _disable_interrupt(); temp = ADC12MEM0; _enable_interrupt(); } // FUNCTIONS BEGIN HERE -------------------------------------------------------------------------------------------- void digitalWrite(unsigned int var1, unsigned int var2){ a=0; b=0; c=0; if (var1 <= 0x0A){ //Flip ON/OFF on LED outputs since they are active low. var2 ^= 0x01;} if (var1 >= 0x10 && var1 <= 0x13){ c = (var1-17); if (var2==1){ a=P4OUT; a=a|(BitValue[c]); P4OUT=a;} if (var2==0){ a=P4OUT; b=~(BitValue[c]); P4OUT = (a&b);} } if (var1 >= 0x09 && var1 <= 0x10){ c = (var1-9); if (var2==1){ a=P3OUT; a=a|(BitValue[c]); P3OUT=a;} if (var2==0){ a=P3OUT; b=~(BitValue[c]); P3OUT = (a&b);} } if (var1 >= 0x01 && var1 <= 0x08){ c = (var1-1); if (var2==1){ a=P2OUT; a=a|(BitValue[c]); P2OUT=a;} if (var2==0){ a=P2OUT; b=~(BitValue[c]); P2OUT = (a&b);} } } void chiptemp (long int degree_f) { ADC12CTL0 = SHT0_8 + REFON + ADC12ON; ADC12CTL1 = SHP; ADC12MCTL0 = SREF_1 + INCH_10; ADC12IE = 0x001; ADC12CTL0 |= ENC; ADC12CTL0 |= ADC12SC; i = 5000; do (i--); while (i != 0); IntDegF = (temp - 2519) * 761; IntDegF = IntDegF / 4096; temp = 0; degree_f = IntDegF; PostLEDValue (degree_f); } void PostLEDValue (unsigned int var4){ led_count = 0; do { led_count++; j = 250; do (j--); while (j != 0); // turn off LEDs if (led_count == 7){ led_count = 8;} if (led_count == 9){ led_count = 10;} digitalWrite(led_count, OFF); } while (led_count != 10); if (var4 > 64){ var4 = var4 - 64; digitalWrite(LED_8, ON); } if (var4 > 32) { var4 = var4 - 32; digitalWrite(LED_6, ON); } if (var4 > 16) { var4 = var4 - 16; digitalWrite(LED_5, ON); } if (var4 > 8) { var4 = var4 - 8; digitalWrite(LED_4, ON); } if (var4 > 4) { var4 = var4 - 4; digitalWrite(LED_3, ON); } if (var4 > 2) { var4 = var4 - 2; digitalWrite(LED_2, ON); } if (var4 == 1) { digitalWrite(LED_1, ON); } j = 20; //delay to allow reading of LEDs do { i = 50000; do (i--); while (i != 0); j--; } while (j != 0); } void analogIN (unsigned int var3){ ADC12CTL0 = SHT0_8 + REFON + ADC12ON; ADC12CTL1 = SHP; if (var3==1){ ADC12MCTL0 = SREF_1 + INCH_0; } if (var3==2){ ADC12MCTL0 = SREF_1 + INCH_1; } if (var3==3){ ADC12MCTL0 = SREF_1 + INCH_2; } if (var3==4){ ADC12MCTL0 = SREF_1 + INCH_3; } ADC12MCTL0 = SREF_1 + INCH_10; ADC12IE = 0x001; ADC12CTL0 |= ENC; ADC12CTL0 |= ADC12SC; i = 5000; do (i--); while (i != 0); ADCvalue = (temp/16); PostLEDValue (ADCvalue); } - Circuit Diagram.pdf Demo_Program_Video.MOV
  11. 1 point

    MSP430F149 Board

    HI @dubnet It looks like you had fun with that . The code is easy to read and looks good to me. You can try using a switch statement in the ISR - something like this: //----------------------- G P I O _ P O R T 1 _ I S R ------------------------ #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=PORT1_VECTOR __interrupt #elif defined(__GNUC__) __attribute__((interrupt(PORT1_VECTOR))) #endif void GPIO_PORT1_ISR(void) { switch(P1IV) { case 0: break; //no interrupt pending case 2: break; //P1.0 case 4: break; //P1.1 case 6: //P1.2 GPIO_toggleOutputOnPin(RED_LED); break; case 8: //P1.3 GPIO_toggleOutputOnPin(GREEN_LED); break; case 10: break; //P1.4 case 12: break; //P1.5 case 14: break; //P1.6 case 16: break; //P1.7 default: break; //should not get here } } The TI examples in their MSP430 training videos use this approach.
  12. 1 point

    IR remote library

    I have wirtten code for RC5 and NEC/Samsung decoding that may be of use. It is not written as an Energia library though - I am using CCS and DriverLib. I use it for my multimedia center so originally only for RC5 commands, I added Samsung (nearly same as NEC) decoding so I could use my TV remote for volume control as well as my dedicated RC5 based remote. The Samsung commands are translated to their RC5 equivalents. remote.zip
  13. 1 point

    MSP432P401R Remapping Pins

    Hi Terje, You are right - I was actually looking for that and missed it. On mine the jumper was not in place when received.
  14. 1 point

    MSP432P401R Remapping Pins

    @fmilburn It is brought out to JP4.1 as RTS for the backchannel UART so it is accessible if a jumper is removed (it is not in place on my LaunchPad and I cannot remember if I removed it earlier, I believe not). I have a black edition if that matters. Terje
  15. 1 point

    MSP432P401R Remapping Pins

    Hi Jeffery, Have a look at the schematic in the MSP432P401R LaunchPad Development Kit User's Guide. P3.1 does not appear accessible, i.e. it does not appear to be brought out to the headers. From the datasheet: What are you doing that you must use that pin?
  16. 1 point
    Please see solution here:
  17. 1 point
    Find the call to software serial that is in the library and replace it with a call to hardware serial. The Energia reference documentation is located here: http://energia.nu/reference/serial/
  18. 1 point
    Hi @Hena and welcome to 43oh. The FR6989 has hardware serial on pins 3 and 4. Have you tried using them? Many arduino libraries can be used with Energia but the pins must be remapped.
  19. 1 point
    I have figured it out. Just Included TM4C123GH6PM.h which has all the register definitions. Now it is easy to create my own frequency counter using the timers. Thanks for the algorithm.
  20. 1 point

    MSP430F5529 and RFM12b used together

    I think I have spotted at least three mistakes when reading back the result: 1 . You shift the contents of P6IN the wrong way and do not mask the unwanted bits before or'ing with the result (assuming MSB is sent first). 2. You shift the result after adding a new bit, the shift should be done before adding it. 3. You deselect the device after reading the first bit (MSB) of the result. Move setting nSel high out of the loop. result <<= 1; result |= (P6IN >> 6) & 0x01; The code above migth work for reading the result. However, why not use one of the USCI modules for SPI instead of bitbanging? From a quick glance at the datasheet it seems you can use a fairly high data rate.
  21. 1 point
    You can use a pointer of uint16_t to receive the address of the 64bit variable. After, it's just read the value inside the address pointed by the pointer and increment it, repeating the process to read all addresses.
  22. 1 point

    Msp430 software serial error

    Use the hardware serial to communicate, not software serial. As dubnet noted, post your code.
  23. 1 point

    Msp430 software serial error

    With the 5529 you don't want to use software serial. It isn't necessary as the 5529 has 2 hardware serial ports. if you are doing an include of the software serial library in your code you will want to remove it. Also, please only post once. You may also want to post your code with your request for help. It allows folks to better help you.