jueves, 3 de abril de 2014

TECLADO MATRICIAL CON MICROCONTROLADOR ATMEGA164PA, CODEVISION Y PROTEUS

   WE UNIT TALENT THEY CREATE THE FUTURE


Un teclado matricial es un simple arreglo de botones conectados en filas y columnas, de modo que se pueden leer varios botones con el mínimo número de pines requeridos. Un teclado matricial 4×4 solamente ocupa 4 líneas de un puerto para las filas y otras 4 líneas para las columnas, de este modo se pueden leer 16 teclas utilizando solamente 8 líneas de un microcontrolador. Si asumimos que todas las columnas y filas inicialmente están en alto(1 lógico), la pulsación de un botón se puede detectar al poner cada fila en bajo (0 lógico)y revisar cada columna en busca de un cero.

Es un teclado construido en forma de matriz. El teclado que se describe es un teclado de 4x4=16teclas. Para controlar el teclado, los puertos correspondientes a las filas se programan como salidas y los conectados a las columnas del teclado se programan como entradas. El diagrama a continuación muestra como está constituido el mismo:
Para su conexión al microcontrolador se deben colocar unas resistencias de pull-up en las filas (o las columnas). De esta forma si se pone un cero lógico, en  una columna (fila) se obtendrá un cero en la fila (columna) correspondiente cuando se pulse una tecla.



El momento de crear tu proyecto no olvides incluir la librería para que funcione correctamente tu teclado:
include <stdlib.h>                                               // librería para  conversión de char a entero.







TIMER/CONTADOR0 CON PWM 8 Bits CON MICROCONTROLADOR ATMEGA164PA, CODEVISION Y PROTEUS

   WE UNIT TALENT THEY CREATE THE FUTURE

Especificaciones:
  • Dos unidades de comparación diferenciales.
  • Registro de comparación con doble Buffer de salida.
  • Recarga automática en los modos Clear Timer y punto de comparación (Compare Match)
  • Modulación de Ancho de Pulso
  • Periodo variable PWM
  • Generador de frecuencia
  • Tres fuentes de interrupción externa (TOV0, OCF0A y OCF0B)

Diagrama de bloques TIMER/CONTADOR0 CON PWM 8 Bits 

Modos de Operación:
En el modo de operación, la conducta del Timer/Contador y los pines de comparación a la salida, son definidos por la combinación del modo de Generador de Forma de Onda (WGM02:0) y el modo de Comparación de Salida (COM0x1:0). Los bits COM0x1:0 controlan si la salida de la PWM generada debería ser invertida o no.

Modo Normal 

El modo más simple de operación es el Modo Normal (WGM02:0 = 0). En este modo la dirección del contador siempre se encuentra incrementando, y el contador no se pone en cero. El contador simplemente deja de contar con un valor máximo a 8 bits (TOP=0xFF) y luego inicia desde tope bajo (0x00). En operación normal la Bandera de desbordamiento del Timer/Contador será uno al mismo tiempo que el ciclo de máquina como el TCNT0 llegan a ser cero. La bandera TOV0 en este caso se comporta como un noveno bit, excepto que esté solo en uno. Sin embargo, combinado con la interrupción de desbordamiento del timer que automáticamente limpia la bandera TOV0, la resolución del timer puede incrementarse por software. No hay casos especiales a considerar en el Modo Normal, el valor del nuevo contador puede ser escrito a cualquier instante. 

Modo de Rápida PWM 

El modo de Rápida PWM (WGM02:0=3 o7) proporciona una opción de generación de forma de onda PWM a alta frecuencia. La rápida PWM difiere de otra opción de PWM por la simple pendiente de operación (diente de sierra). El contador cuenta desde el 0x00 hasta el Tope luego inicia desde 0x00. El tope es definido como 0xFF cuando WGM2:0 = 3, y OCR0A cuando WGM2:0 = 7. En Modo de comparación de salida no invertido, la salida de comparación (OCOx) es limpiada en el punto de comparación entre TCNT0 y OCR0x, y pone en uno a la dirección 0x00. En Modo de Comparación de salida Invertida, la salida es puesta en uno en el punto de comparación y es limpiada en la dirección 0x00, en simple pendiente de operación, la frecuencia de operación en modo rápida PWM puede estar dos veces en alto como en el modo de fase correcta PWM que usa doble pendiente de operación (onda triangular). Esta alta frecuencia hace que el modo Rápida PWM pueda ser usada para reguladores de voltaje, rectificadores, y aplicaciones DAC. Para alta frecuencia se tiene físicamente pequeños tamaños de componentes externos (capacitores), y reduce el costo total del sistema. 

