MSP-EXP430F5529 & CCS: Ejemplo básico del ADC12_A


Siguiendo con algunos ejemplos con el MSP430F5529 y usando CCS, toca el turno de usar el ADC12_A con el que cuenta este MCU, el cual tiene una resolución de 12 bits, en esta ocasión usaremos el ejemplo llamado "MSP430F55xx_adc_01" incluido en la carpeta MSP430F552x Code Examples.

¿Que hace este ejemplo? Básicamente configura para leer el voltaje por el puerto A0 y atenderlo mediante una interrupción (el sistema se encuentra en LowPowerMode hasta que la interrupción lo saca de ahí), cuando el voltaje en A0 es mayor a 0.5*AVcc (considerando que AVcc  esta conectado a VCC, el valor debería de ser de unos 3.3V aproximadamente, yo lo he medido con mi multimetro y andaba en los 3.5V) encenderá LED1, caso contrario permanecerá apagado.

Circuito:
Ahora considerando que se esta usando la Experemental Board de TI, y revisando el esquematico, notaremos que el pin A0 esta conectado a DB0 (un Touch Pad de los 5 que trae la tarjeta) lo cual no servirá para demostrar este ejemplo, por lo tanto he decidido usar el potenciometro que trae la tarjeta, este esta conectado a A5 (como se muestra en la siguiente imagen) pero para que funcione correctamente debemos activar P1.8 y dejar puesto el jumper JP2.


Código:
Considerando estas modificaciones el código queda de la siguiente forma:
/*******************************************************************************
*
* MSP-EXP430F5529_002: Ejemplo básico del ADC_12
*
*******************************************************************************
* FileName: main.c
* Processor: MSP430F5529
* Complier: CCS 7.2.0.00013
* Author: Pedro Sánchez Ramírez (MrChunckuee)
* Blog: http://mrchunckuee.blogspot.com/
* Email: mrchunckuee.psr@gmail.com
* Description: ADC12, Sample A5, Set P1.0 if A5 > 0.5*AVcc
*******************************************************************************
* Rev. Date Comment
* v0.01 30/08/2017 - Testing using MSP-EXP430f5529 USB Experimental Board
* - Se usó el potenciómetro en A5, para ello se habilito
* y se puso en alto a P8.0
******************************************************************************/
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on
ADC12CTL1 = ADC12SHP; // Use sampling timer
ADC12MCTL0 = ADC12INCH_5; // Use A5 (wheel) as input
ADC12IE = 0x01; // Enable interrupt
ADC12CTL0 |= ADC12ENC; // Enable conversions
P6SEL |= BIT5; // P6.5 ADC option select (A5)
P1DIR |= BIT0; // P1.0 output
P8DIR |= BIT0; // P8.0 output
P8OUT |= BIT0; // Set P8.0 high
while (1)
{
ADC12CTL0 |= ADC12SC; // Start sampling/conversion
__bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit
__no_operation(); // For debugger
}
}
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
switch(__even_in_range(ADC12IV,34))
{
case 0: break; // Vector 0: No interrupt
case 2: break; // Vector 2: ADC overflow
case 4: break; // Vector 4: ADC timing overflow
case 6: // Vector 6: ADC12IFG0
if (ADC12MEM0 >= 0x7ff) // ADC12MEM = A5 > 0.5AVcc?
P1OUT |= BIT0; // P1.0 = 1
else
P1OUT &= ~BIT0; // P1.0 = 0
__bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
case 8: break; // Vector 8: ADC12IFG1
case 10: break; // Vector 10: ADC12IFG2
case 12: break; // Vector 12: ADC12IFG3
case 14: break; // Vector 14: ADC12IFG4
case 16: break; // Vector 16: ADC12IFG5
case 18: break; // Vector 18: ADC12IFG6
case 20: break; // Vector 20: ADC12IFG7
case 22: break; // Vector 22: ADC12IFG8
case 24: break; // Vector 24: ADC12IFG9
case 26: break; // Vector 26: ADC12IFG10
case 28: break; // Vector 28: ADC12IFG11
case 30: break; // Vector 30: ADC12IFG12
case 32: break; // Vector 32: ADC12IFG13
case 34: break; // Vector 34: ADC12IFG14
default: break;
}
}
Vídeo
Aquí un pequeño vídeo con la tarjeta funcionando:


Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.


Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.
 
Bibliografía:

Publicar un comentario

0 Comentarios