I have the pi hat built and the filter aligned, its now just a matter of waiting on the heat sink goop to go off so that I can put it together and fire it up and see what it can do.
The boards I designed and ordered have arrived today, so i hastily threw together the Pi board to make sure I did not screw anything up. Everything is legit and I no longer have the stupid low power symbol coming on all the time. Everything is now powered off a 5A psu and even with the LCD, wireless keyboard and mouse and hard drive hanging off it, its happy as. No more losses in crappy USB cables. The other thing on the board is a bandpass filter. So i can play with some of the rf generation techniques that you can do with the pi. More on that later.
So i have been working on the talkie walkie and this time around, I have done something totally different. I am using a different SI5351A module and a different LCD screen. And here in lies the problem. To many changes at once and none of them wanted to work out the bag. Firstly I normally use a 16×2 lcd and I2C backpack. Cannot fit that in the case so its an 8×2 and regular parallel connection. Second thing is I used the Eat A Fruit style si5351, where i normally used the ones from QRP Labs and the drama there is the different crystals used and the fact that I was still using a very old version of the SI5351 library. So i upgraded it, and broke all my code, fixed all my code and now it actually works. Oh one last thing about the LCD, seems there are 2 different types of 8×2’s one with 16 pins and one with 14 pins. I think i smoked the 16 pin one, before my PSU went into current limiting. Not sure what the deal is, but anyway, after much messing around, this part of the project is actually working.
So i am on the 4th iteration of this board and I have just about got it right. Kind of sad that its taken me so many goes to get this right, but what can i say. LOL. There is still one bodge wire on the backside of the board because I somehow left off a trace joining one row of push buttons off the 5v line. I am also not sure about the 5V regulator, its running very hot and it should not because its should only have about 300ma running thought it and there is no short to ground anywhere i can find, to explain it running so hot. By hot im guessing its hitting over 60 Deg C as its painful to touch.
Anyway, back to the point of this post. I have gotten back into coding things up and am making inroads. It mostly works now. Pressing the mode button will cycle through LSB, USB and CW. The band button will cycle through 80, 40, 20 and 15m the 4 bands that this radio will support, selecting the appropriate filter banks for both Low Pass and Band Pass filter boards as well as change the IF filter to a narrow CW filter in that mode.
The logger button will put it into logging mode, which along with a keyboard will make log entries and save them to SD Card in ADIF format. The logger is loosely based on my old arduino logger code which can be found in the menu bar above. Though, the code that is going into this is much more refined and polished and fixes most of the clunkyness that was in the earlier versions. I am a much improved programmer now than i was a few years ago when i wrote that code.
The VFO button will exit the logger and put the radio back into VFO mode. I still need to add in a couple more push buttons, one to change the Attenuation setting and the final one to allow changing the TX RX offset. At the moment it is hard coded for a 600hz offset for CW operation, but, i am going to make that variable for real split operation in SSB as well.
Anyway, that is where I am at with this at the moment. When i get things closer to being done, I will probably make a video of all the functions in action to put on youtube. But that is likely to be a couple of weeks away yet. Lots of work to be done in the mean time.
So while working on the code for the control board part of the receiver project, I came across an interesting conflict. The keyboard and the rotary encoder did not want to play nice with each other than and the compiler was spitting out an error about a vector conflict. Keyboard worked fine by itself and the rotary encoder worked fine by itself but put the code for both into the once program and the compiler went bonkers.
So i set about learning everything i could about interrupts on the Mega 2560. And this was where the fun began and i ended up going down a rabbit hole from which i was lucky to escape. Well i did survive and i did actually learn about interrupt vectors, pin change interrupts and external interrupts and a little about library conflicts along the way.
So this is not really a tutorial on using interrupts or the differences between pin change or external, but rather a rant about the 2 hours I spent last night reading and trying to understand what I had done and why there was a conflict. In the end it was because i programmed the rotary encoder to use pin change interrupts and it was the library i used that was in conflict with the keyboard library. I did not know that was what i had done, i had assumed that using pins 18 and 19 on the mega, being the external interrupt pins just worked in one way only. But no no no, they can be either external or pin change interrupts depending on how you code for it. Yes, a very rookie mistake.
So after finally working out what I had done wrong, or in reality why the libraries were in conflict, i changed 2 lines of code and had the rotary encoder working as it should be with the keyboard and everyone is happy. So at the moment I have a working keyboard, rotary encoder and VFO and now that my work week is done, I will hit the code hard tomorrow and make some real inroads into getting features in there that I want in my radio. Its not going to be as pretty as the Nextion vfo codes that are floating about the internet, but its going to be all mine. And sometimes, its good to know you have rolled your own and it does what you want.
The 4th project, while no where near complete is a capacitance touch iambic keyer. Well, its not really a project but a proof of concept, and it kind of works ok and is going to be something that i develop more as i have time. The micro is an ESP32 which has 10 capacitance touch sensors built in. I used a modified version the the morse library that’s available on the net for the timing and keying and connected a peizo buzzer to act as side tone. To key a radio all you have to do is set a digital pin high and pull it low when you want to key the transmitter. And as the code takes care of the timing, you could use this on any transmitter that uses a straight key and pulls to ground on keying. Most of them LOL.
Easter has been quite productive for me, this is project 3 out of 4 is rechargeable battery powered arduino clock with temp and humidity function. Nothing fancy, but highly practical and accurate. The code is a mess, but i have shared it down below, i know someone out there can clean it up and make it more efficient, but for now, its working and doing what it needs so, show the temp and the time.
Hardware is kind of inefficient for this task, arduino mega and 3.2″lcd are both overkill and power hungry. There is an RTC and temp humidity sensor, 18650 battery, boost and charge controller. As usual i did a really crap job at cutting the hole out, I really should have done this in the CNC, I might even make a how to video on how i do that later today.
#define DHTPIN A0
#define DHTTYPE DHT22
TFT_HX8357 tft = TFT_HX8357();
DHT dht(DHTPIN, DHTTYPE);
const long interval = 60000;
unsigned long previousMillis = 0;
bool Century = false;
unsigned long currentMillis = millis(); //Do stuff here every 60 seconds
if (currentMillis - previousMillis >= interval)
previousMillis = currentMillis;
tft.setCursor(10, 10, 1);
if (L_Date < 10)
if (L_Month < 10)
tft.setCursor(30, 100, 7);
if (L_Hour < 10)
if (L_Minute < 10)
tft.setCursor(20, 280, 4);
tft.setCursor(260, 280, 4);
humid = dht.readHumidity();
temp = dht.readTemperature();
L_Hour = Clock.getHour(h12, PM);
L_Minute = Clock.getMinute();
AmPm = "pm";
AmPm = "am";
L_Date = Clock.getDate();
L_Month = Clock.getMonth(Century);
L_Year = Clock.getYear();
L_Year += 2000;
DAW = Clock.getDoW();
DayOfWeek = "Sunday";
DayOfWeek = "Monday";
DayOfWeek = "Tuesday";
DayOfWeek = "Wednesday";
DayOfWeek = "Thursday";
DayOfWeek = "Friday";
DayOfWeek = "Saturday";
DayOfWeek = "ERROR";
What a day, what should have been a simple job, for a simple man turned out to be an all day endeavor to overcome a litany of problems. In other words it was a fucking disaster. LOL but hey, i got there in the end and now the weather station is about to be put back out in the weather to do its thing. So lets see, what went wrong, well the sensor i was using was different from the previous one, so i needed a different library, then the device address was different to what was in the code, then the micro controller I was using shit itself and died, then i had problems with my computer not recognizing USB devices, then the board library was being a pain in the arse and needed upgrading, and finally there was this problem with crashing because dumb arse here created an array and was causing a stack overflow because the array had no size.
Well, after all that, I now have a pile of crap on my bench destined for the bin and a nice space on my bench where the weather station used to be. This time i have spares and should be able to fix things if something breaks without having to wait months. Its been down for 5 weeks, and thankfully its back up and running. For now, touch wood. LOL. Now I need to create a page that will query the database and display the data.