Práctica 7-Microcontroladores

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 28

Práctica No.

7
LABORATORIO DE MECATRÓNICA
Ingeniería Mecatrónica
Microcontroladores

No. Duración
Nombre de la Unidad de Aprendizaje Nombre de la Práctica
Práctica (horas)
LCD, adquisición de parámetros y
7 Programación de periféricos del microcontrolador 2
sensor de temperatura

Ordoñez Moreno Juan Carlos 17090452


Alumno (nombre y firma): Aguirre Aviles Victor Jesus 17090228
Martínez Evangelista Marco Antonio 17090361

Docente (nombre y firma):

Fecha de la práctica: 08/12/2020

Calificación:
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 2 de 28

No. Duración
Nombre de la Unidad de Aprendizaje Nombre de la Práctica
Práctica (horas)
LCD, adquisición de parámetros y
7 Programación de periféricos del microcontrolador 2
sensor de temperatura

1.- INTRODUCCIÓN

Las siglas LCD significan “Liquid Cristal Display” ó pantalla de cristal líquido. Es una pantalla plana basada en el
uso de una sustancia liquida atrapada entre dos placas de vidrio, haciendo pasar por este una corriente eléctrica a
una zona específica, para que así esta se vuelva opaca, y además cuenta (generalmente) con iluminación trasera.
Las pantallas LCD de color, cada pixel individual se divide en tres cédulas o sub pixeles con los colores RGB
(Rojo, Verde y Azul) respectivamente. Y así cada pixel puede controlarse para  producir una gran variedad de
colores distintos.

El uso de las LCD se ha visto muy requerido tanto en la industria como en los proyectos escolares o de medianas
empresas, ya que su uso es bastante agradable a la vista, aunque muchos de nosotros estamos acostumbrados a
escuchar dichas siglas y pensar en una pantalla para TV o el display de un ordenador, mientras que los display LCD
tienen una gama más abierta de aplicaciones, desde relojes, calculadoras, electrodomésticos, impresoras, etc.

Cuando se trabaja en diseño de circuitos electrónicos, es frecuente encontrarse con la necesidad de visualizar un
mensaje, que tiene que ver con el estado de la máquina a controlar, con instrucciones para el operario, o si es un
instrumento de medida, mostrar el valor registrado. En la mayoría de los casos, recurrimos a los displays de siete
segmentos, pero estos además de no mostrar caracteres alfanuméricos ni ASCII, tienen un elevado consumo de
corriente y son un poco dispendiosos de manejar, cuando se requiere hacer multiplexaje.
Los módulos de cristal líquido o LCD, solucionan estos inconvenientes y presentan algunas ventajas, como un
menor consumo de corriente, no hay que preocuparse por hacer multiplexaje, no hay que hacer tablas especiales
con los caracteres que se desea mostrar, se pueden conectar fácilmente con microprocesadores o
microcontroladores y además, los proyectos adquieren una óptima presentación y funcionalidad.

2.- OBJETIVO (Competencia Específica a


RESULTADOS DEL APRENDIZAJE
Desarrollar)
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 3 de 28

Aprender el uso y la programación del


convertidor analógico digital con un El alumno desarrolla aplicaciones prácticas mediante el uso del
convertidor analógico-digital del microcontrolador para la automatización
microcontrolador de forma práctica y mediante de tareas.
la simulación.

3.- CONOCIMIENTOS PREVIOS (Competencias previas)

El alumno deberá contar previamente con un conocimiento sobre programación mediante la simulación y la
práctica el uso de una LCD de un microcontrolador para la realización de tareas.

4.- ACTIVIDADES DE ENSEÑANZA (Docente)

Explicar al alumno las principales herramientas para la programación del microcontrolador para ver los resultados
en una LCD mediante el uso de microcontroladores, es vital su implementación y su simulación.

5.- ACTIVIDADES DE APRENDIZAJE (Alumno)

Realiza la implementación de diversos circuitos, la programación de un microcontrolador y lleva a cabo circuitos


prácticos con la LCD.

6.- DESCRIPCIÓN DEL PROCEDIMIENTO


6.1 Equipo necesario y material de apoyo

El material enlistado es necesario para la realización de la práctica 7.


1 ATmega328P-PU
1 Regulador L7805CV
1 Capacitor cerámico de 0.1microF 50V
1 Capacitor electrolítico de 470microF
1 Capacitor electrolítico de 220microF
2 Resistencia de 330 1/4W
1 Resistencia de 10k 1/4W
1 Led 5mm difuso
1 Push button (Microswitch) Tipo push, 4 o 2 terminales S1
1 Pantalla LCD 16
1 Sensor de temperatura LM35
1 Potenciómetro de 10k
2 Metro de alambre para protoboard
1 Protoboard
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 4 de 28

