MPLABX VS ARDUINO IDE

#119 Differences and similarities between the two

Recently I wrote about the pros and cons etc. about different programmers used to program embedded devices. I mentioned a few examples like ST-Link, PicKit and standard DIY programmers. Now since programmers work hand in hand with the programming software on your PC I decided to talk a bit about the 2 IDEs I use often. (Although you can easily setup platform IO with a compiler for embedded devices I will be focusing mostly on full IDEs but will make mentions to using text editors)

So I’ll start with the Arduino IDE. it’s simple to install and to get started with. There’s many libraries and there’s a wide support on the internet. Note: at least in my experience in South Africa at the public school I went to there was basically no interest or effort to promote Arduino and similar platforms. Looking back this was very disappointing since I’m 99% sure I would have gotten into Arduino much earlier in life if certain educational departments had made an effort in promoting Science instead of supporting political nonsense like the “science must fall” movement but I digress.

That being said Arduino is not all fun and games, it’s a great learning introduction tool but can promote bad code practices and reliance on libraries for work. Arduino also heavily promotes using easy functions instead of port manipulation methods… even in advanced projects… this can be a bit annoying especially when you want to use a library in a project with a different MCU and also when you want to keep code small and efficient. This can really bloat your MCU code and as you can imagine there is really not much room “literally” when programming embedded devices. Macros for port manipulation can really help but relying on digitalwrite(pin1); to pull a pin high or low can really cause some confusion later on

There may be more pros and cons not mentioned above but really I just want to get into the stuff that I can mention off the top of my head for this article.

Now switching to the free MPLABX IDE. I can say that the learning curve is quite steep but easy to get into with repetitive use. Once you get familiar with the layout you can start seeing quite a few pros compared to Arduino. having the ability to view the entire file structure in the IDE helps a ton. Also AVR has been integrated into MPLABX for some years now so you can easily program Arduino style. The IDE promotes professional main.c files and avr-main.c files which is very cool (I’m not really into ASM programming at least for now there’s a very big learning curve but one day I’ll get into it I hope 🙂 ) MPLABX also supports a huge variety of ICs and you can easily download updates for these as well as some libraries. Another pro is the GUI MCC (MPLAB Code Configurator) ok, ok I’m not a huge fan because I always somehow bloat up my project and break things but I can totally see how it could help by providing a GUI for setting clocks and bits etc. Another cool feature is that there are options for dark mode in the ide and it uses NetBeans.

There are a few downsides to the MPLABX IDE for example when using a 4k screen the Nebeans part always has blurry visuals now you can adjust the DPI but then all the text is super small and when adjusting the text it becomes inconsistent in certain places. Like for example the IDE text is small but your code text is big. This has always been an issue for me but I guess I’m just suffering from a 4k screen 🙂 Another issue is that I have always had to use expensive dedicated programmers when using MPLABX non of my DIY CH340N etc. programmers will work with MPLABX. Also programming AVR requires an AVR programmer so you can’t just use a PicKit3 for everything. Another pro is that it’s easy to choose compilers in a list. You cans install multiple compilers without issue. Another great feature is that you can install the so called MPLABEXT extension using visual studio code so you don’t have to use the IDE but can keep compatibility. Another cool feature is the ability to read and program the fuses or (configuration bits for PIC). Once again there may be some pros and cons not mentioned but I’m just writing this off the top of my head.

An honourable mention goes to the text editor approach. This is very light weight and generally bloat free and offers a lot of flexibility which makes using visual studio code a great choice but of course it’s not really a dedicated IDE.

Now to close off I will include to code samples to show the differences between the Arduino IDE and MPLABX IDE I will be programming an AVR device the ATtiny826 in the comparison examples.

Arduino blink code example including a blink without delay and a fast blink sample I made :



MPLABX blink code example including a blink without delay and a fast blink sample I made :

DIFFERENT PROGRAMMERS

#118 A look at different types of programmers

Different programmers for different IC’s some work with others.. some don’t

Over the years I have used different programmers for PIC,AVR,ST,ESP and WCH microcontrollers from simple FTDI TX RX programming to more advanced PICKit 5 dedicated programmers.

All the different types have their pros and cons but by far the most used by me is the cheap FTDI and serial TTL types for example programmers using the CH340, PL2303 and FT232 IC’s

