@@ -526,24 +526,63 @@ int analogRead(pin_size_t pinNumber) {
526
526
return adcConvert (_adc,cfg_adc);
527
527
}
528
528
529
+ void analogReference (uint8_t mode) {
529
530
531
+ adc_vref_control_t ctrl;
532
+
533
+ switch (mode) {
534
+ case AR_INTERNAL:
535
+ ctrl = ADC_VREF_CONTROL_IVREF_AVSS0; break ;
536
+ case AR_INTERNAL_1_5V:
537
+ ctrl = ADC_VREF_CONTROL_1_5V_OUTPUT; break ;
538
+ case AR_INTERNAL_2_0V:
539
+ ctrl = ADC_VREF_CONTROL_2_0V_OUTPUT; break ;
540
+ case AR_INTERNAL_2_5V:
541
+ ctrl = ADC_VREF_CONTROL_2_5V_OUTPUT; break ;
542
+ case AR_EXTERNAL:
543
+ ctrl = ADC_VREF_CONTROL_VREFH0_AVSS0; break ;
544
+ default :
545
+ ctrl = ADC_VREF_CONTROL_AVCC0_AVSS0; break ;
546
+ }
530
547
531
- void analogReference (uint8_t mode) {
532
- // TODO: in case VREFH is selected, please configure the pin accordingly
533
- // something like
534
- // pinPeripheral(digitalPinToBspPin(VREFH), (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | VREFH)
535
548
R_ADC_Close (&adc.ctrl );
536
- adc.cfg_extend .adc_vref_control = ( adc_vref_control_t )mode ;
549
+ adc.cfg_extend .adc_vref_control = ctrl ;
537
550
R_ADC_Open (&adc.ctrl , &adc.cfg );
538
551
539
552
R_ADC_Close (&adc1.ctrl );
540
- adc1.cfg_extend .adc_vref_control = ( adc_vref_control_t )mode ;
553
+ adc1.cfg_extend .adc_vref_control = ctrl ;
541
554
R_ADC_Open (&adc1.ctrl , &adc1.cfg );
542
555
}
543
556
544
-
545
-
546
-
557
+ static float aref = 0 ;
558
+ float analogReference () {
559
+ switch (adc.cfg_extend .adc_vref_control ) {
560
+ case ADC_VREF_CONTROL_1_5V_OUTPUT:
561
+ return 1.5 ;
562
+ case ADC_VREF_CONTROL_2_0V_OUTPUT:
563
+ return 2.0 ;
564
+ case ADC_VREF_CONTROL_2_5V_OUTPUT:
565
+ return 2.5 ;
566
+ case ADC_VREF_CONTROL_VREFH0_AVSS0:
567
+ // the user must know the voltage he applies from outside
568
+ return NAN;
569
+ default :
570
+ #if defined(AVCC_MEASURE_PIN)
571
+ if (aref == 0 ) {
572
+ analogReference (AR_INTERNAL);
573
+ delayMicroseconds (5 );
574
+ for (int i = 0 ; i < 10 ; i++) {
575
+ aref += analogRead (AVCC_MEASURE_PIN) * 1 .43f * AVCC_MULTIPLY_FACTOR / (1 << _analogRequestedReadResolution);
576
+ }
577
+ aref = aref / 10 ;
578
+ analogReference (AR_DEFAULT);
579
+ }
580
+ return aref;
581
+ #else
582
+ return NAN;
583
+ #endif
584
+ }
585
+ }
547
586
548
587
void analogReadResolution (int bits) {
549
588
/* 20221109 [maidnl] FIX Requested resolution:
0 commit comments