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.
Revision 0:ad1dcc41c893, committed 2013-03-07
- Comitter:
- peimmaj
- Date:
- Thu Mar 07 18:37:37 2013 +0000
- Commit message:
- Final version.
Changed in this revision
diff -r 000000000000 -r ad1dcc41c893 TextLCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Thu Mar 07 18:37:37 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#44f34c09bd37
diff -r 000000000000 -r ad1dcc41c893 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Mar 07 18:37:37 2013 +0000
@@ -0,0 +1,114 @@
+// My AM/FM Radio, Lab 3 Main
+// Jammie Proctor
+// 03/02/2013
+
+#include "mbed.h"
+#include "TextLCD.h"
+
+I2C radio(p28, p27); // sda, scl
+TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7
+DigitalIn AM_FM(p22); // Radio mode AM/FM
+DigitalIn station(p23); // Station seek/scan
+DigitalOut reset(p21); // Radio reset
+DigitalOut lock(LED1); // Station active
+PwmOut rclock(p24); // Rclock generation
+
+//====================================== Global Variables =============================================
+const int write_addr=0x22;
+int fm_pwr_up[3]={0x01, 0x00, 0x05}; // FM power-up command
+int am_pwr_up[3]={0x01, 0x01, 0x05}; // AM power-up command
+int fm_station[4]={0x20, 0x00, 0x22, 0x60}; // Set FM station
+int am_station[6]={0x40, 0x00, 0x02, 0x17, 0x00, 0x00}; // Set AM station
+float lcd_station=88.0;
+int reg_station=8800, reg_am_station=535, i=0, Response, ack=0, pwr_down=0x11, tune=0x31;
+int* p_pwr_down = &pwr_down;
+int* p_tune = &tune;
+bool last_mode=0;
+
+//===================================== Support Functions =============================================
+void SendCommand(int* array, int length) { /* Send Command to Si4735 */
+ radio.start();
+ ack=radio.write(write_addr);
+ for(i=0; i<length; i++) ack=radio.write(array[i]);
+ Response=radio.read(ack);
+ radio.stop();
+ wait(.2);
+}
+
+void Reset(void) { /* Reset AM/FM Radio */
+ reset=0;
+ wait(.2);
+ reset=1;
+ wait(.2);
+}
+
+void AM_Restart(void) { /* Reinitialize AM receiver */
+ SendCommand(p_tune, 1); // Disable carrier
+ wait(.2);
+ SendCommand(p_pwr_down, 1); // Power down sequence
+ wait(.2);
+ Reset();
+ SendCommand(am_pwr_up, 3); // Launch AM
+ SendCommand(am_station, 6); // Play current AM station
+}
+
+void FM_Restart(void) { /* Reinitialize FM receiver */
+ SendCommand(p_tune, 1); // Disable carrier
+ wait(.2);
+ SendCommand(p_pwr_down, 1); // Power down sequence
+ wait(.2);
+ Reset();
+ SendCommand(fm_pwr_up, 3); // Launch FM
+ SendCommand(fm_station, 4); // Play current FM station
+}
+//================================================ Main Code =======================================================
+int main() {
+ AM_FM.mode(PullUp);
+ station.mode(PullUp);
+ lock=0;
+ rclock.period(.000030518); // Set rclock oscillator to 32.768kHz
+ rclock=0.5; // 50% Duty Cycle for rclock
+ radio.frequency(100000); // I^2C frequency setting 100kHz
+ Reset();
+ SendCommand(fm_pwr_up, 3); // Initialize FM
+ SendCommand(fm_station, 4); // Play default fm station
+ last_mode=AM_FM;
+
+ while(1) {
+ if(AM_FM) { // FM selected (SW1 in the off position)
+ if(AM_FM!=last_mode) FM_Restart();
+ last_mode=AM_FM;
+ if(!station) { // SW2 pressed? Go to next station
+ lock=0;
+ while(!station);
+ if(reg_station<10800) reg_station+=10;
+ else reg_station=8800;
+ lcd_station=reg_station/100.0;
+ fm_station[3]=reg_station&0x00FF;
+ fm_station[2]=reg_station>>8;
+ SendCommand(fm_station, 4);
+ lock=1;
+ }
+ lcd.printf("Station:\n %3.1fMHz FM", lcd_station);
+ wait(.1);
+ lcd.cls();
+ }
+ else { // AM selected (SW1 in the on position)
+ if(AM_FM!=last_mode) AM_Restart();
+ last_mode=AM_FM;
+ if(!station) { // SW2 pressed? Go to next station
+ lock=0;
+ while(!station);
+ if(reg_am_station<1700) reg_am_station+=5;
+ else reg_am_station=530;
+ am_station[3]=reg_am_station&0x00FF;
+ am_station[2]=reg_am_station>>8;
+ SendCommand(am_station, 6);
+ lock=1;
+ }
+ lcd.printf("Station:\n %ukHz AM", reg_am_station);
+ wait(.1);
+ lcd.cls();
+ }
+ }
+}
diff -r 000000000000 -r ad1dcc41c893 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Mar 07 18:37:37 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/3d0ef94e36ec \ No newline at end of file