So You Want To Make A Sine Wave In Arduino

So a bunch of blog posts back I posted how easy it was to get a square wave out of an arduino to do things with like generate your 600hz tone for CW etc. But we can go 1 further than that and use the arduino to generate sine waves. Of course you can filter the crap out of a 600hz square wave and make a sine, but to be honest, who really wants to wind inductors in the mH range or for that matter build a suitable LC filter to cut out the harmonics sufficiently to make a sine wave. But alas poor Yorick, there is a way and its called PWM.

 

So above we have a 31khz pwm signal that is being used to generate a sine wave. Through the wonders of mathematics and other nerd endeavours that PWM signal can be used to make sine waves, in my case a 600hz sine wave. Now obviously you still need to filter off the crap to see the sine wave, but its there and below is the filtered output. Now the good thing is you can filter with RC filters and make life simple. In my case i am using a 2 pole RC filter using 100nf caps and 2K resistors, and as you can see it looks rather sinusoidal.

So the following software is not mine, its something i found on the net and did some simple modifications to make work with an arduino UNO. Output is from PIN 11. Take a read, you should be able to work out how it works, using interrupts and timers to get some semblance of accuracy. Anyway, enjoy and have fun.

So I have cleaned up the original code to make it easier to read and to remove the stuff in there that was really doing nothing. And here is a link back to the original article. http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-dds-sinewave-generator/

Facebooktwittergoogle_plusredditpinterestlinkedin

Wemos WiFi and Fun With Clocks

I’m Dr Sheldon Cooper and welcome to another exciting episode of Fun With Flags. We, humor aside, trying to get an accurate time on a micro can be done a multitude of ways and I have given them all a crack this time around and will use 2 out of 3 in my latest project.

So being WiFi enabled, i can call the time of an NTP time server, get the Unix time, do some math wizardry to make the time usable and bing bang boom you have the time. Trouble is, i was getting a number of failed packets and this is of course bad and was making my time keeping go off. Even if i was detecting fail packets and polling again for a new packet, it could wreck my other data and put things off. So, it had to go.

Of course you can call the millis function and do your own time, and I do this for some of the other non critical timing functions, like do this every 5 minutes or do this every 10 minutes, where if the clock drifts by a few seconds its not all that critical. I did make a functioning clock this way and I was getting about 2 seconds drift per day, easy enough to correct for but the code was ugly and you had to reset the time and date everytime i rebooted, and for testing it was a pain in the arse.

So i busted out a real time clock and connected her up and of course this is always going to be a superior option and the one i should have went straight for rather than stuffing about for a couple of nights giving each of the other guys a crack. Oh well, I learned a whole lot in the process and now she is a choocker. Oh and BTW, there are a number of different RTC modules on the market, one works off the SPI bus and the other off the I2C bus, well I have both and I never really liked the SPI RCT Clocks, and much prefer the I2C clocks like the DS3231. The SPI clocks I have seem to forget the time, or some random pulse resets the time. Do not know what is the cause, but I ended up ordering more I2C clocks and binning the others.

Facebooktwittergoogle_plusredditpinterestlinkedin

Wemos D1

Not to be outdone on micro controller usage, I am onto yet another micro that is worth using. I cannot see any real use for say ham radio, but for some other electronics projects i have been tinkering with for way to long, this might just be the go. The Wemos D1 is a uno compatible board that has 1meg flash, 80K ram, 80mhz processor and best of all WIFI, which means i can use this as a webserver for the weather station i have been planning/tinkering/building or procrastinating about for way to long. So with the addition of my other code and the hooking up of some sensors, I should be able to make this thing chooch and display the data on the world wide interwebs.

Facebooktwittergoogle_plusredditpinterestlinkedin

STM32F103 Using Arduino IDE

So i have been trying to get this thing to play nice with the Arduino IDE. Its certainly not for the feint of heart and the thinned of skin as it will take some work and a lot of trouble shooting to get this nightmare to run and play nice.

Out of the box the board will not program via USB as the bootloader on the board is basic and requires an external UART programmer like the ST-Link V2. I do now have an ST-Link V2 but have one on the way from an ebay seller, but in the mean time i wanted to play with the micro and see how it performs.

So, with a serial programmer in hand and the 4 wires soldered in I burned a new bootloader that allows the board to be programmed via USB, then stuffed about with drivers to get ones that work and eventually uploaded the blink program and got it working.

 

The STM32F103 boards have a 72Mhz processor, 64K of Flash and 20K of Ram and a metric ton of interupts. Plenty of resources for everyday Joe’s like me.

Oh, and what ham radio project/s am i going to use this for? Well, you will just have to wait and see. I won’t be providing a full description of how to get these things setup and working either. If you really really really want to do it, you are just going to have to suck it up and do what I did. Spend 2 hours working out each and every problem along the way. Its not as simple as just plugging in your arduino uno board and hitting upload and I have no desire to answer 1000 questions on why something is not working, because what worked for me, might not work for you as it will depend on what tools you are using to make it happen.

Facebooktwittergoogle_plusredditpinterestlinkedin

600hz Tone Injection

So i was sitting here thinking about adding CW to the Bitx 4om. Now there are a number of ways to achieve this from unbalancing the mixer to tone injection. Tone injection seems like the easiest option for me currently and so I started to give some thought to where I am going to get my 600hz tone from.

Well, as I am already working on an Iambic keyer using an arduino, it seemed like the best place to start. It also turns out that this is also a very simple option as well as it really is just 1 line of code to turn a pin on and produce a square wave at the desired frequency with a 50% duty cycle.

