Jump to content


  • Content Count

  • Joined

  • Last visited

About MSP432

  • Rank

Recent Profile Visitors

601 profile views
  1. Yes, there is another micro controller on the board. But we are only using this to develop the model. We ll get rid of it and develop our on Analog front end. Will check and see if i can read the values now. Will post if i see any trouble doing so. I just read the control register and its outputting the setting i write.
  2. Thanks for that information. Yes the SS pin is working as expected. But that raises a new question for me, why Arduino is reading without any trouble with same 4 connections i made? Edit: Thanks for pointing that out. Its working now
  3. Where to connect GND? and is it required for the SPI?
  4. Thanks @@Fmilburn. Will there be anyother connections running between MSP and MCP other than SS, SCK, MOSI, MISO ? Oscilloscope shows the MOSI line from MSP is outputting data as expected. Also will pullup, pulldown states of pins matter? If u have a moment, it would be great if you can try the code I posted above and see if ur having any issues on your setup.
  5. Hi, I am using MSP430FF5529 launchpad, energia 17.. But the energia reference shows SPI0 on pins 7/8/14/15 and SPI1 on pins 34/33/9/10 for SPI(1). http://energia.nu/Guide_MSP430F5529LaunchPad.html
  6. Hi, I am trying to read ADC channel values from MCP3911 using MSP launchpad using SPI protocol. When i used Arduino Mega the protocol is working fine. But when i use any TI devices i am having a problem, it always gives me all 0'S or 1's. I am using energia for MSP devices. Any i have chosen the appropriate pins as defined in the enegia pin layout. msp430----- static const uint8_t SS = 8; /* P2.7 */ static const uint8_t SCK = 7; /* P3.2 */ static const uint8_t MOSI = 15; /* P3.0 */ static const uint8_t MISO = 14; /* P3.1 */ Can someone help me troubleshoot where i am going wrong. Thanks in advance. // SPI Stuff here #include "SPI.h" const uint8_t MCP3911_CS = SS; // Teensy SPI CS1 = MCP3911 void setup() { //SPI Bus setup digitalWrite(MCP3911_CS,HIGH); // pinMode (MCP3911_CS, OUTPUT); // MCP3911 SPI.setBitOrder(MSBFIRST); SPI.setDataMode(SPI_MODE0); SPI.setClockDivider(SPI_CLOCK_DIV8); //i.e. 6MHz on a Teensy running at 48MHz. SPI.begin(); //Setup Serial Comms Serial.begin(115200); Write_MCP3911_Register (0x0D, B11000010); } int32_t adc; void loop() { //adc = Read_MCP3911_24bit(0x00); Read_MCP3911_Register(0x0D); // Serial.print("Ch0 : "); // Serial.println(adc); delay(200); } uint8_t Write_MCP3911_Register (uint8_t MCP3911_Register_Address, uint8_t Command) { Serial.print("Command Register Received: "); Serial.print(MCP3911_Register_Address,HEX); Serial.print(" - Command Received: "); Serial.println(Command,BIN); MCP3911_Register_Address <<= 1; //left shift address one digit MCP3911_Register_Address &= B00111110; // and ensure last digit is a zero for write command digitalWrite(MCP3911_CS, LOW); // now take CS low to enable SPI device SPI.transfer(MCP3911_Register_Address); // send address with write command to MCP3911 SPI.transfer(Command); //now send payload digitalWrite(MCP3911_CS, HIGH); // deselect the CS pin. Serial.print(" Write Command Byte Sent: "); Serial.println(MCP3911_Register_Address,BIN); // verify what command was sent (i.e. address and write bit = 0) //Now Verify all went well. If so, have the function return value of one, //otherwise, alert the user that something is amiss. uint8_t Response = Read_MCP3911_Register (MCP3911_Register_Address>>1); if (Response == Command) return 1; else { Serial.println(""); Serial.print("Error for register: "); Serial.print(MCP3911_Register_Address>>1,BIN); Serial.print(" - Command Sent: "); Serial.print(Command,BIN); Serial.print(" - Response Received: "); Serial.println(Response,BIN); Serial.println(""); return 0; } } uint8_t Read_MCP3911_Register (uint8_t MCP3911_Register_Address) { MCP3911_Register_Address <<=1; //left shift address one bit for command byte MCP3911_Register_Address |=1; // Ensure read bit is set Serial.print(" Read Byte Command Sent: "); Serial.print(MCP3911_Register_Address,BIN); digitalWrite(MCP3911_CS, LOW); SPI.transfer(MCP3911_Register_Address); // send address with read command to MCP3911 uint8_t Response = SPI.transfer(0x00); digitalWrite(MCP3911_CS, HIGH); Serial.print(" - Response Received: "); Serial.println(Response,BIN); return Response; } void Reset_ADC() { // Puts ADC into Reset Mode, i.e. stops ADC conversions until setup is complete. Write_MCP3911_Register (0x0D, B11000010); } int32_t Read_MCP3911_24bit( uint8_t MCP3911_Register_Address) { uint8_t HB,MB,LB=0, MCP3911_CTRL=0;; int32_t adc0code=0; MCP3911_CTRL = 0; MCP3911_CTRL =(MCP3911_Register_Address<<1); //left shift address one digit for write command MCP3911_CTRL |= 1; //Turn on Read Operation by toggling last bit on digitalWrite(MCP3911_CS, LOW); SPI.transfer(MCP3911_CTRL); // send command byte to MCP3911 HB = SPI.transfer(0x0);//receive High Byte MB = SPI.transfer(0x0);//receive Middle Byte LB = SPI.transfer(0x0);//receive Low Byte digitalWrite(MCP3911_CS, HIGH); adc0code = HB; adc0code = adc0code<<8; adc0code |= MB; adc0code = adc0code<<8; adc0code |= LB; //connecting the 3 bytes to one number return adc0code;// returning result }
  7. Hi I am trying to do a MC to MC communication using modbus. I assigned static IP's to both my MC's. WiFiServer MbServer(MB_PORT); WiFiClient client = MbServer.available(); if(client.available()) { ///Do something////// } My question here is, Is there are way I can check the senders IP address before reading modbus packed data in the loop. Because the receiver MC can be jammed with high data throughput as its a open connection (i.e anyone can send data to the MC by knowing its IP address). I want to read the senders IP before doing any data processing. I know using UDP protocol we can use RemoteIP(). Is there anything similar in this case. For sending and receiving MODBUS, im using the attached libraries. MgsModbus.cpp MgsModbus.h
  8. Ground!! Thats a big question even i had. But luckly it was working (I dnt knw how its referencing the signal though) as expected on MSP430 and TM4C1294. When i look at the higher version MCP39F511, this piece has a ground connection pin available from MCP to MSP. But the MCP board i am using doesn't have any ground pin to connect to. And yes my baud rate is 4.8kbps (code snippet attached) bool RegRead0x0004(void) { Serial1.begin(4800);
  9. Here is how the setup is.. And your code was working fine. I am able to print char A on serial monitor. MSP432 + MCP39F501
  10. So when i run the code. if (Serial1.available()) this statement always FAIL. Program never enters into that if loop, it is just skipping that. As a result the Serial1.end(); after the IF loop is halting the program there and the loop breaks. As a result i cannot see anything print on my serial monitor. But the same code works well with MSP430. What would the issue be? Should i change some jumper settings on my MSP432 for the Serial1 to work. I tried on multiple MSP432 boards both red and black nothing worked.
  11. Hi, I am trying to make a UART connection with a device from serial1 in MSP432. It isn't working as i cannot see anything printing on my serial monitor (I am trying to print the data stored in global variables using serial/USB). Wherein the same code works fine on MSP430 or TM4C1294 devices. I have double checked my wiring connections.. P3.2, P3.3 for RX, TX. Can anyone here help me resolve this issue or point out where im going wrong.. Please find the code below //----------------------------------------------------------------------------- // Microchip MCP39F501 Power Monitor TI Interface Sample Code #define ACK 0x06 #define NACK 0x15 #define CSFAIL 0x51 int OK1_Count = 0; // Success/No Success Counter for Reg Read 0x0002 int NOK1_Count = 0; byte Xmit_Dly = 2; // Transmit Delay between bytes, in msec byte Header; // Received ACK/NACK/CSFAIL byte byte Byte_Count; // Reveived Byte count byte CurrentRMS_LL; // 0x0004 CurrentRMS byte CurrentRMS_L; // 0x0005 CurrentRMS byte CurrentRMS_H; // 0x0006 CurrentRMS byte CurrentRMS_HH; // 0x0007 CurrentRMS byte VoltageRMS_L; // 0x0008 Voltage RMS byte VoltageRMS_H; // 0x0009 Voltage RMS byte ActivePower_LL; // 0x000A ActivePower byte ActivePower_L; // 0x000B ActivePower byte ActivePower_H; // 0x000C ActivePower byte ActivePower_HH; // 0x000D ActivePower byte ReactivePower_LL; // 0x000E ReactivePower byte ReactivePower_L; // 0x000F ReactivePower byte ReactivePower_H; // 0x0010 ReactivePower byte ReactivePower_HH; // 0x0011 ReactivePower byte ApparentPower_LL; // 0x0012 ApparentPower byte ApparentPower_L; // 0x0013 ApparentPower byte ApparentPower_H; // 0x0014 ApparentPower byte ApparentPower_HH; // 0x0015 ApparentPower byte PowerFactor_L; // 0x0016 PowerFactor byte PowerFactor_H; // 0x0017 PowerFactor byte Freq_L; // 0x0016 Frequency byte Freq_H; // 0x0017 Frequency byte CheckSum; byte CalculatedCS; float CurrentRMS; // Current RMS float VoltageRMS; // Voltage RMS float ActivePower; // Active Power float ReactivePower; // Reactive Power float ApparentPower; // Apparent Power float PowerFactor; // Power Factor float Freq; // Frequency void setup() { Serial.begin(9600); Serial.println("Entering Loop "); } void loop() { if (RegRead0x0004()) { OK1_Count++; } else { NOK1_Count++; } Serial.println("------------------------------------------"); Serial.print("MCP39F501 DEMO BOARD : "); Serial.println("------------------------------------------"); Serial.println("OUTPUTS"); Serial.print("RMS Current : "); Serial.print(CurrentRMS*0.0001,4); Serial.println(" A"); Serial.print("RMS Voltage : "); Serial.print(VoltageRMS*0.1,1); Serial.println(" V"); Serial.println("DATA COMMUNICATION"); Serial.print("1st frame counts: OK="); Serial.print(OK1_Count,DEC); Serial.print(", Not OK="); Serial.println(NOK1_Count,DEC); delay(1000); } bool RegRead0x0004(void) { Serial1.begin(4800); WriteByte(0xA5); WriteByte(0x08); WriteByte(0x41); WriteByte((byte)0x00); WriteByte(0x04); WriteByte(0x4E); WriteByte(0x16); WriteByteND(0x56); ClearBuffer(); // Parse the data returned from the meter if (Serial1.available()) { Header = Serial1.read(); Byte_Count = Serial1.read(); CurrentRMS_LL = Serial1.read(); CurrentRMS_L = Serial1.read(); CurrentRMS_H = Serial1.read(); CurrentRMS_HH = Serial1.read(); VoltageRMS_L = Serial1.read(); VoltageRMS_H = Serial1.read(); ActivePower_LL = Serial1.read(); ActivePower_L = Serial1.read(); ActivePower_H = Serial1.read(); ActivePower_HH = Serial1.read(); delay(50); ReactivePower_LL = Serial1.read(); ReactivePower_L = Serial1.read(); ReactivePower_H = Serial1.read(); ReactivePower_HH = Serial1.read(); ApparentPower_LL = Serial1.read(); ApparentPower_L = Serial1.read(); ApparentPower_H = Serial1.read(); ApparentPower_HH = Serial1.read(); PowerFactor_L = Serial1.read(); PowerFactor_H = Serial1.read(); Freq_L = Serial1.read(); Freq_H = Serial1.read(); CheckSum = Serial1.read(); } Serial1.end(); Serial.print("Cehcksum Received: "); Serial.println(CheckSum,HEX); // Calculate the expected CheckSum CalculatedCS = (byte)((int)( Header + Byte_Count + CurrentRMS_LL + CurrentRMS_L + CurrentRMS_H + CurrentRMS_HH + VoltageRMS_L + VoltageRMS_H + ActivePower_LL + ActivePower_L + ActivePower_H + ActivePower_HH + ReactivePower_LL + ReactivePower_L + ReactivePower_H + ReactivePower_HH + ApparentPower_LL + ApparentPower_L + ApparentPower_H + ApparentPower_HH + PowerFactor_L + PowerFactor_H + Freq_L + Freq_H + 0)%256); Serial.print("Checksum Calculated: "); Serial.println(CalculatedCS,HEX); // Check for ACK, correct byte count and CheckSum matches expected checksum if ((Header == 0x06) ){//&& (Byte_Count == 0xD) && (CheckSum == CalculatedCS)) { Serial.println("IM HERE"); CurrentRMS = ((unsigned long)(CurrentRMS_HH << 24) + (unsigned long)(CurrentRMS_H << 16) + (unsigned long)(CurrentRMS_L << 8) + (unsigned long)(CurrentRMS_LL)); VoltageRMS = ((unsigned int)(VoltageRMS_H << 8) + (unsigned int)(VoltageRMS_L)) ; return true; } else return false; } void WriteByte(byte _wbyte) { Serial1.flush(); Serial1.write(_wbyte); delay(Xmit_Dly); } void WriteByteND(byte _wbyte) { Serial1.flush(); Serial1.write(_wbyte); //delay(Xmit_Dly); } void ClearBuffer(void) { Serial1.flush(); while(Serial1.available()) char _f = Serial1.read(); delay(30); }
  12. By saying two serial ports do you mean Serial.begin() and Serial1.begin() ?? I am trying to establish an UART communication using Serial1.begin() and using Serial.begin() as serial monitor. I am having bad time making it work. The same code is working with TM4C1294 and MSP430F5529. Is there any other way to access other serial pins on MSP432 using energia?
  13. Thanks for your reply. Previously i was referring only to the pin layout of MSP432 in energia where they showed only one RX,TX. did not check the datasheet (i mistakenly mentioned it as datasheet above).
  14. Hi, I am using MSP432P401R to make a UART connection and talk to a board. I have found in the datasheet that MSP432 supports only one UART (RX-P3.2, TX-P3.3). In this case when I use serial to transmit and receive from the other board, Can there be a way i can view the data on serial monitor? How to realize this? I have read in other posts about software serial where GPIOs can be used as serial pins. Can someone brief it for me. My project basically is to read bytes from MCP39F501 onto MSP432P401R and then transmit that data using MODBUS TCP protocol with CC3100 boaster pack.
  • Create New...