Skip to main content

Arduinos embedded within homebrew test gear ~ N6QW Part II

The Mystery Is Solved!

As a recap, in my prior post I was just starting to investigate the use of Arduino's that could be embedded into homebrew test gear. There are many programs floating around and many incredible, and might I add, sophisticated pieces of test equipment that can be built employing the Arduino. Many of these are in Altoids Tins.
 
But I simply wanted to learn how to generate and display data beyond push that there and pull this here. Thus I thought a simple display of a sine wave would be an easy entry for me to learn about how to generate the data and more importantly how to display the data. I should confess that my days of learning about trigonometric functions was 6 decades ago and thus I can claim that many of my brain cells have died along the way so I am missing some critical pieces of information. Which I was.
 
The plot shown in Part I are not sine waves! They look like a sine wave because  I wanted so badly for them to look like a sine. Here is why they are not and I must thank Greg a ham down in VK land for providing the key to unlock the Gordian Knot!
 
First an excerpt from Purple Math: [It all has to do with Degrees, Degrees Minutes Seconds (DMS) and Radians. The real eye opener was Radians.]
 
"Why do we have to learn radians, when we already have perfectly good degrees? Because degrees, technically speaking, are not actually numbers, and we can only do math with numbers. This is somewhat similar to the difference between decimals and percentages. Yes, "83%" has a clear meaning, but to do mathematical computations, you first must convert to the equivalent decimal form, 0.83. "
 
Thus my equations simply plugged in x as a numerical number form 14 to 320 as in sin(x). My failure was to understand that the Arduino only works with radians. Massimo Banzai in his book on Getting Started with Arduino clearly states that the values for sin(x) must be in radians.
 
Greg provided me two lines of code to try in the sketch which actually does this conversion and of course it involves the use of Pi or more specifically Pi/180 which equals 0.01745329252. Making those changes results in a curve that looks like this. Now that is a sine wave! Thanks Greg!
 
 
The next photo fills in the area under the curve with hundreds of red lines.
 
 
Here is the revised code and note these two changes:

const double deg2rad = 0.01745329252;

y = 50*sin(deg2rad*x);

/* From N6QW using the 240 X 320 TFT Color display
This is to test displating graphical information such as you would have with test instrument
*/
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <TFT_ILI9340.h>
#if defined(__SAM3X8E__)
#undef __FlashStringHelper::F(string_literal)
#define F(string_literal) string_literal
#endif
#define __CS 10
#define __DC 9
#define __RST 8
// Color definitions
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0 
#define WHITE   0xFFFF
TFT_ILI9340 tft = TFT_ILI9340(__CS, __DC, __RST);
#include "Wire.h"
int val = 0;
int val1 = 0;
int x = 0;
int y = 0;
int old_val = 0;
int old_val1 = 0;
const double deg2rad = 0.01745329252;
void setup() {
 
 
  tft.begin();
  #if defined(__MK20DX128__) || defined(__MK20DX256__)
  tft.setBitrate(24000000);
  #endif
        tft.fillScreen(0x07F0); // testing switching background colors
        tft.fillScreen(WHITE); // 0x07F0 = lt green, 0xF810 = rose, 0xF840 = rust, 0xF820 = orange
        tft.setRotation(1); // landsacape versus portrait
       
       
        tft.drawLine(14,0,14,230, BLACK); //X axiz
        tft.drawLine (14,230, 300, 230, BLACK); // Y axis
        tft.drawRect( 14, 118, 300, 2, GREEN); //centerline of plot & the 2 is the width of the rectangle --makes it look like a FAT line
   
 
}
void loop()
    
{   
 
 for(int x = 0; x <320; x++){ //sets the range of values to plot along the X axis
 
 
   y =50*sin(deg2rad*x);
   old_val = x ; // for connecting lines to the dots
   old_val1 = y  ; //for connecting lines to the dots
  
  tft.drawRect(x,y +120,  2, 2, MAGENTA); // the y+120 puts the y values in the center of the screen null this out for two tone test pattern
 
   delay(1);
  
 }
 {
 for(int x = 0; x <320; x++){ //sets the range of values to plot along the X axis

   y =50*sin(deg2rad*x);
   old_val = x ; // for connecting lines to the dots
   old_val1 = y  ; //for connecting lines to the dots

 tft.drawLine( x, y + 120,old_val  , 120 - old_val1, RED
 ); // null this out for sine wave
  delay (1);
  }
   
   }
 }
 
This was a great exercise for me because now I learned something (again) that is critical to displaying math data on a TFT screen. Thanks again Greg.
 
73's
Pete N6QW

Popular posts from this blog

January 26, 2024. A simple CW Transceiver/Transmitter

Cruise through the lower part of the ham bands bands and what do you hear? Well, FT-8 and CW. Often you will not hear any SSB stations yet go to the lower part of the bands, and it is a cacophony (I love that word) of bad sounding signals and some high-speed keying. Fast is not so much of the issue as is bad, run together and jerky keying. But none the less our hobby started there.    So, you could crank down your ICOM 7300 and watch the waterfall on CW or you could homebrew a radio. Actually, to do CW right you need more thought up front than you do with a SSB transceiver. Often, I will state that a CW Transceiver is much more difficult to build than a simple SSB rig. I published two articles in QRP Quarterly on CW transceivers and all I got was a yawn so maybe history will repeat itself.  Yawn!   30M CW Transceiver with RIT!   Of interest is that the LO is a Varactor tuned LC oscillator using a NE602. Look closely at the RIT circuit which is only activated on ...

March 31, 2024. Happy Easter to those who celebrate this day.

What a great day to Binge on Chocolate and experience the pain of that filling that has been leaking.  I would be in that category with the leaking filling(s) had I not just spent an amount equivalent to one of the fancy new uptown appliance box transceivers on two filling repairs. Well at least I can binge on the Chocolate bunnies without fear of pain. Regrettably everything appears to have jumped in price including the price of parts. Well not so much the parts as the shipping costs.  That notably is seen in the eBay treasures. I spotted a nice heathkit DX-20 for about $50 and the shipping was $65. Likely it is a twofer with part being a way to in effect charge a higher price by inflating the shipping and in part by increased shipping costs. Shipping with insurance across the US was about $150 for this jewel and that was three years ago. 6AM on the Left Coast ~ 20M Easter Sunday! My only hope is the cost of Chocolate Bunnies remains steady although a pound of See's Candies f...

August 30, 2024. A PNP 20M SSB Transceiver

Shown below is the Block Diagram for the 20M PNP SSB Transceiver steered in the  Transmit Mode . The components shown in the dotted block are relay steered so that the block module is single pass and amplifies in a single direction. The Block diagram show steered in Transmit.  Essentially the steering process works so that the IF Module input follows the Balanced Modulator on Transmit and then the input side follows the Receive Mixer on Receive. All done with some relays and a bit of RG174U coax. For those who count things in detail, this block diagram is not unlike what was used for the PSSST Transceiver which can be found on my website . Yes, a warmed over P3ST only using PNP devices. TYGNYBNT. 73's Pete N6QW