And with some massive attenuation and some RC filtering, i should be able to turn this square somewhat sine and make it even sound nice.

tone (8, 600);

Can it get more simple than that.

Facebooktwittergoogle_plusredditpinterestlinkedin

CW Transceiver Keyer and Keying

Ok, with my arduino woes out of the way, i can now focus on the transmitter part of the 3 band CW rig project. Cannot rush these things and i might even get this rig working before i die, well we all have goals to shot for. LOL.

So what do I need and how are we going to go about it. For a start I am a paddle guy, single lever paddle to be precise so I need some form of built in electronic keying. A fixed speed is all i need, say 15wpm, most of the people I work from parks are slower cw types so 15wpm is a nice speed. Memory keying would be nice as I will be using the rig mostly for WWFF or SOTA a basic CQ macro and CQ Sota and CQ WWFF are all i need build in. It needs to provide the sidetone and finally this needs to be able to key the transmitter on and off as well.

As far as arduino keyers go, the Arduino CW Keyer by K3NG is probably the duck nuts. Fully feature rich and does everything other than be the other half of your contact. I looked at it, tested it and its bloody awesome, but i really do not need all that complexity so I have decided to roll my own.

 

So i assembled some bits and bobs and started to write some code. I have it sending nice perfect 15wpm code already using the Piezo as the speaker. I probably will not release this code. I think if you want a full fledged keyer use the one by K3NG and if you are like me and just need a simple keyer for your project, then its time to man up and write some code. It is really not that difficult at all.

Facebooktwittergoogle_plusredditpinterestlinkedin

My Arduino Nightmare

A Tale Of Woe

So i got this brain wave that it would be nice to use bare IC’s in my projects rather than Uno or Nano board supported on headers. It all seems rather simple don’t it. Buy some IC’s with the bootloader already installed, drop them into your socketed Uno board with its on board AVR programmer and Bobs the uncle who touches you inappropriately at family gatherings.

But Oh No No No No, things cannot be that simple can they. Firstly, ebay is a minefield and while you are probably getting top quality IC’s and not chinesium grade floor sweepings, the term with bootloader can be somewhat vague. Yes the IC will take a bootloader, yes the IC may or may not come with a bootloader, but what bootloader is anyone’s guess.

So armed with what look like a pile of bricks and armed with your google foo, you start to look for answers on the world wide interwebs because the pixies are not going where they are meant to or doing what you want. And here armed with your vague error codes from the arduino compiler you find 100’s of people who have no idea how to fix the problem let alone what the actual case of the problem is telling you all sorts of bullshit. From the IC is bricked and cannot be fixed, from edit this file, edit that file, use a capacitor, use this method of wiring, that method of wiring, this programmer, that programmer.

Well I tried them all and guess what, none of these bullshit explanations made any fucking difference to shit. It all comes down to the stupid who is connecting things together. After trying 6 or so different ways of burning a bootloader i finally got one of the 4 different programmers to actually work, it sent the bootloader to my so called bricked IC’s like a pro and then went on to program some software on the IC as well and made an LED blink.

Oh and don’t ask me how i got it working, i really do not know, this programmer did not work the first 3 times i tried it and today for god knows what reason it worked. Thats arduino for you. I giant pain in the arse when things do not want to happen and a joy to behold when things go well. Your Mileage May Vary.

Facebooktwittergoogle_plusredditpinterestlinkedin

Need A Tool-Make A Tool

I watch a bit of blacksmithing on youtube and something these guys often say when they are building something is Need A Tool, Make A Tool. Its a good way to think about life, why run to the store when you can make something now and do the job you are trying to do now.

So, with my breadboard setup, I am wanting to monitor the current demands of everything I am hanging off the one micro as it will eventually be running off solar and batteries and I need to make sure i have a few days of battery supply and enough solar to charge everything up within a days daylight. Don’t want my things turning off and losing precious data.

So i grabbed an Oled display i could not get working out of the box and got it chooching, a voltage and current sensor that i had doing nothing and made them all talk together with some software and she is skookum as frig. So all i gotta do now is wire it up with a nano stick it in a tiny box with some banana sockets and put it in between my power supply and my breadboard and I will always know how much current we are drawing.

Facebooktwittergoogle_plusredditpinterestlinkedin

VK4FFAB Arduino Logger TFT Edition

So after procrastinating about this for such a long time I finally got around to porting the code over to make it work with the 3.2 inch TFT Display. And seeing as it was pretty much a huge code rewrite, while i was there I added in come new functionality to improve usability. All input functions will now accept the <BACKSPACE> key to erase mistakes. Still to be done, create and use a new logfile and add in some WWFF specific items like park to park and my park details. All in all I am rather please with how this has come along. Each time I spend some time on it, it comes out much more improved.

Arduino Logger TFT Edition Code: TFT_Arduino_logger

 

Here is a break down of the stack. 3.2inch TFT on the top, followed by the MEGA2560 and underneath it, the shield board with sd card, real time clock and ps2 keyboard interface. Not my cleanest work, but much cleaner than the last build LOL.

And this is the log file data from the video below. Nice clean ADIF that should by rights allow for importing into any other logging application.

And here is a video of the thing in action. Next on the agenda is boxing it up with a 5000mah single cell Liop, charge controller, BMS and Boost converter to make 5 volts, then add in the new code features and this choocher should be awesome as frig.

Facebooktwittergoogle_plusredditpinterestlinkedin