miércoles, 22 de febrero de 2017

PRACTICA # 5 CONVERTIDOR A/D 10 BITS

OBJETIVO:
       Se hará uso del módulo A/D de 10 bits de resolución con el que cuenta el MCU R5F563NB de la tarjeta de evaluación YRDKRX63N. El valor de muestreo será visualizado el LCD 96x64 en tiempo real.
  • Configurar el modulo A/D de 10 bits
  • Imprimir el valor del convertidor en el LCD.
DESARROLLO:
  •  Del manual Renesas RX63N RDK User's Manual ubicamos el canal AN2
     
  •  Debido a que no se tiene un potenciómetro conectado a un canal A/D 10 bits utilizaremos el conector PMOD1 en su entrada Nº1 PE4. 

  •  Del RX63N Group User's Manual: Hardware página 1748 hacemos referencia al canal analógico 2 cuyo registro de lectura es ADDRC:

PASOS:
  •  Creación de un proyecto:
1.- Abrir el software e2studio
2.- New/ C Project / Renesas RXC ToolChain


3.- Seleccionar el target R5F563NB, debug hardware Segger jLink, después next


4.- Seleccionar C/C++ Source file y por ultimo Finish.


5.- Configuraremos el A/D a 10 bits de resolución y un tiempo de muestreo de 2.0 us en el archivo r_cg_adc.c
void R_ADC_Create(void)
{   
            MSTP(AD) = 0; // AD 10 bits   enable

            /* set direction and enable input */
            PORTE.PDR.BIT.B4 = 0;               // PE4 como input
            PORTE.PMR.BIT.B4 = 0;               // como I/O
           MPC.PE4PFS.BYTE = 0x80;   // Set port function register to analog input, no interrupt.

            AD.ADCSR.BYTE = 0x00;
            //AD.ADCSR.BIT.ADIE =0;   // ADI interrupt is disabled
            //AD.ADCSR.BIT.ADST = 0;  //Stops A/D conversion

            /* software trigger, single scan mode, PCLK/8 = ADCLK = 6 MHz */
            AD.ADCR.BYTE = 0x00;

            /* flush LSB end */
            AD.ADCR2.BYTE = 0x00;
            //AD.ADCR2.BIT.DPSEL = 0;

            //Self-Diagnostic
            AD.ADDIAGR.BYTE = 0x0;

            /* sampling state register. adds to conversion time such that
            //Sampling time (μs) = Setting value of ADSSTR / ADCLK (MHz)            ADCLK = PCLK / 8 = 6 Mhz
            //
             Ts = 2 uS, Fs = 500 kHz */
            AD.ADSSTR = 12;
}

6.- La función main queda como sigue:

void main(void)
{
            set_ipl(0);              // enable interrupts
            SR_Oscilador();          //  F = 96 Mhz
            SR_LCD_GRAPH();          //  LCD 96x64
            SR_TIMER_0();            // Inicializa el Timer 0 en cascada para 16 bits
            SR_ADC();                // ADC 10 bits ch 2 PE4


            while(1)
            {
                        AdcValue = adc_get_vdd();          // adquiere el valor 10 bits del ch 2 PE4
                        voltage = (3.3 * AdcValue) / 1024.0;
                        LCDPrintf(0, 0, "Microcarsil ");
                        LCDPrintf(1, 0, "    2017    ");
                        LCDPrintf(2, 0, "Carlos Silva");
                        LCDPrintf(3, 0, "            ");
                        LCDPrintf(4, 0, "Practica #5 ");
                        LCDPrintf(5, 0, "            ");
                        LCDPrintf(6, 0, "AD10 = %.3f ", voltage);
                        LCDPrintf(7, 0, "            ");
                        delay_ms(100);
            }

}

  • Agregar código, compilar y debug:
1.- Bajar el código de:
--> Practica #5

2.- Compilar con el icono del martillo y debug con el icono del insecto:


VÍDEO:

No hay comentarios.:

Publicar un comentario