1 Grabador Usbasp Grabador microcontroladores AVR 8-bit J3


1 Fuente de alimentación de 12V 2A Eliminador de voltaje J2
1 Computadora con puerto USB

6.2 Desarrollo de la práctica

Conecte el diagrama de la practica 7 de acuerdo a la Figura 7.1:

Ejercicio 1
Inicie el software Codevision AVR. Cree un nuevo proyecto dando click en el menú New>Project.
Cuando el software pregunte si queremos usar el asistente CodeWizardAVR le indicamos que Si.

Figura 7.1. Conexión práctica 7.


Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 5 de 28

Seleccionar en el tipo de microcontrolador a utilizar AT90, ATtiny, ATmega

En el asistente, en la ficha Chip dejar la configuración como sigue:

En el asistente, en la ficha Ports, en el Puerto C se deja la siguiente configuración:


Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 6 de 28

En el asistente de Ports, en el Puerto D dejar la siguiente configuración:


Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 7 de 28

En el asistente, en la ficha Analog to Digital Converter, dejar la configuración como sigue:

En el asistente, en la ficha Alfanumeric LCD, dejar la configuración como sigue:


Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 8 de 28

Posteriormente debemos de generar el proyecto y el código, eligiendo Program>Generate,


Save and Exit. Guarde el asistente, código y proyecto con el mismo nombre prac07.

Mucho del código generado por el asistente no se utiliza en esta práctica. Modifique el código borrando
algunas líneas para que solo quede lo necesario para usar el ADC y la pantalla LCD. El código resultante
se muestra a continuación:

# include <mega328p .h>


# include <delay .h>
# include <alcd .h>
// Voltage Reference : AREF pin
# define ADC_VREF_TYPE ((0 << REFS1 ) | (0<< REFS0 ) | (0<< ADLAR ))
// Read the AD conversion result
unsigned int read_adc ( unsigned char adc_input )
{
ADMUX = adc_input | ADC_VREF_TYPE ;
// Delay needed for the stabilization of the ADC input voltage
delay_us (10) ;
// Start the AD conversion
ADCSRA |=(1 < < ADSC );
// Wait for the AD conversion to complete
while (( ADCSRA & (1<< ADIF )) ==0) ;
ADCSRA |=(1 < < ADIF );
return ADCW ;
}
void main ( void )
{
// Analog Comparator initialization
// Analog Comparator : Off
// The Analog Comparator 's positive input is
// connected to the AIN0 pin
// The Analog Comparator 's negative input is
// connected to the AIN1 pin
ACSR =(1<< ACD ) | (0<< ACBG ) | (0<< ACO ) | (0<< ACI ) | (0<< ACIE ) |
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 9 de 28

(0<< ACIC ) | (0<< ACIS1 ) | (0<< ACIS0 );


// Digital input buffer on AIN0 : On
// Digital input buffer on AIN1 : On
DIDR1 =(0 << AIN0D ) | (0<< AIN1D );
// ADC initialization
// ADC Clock frequency : 500.000 kHz
// ADC Voltage Reference : AREF pin
// ADC Auto Trigger Source : ADC Stopped
// Digital input buffers on ADC0 : On , ADC1 : On , ADC2 : On , ADC3
: On
// ADC4 : On , ADC5 : On
DIDR0 =(0 << ADC5D ) | (0<< ADC4D ) | (0<< ADC3D ) | (0<< ADC2D ) | (0<<ADC1D ) | (0<< ADC0D );
ADMUX = ADC_VREF_TYPE ;
ADCSRA =(1<< ADEN ) | (0<< ADSC ) | (0<< ADATE ) | (0<< ADIF ) | (0<<
ADIE ) | (0<< ADPS2 ) | (0<< ADPS1 ) | (1<< ADPS0 );
ADCSRB =(0<< ADTS2 ) | (0<< ADTS1 ) | (0<< ADTS0 );
// Alphanumeric LCD initialization
// Connections are specified in the
// Project | Configure |C Compiler | Libraries | Alphanumeric LCD
menu :
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters / line : 16
lcd_init (16) ;
while (1)
{
}
}

Compile el proyecto eligiendo desde el menú Project>Build All. Una compilación correcta arrojará la
información No errors, No warnings

Modifique de nuevo el código como se muestra a continuación:

# include <mega328p .h>


