xv4y

[Energia Library] VirtualWire 1.10 library ported to MSP430/Energia

24 posts in this topic

Hi!

 

I am proud to share with you the result of my work during this afternoon.

This code is some kind of beta as I have not tested everything.

I have done a successful communication between a MSP430G2452 driving a cheap 433 Mhz transmitter to a Arduino Nano listening the receiver.

I have not tested the client/server examples but I will try it soon with some 2,4GHz modules I have.

The code compiles on both MSP430G2452 and MSP430G2553 but the latter has not been tested.

 

Apart from understanding what was done by the code, my work has been to change the timer and interrupts codes from AVR to MSP430, and to port the crc16.h AVR/libc library to Energia (mostly rewriting no real coding).

 

Comments are welcome of course.

I will try to make the same code working on both Arduino and Energia/MSP430 later.

 

The link to download is at the bottom of this blog article :

http://xv4y.radioclub.asia/2013/01/09/librairie-virtualwire-1-10-pour-le-msp430/

 

The original documentation applies :

http://www.open.com.au/mikem/arduino/VirtualWire.pdf

http://www.open.com.au/mikem/arduino/

 

Yan.

energia, demon1977, pine and 3 others like this

Share this post


Link to post
Share on other sites

When I started contributing to the Energia project this is the kind of end result I envisioned. Many users building on a common platform and everyone benefiting. I'm happy you were able to get this going. One less thing I will have to write for myself!

 

Thanks for sharing!

 

-rick

Share this post


Link to post
Share on other sites

Hi Rick,

 

Thanks for this comment.

I am happy too ;-) That was more than 10 years I have not been really working with micro-controlers.

Now they are far more powerful and that gives a lot of flexibility.

For me, Arduino has really changed the deal because you can now mix low level and high level programming allowing both new-comers and experimented developers to do interesting things together.

Energia is a great project first because the MSP430 has its own advantages in some applications in front of the AVR. Now making it working also on Stellaris will sure make more community projects (including Arduino, Arduino Due, MSP430, Stellaris...) even more fruitful.

 

About sharing, well since this code was in GPL I had no choice ;-)

However I think working on an open platform one should contribute to the community.

I will not publish all my codes, but as much as I can will try to do it for the libraries I will be working on in my projects.

 

Yan.

Share this post


Link to post
Share on other sites

Hi,

Version 1.12, the code no compiles:

 

 

 

C:\energia\hardware\msp430\libraries\VirtualWire\VirtualWire.cpp:32:24: fatal error: util/crc16.h: No such file or directory
compilation terminated.

 

Share this post


Link to post
Share on other sites

Hi demon 1977 (great year),

 

Perhaps the author forgot to include my port of the crc16.h library. Try to download my first version of the VirtualWire library (the first link on the first post here above). You will find the util directory you can copy in the library directory.

If this not work either, try to use my library as this one is tested...

 

Yan.

Share this post


Link to post
Share on other sites

Mike McCauley, the original author, has added the missing files in the new 1.13 release...

 

Yan.

Share this post


Link to post
Share on other sites

Hello there,

 

first of all, many thanks for your fantastic work, I have downloaded and installed latest version of VirtualWire library 1.14 et when trying to compile with Energia 009 I get the following errors:

..\VirtualWire.cpp:568:7: error: expected constructor, destructor, or type conversion before '(' token
..\VirtualWire.cpp:648:1: error: expected '}' at end of input

 

Any advices?

Thanks in advance

Share this post


Link to post
Share on other sites

Hi. Thanks :smile:

 

Its compiles and run on msp430g2553 :smile:

 

Except on msp430g2452 i get:

 

core.a(TimerSerial.cpp.o): In function `TimerSerial__TxIsr':
/home/warend/energia-0101E0009/hardware/msp430/cores/msp430/TimerSerial.cpp:213: multiple definition of `__isr_9'
VirtualWire/VirtualWire.cpp.o:VirtualWire.cpp:(.text.Timer_A_int+0x0): first defined here
collect2: ld returned 1 exit status

 

This error maybe because 2452 have only one timer ???

 