Though the PL2303 is outdated there’s still many floating around and certain applications require the IC like when interfacing with old radios.

PICKit3, PICKit3.5 and the new PICKit5

With that being said you may ask why do we need a dedicated programmer? Well it depends…

Using the cheap common options I just mentioned above is good enough for a hobbyist but when you design a product you want something that’s is reliable common and has a guaranteed life span with support for the foreseeable future so that you will always have parts available for projects and the programmer.

USBasp AVR Programmer using SPI
STM Programmer


WCH-LinkE programmer can also program STM IC’s

Another big point is uniformity, dedicated programmers will usually be using parts with certain thresholds and voltages + current etc. all that data will be kept constant and accurate while a cheap programmer will most likely have a huge threshold..

A very important point is the ISP + debugging. A dedicated programmer will be able to do programming and debugging easily with a few pins. While a cheap programmer will require more pins and many times 2x programmers… 1 for debugging and 1 for programming.

BUS PIRATE can program with SPI
Arduino Nano with built in CH340 IC for serial programming
A n old DIY programmer of mine based on the CH340N IC

Dedicated programmers also have full support by the IC company as long as you have an original also they offer some really useful features like the PicKit5’s blue tooth option and stand alone programming or changing of source binaries on a phone.

All you need is the programmer and a phone is optional if you need to change things like binaries but really you can give a pickit5 to any technician and they can easily update supported IC’s without needing to mess around on a desktop/laptop computer. This is a very useful feature.

Now there also are EEPROM programmers and true universal programmers that can do EEPROMS and MCU’s like the old TL866II Plus which has a list here of all the supported IC’s. These programmers work well and allow easy access for single IC’s some can also read and write when an IC is in circuit but others require de-soldering. These programmers are usually quite large with Zif sockets.

EEPROM Programmer CH341B
Universal programmer the TL866II Plus

Now I just mentioned a few examples there is much more to talk about but I’m not going to be writing books here…

DIY UPDI PROGRAMMER

#117 A DIY UPDI plug and play board

Making fast and crude but reliable programmers

When getting into the new ATtiny series (tinyAVR-0 tinyAVR-1 tinyAVR-2 IC’s) of microcontrollers a few years ago I noticed how easy it had become to program them with only a few extra components.

I started out with just a 4.7k resistor and a cheap CH340 programmer. Then 3 wire hook-ups later I could easily program my IC’s. The only downside was that I had to sacrifice the UPDI pin to the dedicated Pin gods.. so I couldn’t use that pin unless I wanted to make my life more difficult.

Well this was okey for me and ever since I always have the UPDI pin open only for programming. So all my designs incorporate this principal. If I really need more pins I would use an affordable IO expander IC.

Now with that being said it’s all good and well programming with a mini rats nest… but I wanted to create a simple plug and play DIY programmer with commonly available parts and plug and play compatibility.

So I came up with a small circuit that’s easy to build on stripboard. I created a few versions over the years. Since I was the only one using this contraption I didn’t think of creating a professionally made PCB but that will come in future..

Front of the stripboard
Back of the stripboard

How do I use this?

Basically I solder the SMD package ATtiny to a suitable breakout PCB then I plug the ATtiny breakout PCB into my programmers female headers making sure the orientation is correct and presto all I need to do is upload my firmware. Then I can just remove the PCB and Plug it into my project

Simple and to the point… plus it’s been working for years.

30W LED DAYNIGHT REPAIR

#116 Repairing A 30W Day Night LED Light.

30W LED with added 2.2UF film capacitor in series with Live wire.

Over the past year I’ve had to replace multiple LED lights with Day Night switch sensors in them. after multiple failures I decided to open one up to take a closer look at the cause for failure. Usually the LEDs are running hot and driven very hard from the factory so it’s not uncommon to see many black spots indicating burnt out LEDs in the light.

One way of extending the life of the led light is to reduce the power burning out the LEDs. This can be done easily by inserting an AC film capacitor in series with the live wire before connecting it to the light. this works great for reducing power and thus reducing the brightness of the light but it did not solve my issue.

2.2uf film capacitor helps reduce the power and strain on the LEDs.

In this case my light fails to switch on. when I opened it… The LEDs were still ok now on looking at the day night sensor I determined that the circuitry had failed. Failed how?

