Ahhh. I see that sneaky shift error now! In the method Si570::getRfReq()why is dcoFrequency initialized to zero twice? I am going to continue looking at the library code, as there are some issues that I think need to be addressed. First, the method Si570::setBitvals() is confusing to me. The Si570 code that I wroteseveral years agofor the Cypress PSoC did not needanything like that function to set up a new reference frequency value. Second, the use of an absolute value of +/-50000 for determining big frequency jumps versus small frequency jumps is not equivalent to a relative value of 3500 ppm, per the Si570 data sheet. Third, I believe that the initial center frequency should be settothethe start-up frequency, not 0, as is done in Si570::Si570(). This is of minor consequence, though, as a big frequency jump has to be made in most situations anyway. I am just a stickler for algorithmconsistency. 73, Mac AE5PH On 03/29/2014 06:59 PM, Thomas Sarlandie wrote:
Mac,I have modified the Si570 class so that I could initialize it and pass the register values manually. Using Jerry's register values, I was able to reproduce the bug.And I can confirm that the problem is fixed by the code you sent.Good news is that it is not dependent on where it is compiled computer and it should work for everyone now.I have used your version which I liked better and made a PR for farhan: https://github.com/afarhan/radiono/pull/7Jerry, I am very confident this fixes your problem but could you give it a try?Download it with this zip file: https://github.com/sarfata/radiono/archive/fix-si570-stuck-bug.zipNow of course, we want to understand what was going on. It was not obvious...Line 87, we used to do: dcoFrequency|=this->dco_reg[11]<<8;When we do this, the compiler extends the sign-bit (the most significant bit) to the left before it does the OR operation. With my Si570, I had 0x77 so this bit was 0 but Jerry had 0xbf and therefore a 1. This is what messed up completely the rest of the calculations...I checked and apparently the problem is that we were shifting a 8 bit number (uint8_t) by 8 bits and the results seem to be undefined.73, thomasOn Sat, Mar 29, 2014 at 2:39 PM, Mac A. Cody <maccody@xxxxxxx <mailto:maccody@xxxxxxx>>wrote:Jerry, Apparently the last few lines of the experimental Arduino sketch I sent you left out some code. After these lines of code: //set the initial frequency vfo->setFrequency(SI570_NEW_FREQUENCY); add the following lines of code: delay(3000); // This will print some debugging info to the serial console. vfo->debugSi570(); Please rerun the tests. This explains why you did not get the second set of serial output. That is one thing I DO NOT LIKE about the Arduino IDE. Compiling is done in the IDE environment and code changes are not saved to the source files unless done explicitly. If the Arduino IDE were to crash before an explicit save, a lot of changes could be lost. I consider this to be a bad bug. Auto-save of source code changes during compile is a must. 73, Mac AE5PH On 03/29/2014 02:39 PM, jerry@xxxxxxxxxxxxxxxx <mailto:jerry@xxxxxxxxxxxxxxxx>wrote: Thomas, attached are tests I did, including the testing.ino that Mac sent me. We were checking to see if the chip would change frequencies. It did, I made three tests. All with my original board. With the new board, I loaded ver. 0.030 and got the results attached as, "newdigoboard". This is when I thought maybe my board had a trace that was bad, and I took my soldering iron and was going to pull solder down the traces to thicken them. I didn't realize that I still had the power to the board on and when I touched the soldering iron to the trace I fried the si570. So I'm back to one board. But when I started up the ver. 0.030 before I fried the chip, it said I had a comm error. My old board never gave that message. Before I loaded ver 0.030 on the new board the testing sketch was the same as the old board. I bought both chips from DigiKey and they have the same "CAC000141G" on the chip. I will run any tests you need me to. Jerry K5LRU Harwood, Texas -------- Original Message -------- Subject: [minima] Re: Ver.0.030 code problems From: Thomas Sarlandie <thomas@xxxxxxxxxxxxx <mailto:thomas@xxxxxxxxxxxxx>> Date: Sat, March 29, 2014 1:26 pm To: "minima@xxxxxxxxxxxxx <mailto:minima@xxxxxxxxxxxxx>" <minima@xxxxxxxxxxxxx <mailto:minima@xxxxxxxxxxxxx>> Frank, Jerry, I think at this point we are pretty sure that the bug is because we are using different variants of the Si570. I am working on it now to make a v0.0.4 that would work for everyone. Jerry, to help me test my changes, can you send me the output of the serial console when you start your second minima? Every Si570 is different and I will run the maths manually to make sure there is no bug in the source code anymore. thanks! thomas On Sat, Mar 29, 2014 at 10:52 AM, Frank <w4nhj@xxxxxxxxxxx <mailto:w4nhj@xxxxxxxxxxx>> wrote: Jerry, I use a Mac, you know I believe Thomas also uses a Mac. I wonder if you have hit on something. Frank - W4NHJ - On 3/29/14, 1:14 PM, jerry@xxxxxxxxxxxxxxxx <mailto:jerry@xxxxxxxxxxxxxxxx>wrote: Frank, thanks for sending the files, I will compare the code to mine. What operating system do you run your Arduino software with? Jerry K5LRU Harwood, Texas -------- Original Message -------- Subject: [minima] Re: Ver.0.030 code problems From: Frank <w4nhj@xxxxxxxxxxx <mailto:w4nhj@xxxxxxxxxxx>> <w4nhj@xxxxxxxxxxx <mailto:w4nhj@xxxxxxxxxxx>> Date: Sat, March 29, 2014 11:03 am To: minima@xxxxxxxxxxxxx <mailto:minima@xxxxxxxxxxxxx> Jerry, I tested my digital board with the V0.03 firmware and it works. I could send you the three files I have and you can see if that works. Perhaps something was changed in the firmware that is on Github now, but I doubt it. Frank - W4NHJ - On 3/29/14, 11:34 AM, Celso - PY2XT wrote: Hi Jerry and folks, I have the same problem with my digital board, just like you. I will continue researching and wait for help from more experienced friends. 73 to all. Celso - PY2XT. De: jerry@xxxxxxxxxxxxxxxx <mailto:jerry@xxxxxxxxxxxxxxxx> Enviada: Sábado, 29 de Março de 2014 07:02 Para: minima@xxxxxxxxxxxxx <mailto:minima@xxxxxxxxxxxxx> Assunto: [minima] Ver.0.030 code problems I bought a new si570, built a new digi-board, and guess what, I still have the same problem. The si570 is frozen at 56.3 Mhz. I got a test sketch from Mac (I put my callsign in the code to make sure I was pulling up the right file through Arduino) see attachment, and I am able to change the frequency of the si570 with the sketch which proves the I2C bus is working OK. The chip puts out a clean signal at around 2.84v peak to peak, (see attachments). With Farhan's original sketch, the si570 will tune. I think I've read everything there is on the internet about the I2C buss, and I don't think that's my problem, unless it is running too fast with the new version code. I made my own digi board pcb, but it was from Adrian's design, so it should be the same as everyone else. The voltages on the si570 are at 3.274. I'm out of ideas. I need help. Jerry K5LRU Harwood, Texas