eeprom y contadores de dos dÍgitos

17
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL Laboratorio de Microcontroladores Práctica EEPROM Y CONTADORES DE DOS DÍGITOS Alumnos OSCAR LOOR QUEVEDO DENISSE VILLAMAR HERRERA Paralelo: # 6 Fecha de presentación: 24 ENERO 2014 2013 – 2° TÉRMINO

Upload: de2791vi

Post on 02-Oct-2015

10 views

Category:

Documents


3 download

DESCRIPTION

Práctica 9 de Laboratorio de Microcontroladores ESPOL

TRANSCRIPT

ESCUELA SUPERIOR POLITCNICA DEL LITORAL

Laboratorio de Microcontroladores

PrcticaEEPROM Y CONTADORES DE DOS DGITOS

AlumnosOSCAR LOOR QUEVEDODENISSE VILLAMAR HERRERA

Paralelo: # 6

Fecha de presentacin:24 ENERO 2014

2013 2 TRMINO

1. Enunciado del proyecto Se desea familiarizar al estudiante en el uso del PWM junto con osciladores para observar los cambios que resultan de aplastar las botoneras conectadas al PIC en el puerto A, estas seales enviadas desde los pulsadores son mostradas por el puerto C configurado como salida.Dado que para esta prctica se cuenta con dos proyectos, se realizar en primer lugar el proyecto: Uso de la Memoria EEPROM Interna y a continuacin el proyecto: Contador BCD de Dos Dgitos.

2. Diagrama de bloques

PIC 16F887

4 botoneras en PORTA

Osciloscopio Digital en PORTC

3. Diagrama de Flujo funcional del Programa principal

3.1 Diagrama de Flujo Initmain

3.2 Diagrama de Flujo main

3.3 Diagrama de Flujo while1

4. Descripcin del algoritmo.

1. Crear variables tipo short.2. Crear el void Initmain y acontinuacin configurar las entradas y salidas como digitales.3. Deshabilitar las funciones de comparacin.4. Configurar PORTA como entrada.5. Seteo de PORTC, pines configurados como salida.6. Inicializacin de los PWM con 5KHz.7. Se crea el void main, la primera lnea de cdigo del void es llamar a la funcin Initmain.8. Se cargan variables current_duty y current_duty1 con un valor de 16 para ambos.9. Se inicia el proceso de PWM con lneas: PWM1_Start y PWM_Start2.10. Tanto para PWM1 y PWM2 se los setea con las variables current_duty y current_duty1.11. Se entra a un lazo while infinito.12. Pregunta si bit RA0 se presiona, si es verdadero, ocurre un delay de 40 ms, se incrementa variable current_duty en uno y en la siguiente lnea se setea PWM1 con valor de current_duty. Si no se presiona RA0, se pregunta por RA1.13. Si es verdadero la condicin, ocurre un delay de 40 ms, se decrementa variable current_duty en uno y en la siguiente lnea se setea PWM1 con valor de current_duty. Si no se presiona RA1, se pregunta por RA2.14. Si es verdadero la condicin, ocurre un delay de 40 ms, se incrementa variable current_duty1 en uno y en la siguiente lnea se setea PWM2 con valor de current_duty1. Si no se presiona RA2, se pregunta por RA3.15. Si es verdadero la condicin, ocurre un delay de 40 ms, se decrementa variable current_duty1 en uno y en la siguiente lnea se setea PWM2 con valor de current_duty1. Si no se presiona RA3, ocurre un delay de 5 ms. Fin de lazo while. Fin de void main.

5. unsigned short current_duty, old_duty, current_duty1, old_duty1;void InitMain() { ANSEL = 0; ANSELH = 0; C1ON_bit = 0; / C2ON_bit = 0; PORTA = 255; TRISA = 255; pins as input PORTB = 0; TRISB = 0; PORTC = 0; TRISC = 0; PWM1_Init(5000); PWM2_Init(5000); }void main() { InitMain(); current_duty = 16; current_duty1 = 16; PWM1_Start(); PWM2_Start(); PWM1_Set_Duty(current_duty); PWM2_Set_Duty(current_duty1); while (1) { if (RA0_bit) { Delay_ms(40); current_duty++; PWM1_Set_Duty(current_duty); } if (RA1_bit) { Delay_ms(40); current_duty--; PWM1_Set_Duty(current_duty); } if (RA2_bit) { Delay_ms(40); current_duty1++; PWM2_Set_Duty(current_duty1); } if (RA3_bit) { Delay_ms(40); current_duty1--; PWM2_Set_Duty(current_duty1); } Delay_ms(5); }}Programa fuente en lenguaje C.6. Copia impresa del circuito armado en PROTEUS para la simulacin en el momento de su ejecucin

RESPONDER:1) Genere un solo PWM inicializando el mdulo PWM a 1Khz, haga current_duty = 128; y cambie todos los delay a Delay_ms(5);. Utilice el siguiente cuadro para conectar un motor DC de 12voltios a travs de un opto-acoplador y mida las seales como se indica.

unsigned short current_duty, old_duty, current_duty1, old_duty1;void InitMain() { ANSEL = 0; ANSELH = 0; C1ON_bit = 0; / C2ON_bit = 0; PORTA = 255; TRISA = 255; PORTB = 0; TRISB = 0; PORTC = 0; TRISC = 0; PWM1_Init(1000); }void main() { InitMain(); current_duty = 128; PWM1_Start(); PWM1_Set_Duty(current_duty); while (1) { if (RA0_bit) { Delay_ms(5); current_duty++; PWM1_Set_Duty(current_duty); } if (RA1_bit) { Delay_ms(5); current_duty--; PWM1_Set_Duty(current_duty); } if (RA2_bit) { Delay_ms(5); current_duty++; PWM1_Set_Duty(current_duty1); } if (RA3_bit) { Delay_ms(5); current_duty--; PWM1_Set_Duty(current_duty1); } Delay_ms(5); }}7. Enunciado del proyecto 2Se desea familiarizar al estudiante en el uso de convertidores analgico-digital.