Well I had to investigate for a bit but eventually determined that the capacitive dropper was not supplying enough current for the transistor to swich from day to night. Why?

Day night sensor in the 30W light.


Well because the capacitor value had decreased somehow.
seems that low quality film AC capacitors are used and their capacity drops maybe they deteriorate or loose electrolytic liquid I’m not exactly sure but when I replaced the capacitor with a new one everything worked again.

Faulty capacitor should be 220nf.
Replacement and faulty. Both questionable quality…

DIY LORA MODULE

#115 Making A DIY LoRa Module

2x DIY LoRa RFM95W modules with adapter boards.

When taking a closer look at the DIY aspect of lora I wanted to test LoRa peer to peer.. E.G multiple peers to one peer (NOT LoRa WAN) I noticed that the actual radio PCB is difficult to use when going the traditional through hole way… adapter boards do exist but are few and far between at least in SA. you can make your own for manufacture but then rather create your entire product PCB for manufacture.

Even with this drawback I was able to source old adapters for one of the very firs modules the: RFM95W. In South Africa we are mostly using 868Mhz although 433Mhz modules are around I don’t see them being super common in terms of LoRa modules.

The modules I used have a footprint for adding a female SMA connecter for easy antenna connecting.

Parts used:

  • 2x RFM95W 868Mhz LoRa module transceiver
  • 2x 3.3v active buzzer
  • 2x 1 pole dip switch
  • 2x TP4056 module with protection ICs
  • 2x ATtiny404 MCU
  • 2x NCV8163 3.3V LDO
  • 2x SSD1306 128×32 OLED
  • 2x 2pin 2.5mm JST battery connector
  • 2x Headers and jumpers
  • 2x 13400 3.7V 550mAh
  • 2x 10k resistors
  • 2x 220R resistors
  • 2x SOIC to DIP adapter PCB
  • 2x BC547 transistors
  • Some 0.9mm tin plated copper wire
  • Some 0.255mm PVC insulated wire
Soldering made slightly easier…

After checking the PCB I commenced with testing the devices. Unfortunately the test area has largely mountains terrain
the signal works really well and penetrates better through foliage on the mountains terrain but once there is a full on mountain in the way the signal stops. so in this retrospect the devices are better then a radio which was quite interesting but makes sense because data is being sent and uses less bandwidth then interpreting voice audio. Also the error checking for LoRa helps a lot.

Some more pros for the LoRa is that its a transceiver out of the box with RSSI functions included. Also for increased range and/or quality the spreading factor and signal bandwidth can be adjusted.

Although there’s many pros regarding LoRa I still tend to use simple 433.92 RF modules without issue at least in my situation with rural areas under about 3KM at and given point.

So it really becomes more of a cost factor than anything else. Although I’m happy selling a custom LoRa product for compatibility with LoRa WAN or some other requirement with a similar principal. Plain old generic RF is still cool in my book.

Back of one of the PCBs

WACO GP16 REPAIR

#114 Repairing a 2 year old Waco day night switch

Inside the module I noticed the relay has no cover on it and a resistor and MOV were kind of in the way of the relay terminals…

Recently I had a Waco day night switch start to show faulty signs. Namely once dusk came the relay in the device would oscillate very fast for a few seconds effectively switching the light on/off very fast making a racket while stressing the LEDs out.

The relay would finally settle… mostly on the ON setting but sometimes it would settle on the OFF position. Then if you slightly bang the relay it would oscillate and settle on the ON position.

So I removed the switch and notices there was a lot of spider webs and critters close to the external AC connections. I cleaned the outer case and also notices a brown burn mark where the relay was located. This was due to sparks from the constant ON/OFF switching since the relay in this module had no cover.

The PCB was covered in a white powdery substance.

Now technically I did not have to open the module but I wanted to see if anything else was damaged. I opened the module and everything looked good except for the relay contacts which looked a bit beat up but were working ok..

I noticed that a resistor and a varistor were very close to the relay and could technically jam it’s opening/closing capability so I moved then away from the contacts and put everything back together again.

I now tested the module again and voila there is no more oscillations. So the grimy critters on top of the AC leads and the resister MOV combo close to the relay contacts were the likely culprits however my money is on the latter. So on re-installing I added extra tape and some silicon to seal the AC terminal blocks completely. A thin layer of silicone can still easily be removed for further maintenance and/or repair.

