jueves, 31 de octubre de 2013

MUESTREO DE SEÑALES

El siguiente programa tiene como objetivo mostrar una forma de realizar el muestreo de señales analógicas para sistemas de control digital, haciendo uso del timer0, interrupción por desbordamiento, el uso del ADC en modo free running, ademas de utilizar el UART para capturar los datos por medio de un programa externos como SCILAB, MATLAB o mediante hiperterminal.

DESCRIPCIÓN:

El timer realiza una interrupción por desbordamiento cada 800 microsegundos, una vez realizada entrado a la interrupción se lee el canal ADC0  y se guarda en una variable char sin signo, posteriormente se envia a través de la UART la cual esta configurada con un baud rate de 19200, sin paridad, enviando 8 bits de datos, con dos bits de stop.

El programa se compone del programa principal ademas de dos librerías para el control de la UART y el ADC los cuales agregare al final para que puedan descargarlos junto con su simulación en proteus.

Alguna duda pueden preguntar en los comentarios

Aquí les muestro el programa principal

/*
 * COMUNICATION2MEGA.c
 *
 * Created: 27/10/2013 12:31:42
 *  Author: NEBURESS.KYLL
 */
#ifndef F_CPU
#define F_CPU 8000000UL // XTAL de 8 MHz
#endif
#include <avr/io.h>
#include "InitADC.h"
#include "UARTAiNit.h"
#include <avr/interrupt.h>
#define bitclear(sfr,bit)(_SFR_BYTE(sfr)&=~(_BV(bit)))
#define bitset(sfr, bit)(_SFR_BYTE(sfr) |= (_BV(bit)))
#define togglebit(sfr,bit)(_SFR_BYTE(sfr)^=(_BV(bit)))

ISR(TIMER0_COMPA_vect){
//ADC y RS232
unsigned char n;
n=convADC();
TransmiteUART0(n);

/*LA ULTIMA PARTE ES PARA OBSERVAR EL FUNCIONAMIENTO DEL ADC SI DESEA PUEDE QUITAR ESTA PARTE*/
if (n>140) bitset(PORTB,PORTB0);
else bitclear(PORTB,PORTB0);
}

void TEMPORIZADOR(){
//PREESCALER DEL TIMER0 A 64
bitclear(TCCR0B,CS02);
bitset(TCCR0B,CS01);
bitset(TCCR0B,CS00);
//DESCONECTAR OC0A
bitclear(TCCR0A,COM0A1);
bitclear(TCCR0A,COM0A0);
//MODO CTC
bitclear(TCCR0B,WGM02);
bitset(TCCR0A,WGM01);
bitclear(TCCR0A,WGM00);
OCR0A=99;
}

void INTERRUPCION(){

bitset(TIMSK0,OCIE0A);
sei();
}

int main(void)
{

bitset(DDRB,DDB0);
TEMPORIZADOR();
INTERRUPCION();
initializeUART0(19200,0,8,2,2);
canalADC(0);
initADC(2,1,5);

    while(1)
    {
        //TODO:: Please write your application code



    }
}


Posteriormente publicare el programa donde podrán observar los datos obtenidos mediante el software scilab.

Les agrego el link de un archivo que hace mención sobre consideraciones que se deben tomar a la hora de seleccionar un capacitor bypass, considero que es de gran ayuda que lo lean debido a su importancia en el desarrollo de practicas donde se deben de compensar ruido y descompensaciones  dentro de los circuitos que son fallos frecuentes dentro de la ingeniería.

LINK CAPACITORES BYPASS

http://www.intersil.com/content/dam/Intersil/documents/an13/an1325.pdf

LINK PROGRAMA

https://mega.co.nz/#!41MHnKzT!EfPiuwr67CZeioVq5VBgMXbYJXA4aOQSJeHCbORGwcg





No hay comentarios:

Publicar un comentario