# include <delay .h>
# include <alcd .h>
// Voltage Reference : AREF pin
# define ADC_VREF_TYPE ((0 << REFS1 ) | (0<< REFS0 ) | (0<< ADLAR ))
// Read the AD conversion result
unsigned int read_adc ( unsigned char adc_input )
{
ADMUX = adc_input | ADC_VREF_TYPE ;
// Delay needed for the stabilization of the ADC input voltage
delay_us (10) ;
// Start the AD conversion
ADCSRA |=(1 < < ADSC );
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 10 de 28

// Wait for the AD conversion to complete


while (( ADCSRA & (1<< ADIF )) ==0) ;
ADCSRA |=(1 < < ADIF );
return ADCW ;
}
void main ( void )
{
/* Configuraci_on E/S
Puerto D:
PD7=Salida , Estado Inicial = GND
PD6=Salida , Estado Inicial = GND
PD5=Salida , Estado Inicial = GND
PD4=Salida , Estado Inicial = GND
PD3= Entrada , Pull - down
PD2=Salida , Estado Inicial = GND
PD1=Salida , Estado Inicial = GND
PD0=Salida , Estado Inicial = GND
Puerto C:
PC6 a PC0= Entrada , Tri - estado
*/
DDRC = 0x00 ;
PORTC = 0x00;
DDRD = 0xF7 ;
PORTD = 0x00;
// Analog Comparator initialization
// Analog Comparator : Off
// The Analog Comparator 's positive input is
// connected to the AIN0 pin
// The Analog Comparator 's negative input is
// connected to the AIN1 pin
ACSR =(1<< ACD ) | (0<< ACBG ) | (0<< ACO ) | (0<< ACI ) | (0<< ACIE ) |
(0<< ACIC ) | (0<< ACIS1 ) | (0<< ACIS0 );
// Digital input buffer on AIN0 : On
// Digital input buffer on AIN1 : On
DIDR1 =(0 << AIN0D ) | (0<< AIN1D );
// ADC initialization
// ADC Clock frequency : 500.000 kHz
// ADC Voltage Reference : AREF pin
// ADC Auto Trigger Source : ADC Stopped
// Digital input buffers on ADC0 : On , ADC1 : On , ADC2 : On , ADC3 :
On
// ADC4 : On , ADC5 : On

DIDR0 =(0 << ADC5D ) | (0<< ADC4D ) | (0<< ADC3D ) | (0<< ADC2D ) | (0<<
ADC1D ) | (0<< ADC0D );
ADMUX = ADC_VREF_TYPE ;
ADCSRA =(1<< ADEN ) | (0<< ADSC ) | (0<< ADATE ) | (0<< ADIF ) | (0<<
ADIE ) | (0<< ADPS2 ) | (0<< ADPS1 ) | (1<< ADPS0 );
ADCSRB =(0<< ADTS2 ) | (0<< ADTS1 ) | (0<< ADTS0 );
// Alphanumeric LCD initialization
// Connections are specified in the
// Project | Configure |C Compiler | Libraries | Alphanumeric LCD menu
:
// RS - PORTD Bit 0
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 11 de 28

// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters / line : 16
lcd_init (16) ;
while (1)
{
lcd_gotoxy (0 ,0);
lcd_putsf (" TESH Mecatronica ");
lcd_gotoxy (6 ,1);
lcd_putsf (" Hola Mundo");
}
}

Compile el proyecto eligiendo desde el men_u Project>Build All. Una compilación correcta arrojará la
información No errors, No warnings

Descargue el archivo que resulto de la compilación prac07.hex en la memoria Flash del microcontrolador.
Muestre el circuito funcionando al profesor, para que le sea tomado en cuenta.

En la pantalla LCD se debe de mostrar las palabras TESH Mecatronica y Hola Mundo.

De la misma manera muestre la simulación en Proteus.

Pruebe cambiar el texto en lcd putsf() y las coordenadas en lcd gotoxy() y responda ¿Para qué sirven las
dos instrucciones anteriormente citadas?

lcd putsf() = Es una function que permite mostrar strings en una pantalla LCD.
Es una librería estándar que permite imprimir string almacenado en la memoria RAM en una pantalla LCD.

lcd gotoxy() = Si deseamos escribir en las 16 celdas del LCD, usamos la función GotoXY( ), para el compilador
HiTech ó cursorXY( ) para el compilador CCS para posicionar el cursor en el renglón deseado, antes de enviar los
caracteres.

Ejercicio 2.
Modifique de nuevo el código como se muestra a continuación:

# include <mega328p .h>


# include <delay .h>
# include <alcd .h>
# include <stdio .h>
typedef unsigned char byte ;
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 12 de 28