8. Diagrama de bloques

PIC 16F887

Potencimetro 1k

9. Diagrama de Flujo funcional del Programa principal

9.1 Void main

9.2 Lazo do_while

10. Descripcin del algoritmo.

1. Se crea variable unsigned tipo int llamada temp_res.2. Creacin del void main. Configuracin de pines anaalgicos AN2 y los dems como I/O digitales.3. Se deshabilita comparaciones y se configura el puerto A como entrada, los puertos C y D como salidas.4. Se entra a un ciclo do while infinito.5. Dentro del ciclo, se asigna un valor de ADC con la funcin de lectura del mismo a la variable temp_res, se lee el resultado de la conversin en 10-bit.6. Se envan los 8 bits menores al puerto D y los dos bits ms significativos a RC1 y RC0.7. Cierre de ciclo do while y fin de programa.

11. Programa fuente en lenguaje C.

unsigned int temp_res;void main() { ANSEL = 0x04; // Configure AN2 pin as analog ANSELH = 0; // Configure other AN pins as digital I/O C1ON_bit = 0; // Disable comparators C2ON_bit = 0; TRISA = 0xFF; // PORTA is input TRISC = 0; // PORTC is output TRISD = 0; // PORTD is output do { temp_res = ADC_Read(2); // Get 10-bit results of AD conversion PORTD = temp_res; // Send lower 8 bits to PORTD PORTC = temp_res >> 8; // Send 2 most significant bits to RC1, RC0 } while(1);}

12. Copia impresa del circuito armado en PROTEUS para la simulacin en el momento de su ejecucin

RESPONDER:1) long int temp_res, num, numero,unidades, decenas;unsigned int tabla[10]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};void main() { ANSEL = 0x04; ANSELH = 0; C1ON_bit = 0; C2ON_bit = 0; TRISA = 0xFF; TRISC = 0; TRISD = 0; do { temp_res = ADC_Read(2); num = (temp_res)*(80); numero = (num)/(1023); decenas = (numero)/(10); unidades = (numero)-((decenas)*(10)); PORTD = 1; PORTC = tabla[unidades]; delay_ms(5); PORTD = 2; PORTC = tabla[decenas]; } while(1);}Muestre el resultado de la conversin en dos displays de 7 segmentos multiplexados presentando 00 para el mnimo valor del potencimetro y 80 para el mximo.

13. Conclusiones Es esencial el conocimiento de lenguaje C para la programacin de los proyectos, as como el manejo de las funciones para los PWM y ADC.

En ambos proyectos se ha utilizado la funcin Delay, siendo entonces esta una funcin muy importante para el manejo de microcontroladores y codificacin en lenguaje C. Esta funcin no es la nica, existen muchas funciones ms que con el paso de las prcticas se aprender su utilizacin.

Para el segundo proyecto los estudiantes utilizaron comandos de lectura de datos de la conversin y se configur para que su resultado sea mostrado por los puertos C y D del pic utilizando lneas de comando definidas y estudiadas en clases terica, esto es el desplazamiento de bit y el manejo de ellos.

14. Recomendaciones Se recomienda no confiar totalmente en los resultados que se obtienen con el simulador de PROTEUS, tomar en cuenta que una cosa es simulacin y otra muy diferente es la vida real en la que aparecen muchas sorpresas y eventos imprevistos.

No es recomendable corregir el programa sin tener una ltima copia del mismo ya que un cambio podra provocar problemas e impedir la compilacin. El orden es el mejo aliado para evitarse problemas futuros. Por tanto se debe estar seguro en qu modo est trabajando el timer0.

No olvidar setear los puertos de entrada o salida, dependiendo el uso que se les d en el programa principal y de configurarlos como analgicos y/o digitales.

Al trabajar en Proteus, al unir las respectivas patitas con el bus de datos, dar el nombre apropiado con la funcin label para no tener errores de compilacin. Adems de elegir el dispositivo correcto y enlazar de manera correcta el simulador con la codificacin realizada en MikroC.

Realizar un buen diagrama de flujo ya que a partir de aquello, el estudiante debe dirigir los proyectos y responder las preguntas planteadas, adems de entender el uso de cada variable que se ha creado.INICIO

Creacin de variables

Void Initmain

main

FIN

INICIO

Configuracin de puertos y deshabilitacin de funcin de comparacin

Inicio de dos PWM con frecuencia de 5kHz

FIN

INICIO

Llamar Initmain

Carga de valores en variables creadas

while1

FIN

INICIO

RA0:1

Incremento de variable a y seteo de PWM1 con a.

SI

RA1:1

NO

Decremento de variable a y seteo de PWM1 con a.

SI

RA2:1

Incremento de variable b y seteo de PWM1 con b.

RA3:1

Decremento de variable b y seteo de PWM1 con b.

SI

SI

NO

NO

Delay de 5 ms

FIN

INICIO

Void main

FIN

Creacin variable int temp_res

INICIO

Configuracin de pines como digitales

Deshabilitacin de comparadores

Puerto A configurados como salida. Puertos C y D como salidas

Do while

FIN

INICIO

Temp_ADC_Read(2)

PORTD = temp_resPORTC = temp_res >>8

FIN