Testing the module to make sure the relay is getting the correct voltage etc.

MULTIMETER VOLTAGE ADJUSTMENT

#113 2011 Major Tech MTD84 Voltage Adjustment

The old meter has been through various toolbox banging battles..
Guts of the old multimeter. Very crusty with lots of through hole components and electrolytic capacitors. I replaced a damaged button as well as adjusting the voltage.

I have had the Major Tech MTD84 multimeter for 11 years now. Before I went off to another city far away for my first job my father purchased it for me as a parting gift. It was a low to mid range meter at that time and seems to be currently discontinued.

Now my meter is beat up but it reads just fine for the may DC projects I make however the voltage started to drift and has slowly become less accurate.

Luckily there is a few variable potentiometers on the PCB which can be adjusted to bring the accuracy back up to spec again. They allow for the DC, AC and Temp values to be adjusted no current option from what I could see. Even though I have a few multimeters I still can’t seem to throw this old one away…

Adjustable pots found on the back for easy access. Though they are very crusty…

So in order to set the correct voltage I had to connect a known working accurate multimeter to a battery along with the faulty one. For this I used the aneng8009 which has very good current and voltage accuracy for a cheapie.. Know I slowly adjusted the voltage variable potentiometer until the volts were mostly the same on each meter. (even though the MTD84 only has 2 decimal places it’s still close enough)

Very cool now the old multimeter is not so bad anymore with all it’s through hole resistors and electrolytic capacitors… perhaps next time I’ll have to replace a dry capacitor.

Button replacement success.

RISC-V CH32V003 CHIPS

#112 A look at the Relatively new RISC-V IC

Since I have been using the ATtiny series of IC from microchip using the AVR instruction set I kept an eye out for similar chips.

After a few google searches I found 2 potential competitors:

Puya with their PY32F003F14P6T 32 Bit MCU 32bit ARM ® Cortex ® -M0+ Microcontroller Integrated Circuit

and

WCH (WinChipHead) with their CH32V003F4P6 series based on the 32-bit QingKe RISC-V2A core.

After some research I decided to purchase some of the WCH IC’s for testing. I setup a platform IO development environment and starter using the ch32v003fun open source software development stack for the CH32V003.

CH32V003J4M6
CH32V003A4M6

There is an Arduino core from the official WCH guys but it is still limited and slow for power users.

Once I finished setting up I found it very easy and intuitive to use the ch32v003fun development stack. There is a learning curve but I was able to test all my WCH chips within minutes. I purchased the CH32V003J4M6 4-pin, CH32V003A4M6 16-pin, CH32V003F4P6 20-pin, CH32V203C8T6 48-pin and the QFN20 CH32V003F4U6 20-pin.

CH32V003F4P6
CH32V203C8T6

VALUE PACKED MULTIMETER

#111 An affordable value packed multimeter

Measuring micro amps (I am not affiliated with Jacobs coffee)

While I was looking for a great value for money multimeter I came across the ZOYI ZT109 (Aneng 8009 clone??)

This multimeter is identical to the Aneng 8009 and is in many ways far superior than the older Aneng 8002 and 8008 models. I highly recommend it.

The biggest downside is the miniscule fuses but I was able to solder a standards 50x20mm fuse in a somewhat hacky way…

Also the CAT ratings are super dodgy but good enough for low voltage electronics.

My requirements were:

  • measure µA
  • auto volt measure
  • small no of turns
  • palm sized
  • large display + light
  • decent price
  • easy battery replacement
  • accurate

I can say that this multimeter checked all the boxes but there are some issues… firstly the tiny fuses are painful… I could find some replacements at DIY electronics. However once stock is finished the 3mmx5mm fuse market looks drier then a dead dingo’s donger what an epic fail.

10A fuse soldered diagonally.

Now I know soldering and hacking a different fuse is possible see my image… still it’s a royal pain in the place that’s darker then a coal miners rectum. There’s so much space for a 5mmx20mm fuse. Just why whoever added this tiny fuse must have been a real poepoltjie eh..

Another issue is true RMS but meh I don’t need it that much.

So in conclusion this multimeter is a great compact companion for any low DC voltage electronics hobbyist. I have had mine for a little over 2 years and love it.

