40 word16_to_bytes param;
42 param.raw = parameter;
44 Wire.beginTransmission(
this->deviceAddress);
46 Wire.write(param.refined.highByte);
48 Wire.write(param.refined.lowByte);
50 Wire.endTransmission();
51 delayMicroseconds(3000);
63 word16_to_bytes result;
65 Wire.beginTransmission(
this->deviceAddress);
67 Wire.endTransmission();
68 delayMicroseconds(3000);
69 Wire.requestFrom(
this->deviceAddress, 2);
70 result.refined.highByte = Wire.read();
71 result.refined.lowByte = Wire.read();
72 delayMicroseconds(3000);
85 return this->deviceId;
97 return reg.refined.XTAL_OK;
129 reg.refined.REFCLK = crystal;
130 reg.refined.RCLK_EN = ref_clock;
133 this->currentRefClockType = crystal;
134 this->currentRefClockEnabled = ref_clock;
152 digitalWrite(
this->enablePin, on_off);
173 kt09xx_userstartch uf;
175 kt09xx_userchannum uc;
178 reg.refined.USERBAND =
this->currentDialMode =
DIAL_MODE_ON;
182 gpio.refined.GPIO1 = 2;
187 if (
this->currentMode ==
MODE_AM) {
188 uf.refined.USER_START_CHAN = minimu_frequency;
189 uc.refined.USER_CHAN_NUM = (maximum_frequency - minimu_frequency) /
this->currentStep;
190 ug.refined.USER_GUARD = 0x0011;
192 uf.refined.USER_START_CHAN = minimu_frequency / 50;
193 uc.refined.USER_CHAN_NUM = ((maximum_frequency - minimu_frequency) / 50) /
this->currentStep;
194 ug.refined.USER_GUARD = 0x001D;
214 reg.refined.USERBAND =
this->currentDialMode =
DIAL_MODE_OFF;
218 gpio.refined.GPIO1 = 0;
235 gpio.refined.GPIO2 = 2;
249 gpio.refined.GPIO2 = 0;
260 if ( volume > 31)
return;
262 rx.refined.VOLUME = volume;
264 this->currentVolume = volume;
269 if (
this->currentVolume == 31 )
return;
270 setVolume(
this->currentVolume + 1);
274 if (
this->currentVolume == 0)
return;
275 setVolume(
this->currentVolume - 1);
322 void KT0915::
setup(
int enable_pin, uint8_t oscillator_type, uint8_t ref_clock)
325 pinMode(
this->enablePin, OUTPUT);
329 setReferenceClockType(oscillator_type, ref_clock);
347 reg.refined.CAP_INDEX = capacitor;
361 reg.refined.MONO = on_off;
374 reg.refined.DE = value;
389 void KT0915::
setFM(uint32_t minimum_frequency, uint32_t maximum_frequency, uint32_t default_frequency, uint16_t step)
396 this->currentStep = step;
397 this->currentFrequency = default_frequency;
398 this->minimumFrequency = minimum_frequency;
399 this->maximumFrequency = maximum_frequency;
403 reg.refined.RESERVED1 = 1;
405 reg.refined.USERBAND =
this->currentDialMode;
406 reg.refined.REFCLK =
this->currentRefClockType;
407 reg.refined.RCLK_EN =
this->currentRefClockEnabled;
412 setTuneDialModeOn(minimum_frequency, maximum_frequency);
414 setFrequency(default_frequency);
429 void KT0915::
setAM(uint32_t minimum_frequency, uint32_t maximum_frequency, uint32_t default_frequency, uint16_t step)
433 this->currentStep = step;
434 this->currentFrequency = default_frequency;
435 this->minimumFrequency = minimum_frequency;
436 this->maximumFrequency = maximum_frequency;
440 reg.refined.RESERVED1 = 1;
442 reg.refined.USERBAND =
this->currentDialMode;
443 reg.refined.REFCLK =
this->currentRefClockType;
444 reg.refined.RCLK_EN =
this->currentRefClockEnabled;
448 setTuneDialModeOn(minimum_frequency, maximum_frequency);
450 setFrequency(default_frequency);
461 kt09xx_amchan reg_amchan;
462 kt09xx_tune reg_tune;
464 if (
this->currentMode ==
MODE_AM)
466 reg_amchan.refined.AMTUNE = 1;
467 reg_amchan.refined.AMCHAN = frequency;
472 reg_tune.refined.FMTUNE = 1;
473 reg_tune.refined.RESERVED = 0;
474 reg_tune.refined.FMCHAN = frequency / 50;
475 setRegister(
REG_TUNE, reg_tune.raw);
478 this->currentFrequency = frequency;
490 this->currentFrequency +=
this->currentStep;
491 if (
this->currentFrequency >
this->maximumFrequency)
492 this->currentFrequency =
this->minimumFrequency;
494 setFrequency(
this->currentFrequency);
506 this->currentFrequency -=
this->currentStep;
507 if (
this->currentFrequency <
this->minimumFrequency)
508 this->currentFrequency =
this->maximumFrequency;
510 setFrequency(
this->currentFrequency);
521 this->currentStep = step;
531 return this->currentFrequency;