Category Archives: Electronics

328P PIN CHANGE INTERRUPTS

#120 ATMEGA 328P Pin Change Interrupts

The 328P has 3 ports B, C, D you will need to know the basics of how they work to before reading this.

The 328P only has 2x external interrupts however there are also 23x pin change interrupts and I will be focusing on the latter for now.

INTx (external interrupts) can report events under four situations: low, any, falling, rising. PCINTx (pin change interrupts) can report events on only one situation: any, which is basically a change in the pin so we can categorise the 23x as change interrupts only.

Using these pin change interrupts are surprisingly easy but require a few steps. However once they are configured code size and complexity can be reduced significantly. Also never forget you paid for the IC and it’s hardware peripherals.. so USE THEM.

You can run a loop checking button states with multiple variables including timing and state variables etc. or…. you can run a similar reduced loop with the use of the pin change interrupts making your life so much easier while not compromising much resources.

So to get started you need to follow 3 steps:

  1. Turn the pin change interrupts on
  2. Choose the pins to interrupt
  3. Use the ISR for the chosen pins

STEP 1:

To turn on the pin change interrupts you will need to use the PCICR register.

Writing 1 to bit 0 will turn on the portB (PCINT0 – PCINT7)
Writing 1 to bit 1 will turn on the portC (PCINT8 – PCINT14)
Writing 1 to bit 2 will turn on the portD (PCINT16 – PCINT23)
From bit 3 onwards (from right to left) bits are ignored.

STEP 2:

Now you need to choose which pins you want to interrupt.
You will need to use a mask and the 328P has 3 masks: PCMSK0, PCMSK1, and PCMSK2
These masks are set in the same way as the PCICR register was set.

STEP 3:

Now you need to use the correct ISR for the chosen pins.
make sure to keep the ISR as fast as possible and use as little code as possible in the ISR.
Also if you have any variables in the ISR make sure to make them volatile. This tells the compiler that it could change at any time and to reload it each time instead of optimizing it.

Full Super Simple Example:

Links:

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.

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.

COMMON RF MODULES IN SOUTH AFRICA

#109 Types of 433Mhz RF modules in ZA

FS1000A module at 5v no attenuator just using antenna.

Recently I have been using wireless technologies for a few projects.

While looking for a balance between price, functionality and disposability I decided to focus on the 433Mhz RF modules.

These use a free spectrum and have been around for a long time. There’s is a few different types and kinds, with LORA being kind of new and better in almost every way but this comes at a high price compared with the standard 433 RF modules.

So I purchased a few receivers and transmitters from electronics suppliers located in South Africa.

All my tests consisted of running the 4 receivers at 5v and a single 17.3cm straight LAN cable strand as an antenna. The signal sent was a 23bit ASK signal with a pulse length of 1200ms.

All 3 transmitters were tested at 3.3v with a single 17.3cm straight LAN cable strand as an antenna.

The transmitters testes were the FS1000A, CYT1 and the WL102-341.

The crude module actually has more power and range at 5V but I am using them at 3.3v for super low power applications so In this case the module loses.

The Tests were done on farm land.

All transmitters could trigger the receivers at 400m line of sight but only a few could penetrate foliage and a galvanised steel shed.

I only needed MAX 400m which is why I stopped there but some sources claim up to 600m – 800m + for these superheterodyne modules. Not as good as LoRa but for the price what reason do I need not to use them?

*Sidenote Using RF or LoRa in conjunction with a 2.4G Wifi module like the ESP32 or even 3G/4G modules can create multi dimensional divers systems. where we are leveraging the long range and penetration + power output of 433Mhz and 868Mhz but also allowing packets of data to connect over the internet to be stored on a server for data analysis and the creation of graphs to make the data more visually appealing.

Currently I do have some pilot devices and hope to one day make some good quality sensors in 3 different tiers:

  1. Cheap and disposable sensors
  2. Affordable long term sensors
  3. High end sensors

These will be focused on use within rural outdoor areas and I will have a version with Gerber files and schematics etc. available for anyone to download and make for themselves. However the more refined version with a nice enclosure and style will be sold commercially since I do want to be paid for my work.

Back to the modules..

The transmitters that support 5v could penetrate a little better sometimes.

The position of the transmitter/receiver could also greatly affect the received signal especially at range.

Also during summer and during rain the signal was worse with the foliage and water most likely absorbing and/or reflecting the signal

All receivers were superheterodyne with a crystal and I did not use any counterpoise though it would help in some circumstances it makes the receiver unpractical and large.

From worst to best

Some people may wonder why I am using these modules instead of the fashionable LoRa modules. This is simply due to cost and availability.

Designing a good circuit cost time and money. Inserting said circuit into an extremely hostile environment like for example.. rural South Africa is an even more costly exercise

I have had devices damaged by the sun, damaged by water, damaged by ants, damaged by cows, damaged by some kind of rabid animal (assuming jackal) The list goes on.

AND I have not even mentioned the human element… devices damaged by criminals some even STOLEN… for what? You telling me that criminal is sitting in the bush conspiring to reverse engineer my simple circuit and RF protocol and some how will be able to defeat Microchips code protection? I highly doubt it but it is possible…

So now I hope you can understand why these cheap modules do work and are very useful + inexpensive for my purposes.

I also have LoRa versions but for now I only use those when distance and extreme sensitivity is needed.

IP5306 MH-CD42 HEARTBEAT

#108 Low current standby fix for IP5306 MH-CD42

BC547B NPN Transistor
IP5306 Module

Over the past few years I have been using the IP5306 chip and specifically the module shown in the image above.

The module is a great all in one solution for LiPo battery powered projects: charge, discharge, protection, 5v step up etc.

That being said there is 1 massively annoying caveat:

If the load current drops below 45mA during 32 seconds, the IP5306 will go into standby mode…

For low power battery operations this is simply unacceptable.. and I will not simply increase the current draw to keep it on.

There is an I2C version which allows us to change a few settings like standby mode in the IP5306 but for this fix I will focus on the “dumb version”.

Solution

An easy solution is to create a simple heartbeat circuit.

Since there is a button which will prevent the IC from going into standby mode, if pressed it will reset the *32 seconds 45mA* timer.

The module I have also has a solder pad where I can easily solder a wire to control this button via an MCU.

Using a *BC457 NPN* transistor we can create a simple switch to “press the button” at least once within the 32 seconds within a loop.

In this way we can constantly keep the module powered.

Parts

– NPN transistor (I used the BC547B)

– resistor (1k is fine)

– hookup wires

Connections

The Base connects to the resistor and then your MCU pin of choice.

Emitter gets connected to GND.

Collector gets solddered to the button pad.

Code

Once everything is soldered and double checked you can then add the code for the heartbeat.

In this case I use the millis() function and a simple repeating timer all written in a sketch .ino