I would recommend buying 2 if you can.

12V BATTERY REVIVAL

#110 Reviving an old 100A 12v lead acid battery

After the first zap the battery was around 4V…

Why do some South Africans have to scrape the bottom of the barrel reconditioning old batteries?

Opening themselves up to potential health concerns and pollution of the environment?

Maybe I can explain.

We’ve had load shedding for years now and with the recent shenanigans for almost half a decade it’s got exponentially worse with even the ultra wealthy feeling it a bit.

You’d think these clever a wealthy men would have come up with a solution by now… but it’s seems as if they have either found a way to get comfortable or they just don’t care… As long as they are making money from their diabolical cadres and corrupt hand shakers why should they care? After all they can run their water, washing machine, stove and medical equipment because they either don’t get loadshedding in their public servant mansions or they have installed million rand solar systems using taxpayers monies it’s a win-win “we fail upwards in life”.

All this while endorsing terrorist activities blatantly with no recourse or accountability using South Africa’s past to manipulate the current population into submission for the “election year” the audacity is unbelievable.. but yeah with the 30% pass rate these guys have dumbed us down and are extremely comfortable in the current climate they have designed. They really set an honourable bar to pass. I could go on but this is article is about a battery.

Seems bleak and it’s hard to ignore or be patriotic and loving towards your county and fellow citizens when there’s so much negative energy being pumped in by the guys we are supposed to trust in looking after us.. giving our data to, trusting their banks… No wonder there’s so much crime and hate.. these guys flourish in it like bacteria fueled by glucose eating a tooth. Even when the tooth is rotten the bacteria continuous to eat and will.. if not treated get into the bloodstream infecting the entire body. The bacteria doesn’t take into consideration that in future it will die along with the tooth it just consumes indiscriminately.

With that being said lets get into battery reconditioning.

Recently I got hold of an old 12v lead acid 100A battery. This battery was bought 20 years ago and stored in a corner for a rainy day.

The battery was never charged and never used.

Upon inspection the battery was at around a measly 1.95V.. this did not look good but luckily I have a DC MIG/MMA welder and decided to use the good old crude welding trick on this big boy.

I removed the MIG setup and installed the stick clamp to the + terminal and the ground to the – terminal. see the photo.

Welder settings:

I set the welder volts to about 21V and the amps to around 25A. Make sure you are using a DC welder AC will NOT work.

Make sure you do this outside or in a well ventilated room. It’s VERY important.. battery acid is no joke to organic materials.

First I did 21v at 25A for 5 minutes then let the battery rest for a whole day to observe it.

Once I concluded it seemed like it was fine my formula was 21v at 25A for 5 minutes then a 10 minute cooldown in between.

I did this 6 times and measured the battery in between times.

Times:

cycle: 19.17 V
cycle: 29.50 V
cycle: 310.97 V
cycle: 411.41 V
cycle: 511.75 V
cycle: 611.77 V

Once this was done I let the battery rest for a day.

Battery at 9V

Now comes the patience part… The battery could hold a charge but ever so slightly would drain and it was supper thirsty.

So I setup a dumb charger at 5A and let the battery charge up for a few days checking intermittently.

Next I setup my recondition charger and let it do it’s thing for a week and what do you know the recondition charger reported great values.

However the battery was still thirsty so I switched back to the 5A dumb charger and let it run for another week..

Fast forward about 3 weeks of low current and recondition charging and the battery seems to be doing fine

Holding a rock solid 12.6V and running my LED lights.

So my conclusion is that it is possible to desulfate and recondition a 100A lead acid battery that has never been used. The initial welder zapping was only the start I needed at least 3 weeks after that to “recondition” the battery to a useable state and I still don’t know the long term potential issues.

It really was just a patience game and also don’t do anything like messing around with the acid weights.

I would still like to figure out how to balance acid and water plus all the battery chemistry stuff but for now this welder trick is good enough.

UPDATE:

About a week later the battery began acting up again seems the internal resistance is high and there is a constant draw bringing the battery voltage down.

Overall I can say that this was a temporary solution and at the moment I don’t have all the fancy battery tools or chemistry knowledge to experiment further.

Also though the battery has issues it can still be somewhat used for low voltage applications now. So I guess I’ll view this as a feature instead of a bug 🙂 cheers

Passionate about technology!

Test