Descripción de Registros:

              TCCR0A – Registro de Control A Timer /Contador 

             Bits 7:6 – COM0A1:0: Modo de Comparación de Salida A 
Estos bits controlan el comportamiento del pin de comparación-salida (OC0A). Si uno o ambos bits del COM0A1:0 están en uno, la salida del OC0A proporciona el normal funcionamiento de los pines de I/O cuando están conectados.

             Modo de Comparación de Salida, Modo rápida PWM




LCD CON MICROCONTROLADOR ATMEGA164PA CODEVISION Y PROTEUS

WE UNIT TALENT THEY CREATE THE FUTURE


Una vez estudiado el manejo de puertos y la cx serial en un microcontrolador ATMEGA164PA, el siguiente a tratar es la configuración de una LCD, en este artículo vamos a conocer tanto códigos de programación, como configuración de pines en Proteus y en trabajos prácticos.

DESCRIPCIÓN GENERAL DE UNA LCD.
Una pantalla de cristal líquido o LCD es una pantalla delgada y plana formada por un número de píxeles en color colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos electrónicos de pilas, ya que utiliza cantidades muy pequeñas de energía eléctrica.



LCD 16x2
Una LCD es un dispositivo controlado de visualización gráfico para la presentación de caracteres, símbolos, en este caso dispone de 2 filas de 16 caracteres cada una y cada carácter dispone de una matriz de 5x7 puntos (píxeles), aunque los hay de otro número de filas y caracteres. Este dispositivo está gobernado internamente por un microcontrolador y regula todos los parámetros de presentación, este modelo es el mas comúnmente usado.

Características principales de una LCD:
  • Pantalla de caracteres ASCII, además de los caracteres Kanji y Griegos.
  • Desplazamiento de los caracteres hacia la izquierda o la derecha.
  • Proporciona la dirección de la posición absoluta o relativa del caracter.
  • Memoria de 40 caracteres por línea de pantalla.
  • Movimiento del cursor y cambio de su aspecto.
  • Permite que el usuario pueda programar 8 caracteres.
  • Conexión a un procesador usando un interfaz de 4 u 8 bits.

Diagrama:




Funciones básicas para el manejo de LCD:


lcd_gotoxy(x,y);    indica la posición de la matriz donde va a ser colocado el caracter      
lcd_puts("      ");   indica el caracter o conjunto de caracteres que va a visualizarse en la LCD 
lcd_clear();           borra los caracteres existentes en la LCD

    

El momento de programar en CODEVISION no olvides incluir la librería para LCD:

#include <alcd.h>








CONVERSOR ANÁLOGO DIGITAL CON MICROCONTROLADOR ATMEGA164PA, CODEVISION Y PROTEUS

WE UNIT TALENT THEY CREATE THE FUTURE


Especificaciones:
• Resolución de 10-bits
• Integrador no Lineal 0.5 LSB
• Presición Absoluta ±2 LSB
• Tiempo de Conversión 13 - 260μs
• Máxima Resolución por encima de 15 KSPS
• 8 Canales Multiplexados Simples de Salida
• Modo Diferencial con Ganancia Seleccionable: X1, X10 o X200
• Ajuste opcional Izquierdo para lectura de salida del ADC
• Rango de Voltaje de Entrada del ADC: 0 - VCC
• Rango de Voltaje Diferencial del ADC: 2.7 - VCC
• Voltaje de Referencia Seleccionable ADC: 2.5V o 1.1V
• Modo de Simple Conversión (Free Running)
• Inicio de Conversión ADC por Auto-disparo o Fuente de Interrupción
• Activación de Interrupción al finalizar la Conversión ADC
• En Modo Sleep se cancela el ruido

Bloque Esquemático del Conversor Analógico Digital:

Descripción de Registros:

         ADMUX- Selección de Registros Multiplexados del ADC
     
                                                                               
        Bit 7:6 -REFS1:0: Selección Bits de Referencia
