Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Si4703 by
Revision 3:9ac35cc4a0b0, committed 2016-01-16
- Comitter:
- vodavprasku
- Date:
- Sat Jan 16 19:26:55 2016 +0000
- Parent:
- 2:558ef02f39d0
- Commit message:
- hotovo
Changed in this revision
SparkFun-Si4703.cpp | Show annotated file Show diff for this revision Revisions of this file |
SparkFun-Si4703.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 558ef02f39d0 -r 9ac35cc4a0b0 SparkFun-Si4703.cpp --- a/SparkFun-Si4703.cpp Sat Aug 08 18:15:36 2015 +0000 +++ b/SparkFun-Si4703.cpp Sat Jan 16 19:26:55 2016 +0000 @@ -1,5 +1,6 @@ #include "mbed.h" #include "SparkFun-Si4703.h" +#include "millis.h" Si4703_Breakout::Si4703_Breakout(PinName sdioPin, PinName sclkPin, PinName resetPin, Serial *pc) { @@ -22,8 +23,8 @@ readRegisters(); si4703_registers[POWERCFG] &= ~(1<<DMUTE); // 'Enable Mute' -si4703_registers[POWERCFG] |= (1<<ENABLE); // 'Enable IC' -si4703_registers[POWERCFG] |= (1<<DISABLE); // & 'Disable IC' +//si4703_registers[POWERCFG] |= (1<<ENABLE); // 'Enable IC' +//si4703_registers[POWERCFG] |= (1<<DISABLE); // & 'Disable IC' // To Init. Power-Down Sequence updateRegisters(); @@ -32,10 +33,9 @@ void Si4703_Breakout::setChannel(int channel) { - uint8_t ack; - //Freq(MHz) = 0.1 (in Europe) * Channel + 87.5MHz - //97.3 = 0.1 * Chan + 87.5 - //9.8 / 0.1 = 98 + //Freq(MHz) = 0.200(in USA) * Channel + 87.5MHz + //97.3 = 0.2 * Chan + 87.5 + //9.8 / 0.2 = 49 int newChannel = channel * 10; //973 * 10 = 9730 newChannel -= 8750; //9730 - 8750 = 980 newChannel /= 10; //980 / 10 = 98 @@ -47,13 +47,12 @@ si4703_registers[CHANNEL] |= (1<<TUNE); //Set the TUNE bit to start updateRegisters(); - wait_ms(60); //Wait 60ms - you can use or skip this delay + //delay(60); //Wait 60ms - you can use or skip this delay //Poll to see if STC is set while(1) { - ack = readRegisters(); - wait_ms(1); // Just In Case... - if (( (si4703_registers[STATUSRSSI] & (1<<STC)) != 0) || (ack != SUCCESS)) break; //Tuning complete! (or FAILED) + readRegisters(); + if( (si4703_registers[STATUSRSSI] & (1<<STC)) != 0) break; //Tuning complete! } readRegisters(); @@ -62,9 +61,8 @@ //Wait for the si4703 to clear the STC as well while(1) { - ack = readRegisters(); - wait_ms(1); // Just In Case... - if (( (si4703_registers[STATUSRSSI] & (1<<STC)) == 0) || (ack != SUCCESS)) break; //Tuning complete! (or FAILED) + readRegisters(); + if( (si4703_registers[STATUSRSSI] & (1<<STC)) == 0) break; //Tuning complete! } } @@ -95,15 +93,15 @@ return (si4703_registers[SYSCONFIG2] & 0x000F); } -/* + void Si4703_Breakout::readRDS(char* buffer, long timeout) { long endTime = millis() + timeout; - boolean completed[] = {false, false, false, false}; - int completedCount = 0; - while(completedCount < 4 && millis() < endTime) { - readRegisters(); - if(si4703_registers[STATUSRSSI] & (1<<RDSR)){ + bool completed[] = {false, false, false, false}; + int completedCount = 0; + while(completedCount < 4 && millis() < endTime) { + readRegisters(); + if(si4703_registers[STATUSRSSI] & (1<<RDSR)){ // ls 2 bits of B determine the 4 letter pairs // once we have a full set return // if you get nothing after 20 readings return with empty string @@ -123,10 +121,12 @@ // Serial.write(Dl); // Serial.println(); } - delay(40); //Wait for the RDS bit to clear + wait_ms(40); + /////delay(40); //Wait for the RDS bit to clear } else { - delay(30); //From AN230, using the polling method 40ms should be sufficient amount of time between checks + /////////delay(30); //From AN230, using the polling method 40ms should be sufficient amount of time between checks + wait_ms(40); } } if (millis() >= endTime) { @@ -136,7 +136,7 @@ buffer[8] = '\0'; } -*/ + @@ -177,9 +177,9 @@ si4703_registers[SYSCONFIG2] |= 0x0001; //Set volume to lowest // SI AN230 page 40 - Table 23 ('Good Quality Stations Only' Settings) - si4703_registers[SYSCONFIG2] |= (0xC<<SEEKTH); +/*********** si4703_registers[SYSCONFIG2] |= (0xC<<SEEKTH); si4703_registers[SYSCONFIG3] |= (0x7<<SKSNR); - si4703_registers[SYSCONFIG3] |= (0xF<<SKCNT); + si4703_registers[SYSCONFIG3] |= (0xF<<SKCNT);*************/ /// updateRegisters(); //Update
diff -r 558ef02f39d0 -r 9ac35cc4a0b0 SparkFun-Si4703.h --- a/SparkFun-Si4703.h Sat Aug 08 18:15:36 2015 +0000 +++ b/SparkFun-Si4703.h Sat Jan 16 19:26:55 2016 +0000 @@ -58,7 +58,7 @@ void setVolume(int volume); // 0 to 15 uint8_t getVolume(); // Returns The Current Volume (0 .. 15) -/* void readRDS(char* message, long timeout); */ + void readRDS(char* message, long timeout); // message should be at least 9 chars // result will be null terminated // timeout in milliseconds @@ -96,8 +96,6 @@ static const uint16_t CHANNEL = 0x03; static const uint16_t SYSCONFIG1 = 0x04; static const uint16_t SYSCONFIG2 = 0x05; - static const uint16_t SYSCONFIG3 = 0x06; - static const uint16_t TEST1 = 0x07; static const uint16_t STATUSRSSI = 0x0A; static const uint16_t READCHAN = 0x0B; static const uint16_t RDSA = 0x0C; @@ -114,8 +112,6 @@ static const uint16_t SKMODE = 10; static const uint16_t SEEKUP = 9; static const uint16_t SEEK = 8; - static const uint16_t DISABLE = 6; - static const uint16_t ENABLE = 0; //Register 0x03 - CHANNEL static const uint16_t TUNE = 15; @@ -129,10 +125,6 @@ static const uint16_t SPACE0 = 4; static const uint16_t SEEKTH = 8; - //Register 0x06 - SYSCONFIG3 - static const uint16_t SKSNR = 4; - static const uint16_t SKCNT = 0; - //Register 0x0A - STATUSRSSI static const uint16_t RDSR = 15; static const uint16_t STC = 14; @@ -141,7 +133,6 @@ static const uint16_t RDSS = 11; static const uint16_t BLERA = 9; static const uint16_t STEREO = 8; - static const uint16_t RSSI = 0; }; #endif