diff --git a/Hardware/PSDR.sch b/Hardware/PSDR.sch index 4e8ba91..7fb5bf8 100644 Binary files a/Hardware/PSDR.sch and b/Hardware/PSDR.sch differ diff --git a/Source/src/dds.c b/Source/src/dds.c index f5156c9..deac8fd 100644 --- a/Source/src/dds.c +++ b/Source/src/dds.c @@ -44,43 +44,43 @@ long long freqToReg(long long frequency) } -void setFreq(long frequency) -{ - long long freg = freqToReg(frequency); - - - //HAL_GPIO_WritePin(ddsReset.port, ddsReset.pin, 1); - ddsPrefix(); - //sendToDds(0x2100, 0x2100); - //sendToDds(0x0010001100000000 , 0x0010001100000000); - sendToDds(0b0010001000000000 , 0b0010001000000000); - ddsSuffix(); - - //HAL_GPIO_WritePin(ddsReset.port, ddsReset.pin, 0); - //HAL_GPIO_WritePin(ddsReset.port, ddsReset.pin, 1); - //sendToDds(0x50c7); - //sendToDds(0x4000); - ddsPrefix(); - sendToDds(((freg & 0b0011111111111111) | 0b0100000000000000), - ((freg & 0b0011111111111111) | 0b0100000000000000)); - ddsSuffix(); - ddsPrefix(); - sendToDds(((freg >> 14 & 0b0011111111111111) | 0b0100000000000000), - (((freg >> 14) & 0b0011111111111111) | 0b0100000000000000)); - ddsSuffix(); - ddsPrefix(); - //sendToDds(0xc000, 0xc000); - sendToDds(0xc000, 0xc000 | 3072); - ddsSuffix(); - // ddsPrefix(); - // sendToDds(0b1100000000000000); - // ddsSuffix(); - - - - // ddsPrefix(); - // sendToDds(0x2000, 0x2000); - // ddsSuffix(); - -// HAL_GPIO_WritePin(ddsReset.port, ddsReset.pin, 0); -} +//void setFreq(long frequency) +//{ +// long long freg = freqToReg(frequency); +// +// +// //HAL_GPIO_WritePin(ddsReset.port, ddsReset.pin, 1); +// ddsPrefix(); +// //sendToDds(0x2100, 0x2100); +// //sendToDds(0x0010001100000000 , 0x0010001100000000); +// sendToDds(0b0010001000000000 , 0b0010001000000000); +// ddsSuffix(); +// +// //HAL_GPIO_WritePin(ddsReset.port, ddsReset.pin, 0); +// //HAL_GPIO_WritePin(ddsReset.port, ddsReset.pin, 1); +// //sendToDds(0x50c7); +// //sendToDds(0x4000); +// ddsPrefix(); +// sendToDds(((freg & 0b0011111111111111) | 0b0100000000000000), +// ((freg & 0b0011111111111111) | 0b0100000000000000)); +// ddsSuffix(); +// ddsPrefix(); +// sendToDds(((freg >> 14 & 0b0011111111111111) | 0b0100000000000000), +// (((freg >> 14) & 0b0011111111111111) | 0b0100000000000000)); +// ddsSuffix(); +// ddsPrefix(); +// //sendToDds(0xc000, 0xc000); +// sendToDds(0xc000, 0xc000 | 3072); +// ddsSuffix(); +// // ddsPrefix(); +// // sendToDds(0b1100000000000000); +// // ddsSuffix(); +// +// +// +// // ddsPrefix(); +// // sendToDds(0x2000, 0x2000); +// // ddsSuffix(); +// +//// HAL_GPIO_WritePin(ddsReset.port, ddsReset.pin, 0); +//} diff --git a/Source/src/i2c.c b/Source/src/i2c.c index 2783951..e22df78 100644 --- a/Source/src/i2c.c +++ b/Source/src/i2c.c @@ -175,13 +175,13 @@ unsigned char Reg_Store[][3] = { { 29,0x90,0xFF}, { 30,0xB0,0xFF}, { 31,0xC0,0xFF}, - { 32,0xE3,0xFF}, - { 33,0xE3,0xFF}, + { 32,0xC0,0xFF}, + { 33,0xCC,0xFF}, { 34,0xE3,0xFF}, { 35,0x00,0xFF}, { 36,0x06,0x1F}, - { 37,0x00,0x1F}, - { 38,0x00,0x1F}, + { 37,0x06,0x1F}, + { 38,0x06,0x1F}, { 39,0x00,0x1F}, { 40,0x63,0xFF}, { 41,0x0C,0x7F}, @@ -191,18 +191,18 @@ unsigned char Reg_Store[][3] = { { 45,0x00,0xFF}, { 46,0x00,0xFF}, { 47,0x14,0x3F}, - { 48,0x37,0xFF}, + { 48,0x2B,0xFF}, { 49,0x00,0xFF}, - { 50,0xC4,0xFF}, - { 51,0x07,0xFF}, + { 50,0xC2,0xFF}, + { 51,0x27,0xFF}, { 52,0x10,0xFF}, - { 53,0x00,0xFF}, - { 54,0x57,0xFF}, - { 55,0x00,0xFF}, - { 56,0x00,0xFF}, + { 53,0xD9,0xFF}, + { 54,0x02,0xFF}, + { 55,0x84,0xFF}, + { 56,0x01,0xFF}, { 57,0x00,0xFF}, { 58,0x00,0xFF}, - { 59,0x01,0xFF}, + { 59,0xB7,0xFF}, { 60,0x00,0xFF}, { 61,0x00,0xFF}, { 62,0x00,0x3F}, @@ -213,18 +213,18 @@ unsigned char Reg_Store[][3] = { { 67,0x00,0xFF}, { 68,0x00,0xFF}, { 69,0x00,0xFF}, - { 70,0x00,0xFF}, + { 70,0x01,0xFF}, { 71,0x00,0xFF}, { 72,0x00,0xFF}, { 73,0x00,0x3F}, { 74,0x10,0xFF}, - { 75,0x00,0xFF}, - { 76,0x00,0xFF}, - { 77,0x00,0xFF}, + { 75,0x38,0xFF}, + { 76,0xC3,0xFF}, + { 77,0x20,0xFF}, { 78,0x00,0xFF}, { 79,0x00,0xFF}, { 80,0x00,0xFF}, - { 81,0x00,0xFF}, + { 81,0x09,0xFF}, { 82,0x00,0xFF}, { 83,0x00,0xFF}, { 84,0x00,0x3F}, @@ -240,20 +240,20 @@ unsigned char Reg_Store[][3] = { { 94,0x00,0xFF}, { 95,0x00,0x3F}, { 96,0x10,0x00}, - { 97,0x21,0xFF}, - { 98,0x2E,0xFF}, - { 99,0x80,0xFF}, - {100,0x8F,0xFF}, - {101,0x50,0xFF}, - {102,0x01,0xFF}, - {103,0xA0,0xFF}, - {104,0x2E,0xFF}, - {105,0x63,0xFF}, + { 97,0x9D,0xFF}, + { 98,0x34,0xFF}, + { 99,0x1C,0xFF}, + {100,0x00,0xFF}, + {101,0x00,0xFF}, + {102,0x00,0xFF}, + {103,0x0D,0xFF}, + {104,0x00,0xFF}, + {105,0x00,0xFF}, {106,0x80,0xBF}, {107,0x00,0xFF}, {108,0x00,0xFF}, {109,0x00,0xFF}, - {110,0x00,0xFF}, + {110,0x40,0xFF}, {111,0x00,0xFF}, {112,0x00,0xFF}, {113,0x00,0xFF}, @@ -491,8 +491,7 @@ unsigned char Reg_Store[][3] = { { 92,0x00,0x00}, { 93,0x00,0x00}, { 94,0x00,0x00}, - {255, 0, 0xFF} }; // set page bit to 0 - //End of file + {255, 0, 0xFF} }; @@ -713,9 +712,23 @@ write_Si5338(230, 0x00); // OEB_ALL = 0 // } //while(1); + + + +write_Si5338(31, 0xC1); //output driver off? + +//Start us at a known frequency (in this case 14.06 which equals 7.03) +//TODO: Make this start at whatever the unit is supposed to power up at. Not hard coded +writeMultiSynthParameters(MULTISYNTH0, 201, 697, 703); +write_Si5338(31, 0xC0); //output driver off? } -void i2cLoop() { + +unsigned long long vcoFreq = 2840000000; +double correctionFactor = 1; +void setFreq(unsigned long frequency) +{ +//void i2cLoop() { // put your main code here, to run repeatedly: //delay(400); //write_Si5338(31, 0xC1); //output driver off? @@ -736,11 +749,30 @@ void i2cLoop() { // if( integer >= 500) integer = 8; // //} while (true); +//double desiredFrequency = 150.5; +//double measuredFrequency = 150.48806; + + +// correctionFactor = desiredFrequency/measuredFrequency; + +// frequency *= correctionFactor; + + frequency *= 2; //because the flipflops will devide it back down by 2 + +if(frequency < 5000000) return; +if(frequency > 350000000) return; -long integer = 199; -long neumerator = 0; +unsigned long integer = vcoFreq / frequency; + +//if((integer % 2) != 0) integer++; + + + +unsigned long remainder = vcoFreq % frequency; + + //do //{ @@ -752,7 +784,7 @@ long neumerator = 0; // integer++; //} - //if( integer >= 500) integer = 8; +// if( integer >= 500) integer = 8; //neumerator = (analogRead(A3) * 10); //578914 referal nu 801 435 7764 john thank you //integer = (analogRead(A2) /10) + 150; @@ -760,12 +792,23 @@ long neumerator = 0; //} while (true); - write_Si5338(31, 0xC0); //output driver off? + //write_Si5338(31, 0xC0); //output driver off? //delay(400); - write_Si5338(31, 0xC1); //output driver off? - writeMultiSynthParameters(MULTISYNTH0, 397, 0, 10000UL); - write_Si5338(31, 0xC0); //output driver off? + + + +while(frequency > 100000) //This value should be fine tuned. I thought the numerator and denominator could be 30 bits, but it seems to be less than 24 + { + remainder /= 2; + frequency /= 2; + } + + //write_Si5338(31, 0xC1); //output driver off? + writeMultiSynthParameters(MULTISYNTH0, integer, remainder , frequency); + //writeMultiSynthParameters(MULTISYNTH0, 232, 44960 , 122220); + //writeMultiSynthParameters(MULTISYNTH0, integer, /*neumerator*/ 0 , 1000000UL); + //write_Si5338(31, 0xC0); //output driver off? } diff --git a/Source/src/main.c b/Source/src/main.c index 852909f..190a040 100644 --- a/Source/src/main.c +++ b/Source/src/main.c @@ -988,52 +988,67 @@ void drawSMeter() enum menuItems { - oneMhzPlace = 0, - hundredKhzPlace = 1, - tenKhzPlace = 2, - oneKhzPlace = 3, - hundredHzPlace = 4, - tenHzPlace = 5, - oneHzPlace = 6, - filterLower = 7, - filterUpper = 8, - modeMenu = 9, - volumeMenu = 10, + volumeMenuItem = 0, + modeMenuItem, + megahertzMenuItem, + hundredKilohertzMenuItem, + tenKilohertzMenuItem, + kilohertzMenuItem, + hundredHertzMenuItem, + tenHertzMenuItem, + hertzMenuItem, + filterLowMenuItem, + filterHighMenuItem }; +//enum menuItems +//{ +// oneMhzPlace = 0, +// hundredKhzPlace = 1, +// tenKhzPlace = 2, +// oneKhzPlace = 3, +// hundredHzPlace = 4, +// tenHzPlace = 5, +// oneHzPlace = 6, +// filterLower = 7, +// filterUpper = 8, +// modeMenu = 9, +// volumeMenu = 10, +//}; + void updateMenu() { switch(menuPos) { - case oneMhzPlace: + case megahertzMenuItem: frequencyDialMultiplier = 1000000; updateVfo(); break; - case hundredKhzPlace: + case hundredKilohertzMenuItem: frequencyDialMultiplier = 100000; updateVfo(); break; - case tenKhzPlace: + case tenKilohertzMenuItem: frequencyDialMultiplier = 10000; updateVfo(); break; - case oneKhzPlace: + case kilohertzMenuItem: frequencyDialMultiplier = 1000; updateVfo(); break; - case hundredHzPlace: + case hundredHertzMenuItem: frequencyDialMultiplier = 100; updateVfo(); break; - case tenHzPlace: + case tenHertzMenuItem: frequencyDialMultiplier = 10; updateVfo(); break; - case oneHzPlace: + case hertzMenuItem: frequencyDialMultiplier = 1; updateVfo(); break; - case filterLower: + case filterLowMenuItem: encoderPos = getPos(); if(encoderPos != encoderLastPos) { @@ -1045,7 +1060,7 @@ void updateMenu() populateCoeficients(filterUpperLimit - filterLowerLimit, mode, filterLowerLimit); } break; - case filterUpper: + case filterHighMenuItem: encoderPos = getPos(); if(encoderPos != encoderLastPos) { @@ -1057,7 +1072,7 @@ void updateMenu() populateCoeficients(filterUpperLimit - filterLowerLimit, mode, filterLowerLimit); } break; - case modeMenu: + case modeMenuItem: encoderPos = getPos(); if(encoderPos != encoderLastPos) { @@ -1069,7 +1084,7 @@ void updateMenu() //Right now all this does is turns the AM decoder on and off, I guess. } break; - case volumeMenu: + case volumeMenuItem: encoderPos = getPos(); if(encoderPos != encoderLastPos) { @@ -1114,11 +1129,13 @@ enum modes AM = 2 }; + + void updateDisplay(uint8_t force) { displayUpdating = 1; - static char freqChar[14]; - static char lastFreqChar[] = {'$','$','$','$','$','$','$','$','$','$','$','$','$','$',}; + static char freqChar[15]; + static char lastFreqChar[] = {'$','$','$','$','$','$','$','$','$','$','$','$','$','$','$',}; //Draw elements that don't normally change. Static icons, etc. if(force) @@ -1127,54 +1144,83 @@ void updateDisplay(uint8_t force) Adafruit_GFX_drawColorBitmap(150, 90, bitmapMode, 40,12, MASKWHITE); Adafruit_GFX_fillTriangle(126,119,136,124,136,114,ILI9340_WHITE); Adafruit_GFX_drawColorBitmap(150, 136, bitmapFilter, 47,12, MASKWHITE); - drawNumber('.', freqHOffset + 16*2, freqVOffset + 0, MASKWHITE); - drawNumber('.', freqHOffset + 16*6, freqVOffset + 0, MASKWHITE); + drawNumber('.', freqHOffset + 16*3, freqVOffset + 0, MASKWHITE); + drawNumber('.', freqHOffset + 16*7, freqVOffset + 0, MASKWHITE); Adafruit_GFX_drawColorBitmap(142, 162, bitmapSMeter, 155, 10, MASKWHITE); //Adafruit_GFX_drawColorBitmap(320 - 45 - 2, 240 - 46 - 2, bitmapHadLogo, 45, 46, MASKWHITE); } - sprintf(&freqChar, "%8d", vfoAFrequency); + sprintf(&freqChar, "%9d", vfoAFrequency); //So on each of these elements, we update when the value changes, when we're forced to, when the item becomes selected, or unselected. - if(freqChar[0] != lastFreqChar[0] || force || (menuPos != menuLastPos && (menuPos == 0 || menuLastPos == 0))) + if(freqChar[0] != lastFreqChar[0] + || force + || (menuPos != menuLastPos && (menuPos == megahertzMenuItem + || menuLastPos == megahertzMenuItem))) { - drawNumber(freqChar[0], freqHOffset + 16*0, freqVOffset + 0, menuPos == 0 ? MASKRED : MASKWHITE); + drawNumber(freqChar[0], freqHOffset + 16*0, freqVOffset + 0, + menuPos == megahertzMenuItem ? MASKRED : MASKWHITE); } - if(freqChar[1] != lastFreqChar[1] || redItems[0] || force || (menuPos != menuLastPos && (menuPos == 0 || menuLastPos == 0))) + if(freqChar[1] != lastFreqChar[1] + || redItems[0] + || force + || (menuPos != menuLastPos && (menuPos == megahertzMenuItem + || menuLastPos == megahertzMenuItem))) { - drawNumber(freqChar[1], freqHOffset + 16*1, freqVOffset + 0, menuPos == 0 ? MASKRED : MASKWHITE); + drawNumber(freqChar[1], freqHOffset + 16*1, freqVOffset + 0, + menuPos == megahertzMenuItem ? MASKRED : MASKWHITE); } - if(freqChar[2] != lastFreqChar[2] || force || (menuPos != menuLastPos && (menuPos == 1 || menuLastPos == 1))) + if(freqChar[2] != lastFreqChar[2] + || force + || (menuPos != menuLastPos && (menuPos == megahertzMenuItem + || menuLastPos == megahertzMenuItem))) { - drawNumber(freqChar[2], freqHOffset + 16*3, freqVOffset + 0, menuPos == 1 ? MASKRED : MASKWHITE); + drawNumber(freqChar[2], freqHOffset + 16*2, freqVOffset + 0, + menuPos == megahertzMenuItem ? MASKRED : MASKWHITE); } - if(freqChar[3] != lastFreqChar[3] || force || (menuPos != menuLastPos && (menuPos == 2 || menuLastPos == 2))) + if(freqChar[3] != lastFreqChar[3] + || force + || (menuPos != menuLastPos && (menuPos == hundredKilohertzMenuItem + || menuLastPos == hundredKilohertzMenuItem))) { - drawNumber(freqChar[3], freqHOffset + 16*4, freqVOffset + 0, menuPos == 2 ? MASKRED : MASKWHITE); + drawNumber(freqChar[3], freqHOffset + 16*4, freqVOffset + 0, + menuPos == hundredKilohertzMenuItem ? MASKRED : MASKWHITE); } - if(freqChar[4] != lastFreqChar[4] || force || (menuPos != menuLastPos && (menuPos == 3 || menuLastPos == 3))) + if(freqChar[4] != lastFreqChar[4] + || force + || (menuPos != menuLastPos && (menuPos == tenKilohertzMenuItem + || menuLastPos == tenKilohertzMenuItem))) { - drawNumber(freqChar[4], freqHOffset + 16*5, freqVOffset + 0, menuPos == 3 ? MASKRED : MASKWHITE); + drawNumber(freqChar[4], freqHOffset + 16*5, freqVOffset + 0, + menuPos == tenKilohertzMenuItem ? MASKRED : MASKWHITE); } - if(freqChar[5] != lastFreqChar[5] || force || (menuPos != menuLastPos && (menuPos == 4 || menuLastPos == 4))) + if(freqChar[5] != lastFreqChar[5] || force || (menuPos != menuLastPos && (menuPos == kilohertzMenuItem || menuLastPos == kilohertzMenuItem))) { - drawNumber(freqChar[5], freqHOffset + 16*7, freqVOffset + 0, menuPos == 4 ? MASKRED : MASKWHITE); + drawNumber(freqChar[5], freqHOffset + 16*6, freqVOffset + 0, menuPos == kilohertzMenuItem ? MASKRED : MASKWHITE); } - if(freqChar[6] != lastFreqChar[6] || force || (menuPos != menuLastPos && (menuPos == 5 || menuLastPos == 5))) + if(freqChar[6] != lastFreqChar[6] || force || (menuPos != menuLastPos && (menuPos == hundredHertzMenuItem || menuLastPos == hundredHertzMenuItem))) { - drawNumber(freqChar[6], freqHOffset + 16*8, freqVOffset + 0, menuPos == 5 ? MASKRED : MASKWHITE); + drawNumber(freqChar[6], freqHOffset + 16*8, freqVOffset + 0, menuPos == hundredHertzMenuItem ? MASKRED : MASKWHITE); } - if(freqChar[7] != lastFreqChar[7] || force || (menuPos != menuLastPos && (menuPos == 6 || menuLastPos == 6))) + if(freqChar[7] != lastFreqChar[7] || force || (menuPos != menuLastPos && (menuPos == tenHertzMenuItem || menuLastPos == tenHertzMenuItem))) { - drawNumber(freqChar[7], freqHOffset + 16*9, freqVOffset + 0, menuPos == 6 ? MASKRED : MASKWHITE); + drawNumber(freqChar[7], freqHOffset + 16*9, freqVOffset + 0, menuPos == tenHertzMenuItem ? MASKRED : MASKWHITE); } + if(freqChar[8] != lastFreqChar[8] || force || (menuPos != menuLastPos && (menuPos == hertzMenuItem || menuLastPos == hertzMenuItem))) + { + drawNumber(freqChar[8], freqHOffset + 16*10, freqVOffset + 0, menuPos == hertzMenuItem ? MASKRED : MASKWHITE); + } vfoALastFreq = vfoAFrequency; strcpy(lastFreqChar, freqChar); int redrawFilterBar = 0; - if(mode != modeLast || filterLowerLimit != filterLastLowerLimit || force || (menuPos != menuLastPos && (menuPos == 7 || menuLastPos == 7))) + if(mode != modeLast + || filterLowerLimit != filterLastLowerLimit + || force + || (menuPos != menuLastPos && (menuPos == filterLowMenuItem + || menuLastPos == filterLowMenuItem))) { sprintf(&freqChar, "%4d", filterLowerLimit * 40); //Adafruit_GFX_setTextSize(2); @@ -1184,7 +1230,7 @@ void updateDisplay(uint8_t force) for(i = 0; i < 4; i++) { //Adafruit_GFX_write(freqChar[i]); - drawNumberSmall(freqChar[i], 205 + (i * 9), 137, menuPos == 7 ? MASKRED : MASKWHITE); + drawNumberSmall(freqChar[i], 205 + (i * 9), 137, menuPos == filterLowMenuItem ? MASKRED : MASKWHITE); } //Adafruit_GFX_setTextSize(3); @@ -1192,7 +1238,11 @@ void updateDisplay(uint8_t force) filterLastLowerLimit = filterLowerLimit; } - if(mode != modeLast || filterUpperLimit != filterLastUpperLimit || force || (menuPos != menuLastPos && (menuPos == 8 || menuLastPos == 8))) + if(mode != modeLast + || filterUpperLimit != filterLastUpperLimit + || force + || (menuPos != menuLastPos && (menuPos == filterHighMenuItem + || menuLastPos == filterHighMenuItem))) { sprintf(&freqChar, "%-4d", filterUpperLimit * 40); //Adafruit_GFX_setTextSize(2); @@ -1202,7 +1252,7 @@ void updateDisplay(uint8_t force) for(i = 0; i < 4; i++) { //Adafruit_GFX_write(freqChar[i]); - drawNumberSmall(freqChar[i], 250 + (i * 9), 137, menuPos == 8 ? MASKRED : MASKWHITE); + drawNumberSmall(freqChar[i], 250 + (i * 9), 137, menuPos == filterHighMenuItem ? MASKRED : MASKWHITE); } //Adafruit_GFX_setTextSize(3); @@ -1211,14 +1261,14 @@ void updateDisplay(uint8_t force) } - if(afGainLast != afGain || force || (menuPos != menuLastPos && (menuPos == volumeMenu || menuLastPos == volumeMenu))) + if(afGainLast != afGain || force || (menuPos != menuLastPos && (menuPos == volumeMenuItem || menuLastPos == volumeMenuItem))) { sprintf(&freqChar, "%-4f", afGain * 100); int i; for(i = 0; i < 4; i++) { //Adafruit_GFX_write(freqChar[i]); - drawNumberSmall(freqChar[i], 250 + (i * 9), 10, menuPos == volumeMenu ? MASKRED : MASKWHITE); + drawNumberSmall(freqChar[i], 250 + (i * 9), 10, menuPos == volumeMenuItem ? MASKRED : MASKWHITE); } afGainLast = afGain; @@ -1248,18 +1298,21 @@ void updateDisplay(uint8_t force) } - if(mode != modeLast || force || (menuPos != menuLastPos && (menuPos == 9 || menuLastPos == 9))) + if(mode != modeLast + || force + || (menuPos != menuLastPos && (menuPos == modeMenuItem + || menuLastPos == modeMenuItem))) { switch(mode) { case LSB: - Adafruit_GFX_drawColorBitmap(196, 91, bitmapLSB, 28, 9, menuPos == 9 ? MASKRED : MASKWHITE); + Adafruit_GFX_drawColorBitmap(196, 91, bitmapLSB, 28, 9, menuPos == modeMenuItem ? MASKRED : MASKWHITE); break; case USB: - Adafruit_GFX_drawColorBitmap(196, 91, bitmapUSB, 28, 9, menuPos == 9 ? MASKRED : MASKWHITE); + Adafruit_GFX_drawColorBitmap(196, 91, bitmapUSB, 28, 9, menuPos == modeMenuItem ? MASKRED : MASKWHITE); break; case AM: - Adafruit_GFX_drawColorBitmap(196, 91, bitmapAM, 28, 9, menuPos == 9 ? MASKRED : MASKWHITE); + Adafruit_GFX_drawColorBitmap(196, 91, bitmapAM, 28, 9, menuPos == modeMenuItem ? MASKRED : MASKWHITE); break; } @@ -1500,8 +1553,8 @@ void updateVfo() vfoAFrequency += frequencyDialMultiplier * (encoderLastPos - encoderPos); - if(vfoAFrequency < 1) vfoAFrequency = 1; - if(vfoAFrequency > 37500000) vfoAFrequency = 37500000; + if(vfoAFrequency < 2500000) vfoAFrequency = 2500000; //Currently, the code can only corectly drive down to 5MHz/2 = 2.5MHz + if(vfoAFrequency > 175000000) vfoAFrequency = 175000000; //Currently, the code can only correctly drive up to 350MHz/2 = 175MHz encoderLastPos = encoderPos; }