flash byte char0 [8]={


0b00000 ,
0b00000 ,
0b01010 ,
0b10101 ,
0b10001 ,
0b01010 ,
0b00100 ,
0 b00000 };
void define_char ( byte flash *pd , byte char_code )
{
byte i,a;
a=( char_code < <3) | 0x40;
for (i=0; i <8; i++) lcd_write_byte (a++ ,* pd ++);
}
// Voltage Reference : AREF pin
# define ADC_VREF_TYPE ((0 << REFS1 ) | (0<< REFS0 ) | (0<< ADLAR ))
// Read the AD conversion result
unsigned int read_adc ( unsigned char adc_input )
{
ADMUX = adc_input | ADC_VREF_TYPE ;
// Delay needed for the stabilization of the ADC input voltage
delay_us (10) ;
// Start the AD conversion
ADCSRA |=(1 < < ADSC );
// Wait for the AD conversion to complete
while (( ADCSRA & (1<< ADIF )) ==0) ;
ADCSRA |=(1 < < ADIF );
return ADCW ;
}
void main ( void )
{
unsigned char texto [16]={ 'H','o','l','a',' ','t','o','d','o','
s',' ','T','E','S','H',' '};
unsigned char temp ;
unsigned char i;
lcd_init (16) ;
define_char (char0 ,0);
/* Configuraci_on E/S
Puerto D:
PD7=Salida , Estado Inicial = GND
PD6=Salida , Estado Inicial = GND
PD5=Salida , Estado Inicial = GND
PD4=Salida , Estado Inicial = GND
PD3= Entrada , Pull - down
PD2=Salida , Estado Inicial = GND
PD1=Salida , Estado Inicial = GND
PD0=Salida , Estado Inicial = GND
Puerto C:
PC6 a PC0= Entrada , Tri - estado
*/
DDRC = 0x00 ;
PORTC = 0x00;
DDRD = 0xF7 ;
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 13 de 28

PORTD = 0x00;
// Analog Comparator initialization
// Analog Comparator : Off
// The Analog Comparator 's positive input is
// connected to the AIN0 pin
// The Analog Comparator 's negative input is
// connected to the AIN1 pin
ACSR =(1<< ACD ) | (0<< ACBG ) | (0<< ACO ) | (0<< ACI ) | (0<< ACIE ) |
(0<< ACIC ) | (0<< ACIS1 ) | (0<< ACIS0 );
// Digital input buffer on AIN0 : On
// Digital input buffer on AIN1 : On
DIDR1 =(0 << AIN0D ) | (0<< AIN1D );
// ADC initialization
// ADC Clock frequency : 500.000 kHz
// ADC Voltage Reference : AREF pin
// ADC Auto Trigger Source : ADC Stopped
// Digital input buffers on ADC0 : On , ADC1 : On , ADC2 : On , ADC3
: On
// ADC4 : On , ADC5 : On
DIDR0 =(0 << ADC5D ) | (0<< ADC4D ) | (0<< ADC3D ) | (0<< ADC2D ) | (0<<ADC1D ) | (0<< ADC0D );
ADMUX = ADC_VREF_TYPE ;
ADCSRA =(1<< ADEN ) | (0<< ADSC ) | (0<< ADATE ) | (0<< ADIF ) | (0<<ADIE ) | (0<< ADPS2 ) | (0<< ADPS1 ) | (1<<
ADPS0 );
ADCSRB =(0<< ADTS2 ) | (0<< ADTS1 ) | (0<< ADTS0 );
// Alphanumeric LCD initialization
// Connections are specified in the
// Project | Configure |C Compiler | Libraries | Alphanumeric LCD
menu :
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters / line : 16
lcd_init (16) ;
while (1)
{
temp = texto [0];
for (i = 0; i < 15; i++)
{
texto [i] = texto [i +1];
}
texto [15] = temp ;
lcd_gotoxy (0 ,0);
lcd_puts ( texto );
for (i=0;i <16; i++)
{
lcd_gotoxy (i ,1);
lcd_putchar (0);
}
delay_ms (500) ;
}
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 14 de 28

Compile el proyecto eligiendo desde el men_u Project>Build All. Una compilacion correcta arrojar_a la
informaci_on No errors, No warnings

Descargue el archivo que resulto de la compilaci_on prac07.hex en la memoria Flash del


microcontrolador.
Muestre el circuito funcionando al profesor, para que le sea tomado en cuenta.

En la pantalla LCD se debe de mostrar las palabras Hola todos UTFV y un caracter creado por el usuario
de forma animada.

De la misma manera muestre la simulación en Proteus.

Pruebe cambiar los pixeles en flash byte char0[8]={} y vea el resultado. Genere su propio caracter pixel
por pixel e imprímalo en la pantalla LCD. Escriba la creación de su propio caracter.

flash byte char0 [8]={


0b00000 ,
0b00000 ,
0b01010 ,
0b11111 ,
0b11111 ,
0b01110 ,
0b00100 ,
0b00000};

flash byte char0 [8]={


0b00100 ,
0b01010 ,
0b10001 ,
0b01010 ,
0b10001 ,
0b01010 ,
0b00100 ,
0b00100};

Responda ¿Para qué sirve la instrucción unsigned char texto[16]={‘H','o','l','a',','


','t','o','d','o','s',' ','T','E','S','H',' '};
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 15 de 28

R= imprime el texto pero cuando no hay un carácter entre las apostrofes ya no imprime los demás
caracteres. Este código es distinto al anterior, debido a que se imprime carácter por carácter con su
respectiva sección.

El tipo char se utiliza para representar caracteres individuales. Por tanto, el tipo char requiere sólo un byte de
memoria. Cada tipo char tiene una interpretación como entero equivalente, de esta forma un char es una clase
especial de entero pequeño. En la mayoría de los compiladores el entero tipo  char puede tomar valores entre 0 y
255. También se puede utilizar datos unsigned char (con valores de 0 a 255) o datos signed char (con valores de
-128 a 127).
 

Ejercicio 3.
Con el multímetro o con el osciloscopio (de preferencia) sintonice a 1.10V la señal AREF modificando el
valor de la resistencia en el potenciómetro R2. Esto para calibrar el valor correcto de la señal del sensor
LM35.
Modifique de nuevo el código como se muestra a continuación:

# include <mega328p .h>


# include <delay .h>
# include <alcd .h>
# include <stdio .h>
// Voltage Reference : AREF pin
# define ADC_VREF_TYPE ((0 << REFS1 ) | (0<< REFS0 ) | (0<< ADLAR ))
// Read the AD conversion result
unsigned int read_adc ( unsigned char adc_input )
{
ADMUX = adc_input | ADC_VREF_TYPE ;
// Delay needed for the stabilization of the ADC input voltage
delay_us (10) ;
// Start the AD conversion
ADCSRA |=(1 < < ADSC );
// Wait for the AD conversion to complete
while (( ADCSRA & (1<< ADIF )) ==0) ;
ADCSRA |=(1 < < ADIF );
return ADCW ;
}
void main ( void )
{
unsigned char texto [16];
unsigned int tempC ;
/* Configuraci_on E/S
Puerto D:
PD7=Salida , Estado Inicial = GND
PD6=Salida , Estado Inicial = GND
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 16 de 28

PD5=Salida , Estado Inicial = GND


PD4=Salida , Estado Inicial = GND
PD3= Entrada , Pull - down
PD2=Salida , Estado Inicial = GND
PD1=Salida , Estado Inicial = GND
PD0=Salida , Estado Inicial = GND
Puerto C:
PC6 a PC0= Entrada , Tri - estado
*/
DDRC = 0x00 ;
PORTC = 0x00;
DDRD = 0xF7 ;
PORTD = 0x00;
// Analog Comparator initialization
// Analog Comparator : Off
// The Analog Comparator 's positive input is
// connected to the AIN0 pin
// The Analog Comparator 's negative input is
// connected to the AIN1 pin
ACSR =(1<< ACD ) | (0<< ACBG ) | (0<< ACO ) | (0<< ACI ) | (0<< ACIE ) |
(0<< ACIC ) | (0<< ACIS1 ) | (0<< ACIS0 );
// Digital input buffer on AIN0 : On
// Digital input buffer on AIN1 : On
DIDR1 =(0 << AIN0D ) | (0<< AIN1D );
// ADC initialization
// ADC Clock frequency : 500.000 kHz
// ADC Voltage Reference : AREF pin
// ADC Auto Trigger Source : ADC Stopped
// Digital input buffers on ADC0 : On , ADC1 : On , ADC2 : On , ADC3
: On
// ADC4 : On , ADC5 : On
DIDR0 =(0 << ADC5D ) | (0<< ADC4D ) | (0<< ADC3D ) | (0<< ADC2D ) | (0<<
ADC1D ) | (0<< ADC0D );
ADMUX = ADC_VREF_TYPE ;
ADCSRA =(1<< ADEN ) | (0<< ADSC ) | (0<< ADATE ) | (0<< ADIF ) | (0<<
ADIE ) | (0<< ADPS2 ) | (0<< ADPS1 ) | (1<< ADPS0 );
ADCSRB =(0<< ADTS2 ) | (0<< ADTS1 ) | (0<< ADTS0 );
// Alphanumeric LCD initialization
// Connections are specified in the
// Project | Configure |C Compiler | Libraries | Alphanumeric LCD
menu :
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters / line : 16
lcd_init (16) ;
while (1)
{
// Lee el voltaje en PC0
tempC = read_adc (0);
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 17 de 28

// Ajusta la conversi_on a un rango 0.0 a 1.1 V


// Conversi_on de 10- bit
tempC =(1.1 * tempC * 100.0) /1024.0;
sprintf (texto ," Temp = %d ", tempC );
lcd_gotoxy (0 ,0);
lcd_puts ( texto );
delay_ms (500) ;
}
}

Compile el proyecto eligiendo desde el men_u Project>Build All. Una compilación correcta arrojará la
información No errors, No warnings

Descargue el archivo que resulto de la compilación prac07.hex en la memoria Flash del microcontrolador.

Muestre el circuito funcionando al profesor, para que le sea tomado en cuenta.

En la pantalla LCD se debe de mostrar la temperatura actual del laboratorio. De la misma manera muestre
la simulación.

¿Para qué sirven las instrucciones tempC = read adc(0); y tempC =(1.1 *tempC * 100.0)/1024.0;
respectivamente?

R= con tempC = read adc(0); lee el voltaje en PC0 y con tempC =(1.1 *tempC * 100.0)/1024.0; realiza
el cálculo del voltaje leído.

Ejercicio 4.
Realizar un programa que muestre una barra de progreso al incrementarse la temperatura, como se
muestra en la siguiente Figura:

Modifique de nuevo el código como se muestra a continuación:

# include <mega328p .h>


# include <delay .h>
# include <alcd .h>
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 18 de 28

# include <stdio .h>


// Voltage Reference : AREF pin
# define ADC_VREF_TYPE ((0 << REFS1 ) | (0<< REFS0 ) | (0<< ADLAR ))
// Read the AD conversion result
unsigned int read_adc ( unsigned char adc_input )
{
ADMUX = adc_input | ADC_VREF_TYPE ;
// Delay needed for the stabilization of the ADC input voltage
delay_us (10) ;
// Start the AD conversion
ADCSRA |=(1<<ADSC );
// Wait for the AD conversion to complete
while (( ADCSRA & (1<< ADIF )) ==0) ;
ADCSRA |=(1<<ADIF );
return ADCW ;
}
typedef unsigned char byte ;
flash byte char0 [8]={
0b11111 ,
0b10001 ,
0b10001 ,
0b10001 ,
0b10001 ,
0b10001 ,
0b10001 ,
0 b11111 };
void define_char ( byte flash *pd , byte char_code )
{
byte i,a;
a=( char_code < <3) | 0x40;
for (i=0; i <8; i++) lcd_write_byte (a++ ,* pd ++);
}
void main ( void )
{
unsigned char texto [16];
unsigned int tempC ;
unsigned char i;
unsigned char nCuadros ;
lcd_init (16) ;
define_char (char0 ,0);
/* Configuraci_on E/S
Puerto D:
PD7=Salida , Estado Inicial = GND
PD6=Salida , Estado Inicial = GND
PD5=Salida , Estado Inicial = GND
PD4=Salida , Estado Inicial = GND
PD3= Entrada , Pull - down
PD2=Salida , Estado Inicial = GND
PD1=Salida , Estado Inicial = GND
PD0=Salida , Estado Inicial = GND
Puerto C:
PC6 a PC0= Entrada , Tri - estado
*/
DDRC = 0x00 ;
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 19 de 28

PORTC = 0x00;
DDRD = 0xF7 ;
PORTD = 0x00;
// Analog Comparator initialization
// Analog Comparator : Off
// The Analog Comparator 's positive input is
// connected to the AIN0 pin
// The Analog Comparator 's negative input is
// connected to the AIN1 pin
ACSR =(1<< ACD ) | (0<< ACBG ) | (0<< ACO ) | (0<< ACI ) | (0<< ACIE ) |(0<< ACIC ) | (0<< ACIS1 ) | (0<< ACIS0 );
// Digital input buffer on AIN0 : On
// Digital input buffer on AIN1 : On
DIDR1 =(0 << AIN0D ) | (0<< AIN1D );
// ADC initialization
// ADC Clock frequency : 500.000 kHz
// ADC Voltage Reference : AREF pin
// ADC Auto Trigger Source : ADC Stopped
// Digital input buffers on ADC0 : On , ADC1 : On , ADC2 : On , ADC3
: On
// ADC4 : On , ADC5 : On
DIDR0 =(0 << ADC5D ) | (0<< ADC4D ) | (0<< ADC3D ) | (0<< ADC2D ) | (0<<ADC1D ) | (0<< ADC0D );
ADMUX = ADC_VREF_TYPE ;
ADCSRA =(1<< ADEN ) | (0<< ADSC ) | (0<< ADATE ) | (0<< ADIF ) | (0<<ADIE ) | (0<< ADPS2 ) | (0<< ADPS1 ) | (1<<
ADPS0 );
ADCSRB =(0<< ADTS2 ) | (0<< ADTS1 ) | (0<< ADTS0 );
// Alphanumeric LCD initialization
// Connections are specified in the
// Project | Configure |C Compiler | Libraries | Alphanumeric LCD
menu :
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters / line : 16
lcd_init (16) ;
while (1)
{
// Lee el voltaje en PC0
tempC = read_adc (0);
// Ajusta la conversi_on a un rango 0.0 a 1.1 V
// Conversi_on de 10- bit
tempC =(1.1 * tempC * 100.0) /1024.0;
sprintf (texto ," Temp = %d ", tempC );
lcd_gotoxy (0 ,0);
lcd_puts ( texto );
delay_ms (500) ;
// Rutina para pintar la barra de progreso
nCuadros = tempC /5;
for(i=0;i< nCuadros ;i++)
{
lcd_gotoxy (i ,1);
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 20 de 28

lcd_putchar (0 xFF); // Cuadro lleno


}
for(i= nCuadros ;i <16; i++)
{
lcd_gotoxy (i ,1);
lcd_putchar (0); // Cuadro vacio
}
}
}

Compile el proyecto eligiendo desde el menú Project>Build All. Una compilación correcta arrojará la
información No errors, No warnings

Descargue el archivo que resulto de la compilación prac07.hex en la memoria Flash del microcontrolador.
Muestre el circuito funcionando al profesor, para que le sea tomado en cuenta.

En la pantalla LCD se debe de mostrar una barra de progreso que debe aumentar si la temperatura sube.
De la misma manera muestre la simulación en Proteus.

¿Para qué sirve la instrucción for(i=0;i<nCuadros;i++) contenida en el programa?

El bucle for es una estructura de control en programación en la que se puede indicar de antemano el número


máximo de iteraciones.

La sentencia for

Esta sentencia se encuentra en la mayoría de los lenguajes de programación. El bucle  for se empleará cuando
conocemos el número de veces que se ejecutará una sentencia o un bloque de sentencias.

for(inicialización; condición; incremento)

El primer término inicialización, se usa para inicializar una variable índice, que controla el número de veces que se
ejecutará el bucle. La condición representa la condición que ha de ser satisfecha para que el bucle continúe su
ejecución. El incremento representa la cantidad que se incrementa la variable índice en cada repetición.

Ejemplo: Escribir un programa que imprima los primeros 10 primeros números enteros empezando por el cero

for (int i = 0; i < 10; i++) {


System.out.println(i);
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 21 de 28

El resultado será: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

La variable índice i se declara y se inicializa en el término inicialización, la condición se expresa de modo que i se


debe mantener estrictamente menor que 10; la variable i se incrementa una unidad en cada repetición del bucle. La
variable i es local al bucle, por lo que deja de existir una vez que se sale del bucle.

Ejemplo: Escribir un programa que imprima los números pares positivos menores o iguales que 20

for (int i=2; i <=20; i += 2) {


System.out.println(i);
}

Ejemplo: Escribir un programa que imprima los números pares positivos menores o iguales que 20 en orden
decreciente

for (int i=20; i >= 2; i -= 2) {


System.out.println(i);
}

Ejemplo: Escribir un programa que calcule el factorial de un número empleando la sentencia iterativa  for. Guardar
el resultado en un número entero de tipo long .

Definición: la factorial de un número n es el resultado del producto 1*2*3* .... *(n-1)*n.


Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 22 de 28

6.3 Cálculos (si aplica)

Agregue los cálculos necesarios.

No aplica

7.- INFORME DE RESULTADOS

Ejercicio 1
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 23 de 28

Ejercicio 2
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 24 de 28

Ejercicio 3
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 25 de 28

Ejercicio 4
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 26 de 28

8.- CONCLUSIONES

Ordoñez Moreno Juan Carlos


Al realizar los circuitos correspondientes a los ejercicios que contenía esta práctica, solo era la implementación de
dichos circuitos, ya que ahora la parte de la programación se hizo de manera distinta configurando desde el
programa CodeVision distintos parámetros que utilizaríamos y que hiciera un correcto funcionamiento en los
ejercicios, desde la parte de CodeWizardAVR.
Al igual se le configura una frecuencia de muestreo que es de 1Mhz, también los puertos tanto entradas como
salidas, que serán el C y el D, también se le da en el convertidor de analógico a digital con configuraciones de que
se está trabajando con 8bits, que el pin AREF del microcontrolador forma pate de la alimentación, una frecuencia
de relej de 500kHz, al igual que se usara una LCD se le configura el puerto en el que estará conectada y que el
código que se está generando en automático con esas configuraciones es en ensamblador.
Para el código generado después de la configuración, mucho de este no nos sirve por lo que se tuvo que borrar,
para el código resultante nos está dando todo lo que configuramos previamente, pero en forma de código, esto
para poder subirlo a la memoria flash del microcontrolador.
En el código arrojado para el primer ejercicio se le dan los parámetros y la frase que queremos que muestre y
donde lo muestre es decir en que fila y en que columna del LCD se estará mostrando.
En el segundo ejercicio se le agrega el “flash byte char0 [8]” para realizar caracteres en la LCD con las 8x5 bits
que tiene para realizer el character que se desee, en este caso fue un corazon. También para el texto que se debe
de mostar en este ejercicio se uso el ciclo de repetición “for” para que se hiciera en efecto de desplazamiento de
derecho a izquierda.
Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 27 de 28

Para el tercer ejercicio ya se ara el uso del sensor de temperatura paro lo cual, y que se muestre el resultado de la
temperatura que dicho sensor está captando, se le agrega la fórmula de conversión y en la LCD muestra el
resultado de la temperatura captada por el sensor.
Por último, el 4 ejercicio es lo mismo del 3 solo se le agrego “ flash byte char0 [8]” para agregar un carácter del
contorno un rectángulo, el cual dependiendo la temperatura captada en el sensor dicho carácter se rellenaba e iban
prendiendo cundo la temperatura captada iba en incremento de 5.

Marco Antonio Martínez Evangelista


En esta práctica se utilizó la misma conversión de análogo a digital, se obtuvo ayuda de CodeWizarAVR para realizar la
configuración del puerto D, la activación de la conversión y la pantalla LCD, en el primer ejercicio se utilizó este código para
imprimir el texto “lcd_gotoxy (0 ,0); lcd_putsf (" TESH Mecatronica ");lcd_gotoxy (6 ,1);lcd_putsf (" Hola Mundo");”
mientras que para el ejercicio 2 fue distinto “unsigned char texto[16]={‘H','o','l','a',','','t','o','d','o','s',' ','T','E','S','H','
'};” a diferencia de que cada carácter se imprimía de acuerdo a la posición que se programe además de que se permite la
creación de nuestro propio carácter.
Para el ejercicio 3 y 4 se utilizó un nuevo pin llamado AREF que pertenece a la alimentación para la frecuencia de 500Khz.
Estos ejercicios están orientados de tal manera que se utilizara el sensor de temperatura para que en la pantalla lcd muestre el
valor de temperatura, también ambos ejercicios tienen distinta apariencia, en el ejercicio 4 se le agrega un carácter
personalizado de rectángulo vacío cuya configuración es binaria y este es llenado con un código hexadecimal.

Aguirre Aviles Victor Jesus


En esta penúltima practica se configuro desde CodeWizard, también la frecuencia de muestreo y para el
código que fue modificado eliminando algunas líneas para adaptarlo a lo que se deseaba obtener para que
se pudiese subir a la memoria flash del microcontrolador, además que para cada ejercicio se utilizaron
nuvas funciones como lcd putsf() y lcd gotoxy() para que se pudiese ejecutar el
ejercicio 1, en el ejercicio 2 se utiliaron tipos de datos como unsigned char texto[16]
ára representar caracteres individuales, en el ejercicio 3 se uso tempC = read adc(0); y tempC
=(1.1 *tempC * 100.0)/1024.0, para conectar el sensor de temperatura y en el
ultimo ejercicio se uso for(i=0;i<nCuadros;i++), que el bucle for se empleará
cuando conocemos el número de veces que se ejecutará una sentencia o un bloque de
sentencias

9.- ANEXOS

En caso de ser necesario o usted considere.

Anexo 1. Manejo y uso del software.

Anexo 2. Dibujo del circuito

Anexo 2. Circuito construido


Código: MP-IM-01
No. de Revisión: 0
MANUAL DE PRACTICAS
Fecha de Emisión: 21 Septiembre, 2015
Hoja 28 de 28

10.- EVALUACIÓN DEL DESEMPEÑO

No. Concepto a evaluar en el alumno Cumple


Guía de Observación Si No
1 Asiste puntualmente al laboratorio
2 Respeta el reglamento del laboratorio
3 Atiende las recomendaciones del docente
4 Participa activamente en la práctica
5 Guarda o entrega el material y equipo utilizado
Lista de Cotejo
6 Entrega puntualmente el reporte de la práctica
7 El contenido del reporte está completo
8 Los resultados del reporte son correctos
9 Entrega resuelta el cuestionario de la práctica
10 Las conclusiones están relacionadas con el tema

Cada concepto evaluado como Si, equivale a 10 puntos de


la calificación de la práctica.
Calificación: 100

11.- REFERENCIAS

ATMega328: AVR RISC Microcontroller, Datasheet, Atmel Corporation (http://www.atmel.com).

The AVR Microcontroller and Embedded System, using assembly and C / Muhamad Ali Mazidi, Sarmad Naimi,
Sepehr Naimi; United States of America: Prentice Hall, 2011. ISBN-10: 0-13-800331-9.

Make: AVR Programming / Elliot Williams, 2014, Printed in the United States of America. Published by Maker
Media, ISBN: 978-1-449-35578-4

Palacios, Enrique. (2006) Microcontrolador PIC16F84. Desarrollo de proyectos. 2ª Edición. Ed. Alfaomega

También podría gustarte