Boris,
Much Appreciated! Not sure if I can do anything about reading registers, I am just beginning. But I can get anything to work, I will post it here.
Cheers!
SmugWimp
Boris,
Much Appreciated! Not sure if I can do anything about reading registers, I am just beginning. But I can get anything to work, I will post it here.
Cheers!
SmugWimp
Hi Boris!
Got my chips in today from Sparkfun, and started reading the datasheet on the NS73M a bit more.
It seems that although the NS73M can read and write, the only thing I can see is that it is 'writing' is an ACK for any commands sent, but that seems to be about the only information that I can find in the datasheet.
If you were (like me) planning to read the NS73M to see what parameters it is currently set at then we may end up going another method.
I suspect I will end up using a "set" of defaults, and then use the PIC to read/modify/write those settings in the EEPROM as needed.
Let me know if you see something different!
Cheers!
Alex
I guess I am missing some elementary issues, but I cannot seem to figure out why I cannot get this to work.
Here is a sample of my code:
At first I was trying this with a 16F84A, and moved to a 16F877A just to make sure there was nothing wrong with my chips. I get the same results; nothing.Code:REM Above this is just LCD and button setups... NS_CK VAR PORTC.1 NS_DA VAR PORTC.2 FREQ VAR WORD 'REM Consisting of FREQ.1 and FREQ.2 (Hi/Lo Byte) MYREG VAR BYTE 'REM Register of NS73M MYVAL VAR BYTE 'REM Value for register in NS73M MYCON VAR BYTE 'REM Control Value for NS73M START: 'REM The Theory is that we setup all parameters, then turn it on. MYCON = %11001100 'REM Setup Control Address for NS73M PAUSE 100 'REM Breathe a moment; let the chip get settled... I2CWRITE NS_DA,NS_CK,MYCON,$0E,[$05] 'REM SOFTWARE RESET NS73M Chip PAUSE 100 I2CWRITE NS_DA,NS_CK,MYCON,$01,[$B4] 'REM Pilot On, Subcarrier On PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$02,[$07] 'REM 2mw Power, Unlock Detect ON PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$08,[$1A] 'REM CEX Band 2 PAUSE 10 'REM Again, theory is that I am transmitting on 88.5MHz, as per datasheet... I2CWRITE NS_DA,NS_CK,MYCON,$03,[$58] 'REM Frequency; Lower Byte PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$04,[$2A] 'REM Frequency; Upper Byte PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$00,[$A3] 'REM Power, 200mv Audio, 75us PE PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$0E,[$05] 'REM SOFTWARE RESET NS73M PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$06,[$1E] 'REM Charge Pumps PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$0E,[$05] 'REM SOFTWARE RESET NS73M PAUSE 10 REM Just a note to let me know it got through the code unscathed... LCDOUT $FE, 1 LCDOUT $FE, 2 PAUSE 500 LCDOUT $FE, $80 LCDOUT "Transmitting?" LCDOUT $FE, $C0 LCDOUT " supposedly..." PAUSE 1000 END
This is my first attempt at I2C communications, so I am not certain what, if any, feedback I can expect. My current feedback is nothing works, lol!
Any pointers on where my code is lacking, or erroneous, would be greatly appreciated!
Cheers!
SmugWimp
Hold the phone folks; I think I may have a hardware issue. I almost hope so, anyway. heh.
BBIAF...
SmugWimp
No Such Luck. What I thought was a miswiring turned out to be correct. But I did remove some (as of yet) unneeded wires for the buttons, until I get the rest of this moving along. It doesnt work any better, but it is easier to see.
Here is the latest rendition of code:
Interestingly enough, One of the reasons I thought it was a hardware failure, was I could remove one, or both of the I2C lines and still not get an error (evidenced by the optional jump label on the first I2CWRITE command, to reset the NS73M). However, if I "swapped" the lines, then I DID get a "No ACK" error. Weird. I still dont understand that. But it is wired correctly.Code:REM LCD PIN Assignments above... NS_DA VAR PORTB.1 NS_CK VAR PORTB.2 MYCON VAR BYTE 'REM Control Value for NS73M START: 'REM The Theory is that we setup all parameters, then turn it on. MYCON = $CC 'REM Setup Control Address for NS73M PAUSE 100 'REM Breathe a moment; let the chip get settled... REM I2CWRITE DATAPIN,CLOCKPIN,CONTROLADDRESS,PORTADDRESS,[DATAINBRACKETS]{, OPTIONALJUMPTOLABEL} I2CWRITE NS_DA,NS_CK,MYCON,$0E,[$05], BOOHA 'REM SOFTWARE RESET NS73M Chip PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$00,[$A0] 'REM Set it up, dont turn it on yet... PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$01,[$B4] 'REM Pilot On, Subcarrier On PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$02,[$07] 'REM 2mw Power, Unlock Detect ON PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$03,[$58] 'REM Frequency; Lower Byte PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$04,[$2A] 'REM Frequency; Upper Byte PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$08,[$1A] 'REM CEX Band 2 PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$00,[$A1] 'REM Ok, Turn it on... PAUSE 10 I2CWRITE NS_DA,NS_CK,MYCON,$0E,[$05] 'REM SOFTWARE RESET NS73M Chip PAUSE 100 I2CWRITE NS_DA,NS_CK,MYCON,$06,[$1E] 'REM Charge Pump PAUSE 10 LCDOUT $FE, 1 LCDOUT $FE, 2 PAUSE 500 LCDOUT $FE, $80 LCDOUT "Transmitting?" LCDOUT $FE, $C0 LCDOUT " supposedly..." PAUSE 1000 GOTO THEEND BOOHA: LCDOUT $FE, 1 LCDOUT $FE, 2 PAUSE 500 LCDOUT $FE, $80 LCDOUT "No ACK" LCDOUT $FE, $C0 LCDOUT ":(" PAUSE 1000 GOTO THEEND THEEND: END
I moved back to a 16F84A because it wasnt the problem and I have a bunch that I want to use.
On the 16F84A, Pins A0-4 are used for data and RS for the LCD. Pin B0 is the E pin for the LCD, B1 is the I2C Data line, and B2 is the I2C Clock.
On the SparkFun board, Line In is attached to my Ipod, IIC is attached to +3.3v, LA is attached to Ground, Data to B1, Clock to B2, TEB not connected, VCC to +3.3v and Ground to Ground.
Again, It seems like it "should" work, but alas it does not. Any ideas would be greatly appreciated!
Cheers!
SmugWimp
Just a guess here but the NS73M is not 5V tolerant. The pins connected to the PIC should be level compensated to match the logic levels required for the NS73M or a 3V PIC should be used.
I use the NS73M quite reliably but not in I2C mode and my routines are written in Swordfish so I can't really comment on your code. Sorry I can't help more.....
Tom
Tom
Tom, Thanks!
Yeah, I have the NS73M on the end of a 3.3v regulator, and all but the LCD is on 3.3v.
If I cant get I2C working, I guess I will go with the 3 wire... but was hoping not to have to use that extra pin...
So goes life...
Cheers!
SmugWimp
Bookmarks