Estos bits seleccionan el voltaje de referencia para el ADC, como se muestra en la siguiente tabla. Si estos bits son cambiados durante la conversión, el cambio no será efectuado hasta que la conversión sea completada (ADIF EN ADCSRA es uno). La opción del voltaje de referencia interno no debe ser usada si una referencia externa esta siendo aplicada en el pin AREF.


Bit 5- ADLAR: Ajuste de resultado hacia la izquierda del ADC 
El bit ADLAR afecta la presentación del resultado de la conversión ADC en el registro de datos del ADC. Escriba uno en ADLAR para ajustar el resultado hacia la izquierda.

Bits 4:0 – MUX4:0: Bits de selección para Canal Análogo y Ganancia
El valor de estos bits seleccionan cual combinación de la entrada analógica son conectadas al ADC. Estos bits también seleccionan la ganancia para los canales diferenciales

ADCSRA – ADC Registro de Control y Estado A

Bit 7- ADEN: Habilitación ADC
Cuando se pone uno en este bit se habilita el ADC, con cero el ADC es apagado.Si se apaga el ADC mientras la conversión está en progreso, la conversión terminará.
Bit 6 -ADSC: Inicio de Conversión ADC
En modo de Simple Conversión, cada vez que se ponga uno en este bit se inicia cada conversión. En modo de Simple Conversión (Free Running), al escribir uno en este bit inicia la conversión. La primera conversión ADSC ha sido escrita después de que el ADC ha sido habilitado o si ADSC es escrito al mismo tiempo que el ADC es habilitado, esto demora 25 ciclos de reloj ADC comparado con los 13 ciclos que demora normalmente. La primera conversión llega a inicializar el ADC.ADSC estará en uno durante la conversión en progreso. Cuando termina la conversión retorna a cero.
Bit 5- ADATE: Habilitación Auto Disparador ADC
Cuando se escribe uno en este bit, el auto Disparador del ADC es habilitado. El ADC empezará la conversión con flanco positivo seleccionado con la señal del disparador. 
Bit 4- ADIF: ADC Banderas de Interrupción
Este bit es uno cuando se completa la conversión ADC y los Registros de Datos son actualizados. Cuando la conversión ADC es completada se ejecuta la interrupción si el bit ADIE y el bit I en SREG son uno.
Bit 3 – ADIE: Habilitación de interrupciones del ADC
Cuando este bit es uno y el bit I en SREG es uno, la conversión ADC es completada y es activada la interrupción.
Bits 2:0 – ADPS2:0: Bits de selección para el Prescalador 
Estos bits determinan el factor de división entre la frecuencia del cristal y la entrada del reloj 
del ADC.


------------------------------------------------------------------------------------------------

Para realizar la conversión análoga digital debemos tener en cuenta un rango dentro del cual se realizará la conversión, en el caso de los microcontroladores el voltaje de referencial es de 5V 



Las líneas de código que debes verificar el momento de la creación de tu proyecto en CODEVISION son las que se detallan a continuación:




#define ADC_VREF_TYPE 0x00

// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;
// Read the AD conversion result
 adc_data=ADCW;
   //((x*1023)/5) 
  // (X*1023)/5
    //x=valor del conversor a encontrar
 // 5= valor referencial 

if (adc_data>((0.5*1023)/5)&&(adc_data<((1*1023)/5)))
PORTB=0b00000001;
if (adc_data>((1*1023)/5)&&(adc_data<((1.5*1023)/5)))
PORTB=0b00000011;
if (adc_data>((1.5*1023)/5)&&(adc_data<((2*1023)/5)))
PORTB=0b00000111;
if (adc_data>((2*1023)/5)&&(adc_data<((2.5*1023)/5)))
PORTB=0b00001111;
if (adc_data>((2.5*1023)/5)&&(adc_data<((3*1023)/5)))
PORTB=0b00011111;
if (adc_data>((3*1023)/5)&&(adc_data<((3.5*1023)/5)))
PORTB=0b00111111;
if (adc_data>((3.5*1023)/5)&&(adc_data<((4*1023)/5)))
PORTB=0b01111111;
if (adc_data>((4*1023)/5)&&(adc_data<((4.5*1023)/5)))
PORTB=0b01111111;


ADCSRA=ADCSRA |0x40;  // inicializar la siguiente conversión


}