I buy many msp430g2452 chips, and cheap rf 315mhz from ebay: and now tray to compile virtualwire for my projects :-(

 


 

Share this post


Link to post
Share on other sites

Hi,

 

Which file do you use for the library. Where did you downloaded it.

I remember having the same error because in one library (which one ???) some debug code containing serial.print was left.

Try to track the "TimerSerial" in the library you use and disable it...

 

Yan.

Share this post


Link to post
Share on other sites

Hi,

Thanks compiles on msp430g2452 :)

 

Remove all Serial.print in provided example :)

 

Now I test if I can use with nokia 5110 lcd with same chip :)

Share this post


Link to post
Share on other sites

Hello,

 

Some people in this post had problems compiling the VirtualWire using Energia. This happened to me too. I was using the VirtualWire 1.20 from airspayce.com. According to the release history this version should contain support for the MSP430. I don't think it is true, I was only able to compile using the version from xv4y.radioclub.asia.

 

I have now a different problem. I was able to compile the examples provided by the package (the transmitter and the receiver). I am using a pair of lauchpad G2553 and a MX-FS-03V as the transmitter and a the MX-05V and the receiver. The MX-V05V needs 5V to work. I am using the TP1 from the Lauchpad as the 5V VCC for the transmitter.

 

The problem is the MSP430 working as a receiver doesn't do anything. To clarify, it lights a steady red led and stays like that. Open the serial monitor you only see the setup coming out but no other data. I know that the transmitter and the receivers work because I've tested them in a arduino.

 

I tried to troubleshoot by connecting the TX pin from the MSP430 into the RX pin of the other directly (without using the MX circuits) using a common ground.

 

Any ideas what could be happening?

 

I tried to google to see VirtualWire and the MX circuits working. I got tons of examples using arduino but I haven't seen anything (with enough details) for the Lauchpad MSP 430.

 

Thanks in advance for the help!

Share this post


Link to post
Share on other sites

Hi Mau,

 

Usually, mixing 5V and 3,3V parts withtout level converter is not recommended.

By example the 5V part may need to see 3,2V to consider it as HIGH, while the the 3,3V will put out a 3,1V signal at max.

The 5V part outputs putting 5V into the MSP430 inputs may also fry the latter.

 

It can work, I am successfully driving a 5V AD9850 with a 3,3V MSP430G2553, but you need to carefully check the "compatibility".

 

Regards,

Yan.

---

http://xv4y.radioclub.asia/

Share this post


Link to post
Share on other sites

Hi Yan,

 

Point taken. I completly neglected the voltage difference. However, could you tell me why when I direct feed the output pin from one MCU into the input pin to the second controler using a common ground between the two it didn't work? In this particular case only 3.3 V apply.

 

Also. Do I have to use a level converter? What if I feed the receiver with 5V (from TP1 from the USB connector of the LAUchapd) and i use a voltage divider circuit for the output of the receiver into the Launchpad?

 

Do you think it may work?

 

Thanks,

 

Mau

Share this post


Link to post
Share on other sites
Hi guys, I have a problem with using VirtualWire.

I nothing receive at all.

I use XY-FST module for TX and XY-MK-5V for RX. 

Also I checked them by using digitalWrite/digitalRead on separated devices and it work OK, I see my transmitted code.


PPS I tried LaunchPadMSP430\examples\transmitter for  Tx and LaunchPadMSP430\examples\receiver for Rx.

Share this post


Link to post
Share on other sites

Thank you for responding.

This is modules which I use:

http://www.aliexpress.com/item/Free-shipping-5pair-Lot-10pcs-wireless-transmitter-module-burglar-alarm-transmitter-receiver-433-frequency-in-stock/917117393.html

Added:

 

Simple rx raw test, it output zeros when transmitter vw_set_ptt_inverted(false) and output 1 when transmitter vw_set_ptt_inverted(true);

//RX_simple
void setup()
{
  Serial.begin(9600);
  delay(2000);
  Serial.println("setup start");
  pinMode(P2_2, INPUT);
  Serial.println("setup end");
}

void loop()
{
  for (int i=0;i<50;i++)
  {
    uint8_t vw_rx_sample = digitalRead(P2_2);
    Serial.print(vw_rx_sample);
    delay(10);
  }
  Serial.print("\r\n");
  delay(1000);
}

Share this post


Link to post
Share on other sites

I am getting the error: fatal error: util/crc16.h: No such file or directory

   #include <util/crc16.h>
 
The links that were posted on this are no longer active, so I was hoping someone could post them again
 
Thanks

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now