Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Micro At90s8535posciloscopio A Base de Microcontrolador y PC
Micro At90s8535posciloscopio A Base de Microcontrolador y PC
ALUMNOS:
Hernndez Durn Pablo Damin (203321902)
Hernndez Merchand Israel (202317691)
UNIDAD:
Universidad Autnoma Metropolitana - Iztapalapa
DIVISIN:
Ciencias Bsicas e Ingeniera (CBI)
LICENCIATURA:
Ingeniera Electrnica en Comunicaciones
NOIMBRE DEL ASESOR:
Miguel ngel Ruiz Snchez
Presentacin:
En este proyecto implementamos un osciloscopio, el cual consta principalmente
de una PC y un sistema basado en microcontrolador. La PC se encarga de interactuar
con el usuario final; es decir, permite que el usuario configure el osciloscopio y
despliega la forma de onda e informacin relacionada con ella. Por su parte, el
microcontrolador es el encargado del muestreo de la seal a analizar, as como del
correcto acoplamiento de esta. La comunicacin entre la PC y el microcontrolador la
llevamos a cabo en forma serial.
I. CONTENIDO.
I. CONTENIDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
II. INTRODUCCIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
5
6
8
8
12
24
28
31
32
33
37
37
37
38
39
40
43
43
43
44
44
44
45
46
54
57
58
60
60
62
65
69
V. CONCLUSIONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
VI. REFERECIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
II. INTRODUCCIN
Los osciloscopios son instrumentos utilizados para poder apreciar en su pantalla variaciones de voltaje
(seales peridicas o no peridicas). Estos instrumentos son caros y tienen cierta dificultad para desplegar
formas de onda a bajas frecuencias.
La palabra osciloscopio es un hibrido etimolgico. La primera parte deriva del latn oscillare que
significa balanceo; la segunda parte viene del griego clsico skopein que significa observar o examinar.
Como ya mencionamos, existen osciloscopios comerciales, estos son caros pero por lo general cuentan
con altas frecuencias de muestreo (Figura 1):
Figura 1.- Osciloscopio Digital de 4 canales a 100 MHz, costo aproximado de $22,000 pesos mexicanos.
Bajo costo
Software actualizable
La USART es parte del hardware que se encuentra dentro del chip. La USART es la encargada controlar
y administrar la transmisin y recepcin de los datos en forma serial.
Configuramos este perifrico del microcontrolador del tal forma que lea las muestras (1 byte por muestra)
desde un buffer circular (utilizando la memoria de datos del microcontrolador); tambin lo configuramos de tal
manera que implemente el mismo protocolo de comunicacin de la PC.
Como hemos mencionado, las muestras a transmitir las obtenemos del buffer circular, el cual tiene el
mismo tamao que el buffer de entrada del puerto serial.
A continuacin se muestra el diagrama a bloques de la USART del microcontrolador atmega8535
(Figura 6) y una breve explicacin del mismo:
Transmisin de datos
La transmisin se inicia cuando se carga un dato en el registro de datos (UDR) que se encuentra dentro
del modulo de la USART. El dato cargado es transferido del registro de datos (UDR) al registro de
desplazamiento de transmisin cuando este listo para enviar un nuevo dato. La USART est lista para recibir el
siguiente dato cuando el bit UDRE (USART Data Register Empty) es puesto en uno. El bit TXEN en el registro
UCSRB (USART Control Register) es el encargado de habilitar la transmisin de la USART cuando es puesto
en uno. La transmisin de la USART se realiza por el pin nmero 15 del chip (TXD, PD1).
Recepcin de datos
Para que la recepcin de datos se habilite es necesario poner en uno el bit RXEN en el registro UCSRB.
La recepcin de la USART se realiza por el pin nmero 14 del chip (RXD, PD0). La velocidad de transmisin,
el modo de operacin (sncrono asncrono), y el formato de la trama debe ser establecido antes de que se
realice la recepcin.
Inicializacin de la USART
La USART tiene que ser inicializada antes de que cualquier comunicacin tenga lugar. El proceso de
inicializacin normalmente consiste en ajustar el rango de baudios, el formato de las tramas y habilitar el
transmisor o el receptor dependiendo del uso.
RXC: USART Receive Complete (bit 7) - Este bit es activado (en uno) cuando un dato recibido es
transferido desde el registro de desplazamiento al UDR. El bit es activado omitiendo cualquier error de trama
detectado. Cuando el bit RXCIE es activado, la interrupcin Recepcin Completa de la USART ser ejecutada
cuando el bit RXC es puesto en uno. El bit RXC es limpiado por la lectura del UDR.
TXC: USART Transmit Complete (bit 6) - Este bit es puesto en uno cuando todo el dato (incluyendo el
bit de paro) en el registro de desplazamiento ha sido corrido hacia afuera y no ha sido escrito un nuevo dato en el
UDR. Cuando el bit TXCIE en el UCSRA es puesto en uno, el valor que tenga el TXC causa que la interrupcin
USART Transmit Complete se ejecute. TXC es limpiado por hardware cuando se ejecuta el correspondiente
manejador de interrupcin.
10
UDRE: UART Data Register Empty (bit 5) - Este bit es puesto en uno cuando un dato escrito en el UDR
es transferido al registro de desplazamiento. Poner en uno este bit indica que el transmisor esta listo para recibir
un nuevo dato para la transmisin. El bit UDRE es limpiado escribiendo en UDR. Cuando el manejador de
interrupcin de transmisin de datos es usado, la rutina de interrupcin USART Data Register Empty debe
escribir en el UDR para liberar al bit UDRE. El bit UDRE es puesto en uno durante el reset para indicar que el
transmisor est listo.
El transmisor de la USART tiene dos banderas que indican su estado: USART Data Register Empty
(UDRE) y Transmit Complete (TXC).Ambas banderas pueden ser usadas para generar interrupciones.
La bandera de registro de datos vaca (UDRE) indica si el buffer de transmisin esta listo para recibir
nuevos datos. Este bit es puesto en uno cuando el buffer de transmisin esta vaco, y en uno cuando el buffer de
transmisin contiene datos a ser transmitidos.
La bandera de transmisin completa(TXC) es puesta en uno cuando la trama completa en el registro de
transmisin (UDR) ha enviado todo su contenido y no hay nuevos datos presentes en el buffer de transmisin.
Formato de la Trama
Consiste en la especificacin de factores de la comunicacin serial asncrona como son bit de inicio, bit
deparo, bits de dato y bit de paridad. Estos factores se configuran mediante el registro UCSRC (Figura 10).
11
12
El motivo por el que PAM es insuficiente para establecer una comunicacin digital es por que aunque
traduzca la forma actual de la onda a una serie de pulsos, siguen teniendo amplitud (se trata todava de una seal
analgica y no digital). Para convertir estos pulsos en su equivalente digital, se deben de modificar usando
modulacin de cdigo de pulso (PCM).
PCM (Pulse Code Modulation) modifica los pulsos creados por PAM para crear una seal
completamente digital. Para hacerlo, PCM, en primer lugar, cuantifica los pulsos de PAM. La cuantificacin es
un mtodo de asignacin de los valores enteros a un rango especfico (Figura 13). Luego, cada uno de esos
valores finitos ser codificado, es decir, a cada muestra cuantificada se le otorga un cdigo concreto,
convirtiendo de esta forma la seal original en una serie de valores que se pueden manejar digitalmente.
Finalmente, para enviar la seal a travs de un enlace digital de comunicaciones se asigna un cdigo
binario a cada valor y se transforman estos dgitos binarios en una seal puramente digital usando una de las
tcnicas de codificacin digital-digital. (Figura 14)
Una vez que se tiene la conversin lista se puede regresar a una forma analgica, para la reconstruccin
de la seal analgica se requiere poca informacin. Tomando como referencia el teorema de muestreo de
Shannon, para asegurar la reproduccin exacta de una seal analgica original usando PAM, la tasa de muestreo
debe ser al menos el doble de la frecuencia mxima de la seal original.
13
Con base en la teora, si se desea muestrear la informacin de una seal que tiene como frecuencia
mxima 100 Hz, la tasa de muestreo debe ser de 200
muestras/s. A una velocidad de muestreo menor, la informacin se perdera; a una mayor, no es posible tener
informacin extra.
En la prctica, cuando se regenera una seal a partir de sus muestras se emplea un reconstructor que
dista mucho del ideal planteado por Shannon. Debido a esto, para poder recuperar correctamente la seal a partir
de sus muestras, es necesario muestrearla a una velocidad superior. En el sistema desarrollado se ha trabajado
con una velocidad de muestreo de 17 kHz. Para desarrollos futuros se deber tener en cuenta la necesidad de
aumentar dicha velocidad de muestreo.
14
El ADC contiene un circuito de muestreo que asegura que la entrada de voltaje al ADC sea retenida en
un nivel constante durante la conversin. En la siguiente figura (Figura 15) se muestra un diagrama a bloques
del ADC.
15
El ADC tiene un pin separado que se usa como fuente de voltaje (AVCC), el cual no difiere ms de 0.3
V de VCC.
El voltaje de referencia interna es nominalmente de 2.56 V. El voltaje de referencia puede ser
externamente desacoplado en el pin AREF por un capacitor para un mejor desempeo con respecto al ruido.
Inicio de la conversin
Una conversin se inicia escribiendo uno lgico en el bit de inicio de la conversin ADSC. Este bit
permanece en uno mientras a conversin se encentra en progreso y se cambia a cero por medio de hardware
cuando la conversin ha terminado. Si u canal de datos es seleccionado mientras una conversin est e progreso,
el ADC terminar de realizar la conversin actual antes de que el cambio de canal se realice.
Alternativamente, una conversin puede ser activada automticamente por distintas fuentes. El
autodisparo se habilita poniendo un uno lgico en el Auto Trigger Enable bit (ADATE) en el ADCSRA. La
fuente de disparo es seleccionada por los bits de seleccin de disparo (ADTS) en el SFIOR. Cuando un flanco
positivo ocurre en la seal seleccionada para el disparo, el prescalador del ADC se resetea y la conversin inicia.
Esto proporciona un mtodo de conversin a intervalos fijos. Si la seal del disparador contina e uno cuando la
conversin ha terminado, la nueva conversin no comenzar. Si otro flanco de subida ocurre e la seal de
disparo durante la conversin, el flanco positivo ser ignorado. La figura 16 muestra un diagrama del
autodisparador lgico:
16
Cuando se inicia una conversin poniendo un uno e el bit ADSC en el ADCSRA, la conversin inicia en
el siguiente flanco de subida del ciclo de reloj. Una conversin normal toma 13 ciclos de reloj del ADC. La
primera conversin despus de que el ADC es activado toma 25 ciclos de reloj para inicializar la circuiteria
analgica.
La muestra actual toma 1.5 ciclos de reloj despus de que comienza una conversin normal y 13.5 ciclos
del reloj ADC despus del inicio de la primera conversin. Cuando una conversin es completada, el resultado
se escribe en el registro de datos del ADC, y ADIF es puesto a uno. En el modo de conversin sencilla, el ADSC
es puesto en cero simultneamente y una nueva conversin ser iniciada e el primer flanco positivo del reloj del
ADC.
Cuando se utiliza el modo de auto disparo, el prescalador se resetea cuando el disparo ocurre. Esto
asegura u retraso establecido desde el disparo hasta el inicio de la conversin. En este modo, el muestreo y la
retencin toma 2 ciclos de reloj despus del flanco de subida de la fuente de disparo. Se utilizan tres ciclos de
reloj adicionales para la lgica de sincronizacin. En el modo libre, una nueva conversin comenzar
inmediatamente despus de que se complete la conversin, mientras que el ADSC permanece en alto. En la
siguiente tabla (Figura 18) se resumen los tiempos de conversin para el ADC:
17
Si los canales de ganancia diferencial estn siendo utilizados y las conversiones son iniciadas por el auto
disparo, el ADC debe ser apagado entre conversiones. Cuando se ocupa el auto disparo, el prescalador del ADC
se resetea antes de que la conversin inicie. Deshabilitando y luego habilitando el ADC entre cada conversin
(escribiendo en 0 y luego en 1 el ADEN en el ADCSRA) provoca que las conversiones sean vlidas.
18
ADC =
VIN 1024
VREF
El VIN es el voltaje del pin de entrada seleccionada y VREF el voltaje de referencia seleccionado. 0x000
representa la tierra analgica, y 0x3FF representa el voltaje de referencia seleccionado menos el LSB (Bit Menos
Significativo).
La siguiente tabla (Figura 19) resume las selecciones del voltaje de referencia para el ADC, mientras
que la Figura 20 muestra los canales de entrada y la seleccin de la ganancia.
19
ADC =
En donde, VPOS es el voltaje en el pin de entrada positivo, VNEG es el voltaje en el pin de entrada
negativo, GAIN es el factor de ganancia seleccionada y VREF es el voltaje de referencia seleccionado. El
resultado se presenta en forma de complemento a dos, desde 0x200 (-512d) hasta 0x1FF (+511d). La figura 21
muestra la codificacin del rango de entradas diferenciales, mientras que en la tabla (Figura 22) se muestra el
cdigo resultante de salida si el par de entradas diferenciales es seleccionado con una ganancia GAIN y u voltaje
de referencia VREF.
20
La figura 23 muestra los bits del registro ADMUX as como sus nombres y su valor inicial.
21
Estos bits seleccionan cual combinacin de las entradas analgicas son seleccionadas en el ADC. Estos
bits tambin seleccionan la ganancia para los canales diferenciales. Si estos bits son cambiados durante una
conversin, los cambios no tendrn efecto hasta que la conversin actual haya terminado. En la siguiente tabla
(figura 25) se muestran los detalles de estos cuatro bits
22
23
El comparador del ATMEGA8535 compara los valores de entrada en el pin positivo AIN0 y en el pin
negativo AIN1. Cuando el voltaje en el pin positivo (AIN0) es mayor que en el pin negativo (AIN1), la salida del
comparador analgico, ACO, es uno. La salida del comparador puede ser configurada para disparar el
Timer/Counter1. Tambin, el comparador, puede disparar una interrupcin separada, exclusiva del comparador
analgico. El usuario puede seleccionar el tipo de disparo para la interrupcin, ya sea por flanco de subida, de
bajada o por nivel. El diagrama a bloques del comparador y la lgica a su alrededor se muestran en la figura 27.
24
25
26
27
La Interrupcin Externa(atmega8535):
Las interrupciones externas son disparadas por los pines INT0, INT1 y INT2. Esta herramienta ofrece un
camino para generar una interrupcin por software. Las interrupciones externas pueden ser disparadas por flanco
de bajada, de subida o por un cambio lgico. Estas son configuradas como se indica en las especificaciones del
registro de control (MCUCR) y el registro de control de estados (MCUCSR).
Si se usa una interrupcin por cambio de nivel lgico, el cambio de nivel debe ser mantenido por algn
tiempo para que el MCU lo reconozco. Esto provoca que el MCU sea menos sensitivo al ruido. El cambio de
nivel es muestreado dos veces por el reloj del oscilador del Watchdog.
La interrupcin externa 1 es activada por el pin externo INT1 si el bit I del SREG es uno y la
correspondiente mascara de interrupcin en el GICR es uno. El nivel y flancos sobre el pin externo INT1 que
activa la interrupcin est definido en la siguiente tabla (figura 35).
El valor sobre el pin INT1 es revisado antes de detectar los flancos. Si el flanco o el cambio de nivel
lgico es seleccionado, los ltimos pulsos mas grandes que el pulsos de reloj generan una interrupcin. Los
pulsos mas cortos no garantizan generar una interrupcin. Si el nivel bajo de interrupcin se selecciona, el nivel
bajo debe ser mantenido hasta que la instruccin actual se complete.
28
La interrupcin externa 0 es activada por el pin externo INT0 si el bit I del SREG es uno y la
correspondiente mascara de interrupcin en el GICR es uno. El nivel y flancos sobre el pin externo INT0 que
activa la interrupcin est definido en la siguiente tabla (figura 36).
El valor sobre el pin INT0 es revisado antes de detectar los flancos. Si el flanco o el cambio de nivel
lgico es seleccionado, los ltimos pulsos mas grandes que el pulsos de reloj generan una interrupcin. Los
pulsos mas cortos no garantizan generar una interrupcin. Si el nivel bajo de interrupcin se selecciona, el nivel
bajo debe ser mantenido hasta que la instruccin actual se complete.
29
30
Max 232:
La comunicacin serial es un protocolo muy comn (no hay que confundirlo con el Bus Serial de
Comunicacin, o USB) para comunicacin entre dispositivos que se incluye de manera estndar en
prcticamente cualquier computadora. La mayora de las computadoras incluyen dos puertos seriales RS-232. La
comunicacin serial es tambin un protocolo comn utilizado por varios dispositivos para instrumentacin;
existen varios dispositivos compatibles con GPIB que incluyen un puerto RS-232. Adems, la comunicacin
serial puede ser utilizada para adquisicin de datos si se usa en conjunto con un dispositivo remoto de muestreo.
El concepto de comunicacin serial es sencillo. El puerto serial enva y recibe bytes de informacin un
bit a la vez. Aun y cuando esto es ms lento que la comunicacin en paralelo, que permite la transmisin de un
byte completo por vez, este mtodo de comunicacin es ms sencillo y puede alcanzar mayores distancias. Por
ejemplo, la especificacin IEEE 488 para la comunicacin en paralelo determina que el largo del cable para el
equipo no puede ser mayor a 20 metros, con no ms de 2 metros entre cualesquier dos dispositivos; por el otro
lado, utilizando comunicacin serial el largo del cable puede llegar a los 1200 metros.
Tpicamente, la comunicacin serial se utiliza para transmitir datos en formato ASCII. Para realizar la
comunicacin se utilizan 3 lneas de transmisin: (1) Tierra (o referencia), (2) Transmitir, (3) Recibir. Debido a
que la transmisin es asincrnica, es posible enviar datos por un lnea mientras se reciben datos por otra. Existen
otras lneas disponibles para realizar handshaking, o intercambio de pulsos de sincronizacin, pero no son
requeridas. Las caractersticas ms importantes de la comunicacin serial son la velocidad de transmisin, los
bits de datos, los bits de parada, y la paridad. Para que dos puertos se puedan comunicar, es necesario que las
caractersticas sean iguales.
Interfase Serial RS232
La interfase RS232 es simple, universal y con un buen servicio, pero tiene algunos defectos como
interfase de datos. Su origen esta ubicado antes de las computadoras modernas y contiene muchas caractersticas
que no son relevantes para usos actuales. Puede ser controlada por mdems muy viejos y tiene muchas seales
de control para hacer esto por hardware, pero actualmente no se usan muchas de las seales de control que
ofrece.
La mejor caracterstica de la interfase RS232 es que o requiere de la transmisin de un reloj, la recepcin
de un bit de inicio es suficiente para provocar que el receptor interprete correctamente los datos a partir de dicho
bit. A esto se le llama transmisin asncrona. La interfase RS232 permite hasta un 5% de diferencia en los
tiempos de transmisin y recepcin. Esto es importante si se usa un microcontrolador cuyo porcentaje de error en
el generador de baudios sea menor al 5%, lo cual implica que se puede usar el estndar RS232 sin problemas.
La seal del estndar RS232 es del tipo bipolar, de los +3 a los +15 volts se considera un espacio
(encendido), mientras que de los -3 a los -15 volts se considera una marca (apagado).
31
El nivel de la seal de salida usualmente oscila entre los +15 y -15 volts. El rea que est entre los -3 y
los +3 volts est diseada para dar alguna inmunidad al ruido. La figura 39 muestra como es la transmisin
usando el protocolo RS232.
Pin: Etiqueta:
Nombre:
Tipo:
1
2
3
4
5
6
7
8
9
Detecta Acarreo
Receptor de Datos
Transmisor de Datos
Terminal de Dato
Seal de Tierra
Dato Listo
Pedir para Enviar
Limpiar para Enviar
Timbre Indicador
Control
Datos
Datos
Control
Tierra
Control
Control
Control
Control
CD
RD
TD
DTR
GND
DSR
RTS
CTS
RI
32
33
Tambin fue necesario implementar un buffer inversor de voltaje, el cual tiene a su entrada la
salida del limitador de voltaje (para que la salida del inversor tambin este limitada a 5 Volts pico). El
inversor de voltaje es necesario para poder tomar las muestras de las seales con voltajes negativos, ya que
tanto el comparador analgico como el convertidor analgico digital del microcontrolador atmega8535 solo
tienen entradas con capacidad para voltajes entre 0 y 5 Volts pico. Para ello utilizamos uno de los
amplificadores operacionales del TL082, del cual se muestra a continuacin su diagrama de conexin
(Figura 44):
A continuacin se muestra el diseo del buffer inversor de voltaje (Figura 45), as como la
simulacin en Electronic Workbench de su respuesta en el tiempo cuando la seal de entrada es de 4 Volts
pico (Figura 46) y de 15 Volts pico (Figura 47):
35
36
37
38
Inicializa:
En esta rutina se configura el Stack Pointer de la memoria de datos, el apuntador 'X' y el
apuntador 'Y' que sirven para leer o escribir datos en un buffer circular. El buffer circular sirve para que
el 'ADC' almacene las muestras de la seal analgica. Tambin sirve para que la 'USART' lea y envi
una a una las muestras. En esta rutina tambin se limpia la bandera 't' que nos sirve para identificar si se
estn enviando (t=1) o no (t=0) las muestras a la PC. Tambin se habilitan todas las interrupciones de
forma global.
Inicializa Puertos:
En esta rutina se configura el 'puerto A' de entrada (el cual sirve para la entrada diferencial del
convertidor analgico digital), tambin se configura el 'pin PD1' como de salida (para el transmisor
'TXD' de la 'USART'), se configura el 'pin PD2' como entrada (para la interrupcin externa 'INT0').
Tambin se configura el 'puerto C' como de salida (para poder indicar al usuario que se esta enviando
informacin).
InicializaINT0:
En esta rutina se configura la interrupcin externa 'INT0', la cual sirve para que la PC le indique
al microprocesador que se deben generar y enviar un lote de muestras (512 muestras). En esta rutina se
habilita la 'INT0' y la se configura la interrupcin por flanco de subida.
InicializaUSART:
En esta rutina se configura el 'TXD' de la 'USART'. Se habilita el 'TDX' y la interrupcin del
'TDX'. En esta rutina tambin se configura el formato de las tramas que enva la 'USART' por el 'TDX':
1 bit de paro y 8 bits de datos. Tambin se configura la velocidad de transmisin de datos a 9600 bps. De
igual forma se configura la 'USART' a doble velocidad, lo cual genera un menor porcentaje de error.
InicializaADC:
En esta rutina se configuran varios aspectos del Convertidor AD 'ADC'. Se selecciona el voltaje
de referencia VCC (5 volts); se hace un "ajuste izquierdo" para poder utilizar solo una resolucin de 8
bits. Tambin se selecciona a 'ADC0' como entrada positiva y a 'ADC1' como entrada negativa para la
entrada diferencial del 'ADC'.
InicializaAC:
En esta rutina se configuran varios aspectos del Comparador Analgico 'AC'. Se habilita el 'AC',
se aplica el 'pin AIN0' a la entrada positiva del 'AC', se habilita la salida del comparador y se deshabilita
la interrupcin del mismo.
Principal:
Esta rutina siempre se encuentra en espera de que la 'USART' envi una muestra o en espera de
que el 'ADC' resguarde una conversin en el buffer. Mientras tanto nos indica por el 'pin PC0' si el
proceso de muestreo esta activo o inactivo.
40
IniciaMuestreo:
Esta rutina identifica si el proceso de muestreo esta activo o inactivo. Si esta inactivo: arranca
todo el proceso de muestreo. Se habilita el 'ADC' e inicia la primera conversin. Se configura el auto
trigger, se habilita la interrupcin del 'ADC' y se selecciona el pre-escalador con un factor de divisin de
2. Tambin se habilita el 'TDX' de la 'USART' y se carga un dato en el 'UDR' de la 'USART' y modifica
la bandera 't' a '1' para indicar que el proceso de muestreo ahora esta activo. El registro 'foco' es '1' para
indicar que esta activo el proceso de muestreo. Si esta activo: pasa a la rutina que finaliza el muestreo.
FinalizaMuestreo:
En esta rutina se detiene el proceso de muestreo. Deshabilita el 'ADC' e indica por el 'puerto C'
que finalizo dicho proceso. Adems vaca el buffer y deshabilita el 'TDX' de la 'USART'. Tambin
modifica la bandera 't' a '0' para indicar que el proceso de muestreo ahora esta inactivo. El registro 'foco'
es '0' para indicar que esta inactivo el proceso de muestreo.
GuardaMuestra:
En esta rutina se resguarda una muestra del 'ADC' en el buffer cuando esta es generada, si la
'USART' esta deshabilitada entonces habilita la 'USART' y guarda la muestra directamente en el 'UDR'.
Si esta habilitada la 'USART' entonces el buffer no esta lleno ni vaci y entonces guarda la muestra en el
mismo. Tambin se selecciona si la seal es positiva o negativa. Tambin se vuelve a habilitar el 'ADC',
se inicia la primera conversin, se configura por auto trigger, se habilita la interrupcin del 'ADC', se
selecciona el pre-escalador con un factor de divisin de 2.
OnUSART:
En esta rutina se habilita el 'TDX' de 'USART' y guarda la muestra directamente en el 'UDR'.
Tambin se vuelve a habilitar el 'ADC', se inicia la primera conversin, se configura por auto trigger, se
habilita la interrupcin del 'ADC', se selecciona el pre-escalador con un factor de divisin de 2.
SelecCanal:
En esta rutina se selecciona si la seal es positiva o negativa mediante el resultado del
Comparador Analgico 'AC'. Si es positiva mantiene el canal positivo, de lo contrario cambia el canal de
entrada a negativo.
CanalPos:
En esta rutina se configura el 'ADC' para que seleccione el canal positivo, esto pasa cuando la
seal de entrada es positiva.
CanalNeg:
En esta rutina se configura el 'ADC' para que seleccione el canal negativo, esto pasa cuando la
seal de entrada es negativa.
TomaMuestra:
Esta rutina saca una muestra del buffer para enviarla por el 'TXD' de la 'USART'. Si el buffer
esta vaci, entonces deshabilita la 'USART' y entonces se enva un dato hasta que este sea generado por
el 'ADC'.
41
OffUSART:
En esta rutina se deshabilita el 'TDX' de 'USART'.
Putchar:
Esta rutina guarda un dato en el buffer si es que no esta lleno. Si esta lleno entonces retorna sin
guardar el dato.
Lleno:
Esta rutina determina si el buffer esta lleno.
SiguienteX:
Esta rutina avanza el apuntador X.
SiguienteZ:
Esta rutina avanza el apuntador Z.
Getchar:
Esta rutina saca un dato del buffer si es que no esta vaci. Si esta vaci entonces no saca ningn
dato.
Vacio:
Esta rutina determina si el buffer esta vaci.
SiguienteY:
Esta rutina avanza el apuntador Y.
IncrementaX:
Esta rutina incrementa en uno el apuntador X.
IncrementaY:
Esta rutina incrementa en uno el apuntador Y.
IncrementaZ:
Esta rutina incrementa en uno el apuntador Z.
42
fgetl:
fgets:
fread:
fscanf:
readasync:
stopasync:
BytesAvaliable:
InputBufferSize:
ReadAsyncMode:
Timeout:
TransferStatus:
ValuesReceived:
43
BaudRate:
DataBits:
Parity:
StopBits:
Terminator:
PinStatus:
RequestToSend:
44
45
46
ldi r26,$60
ldi r27,$00
ldi r28,$60
ldi r29,$00
clt
sei
/*
InicializaPuertos:
En esta rutina se configura el 'puerto A' de entrada (el cual sirve para la entrada diferencial del convertidor
analgico digital), tambin se configura el 'pin PD1' como de salida (para el transmisor 'TXD' de la 'USART'), se
configura el 'pin PD2' como entrada (para la interrupcin externa 'INT0'). Tambin se configura el 'puerto C' como
de salida (para poder indicar al usuario que se esta enviando informacin).
*/
InicializaPuertos:
clr aux
out DDRA,aux
out DDRB,aux
ldi aux,$02
out DDRD,aux
ser aux
out DDRC,aux
/*
InicializaINT0:
En esta rutina se configura la interrupcin externa 'INT0', la cual sirve para que la PC le indique al
microprocesador que se deben generar y enviar un lote de muestras (512 muestras). En esta rutina se habilita la
'INT0' y la se configura la interrupcin por flanco de subida.
*/
InicializaINT0:
ldi aux,(1<<ISC01)|(1<<ISC00)
out MCUCR,aux
ldi aux,(1<<INT0)
out GICR,aux
ldi foco,$00
/*
InicializaUSART:
En esta rutina se configura el 'TXD' de la 'USART'. Se habilita el 'TDX' y la interrupcin del 'TDX'. En esta rutina
tambin se configura el formato de las tramas que enva la 'USART' por el 'TDX': 1 bit de paro y 8 bits de datos.
Tambin se configura la velocidad de transmisin de datos a 9600 bps. De igual forma se configura la 'USART' a
doble velocidad, lo cual genera un menor porcentaje de error.
*/
InicializaUSART:
clr r17
out UBRRH,r17
ldi r16,$0C
out UBRRL,r16
ldi aux,(0<<TXEN)|(0<<TXCIE)
out UCSRB,aux
ldi aux,(1<<URSEL)|(0<<USBS)|(3<<UCSZ0)
out UCSRC,aux
47
ldi r16,(1<<U2X)|(1<<UDRE)
out UCSRA,r16
/*
InicializaADC:
En esta rutina se configuran varios aspectos del Convertidor AD 'ADC'. Se selecciona el voltaje de referencia VCC
(5 volts); se hace un "ajuste izquierdo" para poder utilizar solo una resolucin de 8 bits. Tambin se selecciona a
'ADC0' como entrada positiva y a 'ADC1' como entrada negativa para la entrada diferencial del 'ADC'.
*/
InicializaADC:
ldi aux,(0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(1<<MUX4)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0)
out ADMUX,aux
ldi aux,(0<<ADTS0)|(0<<ADTS1)|(0<<ADTS2)|(0<<ACME)
out SFIOR,aux
/*
InicializaAC:
En esta rutina se configuran varios aspectos del Comparador Analgico 'AC'. Se habilita el 'AC', se aplica el 'pin
AIN0' a la entrada positiva del 'AC', se habilita la salida del comparador y se deshabilita la interrupcin del mismo.
*/
InicializaAC:
clr aux
out ACSR,aux
/*
Principal:
Esta rutina siempre se encuentra en espera de que la 'USART' envi una muestra o en espera de que el 'ADC'
resguarde una conversin en el buffer. Mientras tanto nos indica por el 'pin PC0' si el proceso de muestreo esta
activo o inactivo.
*/
Principal:
out PORTC,foco
rjmp Principal
/*
IniciaMuestreo:
Esta rutina identifica si el proceso de muestreo esta activo o inactivo. Si esta inactivo: arranca todo el proceso de
muestreo. Se habilita el 'ADC' e inicia la primera conversin. Se configura el auto trigger, se habilita la interrupcin
del 'ADC' y se selecciona el pre-escalador con un factor de divisin de 2. Tambin se habilita el 'TDX' de la 'USART'
y se carga un dato en el 'UDR' de la 'USART' y modifica la bandera 't' a '1' para indicar que el proceso de muestreo
ahora esta activo. El registro 'foco' es '1' para indicar que esta activo el proceso de muestreo. Si esta activo: pasa a la
rutina que finaliza el muestreo.
*/
IniciaMuestreo:
ldi aux,(0<<INTF0)
out GIFR,aux
ldi foco,$01
brts FinalizaMuestreo
ldi aux,(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0)
out ADCSRA,aux
48
ldi aux,(1<<TXEN)|(1<<TXCIE)
out UCSRB,aux
ldi dato_get,$00
out UDR,dato_get
set
reti
/*
FinalizaMuestreo:
En esta rutina se detiene el proceso de muestreo. Deshabilita el 'ADC' e indica por el 'puerto C' que finalizo dicho
proceso. Adems vaca el buffer y deshabilita el 'TDX' de la 'USART'. Tambin modifica la bandera 't' a '0' para
indicar que el proceso de muestreo ahora esta inactivo. El registro 'foco' es '0' para indicar que esta inactivo el
proceso de muestreo.
*/
FinalizaMuestreo:
ldi aux,(0<<ADEN)
out ADCSRA,aux
ldi r26,$60
ldi r27,$00
ldi r28,$60
ldi r29,$00
ldi aux,(0<<TXEN)|(0<<TXCIE)
out UCSRB,aux
clt
ldi foco,$00
reti
/*
GuardaMuestra:
En esta rutina se resguarda una muestra del 'ADC' en el buffer cuando esta es generada, si la 'USART' esta
deshabilitada entonces habilita la 'USART' y guarda la muestra directamente en el 'UDR'. Si esta habilitada la
'USART' entonces el buffer no esta lleno ni vaci y entonces guarda la muestra en el mismo. Tambin se selecciona si
la seal es positiva o negativa. Tambin se vuelve a habilitar el 'ADC', se inicia la primera conversin, se configura
por auto trigger, se habilita la interrupcin del 'ADC', se selecciona el pre-escalador con un factor de divisin de 2.
*/
GuardaMuestra:
in dato_put,ADCH
in aux,UCSRB
cpi aux,$00
breq OnUSART
rcall Putchar
rcall SelecCanal
ldi aux,(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0)
out ADCSRA,aux
reti
/*
OnUSART:
En esta rutina se habilita el 'TDX' de 'USART' y guarda la muestra directamente en el 'UDR'. Tambin se vuelve a
habilitar el 'ADC', se inicia la primera conversin, se configura por auto trigger, se habilita la interrupcin del
'ADC', se selecciona el pre-escalador con un factor de divisin de 2.
*/
49
OnUSART:
ldi aux,(1<<TXEN)|(1<<TXCIE)
out UCSRB,aux
out UDR,dato_put
rcall SelecCanal
ldi aux,(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0)
out ADCSRA,aux
reti
/*
SelecCanal:
En esta rutina se selecciona si la seal es positiva o negativa mediante el resultado del Comparador Analgico 'AC'.
Si es positiva mantiene el canal positivo, de lo contrario cambia el canal de entrada a negativo.
*/
SelecCanal:
in aux,ACSR
sbrs aux,$05
rjmp CanalNeg
/*
CanalPos:
En esta rutina se configura el 'ADC' para que seleccione el canal positivo, esto pasa cuando la seal de entrada es
positiva.
*/
CanalPos:
ldi aux,(0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(1<<MUX4)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0)
out ADMUX,aux
ret
/*
CanalNeg:
En esta rutina se configura el 'ADC' para que seleccione el canal negativo, esto pasa cuando la seal de entrada es
negativa.
*/
CanalNeg:
ldi aux,(0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(1<<MUX4)|(1<<MUX3)|(0<<MUX2)|(1<<MUX1)|(1<<MUX0)
out ADMUX,aux
ret
/*
TomaMuestra:
Esta rutina saca una muestra del buffer para enviarla por el 'TXD' de la 'USART'. Si el buffer esta vaci, entonces
deshabilita la 'USART' y entonces se enva un dato hasta que este sea generado por el 'ADC'.
*/
TomaMuestra:
rcall Getchar
cpi bandera_get,$00
brne OffUSART
out UDR,dato_get
reti
50
/*
OffUSART:
En esta rutina se deshabilita el 'TDX' de 'USART'.
*/
OffUSART:
ldi aux,(0<<TXEN)|(0<<TXCIE)
out UCSRB,aux
reti
/*
Putchar:
Esta rutina guarda un dato en el buffer si es que no esta lleno. Si esta lleno entonces retorna sin guardar el dato.
*/
Putchar:
rcall Lleno
clr aux
cpse bandera_put,aux
ret
st X,dato_put
rcall SiguienteX
ret
/*
Lleno:
Esta rutina determina si el buffer esta lleno.
*/
Lleno:
clr bandera_put
mov r30,r26
mov r31,r27
rcall SiguienteZ
cpse r30,r28
ret
cpse r31,r29
ret
ser bandera_put
ret
/*
SiguienteX:
Esta rutina avanza el apuntador X.
*/
SiguienteX:
cpi r26,$60
brne IncrementaX
cpi r27,$01
brne IncrementaX
ldi r26,$60
ldi r27,$00
ret
51
/*
SiguienteZ:
Esta rutina avanza el apuntador Z.
*/
SiguienteZ:
cpi r30,$60
brne IncrementaZ
cpi r31,$01
brne IncrementaZ
ldi r30,$60
ldi r31,$00
ret
/*
Getchar:
Esta rutina saca un dato del buffer si es que no esta vaci. Si esta vaci entonces no saca ningn dato.
*/
Getchar:
rcall Vacio
clr aux
cpse bandera_get,aux
ret
ld dato_get,Y
rcall SiguienteY
ret
/*
Vacio:
Esta rutina determina si el buffer esta vaci.
*/
Vacio:
clr bandera_get
cpse r28,r26
ret
cpse r29,r27
ret
ser bandera_get
ret
/*
SiguienteY:
Esta rutina avanza el apuntador Y.
*/
SiguienteY:
cpi r28,$60
brne IncrementaY
cpi r29,$01
brne IncrementaY
ldi r28,$60
ldi r29,$00
ret
52
/*
IncrementaX:
Esta rutina incrementa en uno el apuntador X.
*/
IncrementaX:
inc r26
clr aux
cpse r26,aux
ret
inc r27
ret
/*
IncrementaY:
Esta rutina incrementa en uno el apuntador Y.
*/
IncrementaY:
inc r28
clr aux
cpse r28,aux
ret
inc r29
ret
/*
IncrementaZ:
Esta rutina incrementa en uno el apuntador Z.
*/
IncrementaZ:
inc r30
clr aux
cpse r30,aux
ret
inc r31
ret
53
tADC=1/fADC;
tconv=tADC*CICLOS;
fconv=1/tconv;
SENAL=decodifica(CODIGO,BUFFER,VREF,GAIN)
M=length(SENAL);
t=(0:M-1)*(tconv);
% Se grafica la seal
% Se cuadricula la pantalla del osciloscopio
% Se etiqueta el eje X como 'TIEMPO'
% Se etiqueta el eje Y como 'VOLTAJE'
% Se limitan los ejes del osciloscopio
54
55
56
ENTRADA:
CONTROL:
Este punto se conecta al pin 7 del Puerto Serial (RTS Dato Listo).
DATOS:
Este punto se conecta al pin 2 del Puerto Serial (RD Receptor de Datos).
57
TITULO DE LA VENTANA:
MINIMIZAR LA VENTANA:
CERRAR LA VENTANA:
58
Con este botn se selecciona la escala por divisin del eje de VOLTAJE.
Con este botn se selecciona la escala por divisin del eje de TIEMPO.
SALIR DE LA INTERFAZ:
ACTUALIZAR PANTALLA:
Con este botn se actualizan los datos mostrados en la interfaz grafica del Osciloscopio.
LIMPIAR PANTALLA:
59
Graficas para una seal de DC, una seal cuadrada y una seal senoidal:
61
Figura 60.-Seal cuadrada a 3 kHz con 2 Volts pico de amplitud sin offset.
Figura 61.-Seal cuadrada a 1 kHz con 2 Volts pico de amplitud sin offset.
62
Figura 62.-Seal cuadrada a 500 Hz con 2 Volts pico de amplitud sin offset.
Figura 63.-Seal cuadrada a 3 kHz con 2 Volts pico de amplitud y 2 Volts de offset.
63
Figura 64.-Seal cuadrada a 1 kHz con 2 Volts pico de amplitud y 2 Volts de offset.
Figura 65.-Seal cuadrada a 500 Hz con 2 Volts pico de amplitud y 2 Volts de offset.
64
Figura 66.-Seal senoidal a 100 Hz con 2 Volts pico de amplitud y 2 Volts de offset.
Figura 67.-Seal senoidal a 500 Hz con 2 Volts pico de amplitud y 2 Volts de offset.
65
Figura 68.-Seal senoidal a 1 kHz con 2 Volts pico de amplitud y 2 Volts de offset.
Figura 69.-Seal senoidal a 1 kHz con 2 Volts pico de amplitud sin offset.
66
Figura 70.-Seal senoidal a 3 kHz con 2 Volts pico de amplitud y 2 Volts de offset.
Figura 71.-Seal senoidal a 3 kHz con 2 Volts pico de amplitud sin offset.
67
Figura 72.-Seal senoidal a 5 kHz con 2 Volts pico de amplitud y 2 Volts de offset.
Figura 73.-Seal senoidal a 5 kHz con 2 Volts pico de amplitud sin offset.
68
Como se puede apreciar en los ejemplos para una seal senoidal y para una seal cuadrada, en la seal
cuadrada no se tiene ningn tipo de problema en cuanto a graficar voltajes positivos y negativos de la seal; sin
embargo, en lo que respecta a la seal senoidal si se tienen problemas cuando se intentan graficar sus voltajes
negativos. Cuando se inyecta una seal senoidal con un offset que evite tener voltajes negativos de la misma, la
nica limitante que se presenta es con respecto a la mxima frecuencia que puede tener la seal para que se
pueda recuperar ntegramente (teorema de Nysquit, si nuestra fmuestreo es de aproximadamente 17 kHz entonces
la fmaxima de la seal debe ser de a lo mas de aproximadamente 8 kHz); pero cuando se inyecta la seal senoidal
sin offset no solo tenemos la limitante de la frecuencia mxima, sino que tambin surgen problemas para
graficarla ocasionados por el Comparador Analgico del microcontrolador. El Comparador Analgico del
microcontrolador funciona muy bien cuando los cambios de voltaje son bruscos (por ejemplo con la seal
cuadrada), pero cuando los cambios de voltaje se dan de manera tenue (por ejemplo con la seal senoidal)
entonces no es capaz de identificar correctamente el cambio y entonces no realiza adecuadamente la
comparacin; lo anterior provoca que no se haga correctamente el cambio entre el canal positivo y el canal
negativo del Convertidor Analgico Digital del microcontrolador, y entonces el muestreo no se lleva a cabo
correctamente y la grafica de la seal es incorrecta.
Otra cosa que se puede apreciar en los ejemplos para una seal senoidal y para una seal cuadrada, es
que cuando la seal senoidal que inyectamos es de 5 kHz ya se presenta una clara distorsin entre la forma de
onda real y la que grafica el osciloscopio. Entonces podemos decir que a frecuencias mayores de
aproximadamente 4 kHz ya no se pueden apreciar correctamente las formas de onda de las seales, lo cual esta
por debajo de la frecuencia calculada a partir del teorema de Nysquit (fmaxima de la seal debe ser de a lo mas de
8.5 kHz).
Cabe destacar que para seales de corriente directa el osciloscopio no presenta ningn problema para
graficar los distintos niveles de voltaje entre -5 y 5 volts DC.
69
V. CONCLUSIONES
70
VI. REFERECIAS
1. Hoja de Especificaciones del microprocesador atmega8535
2. Hoja de Especificaciones del Amplificador Operacional TL082
3. Hoja de Especificaciones del adaptador TTL a RS232 Max232
4. Ayuda de Matlab 7
71