diff --git a/Hardware/Block Diagram.vsd b/Hardware/Block Diagram.vsd new file mode 100644 index 0000000..a470d03 Binary files /dev/null and b/Hardware/Block Diagram.vsd differ diff --git a/Hardware/PSDR BOM.xlsx b/Hardware/PSDR BOM.xlsx deleted file mode 100644 index 430f134..0000000 Binary files a/Hardware/PSDR BOM.xlsx and /dev/null differ diff --git a/Hardware/PSDR.sch b/Hardware/PSDR.sch index 1784859..8c0ac04 100644 Binary files a/Hardware/PSDR.sch and b/Hardware/PSDR.sch differ diff --git a/Hardware/PSDR1_BOM.xlsx b/Hardware/PSDR1_BOM.xlsx new file mode 100644 index 0000000..16d8ba5 Binary files /dev/null and b/Hardware/PSDR1_BOM.xlsx differ diff --git a/Source/include/images.h b/Source/include/images.h index c8f73f0..041aec5 100644 --- a/Source/include/images.h +++ b/Source/include/images.h @@ -29,3 +29,4 @@ extern const unsigned short bitmapZero[]; extern const unsigned short bitmapIronGradient[]; extern const unsigned short bitmapWebSdrGradient[]; extern const unsigned short bitmapFilter[]; +extern const unsigned short bitmapHadLogo[]; diff --git a/Source/src/images.c b/Source/src/images.c index 11a7423..2b9de41 100644 --- a/Source/src/images.c +++ b/Source/src/images.c @@ -2,6 +2,7 @@ //This site seems to generate output that is correct // http://www.henningkarlsen.com/electronics/t_imageconverter565.php +//BUT it will round down to the nearest 16 words, so you need to pad the image, and then delete the excess!! //86x20 const const unsigned short psdrLogo[]={ @@ -517,3 +518,137 @@ const unsigned short bitmapFilter[]={ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0230 (560) pixels 0xFFFF, 0x7BEF, 0x0000, 0x0000 }; + +//45x46 +const unsigned short bitmapHadLogo[]={ + 0x0000, 0x0000, 0x0000, 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0010 (16) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0020 (32) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xD69A, 0xFFFF, 0xF7BE, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0030 (48) pixels + 0x0000, 0x0000, 0x52AA, 0xFFFF, 0xFFFF, 0xF79E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0040 (64) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0050 (80) pixels + 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xE71C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0060 (96) pixels + 0x4A49, 0xFFFF, 0xFFFF, 0xB596, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0070 (112) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x10A2, 0xFFFF, 0xFFFF, // 0x0080 (128) pixels + 0xCE79, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xFFFF, 0xFFFF, // 0x0090 (144) pixels + 0xFFFF, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00A0 (160) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFFF, 0xAD75, 0x0000, 0x0000, // 0x00B0 (176) pixels + 0x0000, 0x0000, 0x0000, 0x0841, 0x7BEF, 0x9CF3, 0x0000, 0x0000, 0x0000, 0x2945, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x3186, 0x0000, // 0x00C0 (192) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00D0 (208) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDD7, 0x0000, 0x0000, 0x0000, 0x0841, // 0x00E0 (224) pixels + 0xFFFF, 0x630C, 0xFFFF, 0x8C51, 0x0000, 0x2945, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00F0 (240) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0100 (256) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDD7, 0x0000, 0x0841, 0xFFDF, 0xFFFF, 0x18C3, 0xFFFF, // 0x0110 (272) pixels + 0xFFFF, 0xA514, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0120 (288) pixels + 0x18C3, 0x630C, 0xA514, 0xCE59, 0xDEFB, 0xD6BA, 0xBDF7, 0x8C51, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0130 (304) pixels + 0x39E7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDD7, 0xE73C, 0xFFFF, 0xBDD7, 0x0000, 0xA514, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A69, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0150 (336) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x10A2, 0x0000, 0x0000, 0x0000, 0x39E7, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x18E3, 0x0000, 0x0000, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0170 (368) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD6BA, 0x0000, 0x18C3, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9492, 0x0000, 0x4228, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0190 (400) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x2965, 0x9492, 0xA534, 0xB596, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) pixels + 0xFFFF, 0x8430, 0x52AA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xAD55, 0x528A, 0x2945, 0x0841, 0x0841, 0x2124, 0x5AEB, 0xAD55, // 0x01B0 (432) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD6BA, 0x2104, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x94B2, 0xAD55, 0x6B6D, 0x0000, // 0x01C0 (448) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0x8410, 0x52AA, 0xFFFF, // 0x01D0 (464) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0x738E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BCF, 0xFFFF, // 0x01E0 (480) pixels + 0xFFFF, 0xFFFF, 0xE73C, 0x18C3, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01F0 (496) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xCE59, 0x31A6, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x0861, // 0x0200 (512) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0x39E7, 0x31A6, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xDEFB, 0xFFFF, 0xFFFF, // 0x0210 (528) pixels + 0xD69A, 0x2945, 0xFFFF, 0xFFFF, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8430, 0x2965, 0xF79E, 0xFFFF, 0xFFFF, 0xB5B6, 0x0000, 0x0000, 0x0000, 0x1082, 0x9CF3, // 0x0230 (560) pixels + 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x5AEB, 0x0000, 0x0000, 0x0000, 0x0000, 0xCE59, 0xFFFF, 0xFFFF, 0x9492, 0x632C, // 0x0240 (576) pixels + 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0250 (592) pixels + 0x0000, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x632C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0260 (608) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD6BA, 0x0861, 0x0000, 0x0000, 0x0000, 0xE71C, 0xFFFF, 0xFFFF, 0x2124, 0x0000, 0x0000, 0x0000, // 0x0270 (624) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, // 0x0280 (640) pixels + 0xFFFF, 0xFFFF, 0xF7BE, 0x0841, 0x0000, 0x0000, 0x7BCF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0290 (656) pixels + 0xFFFF, 0xFFFF, 0xF79E, 0x1082, 0x0000, 0x0000, 0x2104, 0xFFFF, 0xFFFF, 0xCE79, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x02A0 (672) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFFF, 0x4A69, // 0x02B0 (688) pixels + 0x0000, 0x0000, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) pixels + 0xDEDB, 0x0000, 0x0000, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x02D0 (720) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xEF5D, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0xF79E, // 0x02E0 (736) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x0000, // 0x02F0 (752) pixels + 0x0000, 0x0000, 0xF7BE, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0300 (768) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0xFFFF, 0xFFFF, 0x39E7, 0x0000, 0x0000, 0x6B6D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x0020, 0x0000, 0x0000, 0x8430, // 0x0320 (800) pixels + 0xFFFF, 0xC638, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0330 (816) pixels + 0x0000, 0x0000, 0x4A49, 0xFFFF, 0xEF5D, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4A69, 0x0000, 0x0000, 0x2104, 0xFFFF, 0xF7BE, 0x0000, // 0x0350 (848) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x73AE, // 0x0360 (864) pixels + 0xFFFF, 0xA534, 0x0000, 0x0000, 0x10A2, 0xFFFF, 0xFFFF, 0xFFFF, 0xA514, 0x2124, 0x39C7, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0370 (880) pixels + 0x7BEF, 0x18E3, 0x4A49, 0xEF7D, 0xFFFF, 0xFFFF, 0xA514, 0x0000, 0x0000, 0x0000, 0xEF7D, 0xFFFF, 0x0861, 0x0000, 0x0000, 0x0000, // 0x0380 (896) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0x6B6D, 0x0000, // 0x0390 (912) pixels + 0x0000, 0x2965, 0xFFFF, 0xFFFF, 0xAD75, 0x0000, 0x0000, 0x0000, 0x0000, 0xE71C, 0xFFFF, 0xFFFF, 0x6B4D, 0x0000, 0x0000, 0x0000, // 0x03A0 (928) pixels + 0x18E3, 0xFFFF, 0xFFFF, 0xD69A, 0x0000, 0x0000, 0x0000, 0xCE59, 0xFFFF, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x03B0 (944) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xAD55, 0xFFFF, 0x4208, 0x0000, 0x0000, 0x39E7, 0xFFFF, // 0x03C0 (960) pixels + 0xFFFF, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0xE71C, 0xFFFF, 0xFFFF, 0x6B4D, 0x0000, 0x0000, 0x0000, 0x0000, 0xBDF7, 0xFFFF, // 0x03D0 (976) pixels + 0xEF5D, 0x0000, 0x0000, 0x0000, 0xB596, 0xFFFF, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x03E0 (992) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xB5B6, 0xFFFF, 0x31A6, 0x0000, 0x0000, 0x39C7, 0xFFFF, 0xFFFF, 0x2124, 0x0000, // 0x03F0 (1008) pixels + 0x0000, 0x4208, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8C71, 0x10A2, 0x0000, 0x0000, 0xBDD7, 0xFFFF, 0xE73C, 0x0000, 0x0000, // 0x0400 (1024) pixels + 0x0000, 0xAD55, 0xFFFF, 0x31A6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0410 (1040) pixels + 0x0000, 0x0000, 0x0000, 0xB596, 0xFFFF, 0x3186, 0x0000, 0x0000, 0x2124, 0xFFFF, 0xFFFF, 0x9492, 0x0000, 0xC618, 0xFFFF, 0xFFFF, // 0x0420 (1056) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4228, 0x0000, 0xF7BE, 0xFFFF, 0xC618, 0x0000, 0x0000, 0x0000, 0xAD75, 0xFFFF, // 0x0430 (1072) pixels + 0x31A6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0440 (1088) pixels + 0xAD75, 0xFFFF, 0x4228, 0x0000, 0x0000, 0x0000, 0xF79E, 0xFFFF, 0xFFFF, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0xE71C, // 0x0450 (1104) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xD6BA, 0xD6BA, 0xFFFF, 0xFFFF, 0x7BEF, 0x0000, 0x0000, 0x0000, 0xBDF7, 0xFFFF, 0x3186, 0x0000, 0x0000, // 0x0460 (1120) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xA514, 0xFFFF, 0x6B4D, // 0x0470 (1136) pixels + 0x0000, 0x0000, 0x0000, 0xAD55, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x8430, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0480 (1152) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2945, 0x0000, 0x0000, 0x0000, 0xD6BA, 0xFFFF, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0490 (1168) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0x9CF3, 0x0000, 0x0000, 0x0000, // 0x04A0 (1184) pixels + 0x2945, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x4228, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04B0 (1200) pixels + 0xCE59, 0x0000, 0x0000, 0x0000, 0x0000, 0xF7BE, 0xFFFF, 0x18E3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04C0 (1216) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BEF, 0xFFFF, 0xCE79, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, // 0x04D0 (1232) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xF7BE, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x18E3, 0x0000, 0x0000, // 0x04E0 (1248) pixels + 0x0000, 0x18C3, 0xFFFF, 0xFFFF, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04F0 (1264) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x632C, 0xFFFF, 0xFFFF, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0500 (1280) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B6D, 0x0000, 0x0000, 0x0000, 0x0000, 0x5AEB, 0xFFFF, // 0x0510 (1296) pixels + 0xFFDF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0520 (1312) pixels + 0x0000, 0x4A49, 0xFFFF, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0530 (1328) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B6D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xD69A, 0xFFFF, 0xF7BE, 0x0000, 0x0000, // 0x0540 (1344) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x31A6, 0xFFFF, // 0x0550 (1360) pixels + 0xFFFF, 0xFFFF, 0xB596, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xFFFF, 0xEF5D, 0xFFFF, // 0x0560 (1376) pixels + 0xFFFF, 0xFFFF, 0x1082, 0x0000, 0x0000, 0x0000, 0x2965, 0xEF5D, 0xFFFF, 0xFFFF, 0xE73C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0570 (1392) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0580 (1408) pixels + 0xE73C, 0x39C7, 0x0000, 0x0000, 0x632C, 0xF79E, 0xFFFF, 0xAD75, 0xBDF7, 0xFFFF, 0xFFFF, 0x630C, 0xFFFF, 0xFFDF, 0xDEDB, 0x0020, // 0x0590 (1424) pixels + 0x0000, 0x0841, 0x738E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05A0 (1440) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, // 0x05B0 (1456) pixels + 0xB5B6, 0x6B4D, 0x39E7, 0x39E7, 0x10A2, 0x18C3, 0x5ACB, 0x4A69, 0x0000, 0x3186, 0x39E7, 0x4A49, 0x8410, 0xCE59, 0xFFDF, 0xFFFF, // 0x05C0 (1472) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05D0 (1488) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2945, 0x9492, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05E0 (1504) pixels + 0xFFFF, 0xFFFF, 0xF7BE, 0xE71C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, // 0x05F0 (1520) pixels + 0x4228, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0600 (1536) pixels + 0x0000, 0x0000, 0xCE79, 0xFFFF, 0x5ACB, 0x52AA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x8C71, 0x630C, 0x4A69, 0x4228, // 0x0610 (1552) pixels + 0x4A49, 0x4228, 0x4A49, 0x52AA, 0x738E, 0xBDD7, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD69A, 0x2104, 0xB5B6, 0xFFFF, 0x5AEB, // 0x0620 (1568) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xCE59, 0xFFFF, // 0x0630 (1584) pixels + 0xFFFF, 0xFFFF, 0x9492, 0x2965, 0xE73C, 0xFFFF, 0xFFFF, 0xF7BE, 0x18C3, 0x9CD3, 0xCE59, 0xC618, 0xE73C, 0xD6BA, 0xEF7D, 0xC618, // 0x0640 (1600) pixels + 0xD6BA, 0xB5B6, 0x52AA, 0x5AEB, 0xFFFF, 0xFFFF, 0xFFFF, 0x9CF3, 0x2124, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0x5AEB, 0x0000, 0x0000, // 0x0650 (1616) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xDEDB, 0xE73C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0660 (1632) pixels + 0xDEDB, 0x1082, 0x4228, 0x7BEF, 0x94B2, 0x4A49, 0xFFFF, 0xFFFF, 0x8C71, 0xDEFB, 0x7BCF, 0xF79E, 0x632C, 0xFFFF, 0xFFFF, 0xEF5D, // 0x0670 (1648) pixels + 0x31A6, 0xA534, 0x630C, 0x2124, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0xE73C, 0xC638, 0x4228, 0x0000, // 0x0680 (1664) pixels + 0x0000, 0x0000, 0x1082, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8C51, 0x0000, 0x0000, // 0x0690 (1680) pixels + 0x0000, 0x0000, 0x39E7, 0xFFFF, 0xFFFF, 0xA514, 0xE73C, 0x9492, 0xFFDF, 0x7BEF, 0xFFFF, 0xFFFF, 0xF7BE, 0x0000, 0x0000, 0x0000, // 0x06A0 (1696) pixels + 0x0000, 0x18C3, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8C71, 0x0000, 0x0000, 0xD6BA, // 0x06B0 (1712) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, // 0x06C0 (1728) pixels + 0x630C, 0xA514, 0xCE59, 0xE71C, 0xE71C, 0xE73C, 0xDEDB, 0xC618, 0x9492, 0x4228, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, // 0x06D0 (1744) pixels + 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4A49, 0x31A6, 0xFFFF, 0xFFFF, 0x4A49, 0xD6BA, // 0x06E0 (1760) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06F0 (1776) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xEF5D, 0xFFFF, // 0x0700 (1792) pixels + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, 0xAD55, 0xFFFF, 0xDEDB, 0x6B6D, 0xFFFF, 0x4208, 0x0000, 0x0000, 0xDEFB, 0xFFFF, 0xFFFF, // 0x0710 (1808) pixels + 0xFFFF, 0xFFFF, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0720 (1824) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xB596, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0730 (1840) pixels + 0x738E, 0x0000, 0x0000, 0xBDD7, 0xFFFF, 0x6B4D, 0x528A, 0x0000, 0x0000, 0x0000, 0x0000, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0x2945, // 0x0740 (1856) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0750 (1872) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xBDD7, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B6D, 0x0000, 0x0000, 0x0000, // 0x0760 (1888) pixels + 0x0000, 0xBDF7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF7BE, 0xFFFF, 0xFFFF, 0x0020, 0x0000, 0x0000, 0x0000, // 0x0770 (1904) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0780 (1920) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B6D, 0xFFFF, 0xFFFF, 0x8C51, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0790 (1936) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFFF, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x07A0 (1952) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x07B0 (1968) pixels + 0x0000, 0x0000, 0x0000, 0xF7BE, 0xFFFF, 0xFFDF, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x07C0 (1984) pixels + 0x0000, 0xA534, 0xFFFF, 0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x07D0 (2000) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x07E0 (2016) pixels + 0x2124, 0xF7BE, 0xFFFF, 0xFFFF, 0x31A6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5AEB, 0xE73C, 0xAD75, // 0x07F0 (2032) pixels + 0x39E7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0800 (2048) pixels + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x73AE, // 0x0810 (2064) pixels + 0xCE59, 0xCE79, 0x0841, 0x0000, 0x0000, 0x0000 +}; diff --git a/Source/src/main.c b/Source/src/main.c index be3ac4a..7a79c12 100644 --- a/Source/src/main.c +++ b/Source/src/main.c @@ -52,7 +52,12 @@ void dac2SetValue(uint16_t value); __IO long long millis = 0; -float gain = 1; +float afGain = 1.0; +float afGainLast = 2.0; +float afGainStep = 0.1; +float afGainMax = 25.0; + +uint16_t maxAmplitude = 0; float fftFilterCoeficient[FFT_BUFFER_SIZE]; float filterTemp[FFT_BUFFER_SIZE]; @@ -61,7 +66,7 @@ uint16_t filterKernelLength = 100; //what's a good value? How does it relate to uint16_t menuPos = 0; uint16_t menuEncoderTicks = 0; uint16_t menuLastPos = 1; -uint16_t menuCount = 10; +uint16_t menuCount = 11; uint32_t frequencyDialMultiplier = 1; long vfoAFrequency = 7236400; @@ -78,6 +83,7 @@ uint8_t modeLast = 2; float agcLevel = 0; float agcScale = 160; //Higher is lower volume.. for now + int ifShift = 0; float fftMaxMaxMax = 20; @@ -343,6 +349,9 @@ int isFwd; samplesA[sampleIndex*2] = ((uhADCxConvertedValue - 2048)/4096.0); // - 2048; samplesA[sampleIndex*2 + 1] = ((uhADCxConvertedValue2 - 2048)/4096.0); // - 2048;//0.0; + if(uhADCxConvertedValue > maxAmplitude) maxAmplitude = uhADCxConvertedValue; + if(uhADCxConvertedValue2 > maxAmplitude) maxAmplitude = uhADCxConvertedValue2; + if(samplesB[sampleIndex*2] > agcLevel) agcLevel = samplesB[sampleIndex*2]; if(samplesB[sampleIndex*2+1] > agcLevel) agcLevel = samplesB[sampleIndex*2+1]; // if(sampleIndex < filterKernelLength) @@ -352,8 +361,8 @@ int isFwd; // dac2SetValue(samplesB[sampleIndex*2+1] + samplesA[(FFT_SIZE - filterKernelLength) // + sampleIndex * 2] /*/ (agcLevel * agcScale)*/ * 4096 * gain + 2048); // } else { - dac1SetValue(samplesB[sampleIndex*2] /*/ (agcLevel * agcScale)*/ * 4096 * gain + 2048); - dac2SetValue(samplesB[sampleIndex*2+1] /*/ (agcLevel * agcScale)*/ * 4096 * gain + 2048); + dac1SetValue(samplesB[sampleIndex*2] /*/ (agcLevel * agcScale)*/ * 4096 * afGain + 2048); + dac2SetValue(samplesB[sampleIndex*2+1] /*/ (agcLevel * agcScale)*/ * 4096 * afGain + 2048); // } if(sampleIndex > FFT_SIZE - filterKernelLength - 1) @@ -369,6 +378,9 @@ int isFwd; samplesB[sampleIndex*2] = ((uhADCxConvertedValue - 2048)/4096.0); // - 2048; samplesB[sampleIndex*2 + 1] = ((uhADCxConvertedValue2 - 2048)/4096.0); // - 2048;//0.0; + if(uhADCxConvertedValue > maxAmplitude) maxAmplitude = uhADCxConvertedValue; + if(uhADCxConvertedValue2 > maxAmplitude) maxAmplitude = uhADCxConvertedValue2; + if(samplesC[sampleIndex*2] > agcLevel) agcLevel =samplesC[sampleIndex*2]; if(samplesC[sampleIndex*2+1] > agcLevel) agcLevel = samplesC[sampleIndex*2+1]; // if(sampleIndex < filterKernelLength) @@ -378,8 +390,8 @@ int isFwd; // dac2SetValue(samplesC[sampleIndex*2+1] + samplesB[(FFT_SIZE - filterKernelLength) // + sampleIndex * 2] /*/ (agcLevel * agcScale)*/ * 4096 * gain + 2048); // } else { - dac1SetValue(samplesC[sampleIndex*2] /*/ (agcLevel * agcScale)*/ * 4096 * gain + 2048); - dac2SetValue(samplesC[sampleIndex*2+1] /*/ (agcLevel * agcScale)*/ * 4096 * gain + 2048); + dac1SetValue(samplesC[sampleIndex*2] /*/ (agcLevel * agcScale)*/ * 4096 * afGain + 2048); + dac2SetValue(samplesC[sampleIndex*2+1] /*/ (agcLevel * agcScale)*/ * 4096 * afGain + 2048); // } if(sampleIndex > FFT_SIZE - filterKernelLength - 1) @@ -395,6 +407,9 @@ int isFwd; samplesC[sampleIndex*2] = ((uhADCxConvertedValue - 2048)/4096.0); // - 2048; samplesC[sampleIndex*2 + 1] = ((uhADCxConvertedValue2 - 2048)/4096.0); // - 2048;//0.0; + if(uhADCxConvertedValue > maxAmplitude) maxAmplitude = uhADCxConvertedValue; + if(uhADCxConvertedValue2 > maxAmplitude) maxAmplitude = uhADCxConvertedValue2; + if(samplesA[sampleIndex*2] > agcLevel) agcLevel = samplesA[sampleIndex*2]; if(samplesA[sampleIndex*2+1] > agcLevel) agcLevel = samplesA[sampleIndex*2+1]; // if(sampleIndex < filterKernelLength) @@ -404,8 +419,8 @@ int isFwd; // dac2SetValue(samplesA[sampleIndex*2+1] + samplesC[(FFT_SIZE - filterKernelLength) // + sampleIndex * 2] /*/ (agcLevel * agcScale)*/ * 4096 * gain + 2048); // } else { - dac1SetValue(samplesA[sampleIndex*2] /*/ (agcLevel * agcScale)*/ * 4096 * gain + 2048); - dac2SetValue(samplesA[sampleIndex*2+1] /*/ (agcLevel * agcScale)*/ * 4096 * gain + 2048); + dac1SetValue(samplesA[sampleIndex*2] /*/ (agcLevel * agcScale)*/ * 4096 * afGain + 2048); + dac2SetValue(samplesA[sampleIndex*2+1] /*/ (agcLevel * agcScale)*/ * 4096 * afGain + 2048); // } if(sampleIndex > FFT_SIZE - filterKernelLength - 1) @@ -621,6 +636,16 @@ void updateMenu() //Right now all this does is turns the AM decoder on and off, I guess. } break; + case 10: //Volume + encoderPos = getPos(); + if(encoderPos != encoderLastPos) + { + afGain += afGainStep * (encoderLastPos - encoderPos); + if(afGain > afGainMax) afGain = afGainMax; + if(afGain <= 0) afGain = 0; + encoderLastPos = encoderPos; + } + break; default: break; } @@ -642,6 +667,7 @@ void updateDisplay(uint8_t force) Adafruit_GFX_drawColorBitmap(150, 136, bitmapFilter, 47,12, MASKWHITE); drawNumber('.', freqHOffset + 16*2, freqVOffset + 0, MASKWHITE); drawNumber('.', freqHOffset + 16*6, freqVOffset + 0, MASKWHITE); + Adafruit_GFX_drawColorBitmap(320 - 45 - 2, 240 - 46 - 2, bitmapHadLogo, 45, 46, MASKWHITE); } sprintf(&freqChar, "%8d", vfoAFrequency); @@ -739,6 +765,8 @@ void updateDisplay(uint8_t force) modeLast = mode; } + if(afGain * 0.99 ) + menuLastPos = menuPos; }