3 * Config & Main routine.
4 * (C) 2013-06-10 K.Ohta <whatisthis.sowhat ai gmail.com>
13 #include <pic18fregs.h> /* ONLY FOR PIC18x */
21 #include "lcd_acm1602.h"
27 __at(__CONFIG1H) _config1h = _FOSC_INTIO67_1H;
28 __at(__CONFIG2L) _config2l = _BORV_190_2L & _BOREN_ON_2L & _PWRTEN_ON_2L;
29 __at(__CONFIG2H) _config2h = _WDTEN_ON_2H & _WDTPS_32768_2H;
30 __at(__CONFIG3H) _config3h = _PBADEN_OFF_3H & _MCLRE_EXTMCLR_3H;
31 __at(__CONFIG4L) _config4l = _STVREN_ON_4L & _LVP_OFF_4L & _XINST_ON_4L & _DEBUG_ON_4L;
32 __at(__CONFIG5L) _config5l = _CP0_OFF_5L & _CP1_OFF_5L;
33 __at(__CONFIG5H) _config5h = _CPB_OFF_5H & _CPD_OFF_5H;
34 __at(__CONFIG6L) _config6l = _WRT0_OFF_6L & _WRT1_OFF_6L;
35 __at(__CONFIG6H) _config6h = _WRTD_OFF_6H & _WRTB_OFF_6H & _WRTC_OFF_6H;
36 __at(__CONFIG7L) _config7l = _EBTR0_OFF_7L & _EBTR1_OFF_7L;
37 __at(__CONFIG7H) _config7h = _EBTRB_OFF_7H;
41 SIGHANDLER(TMR0_handler)
54 // Clear interrupt flag
63 DEF_INTLOW(intlow_handler)
64 DEF_HANDLER(SIG_TMR0, TMR0_handler)
73 unsigned char am_mode3k;
79 static void update_display(void)
83 if(fmband < AKC6955_BAND_TV1) {
85 _PUTCHAR('1' + (fmband & 7));
86 } else if(fmband < AKC6955_BAND_FMUSER){
88 _PUTCHAR('1' + fmband - AKC6955_BAND_TV1);
94 if(amband == AKC6955_BAND_LW) {
96 } else if(amband <AKC6955_BAND_SW1) { //MW
98 _PUTCHAR('1' + amband - AKC6955_BAND_MW1);
99 } else if(amband < AKC6955_BAND_AMUSER) { //MW
101 _PUTCHAR('1' + amband - AKC6955_BAND_SW1);
102 } else if(amband == AKC6955_BAND_MW4){
116 int freq_lo = fmfreq % 100;
117 int freq_hi = fmfreq / 100;
118 print_numeric(freq_hi);
120 print_numeric(freq_lo);
128 print_numeric(recv_signal);
132 static void setfreq_updown(unsigned char ctlword)
135 case charcode_8: // Change band
138 if(amband > 18) amband = 0;
139 // amfreq = akc6955_setfreq(amfreq)
140 akc6955_set_amband(amband);
141 delay1ktcy(500); // 62.5ms
142 amband = akc6955_get_amband();
143 amfreq = akc6955_get_freq();
146 if(fmband > 7) fmband = 0;
147 // amfreq = akc6955_setfreq(amfreq)
148 akc6955_set_fmband(fmband);
149 delay1ktcy(500); // 62.5ms
150 fmband = akc6955_get_fmband();
151 fmfreq = akc6955_get_freq();
154 case charcode_2: // Change band
157 if(amband == 0) amband = 18;
158 if(amband >= 18) amband = 18;
159 // amfreq = akc6955_setfreq(amfreq)
160 akc6955_set_amband(amband);
161 delay1ktcy(500); // 62.5ms
162 amband = akc6955_get_amband();
163 amfreq = akc6955_get_freq();
166 if(fmband == 0) fmband = 7;
167 if(fmband >= 7) fmband = 7;
168 // amfreq = akc6955_setfreq(amfreq)
169 akc6955_set_fmband(fmband);
170 delay1ktcy(500); // 62.5ms
171 fmband = akc6955_get_fmband();
172 fmfreq = akc6955_get_freq();
175 case charcode_4: // Down Freq;
177 fmfreq = akc6955_down_freq(10); // DOWN 100KHz
179 amfreq = akc6955_down_freq(10); // DOWN 10KHz
182 case charcode_6: // Down Freq;
184 fmfreq = akc6955_up_freq(10); // UP 100KHz
186 amfreq = akc6955_up_freq(10); // UP 10KHz
189 case charcode_7: // Down Fast;
191 fmfreq = akc6955_down_freq(50); // DOWN 500KHz
193 amfreq = akc6955_down_freq(50); // DOWN 50KHz
196 case charcode_9: // Down Fast;
198 fmfreq = akc6955_up_freq(50); // UP 100KHz
200 amfreq = akc6955_up_freq(50); // UP 10KHz
203 case charcode_1: // Down Slow;
205 fmfreq = akc6955_down_freq(5); // DOWN 50KHz
207 amfreq = akc6955_down_freq(5); // DOWN 50KHz
210 case charcode_3: // Down Slow;
212 fmfreq = akc6955_up_freq(5); // UP 50KHz
214 amfreq = akc6955_up_freq(5); // UP 5KHz
217 case charcode_0: // Step
224 amfreq = akc6955_mode3k(am_mode3k);
237 unsigned char input_flag;
245 delay1ktcy(1000); // Wait 125ms
247 acm1602_init(0xa0, 1); //Init LCD
249 delay1ktcy(1000); // Wait 125ms
254 fmfreq = 8000; // 10KHz order.
255 amband = AKC6955_BAND_MW2;
256 fmband = AKC6955_BAND_FM2;
262 /* Push default parameters to AKC6955*/
264 akc6955_chg_fm(fm); // Set to AM
265 akc6955_set_amband(amband);
266 akc6955_set_freq(amfreq); // Dummy, TBS (954KHz)
267 akc6955_set_power(0xff); // Power ON
271 input_flag = readkey_compare();
273 readchar = pop_keyinfifo();
275 // Top of input-tree.
281 akc6955_set_amband(amband);
282 akc6955_set_freq(amfreq);
286 akc6955_set_fmband(fmband);
287 akc6955_set_freq(fmfreq);
299 case charcode_null: // None
302 // Numeric 0to9, or a to f.
303 setfreq_updown(readchar);
307 recv_signal = akc6955_read_level();
309 fmfreq = akc6955_get_freq();
311 amfreq = akc6955_get_freq();
313 // Check battery (include idle?)
314 // Read AKJC6955's status